Почему все аналоговые выводы измеряют одно и то же значение?
Я измеряю 2 аналоговых контакта: A4 и A5. Контакт A5 подключен к другому цифровому выходу Arduino (через резистор 10k), который имеет простую программу: 5 мс включено и 100 мс выключено. Контакт A4 никуда не подключен.
Аналоговые выводы инициируются с помощью pinMode(APIN, INPUT), чтение просто выполняется с помощью функции AnalogRead(APIN) (нет задержки между показаниями). Я пробовал с задержками между измерениями, но результаты те же.
Результаты:
Вывод A5 (который подключен) измеряет правильное значение. Однако на неподключенный контакт A4 явно влияет вход A5. Это работает так: с другими контактами, задержками между показаниями, двойным использованием AnalogRead()... Я даже поменял местами Arduino (Arduino Nano и Uno), и результаты остались прежними.
Это из-за того, что эти Arduino являются клонами? Или эти Arduino повреждены?
@Maci0503, 👍1
Обсуждение2 ответа
Лучший ответ:
Если вы хотите измерить контакт (т. е. определенный как входной контакт, цифровой или аналоговый), вы должны использовать подтягивающий или подтягивающий резистор (внутренний или внешний, в зависимости от того, что есть на GPIO микроконтроллера).
Этот резистор гарантирует, что в случае, если ничего не подключено, резистор (в основном с высоким сопротивлением) будет гарантировать, что неподключенный контакт подаст НИЗКИЙ или ВЫСОКИЙ вход в качестве входного сигнала (или, в случае аналогового, минимальное или максимальное значение) .
Когда контакт подключен, подтягивающий/подтягивающий резистор изменит результат настолько незначительно, что его можно будет игнорировать.
Я полагаю, что вы видите эффект процесса выборки и хранения, используемого аналого-цифровым преобразователем (АЦП) Arduino.
Схема выборки и хранения в АЦП работает следующим образом
- Подключите контакт к внутреннему конденсатору фиксированной емкости.
- Отсоедините контакт.
- Сравните напряжение конденсатора с фиксированным значением.
Все аналоговые выводы в Arduino используют один и тот же конденсатор, поэтому, если у такого конденсатора нет возможности разрядиться, на другое показание будет влиять предыдущее.
Ссылка.
- https://en.wikipedia.org/wiki/Sample_and_hold
- http://ww1.microchip.com/downloads/en/appnotes/atmel-8456-8-and-32-bit-avr-microcontrollers-avr127-understanding-adc-parameters_application-note.pdf
- avrdude ser_open() can't set com-state
- Отправка значения с одного Arduino на другой
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Arduino непрерывно считывает значение АЦП с помощью прерывания
- Колебания показаний датчика температуры LM35 (+- 5°C) с Arduino UNO
- Ведомое устройство Arduino с двумя мастерами, использующими одну и ту же шину I2C?
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- В чем разница между delay() и delaymicroseconds()
Вы пытались подключить A4 к VCC или GND? Плавающий сигнал может дать такое поведение., @Mikael Patel
Спасибо, вроде работает. Могу ли я подключить контакт напрямую к VCC или использовать резистор?, @Maci0503