Некорректная работа АЦП?
- Войдите на сайт для отправки комментариев
Вс, 30/04/2017 - 00:20
Суть проблемы: при обращении к АЦП без задержки, строка 21 delay(50); выдает нулевые показания. В чем может быть причина?
#include <Serial.h> #define PIN0 0 void setup(void) { Serial.begin(38400); //pinMode(PIN0, INPUT); //analogReference(INTERNAL); analogReference(DEFAULT); } void loop(void) { uint16_t aval; aval=analogRead(PIN0); Serial.print("\n\r VALUE"); Serial.print(aval); delay(50); // ************************************************* }
А Вы уверены, что обращаетесь к АЦП ?
Обращаюсь к АЦП: http://arduino.ru/Reference/AnalogRead
Если из программы не убирать задержку, то АЦП выдает корректный результат измерения напряжения. Опорное напряжение, правда не 5В, а всего 4.76 но это зависит от USB питания
Да, Вы правы, вопрос снимается ("номер порта аналогового входа с которого будет производиться считывание (0..5 для большинства плат, 0..7 для Mini и Nano и 0..15 для Mega)"). Я обычно пин прописываю как А0, поэтому просто 0 смутил.
Тогда, возможно, задержка необходима по этой причине :
"Считывание значений с аналогового входа занимает примерно 100 микросекунд (0.0001 сек), т.е. максимальная частота считывания приблизительно 10,000 раз в секунду."
"Считывание значений с аналогового входа занимает примерно 100 микросекунд (0.0001 сек), т.е. максимальная частота считывания приблизительно 10,000 раз в секунду."
только задержка в 50 мсек (не считая дополнительной задержки от исполнения printf) - это 20 ГЦ , а не 10 кГц.
только задержка в 50 мсек (не считая дополнительной задержки от исполнения printf) - это 20 ГЦ , а не 10 кГц.
Несомненно. Тем не менее
Если из программы не убирать задержку, то АЦП выдает корректный результат измерения напряжения.
Попробуйте наименьшую необходимую задержку экспериментально определить.
Что то как то в файле pins_arduino.h порта с именем 0 нет. Может всёже попробовать дефайн А0 и не пудрить мозги?
C родного сайта: https://www.arduino.cc/en/Tutorial/AnalogInputPins
Pin mapping
The analog pins can be used identically to the digital pins, using the aliases A0 (for analog input 0), A1, etc.
Да и выводить в сириал из лупа без задержки не стоит. Буфер отправки просто переполнится.