Arduino:Основы/Входные аналоговые контакты

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 3377 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Входные аналоговые контакты[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(), считывающей данные с других аналоговых контактов.

См.также

Внешние ссылки

  1. www.arduino.cc - Analog Input Pins