Некорректная работа АЦП?

Чебурек
Offline
Зарегистрирован: 30.04.2017

Суть проблемы: при обращении к АЦП без задержки,  строка 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);  // *************************************************    
       
}

 

 

Araris
Offline
Зарегистрирован: 09.11.2012

А Вы уверены, что обращаетесь к АЦП ?

Чебурек
Offline
Зарегистрирован: 30.04.2017

Araris пишет:
А Вы уверены, что обращаетесь к АЦП ?

Обращаюсь к АЦП:  http://arduino.ru/Reference/AnalogRead

Если из программы не убирать задержку,  то АЦП выдает корректный результат измерения напряжения. Опорное напряжение, правда не 5В, а всего  4.76  но это зависит от USB питания

 

Araris
Offline
Зарегистрирован: 09.11.2012

Да, Вы правы, вопрос снимается ("номер порта аналогового входа с которого будет производиться считывание (0..5 для большинства плат, 0..7 для Mini и Nano и 0..15 для Mega)"). Я обычно пин прописываю как А0, поэтому просто 0 смутил.

Тогда, возможно, задержка необходима по этой причине :

"Считывание значений с аналогового входа занимает примерно 100 микросекунд (0.0001 сек), т.е. максимальная частота считывания приблизительно 10,000 раз в секунду."

Чебурек
Offline
Зарегистрирован: 30.04.2017

Araris пишет:
Тогда, возможно, задержка необходима по этой причине :

"Считывание значений с аналогового входа занимает примерно 100 микросекунд (0.0001 сек), т.е. максимальная частота считывания приблизительно 10,000 раз в секунду."

только  задержка в 50 мсек (не считая дополнительной задержки от исполнения  printf) - это  20 ГЦ , а не 10 кГц.

Araris
Offline
Зарегистрирован: 09.11.2012

Чебурек пишет:

только  задержка в 50 мсек (не считая дополнительной задержки от исполнения  printf) - это  20 ГЦ , а не 10 кГц.

Несомненно. Тем не менее

Чебурек пишет:

Если из программы не убирать задержку,  то АЦП выдает корректный результат измерения напряжения.

Попробуйте наименьшую необходимую задержку экспериментально определить.

nik182
Offline
Зарегистрирован: 04.05.2015

Что то как то в файле 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. 

 

Logik
Offline
Зарегистрирован: 05.08.2014

Да и выводить в сириал из лупа без задержки не стоит. Буфер отправки просто переполнится.