Программирование Arduino — аналоговый ввод/вывод


1. Программирование Arduino — введение
2. Программирование Arduino — структура программы, константы
3. Программирование Arduino — цифровой ввод/вывод

4. Аналоговый ввод/вывод сигнала

теперь рассмотрим специфичные функции Arduino для аналогового ввода-вывода.

int analogRead(uint8_t);

Вызов:

value = analogRead(порт); 

Описание:
Считывает значение с указанного аналогового порта. Arduino/Freeduino содержит 6 каналов аналого-цифрового преобразователя на 10 битов каждый. Это означает, что входное напряжения от 0 до 5В преобразовывается в целочисленное значение от 0 до 1023. Разрешающая способность считывания составляет: 5V/1024 значений = 0,004883 В/значение (4,883 мВ). Требуется приблизительно 100 нсек (0.0001 сек), чтобы считать значение аналогового ввода, так что максимальная скорость считывания — приблизительно 10000 раз в секунду.

Параметры:
порт: номер опрашиваемого аналогового входа

Возвращаемое значение: возвращает число типа int в диапазоне от 0 до 1023, считанное с указанного порта.

Пример:

  int val;
  val = analogRead(0);  // считываем значение на 0м аналоговом входе

Примечание:
Аналоговые порты, по-умолчанию, определенны на ввод сигнала и в отличие от цифровых портов их не требуется конфигурировать с помощью вызова функции pinMode.

void analogWrite(uint8_t, int);

Вызов:

analogWrite(порт, значение); 

Описание:
Выводит на порт аналоговое значение. Эта функция работает на: 3, 5, 6, 9, 10, и 11 цифровых портах Arduino/Freeduino/CraftDuino. На старых версиях плат Arduino на основе микроконтроллера ATmega8 функция analogWrite() работает только на портах 9, 10 и 11.

Может применяться для изменения яркости светодиода, для управления двигателем и т.д. После вызова функции analogWrite, соответствующий порт начинает работать в режиме ШИМ (Широтно-Импульсная Модуляция) напряжения до тех пор, пока не будет следующего вызова функции analogWrite (или функций digitalRead / digitalWrite на том же самом порте).

Параметры:
порт: номер опрашиваемого аналогового входа

значение: целочисленное между 0 и 255. Значение 0 генерирует 0 В на указанном порте; значение 255 генерирует +5В на указанном порте. Для значений между 0 и 255, порт начинает быстро чередовать уровень напряжения 0 и +5 В — чем выше значение, тем, более часто порт генерирует уровень HIGH (5 В).

Пример:

  analogWrite(9, 128);  // устанавливаем на 9 контакте значение эквивалентное 2,5В

Примечание:
Нет необходимости вызвать функцию pinMode, чтобы установить порт на вывод сигналов перед вызовом функции analogWrite.

Частота генерирования сигнала – приблизительно 490 Гц.

void analogReference(uint8_t mode);

Описание:
Определяет Источник Опорного Напряжения (ИОН) для АЦП.
Функция analogRead()вернёт 1023 для Опорного Напряжения.

Параметры:
DEFAULT: по-умолчанию 5V
INTERNAL: внутренний — используется внутренний источник в МК: 1.1V на ATmega168 и 2.56V на ATmega8.
EXTERNAL: внешний – использует, источник, подключённый к порту AREF.

По-умолчанию используется 5V (DEFAULT) см. код.

Код
( функция объявлена в \hardware\cores\arduino\wiring.h
, а реализована в \hardware\cores\arduino\wiring_analog.c):

uint8_t analog_reference = DEFAULT;

void analogReference(uint8_t mode)
{
	// can't actually set the register here because the default setting
	// will connect AVCC and the AREF pin, which would cause a short if
	// there's something connected to AREF.
	analog_reference = mode;
}

Вызов:

analogReference(DEFAULT);

Возвращаемое значение:
Ничего

Примечание:
Внешний ИОН, нужно подключать к порту AREF через резистор в 5k, чтобы избежать повреждения МК.

читать далее: 5. дополнительные функции ввода/вывода

Ссылки
http://arduino.cc/en/Reference/HomePage (или же в каталоге ArduinoIDE \reference\HomePage.html )
http://www.arduino.cc/en/Reference/AnalogReference
http://freeduino.ru/arduino/lang.html


0 комментариев на «“Программирование Arduino — аналоговый ввод/вывод”»

    • угу но только один раз…
      нельзя вобщем — сгорит.

  1. Чтоб замерить напряжение больше 5В?
    Подходящий преобразователь называется — резисторный делитель, и состоит из двух резисторов.
    Чтоб выдать больше 0…5в?
    Такой преобразователь называется — транзисторный ключ, состоит из транзистора (можно полевого, можно биполярного) и пары резисторов (можно и один, можно и без них — нюансы)
    Пардоньте, но эти «преобразователи» на костыль не тянут, так, максимум стелька=)))

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение