0

我试图构建一个从电位器到 Arduino 的 AD 转换器。我正在尝试同时在 MPLAB 中学习 MCC。到目前为止,我已经生成了一个适合我的 PIC 的代码(我认为......)。我现在的问题是我的位表示输出不正确。这是我的 PIC16F1827 配置的锄头(图片) 在此处输入图像描述

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。

4

1 回答 1

0

两件事:
ADC_temp_in必须通过 16 位值来保存大于 8 位的值。
所以试试:uint16_t ADC_temp_in;
当然你的函数ADC_GetConversion必须返回一个uint_16值。

另一件事是,要获得 MSB,您必须将值向右移动 8 次。

PORTA = ADC_temp_in>>8;
于 2019-03-04T13:05:57.427 回答