Рубрики
Схемы на Arduino

Подключение АЦП/ЦАП модуля PCF8591 к Arduino

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

Некоторые микроконтроллеры, например, AVR, Arduino, MSP430, PIC16F877A, имеют в своем составе встроенные АЦП. Однако некоторые современные микроконтроллеры не имеют встроенных АЦП, например, 8051, Raspberry Pi. Поэтому с такими микроконтроллерами используют внешние АЦП, например, микросхемы ADC0804, ADC0808.

На нашем сайте вы можете посмотреть следующие проекты, использующие АЦП/ЦАП:

В этой же статье мы рассмотрим подключение АЦП/ЦАП модуля PCF8591 к плате Arduino.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. АЦП/ЦАП модуль PCF8591 (PCF8591 ADC/DAC Module) (купить на AliExpress).
  3. Потенциометр 100 кОм – 2 шт. (купить на AliExpress).
  4. Соединительные провода.

АЦП/ЦАП модуль PCF8591

PCF8591 представляет собой 8-битный аналого-цифровой (АЦП) или цифро-аналоговый преобразователь (ЦАП), соответственно, диапазон возможных значений после АЦП составляет для него от 0 до 255. Также модуль содержит фоторезистор и терморезистор (термистор). Модуль имеет 4 аналоговых входа и один аналоговый выход. Модуль работает по протоколу I2C, соответственно, линия SCL используется для синхронизации, а линия SDA – для передачи данных. Модуль работает от питающего напряжения 2.5-6V и имеем низкое энергопотребления в режиме ожидания (бездействия).

Значением входного напряжения можно управлять с помощью ручки потенциометра, присутствующего в составе модуля. Также в составе модуля есть три переключателя: J4 – позволяет подключать цепь термистора, J5 – позволяет подключать цепь фоторезистора, J6 – позволяет подключать цепь регулировки напряжения. Для доступа к этим цепям можно использовать адреса этих переключателей (джамперов): 0x50 для J6, 0x60 для J5 и 0x70 для J4. В составе модуля есть два светодиода: D1 показывает интенсивность (уровень) выходного напряжения, а D2 показывает уровень питающего напряжения. То есть чем больше уровни выходного и питающего напряжений, тем, соответственно, более ярко горят светодиоды D1 и D2.

Внешний вид и назначение контактов (распиновка) модуля PCF8591 показаны на следующем рисунке.

Схема проекта

Схема подключения АЦП/ЦАП модуля PCF8591 к плате Arduino представлена на следующем рисунке.

Как видите, схема достаточно проста. В этой схеме мы будем считывать аналоговые значения с любого из аналоговых контактов и изменять эти значения с помощью потенциометра 100 кОм. Контакты VCC и GND модуля подключены к контактам 5V и GND платы Arduino. Контакты SDA и SCL модуля подключены к контактам A4 и A5 платы Arduino – это обеспечивает связь по протоколу I2C. Средний контакт потенциометра подключен к контакту AIN0 модуля PCF8591. Контакты данных (D4-D7) ЖК дисплея подключены к цифровым контактам D5-D2 платы Arduino, а контакты RS и EN ЖК дисплея подключены к контактам D12 и D11 платы Arduino. Контакт V0 ЖК дисплея подключен к потенциометру, который используется для регулировки его яркости.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Объяснение программы для Arduino

Полный код программы и видео, демонстрирующее работу схемы, приведены в конце статьи, здесь же мы кратко рассмотрим основные фрагменты кода программы.

Первым делом в программе нам необходимо подключить библиотеки для использования возможностей протокола I2C и для работы с ЖК дисплеем.

После этого определим (объявим) ряд макросов. В первом макросе будет записан адрес шины (адрес ведомого – в нашем случае это модуль PCF8591) для протокола I2C, а во втором – адрес первого входного контакта (AIN0) модуля PCF8591 (он подключен к потенциометру в схеме).

Далее сообщим плате Arduino, к каким ее контактам подключен ЖК дисплей и инициализируем переменную, в котором будем хранить значение, считываемое с аналогового контакта модуля PCF8591.

В функции void setup() мы инициализируем связь по протоколу I2C и ЖК дисплей для работы в режиме 16х2.

В функции void loop() мы начнем обмен данными с модулем PCF8591 с помощью команды Wire.beginTransmission. Далее мы дадим команду модулю PCF8591 на считывание аналоговых значений на своем входе AIN0 (вторая строка в коде). Затем мы завершим передачу с помощью функции  Wire.endTransmission и запросим измеренное аналоговое значение (Wire.requestFrom) с модуля PCF8591.

Далее мы сохраним принятое с модуля PCF8591 значение в переменной Value и выведем это значение на экран ЖК дисплея.

После подачи питания на схему и загрузки программы в плату Arduino вы сможете наблюдать считываемое аналоговое значение на экране ЖК дисплея. Изменять это значение можно с помощью ручки потенциометра.

Исходный код программы (скетча)

Видео, демонстрирующее работу схемы

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *