#c #microcontroller #pic #adc
Вопрос:
Я пытался считывать аналоговое напряжение на выводе RC3 на PIC16F15325. У меня 3,23 В на потенциометре, а его выход составляет почти 1,65 В, что идет на вывод RC3 микроконтроллера PIC. Для настройки и библиотек я использовал Кофигуратор кода MPLAB. Код выглядит следующим образом:
#include "mcc_generated_files/mcc.h"
void main(void)
{
// initialize the device
SYSTEM_Initialize();
EUSART1_Initialize();
ADC_Initialize();
adc_result_t val1 = 0;
// When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
// Use the following macros to:
// Enable the Global Interrupts
//INTERRUPT_GlobalInterruptEnable();
// Enable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptEnable();
// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();
// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();
while (1)
{
// Add your application code
val1 = ADC_GetConversion(19); // selected channel RC3
printf("Value - %hu n",val1);
DELAY_milliseconds(1000);
}
}
Для напряжения, о котором я упоминал выше, я ожидал значение около «511». Все, что выходит за рамки 1023 [т. Е. (2^10) — 1], странно, так как PIC имеет 10-разрядный АЦП.Однако uotput, который я получаю, это:
Пожалуйста, помогите мне решить эту проблему.
Комментарии:
1. Если вам нужна помощь, вы должны показать свою полную программу, а не только основную. Вы действительно думаете, что RC3-это 19-й канал?
2. Пожалуйста, не публикуйте скриншоты текста, вставьте его как текст. И да, вы можете копировать и вставлять с TeraTerm.
Ответ №1:
На самом деле вывод был правильным, но выглядел странно только из-за формата. Только что я заглянул в таблицу данных, в которой говорилось о 2 способах форматирования результатов АЦП.
PIC16(L)F15325/45 Страница данных-228
и внутри ADC_Initialize();
ADCON1 = 0x10, что означает, что ADFM смещен влево. Я просто сделал val1 = val1 >> 6;
это после ADC_GetConversion(19);
, и это сработало, как и ожидалось.