微控制器 (PIC16F1827) MPLAB 中带有 MCC 的 ADC 加扰输出
Mikrocontroller (PIC16F1827) ADC scrambled output with MCC in MPLAB
我正在尝试构建一个从电位器到 Arduino 的 AD 转换器。我正在尝试同时在 MPLAB 中学习 MCC。到目前为止,我已经生成了适合我的 PIC 的代码(我认为......)。我现在的问题是我的位表示输出不正确。这是我的 PIC16F1827 的配置(se 图片)
RA0 = 输入,RB1 和 RB2 = EUSART,RB0、RB3、RA7、RA6、RB7、RB6、RB5、RB4 = 输出。
我的主文件看起来像这样(se 代码)。我得到了一个输出,但它表示错误,我不明白为什么...
char ADC_temp_in;
while (1) //Infinite Loop
{
// Add your application code
printf("pot_value =%d\r\n", ADC_GetConversion(channel_AN0_ADC));
ADC_temp_in = ADC_GetConversion(channel_AN0_ADC); // temp
PORTB = ADC_temp_in; //Write Lower bits to PORTB
PORTA = ADC_temp_in>>6; //Write Higher 2 bits to PORTA
__delay_ms(100); //Delay
}
VREF+ = 5V 并直接连接到 VDD。
我的目标是让 RB0 作为 LSB,RA7 作为 MSB,电位器的电压差为 0-5 V。
两件事:
ADC_temp_in
必须通过 16 位值来保存大于 8 位的值。
所以试试:uint16_t ADC_temp_in;
当然,您的函数 ADC_GetConversion
必须 return 一个 uint_16
值。
另一件事是,要获得 MSB,您必须将值右移 8 次。
PORTA = ADC_temp_in>>8;
我正在尝试构建一个从电位器到 Arduino 的 AD 转换器。我正在尝试同时在 MPLAB 中学习 MCC。到目前为止,我已经生成了适合我的 PIC 的代码(我认为......)。我现在的问题是我的位表示输出不正确。这是我的 PIC16F1827 的配置(se 图片)
RA0 = 输入,RB1 和 RB2 = EUSART,RB0、RB3、RA7、RA6、RB7、RB6、RB5、RB4 = 输出。
我的主文件看起来像这样(se 代码)。我得到了一个输出,但它表示错误,我不明白为什么...
char ADC_temp_in;
while (1) //Infinite Loop
{
// Add your application code
printf("pot_value =%d\r\n", ADC_GetConversion(channel_AN0_ADC));
ADC_temp_in = ADC_GetConversion(channel_AN0_ADC); // temp
PORTB = ADC_temp_in; //Write Lower bits to PORTB
PORTA = ADC_temp_in>>6; //Write Higher 2 bits to PORTA
__delay_ms(100); //Delay
}
VREF+ = 5V 并直接连接到 VDD。
我的目标是让 RB0 作为 LSB,RA7 作为 MSB,电位器的电压差为 0-5 V。
两件事:
ADC_temp_in
必须通过 16 位值来保存大于 8 位的值。
所以试试:uint16_t ADC_temp_in;
当然,您的函数 ADC_GetConversion
必须 return 一个 uint_16
值。
另一件事是,要获得 MSB,您必须将值右移 8 次。
PORTA = ADC_temp_in>>8;