Почему все аналоговые выводы измеряют одно и то же значение?

Я измеряю 2 аналоговых контакта: A4 и A5. Контакт A5 подключен к другому цифровому выходу Arduino (через резистор 10k), который имеет простую программу: 5 мс включено и 100 мс выключено. Контакт A4 никуда не подключен.

Аналоговые выводы инициируются с помощью pinMode(APIN, INPUT), чтение просто выполняется с помощью функции AnalogRead(APIN) (нет задержки между показаниями). Я пробовал с задержками между измерениями, но результаты те же.

Результаты:

Вывод A5 (который подключен) измеряет правильное значение. Однако на неподключенный контакт A4 явно влияет вход A5. Это работает так: с другими контактами, задержками между показаниями, двойным использованием AnalogRead()... Я даже поменял местами Arduino (Arduino Nano и Uno), и результаты остались прежними.

Это из-за того, что эти Arduino являются клонами? Или эти Arduino повреждены?

, 👍1

Обсуждение

Вы пытались подключить A4 к VCC или GND? Плавающий сигнал может дать такое поведение., @Mikael Patel

Спасибо, вроде работает. Могу ли я подключить контакт напрямую к VCC или использовать резистор?, @Maci0503


2 ответа


Лучший ответ:

2

Если вы хотите измерить контакт (т. е. определенный как входной контакт, цифровой или аналоговый), вы должны использовать подтягивающий или подтягивающий резистор (внутренний или внешний, в зависимости от того, что есть на GPIO микроконтроллера).

Этот резистор гарантирует, что в случае, если ничего не подключено, резистор (в основном с высоким сопротивлением) будет гарантировать, что неподключенный контакт подаст НИЗКИЙ или ВЫСОКИЙ вход в качестве входного сигнала (или, в случае аналогового, минимальное или максимальное значение) .

Когда контакт подключен, подтягивающий/подтягивающий резистор изменит результат настолько незначительно, что его можно будет игнорировать.

,

0

Я полагаю, что вы видите эффект процесса выборки и хранения, используемого аналого-цифровым преобразователем (АЦП) Arduino.

Схема выборки и хранения в АЦП работает следующим образом

  1. Подключите контакт к внутреннему конденсатору фиксированной емкости.
  2. Отсоедините контакт.
  3. Сравните напряжение конденсатора с фиксированным значением.

Все аналоговые выводы в Arduino используют один и тот же конденсатор, поэтому, если у такого конденсатора нет возможности разрядиться, на другое показание будет влиять предыдущее.

Ссылка.

  1. https://en.wikipedia.org/wiki/Sample_and_hold
  2. http://ww1.microchip.com/downloads/en/appnotes/atmel-8456-8-and-32-bit-avr-microcontrollers-avr127-understanding-adc-parameters_application-note.pdf
,