У меня проблемы с моей любопытной доской HP C. Я новичок в микрочипе, и я хочу прочитать аналоговое значение бортового потенциометра. Я использую последовательный преобразователь для отображения значения в терминале на моем P C. Он работает нормально, за исключением случаев, когда я полностью поворачиваю потенциометр от начала до конца, аналоговое значение изменяется от 0 до 255, падает до 0, поднимается до 255, падает до 0, поднимается до 255, падает до 0 и идет до 255 Я ожидал, что это будет go от 0 до 1023. Все мои переменные - 16 бит. U C - это PIC16F18875, а последовательный преобразователь - UM230XB.
Как это может быть? Все переменные и константы имеют правильный размер (если только я не пропустил)
Это главное. c:
void main(void){
SYSTEM_Initialize();
static uint16_t adcResult; // Used to store the result of the ADC
adcResult = ADCC_GetSingleConversion(POT_CHANNEL);
IO_RC7_SetLow();
console_print("Value = ");
console_print_dec_char(adcResult);
console_print("\t\n\r");
__delay_ms(100);
Это функция ADCC_GetSingleConversion:
adc_result_t ADCC_GetSingleConversion(adcc_channel_t channel){
// select the A/D channel
ADPCH = channel;
// Turn on the ADC module
ADCON0bits.ADON = 1;
//Disable the continuous mode.
ADCON0bits.ADCONT = 0;
// Start the conversion
ADCON0bits.ADGO = 1;
// Extra NOP() instruction required; See rev. A2 errata: http://ww1.microchip.com/downloads/en/DeviceDoc/80000669C.pdf
NOP();
// Wait for the conversion to finish
while (ADCON0bits.ADGO)
{
}
// Conversion finished, return the result
return ((adc_result_t)((ADRESH << 8) + ADRESL));
ADC_result_t также 16 бит.