Arduino:Основы/Входные аналоговые контакты
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Входные аналоговые контакты[1]
Здесь рассказывается о входных аналоговых контактах на микроконтроллерах, которыми оснащаются платы Arduino (ATmega8, ATmega168, ATmega328 и ATmega1280).
Аналогово-цифровой преобразователь
Микроконтроллеры ATmega для плат Arduino содержат встроенный 6-канальный аналогово-цифровой преобразователь (АЦП). Этот конвертер имеет 10-битное разрешение, т.е. возвращает целочисленные значения в диапазоне от «0» до «1023». Хотя главная функция входных аналоговых контактов на Arduino – это считывание данных с аналоговых датчиков, они также оснащены всем необходимым функционалом для GPIO-контакта (т.е. для входного/выходного контакта общего пользования), коим являются цифровые контакты с 0 по 13.
Следовательно, если пользователю нужно больше GPIO-контактов, а входные аналоговые контакты не используются, то их можно спокойно использовать в качестве GPIO-контактов.
Распиновка
Аналоговые контакты используются идентично цифровым контактам – при помощи псевдонимов A0 (входной аналоговый контакт номер «0»), A1 и т.д. К примеру, чтобы выставить аналоговый контакт в режим OUTPUT и задать ему значение HIGH, нужно будет написать в коде следующее:
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);
Подтягивающие резисторы
Аналоговые контакты также оснащены подтягивающими резисторами, которые работают аналогично подтягивающим резисторам на цифровых контактах. Они включаются следующей командой...
digitalWrite(A0, HIGH); // включаем подтягивающий резистор на аналоговом контакте 0
...но в это время контакт должен находиться в режиме INPUT.
Однако стоит иметь в виду, что включение подтягивающего резистора повлияет на данные, возвращаемые функцией analogRead().
Возможные проблемы
Функция analogRead() будет работать некорректно, если ранее контакт, данные с которого она считывает, был выставлен в режим OUTPUT. В таком случае перед использованием analogRead() выставьте этот контакт в режим INPUT. Аналогично, если контакту были заданы режим OUTPUT и значение HIGH, то при переключении обратно в режим INPUT будет включен подтягивающий резистор.
Даташит ATmega также предостерегает против быстрого переключения между аналоговыми контактами, чтобы прочитать с них данные при помощи analogRead(). Это может стать причиной электрического шума, из-за чего в аналоговой системе может появиться так называемый «дребезг». Исправить это можно небольшой задержкой, которую нужно вставить после манипуляции с аналоговыми контактами (в цифровом режиме) и до использования функции analogRead(), считывающей данные с других аналоговых контактов.