Аналогово-цифровое преобразование является очень важной задачей во встроенной электронике, поскольку большинство датчиков выдают выходные данные в виде аналоговых значений и для подачи их в микроконтроллер, который понимает только двоичные значения, мы должны преобразовать их в цифровые значения. Таким образом, чтобы иметь возможность обрабатывать аналоговые данные, микроконтроллерам необходим аналого-цифровой преобразователь.
Некоторые микроконтроллеры имеют встроенный АЦП, например Arduino, MSP430, PIC16F877A, но в некоторых микроконтроллерах его нет, например, 8051, Raspberry Pi и т. Д., И мы должны использовать некоторые внешние ИС аналогово-цифрового преобразователя, такие как ADC0804, ADC0808. Ниже вы можете найти различные примеры АЦП с разными микроконтроллерами:
- Как использовать АЦП в Arduino Uno?
- Учебник Raspberry Pi ADC
- Взаимодействие ADC0808 с микроконтроллером 8051
- Цифровой вольтметр 0-25 В с микроконтроллером AVR
- Как использовать АЦП в STM32F103C8
- Как использовать АЦП в MSP430G2
- Как использовать АЦП в ARM7 LPC2148
- Использование модуля АЦП микроконтроллера PIC с MPLAB и XC8
В этом руководстве мы собираемся проверить, как подключить модуль АЦП / ЦАП PCF8591 к Arduino.
Необходимые компоненты
- Arduino UNO
- Модуль АЦП PCF8591
- 100K горшок
- Соединительные кабели
Модуль АЦП / ЦАП PCF8591
PCF8591 - это модуль 8-битного аналого-цифрового или 8-битного цифро-аналогового преобразователя, что означает, что каждый вывод может считывать аналоговые значения до 256. Он также имеет LDR и схему термистора, предусмотренную на плате. Этот модуль имеет четыре аналоговых входа и один аналоговый выход. Он работает по протоколу I 2 C, поэтому есть выводы SCL и SDA для последовательных часов и адреса последовательных данных. Он требует напряжения питания 2,5-6 В и имеет низкий ток в режиме ожидания. Мы также можем управлять входным напряжением, регулируя ручку потенциометра на модуле. На плате также есть три перемычки. J4 подключен для выбора цепи доступа к термистору, J5 подключен для выбора цепи доступа LDR / фоторезистора и J6 подключен для выбора цепи доступа с регулируемым напряжением. Для доступа к этим схемам вы должны использовать адреса этих перемычек: 0x50 для J6, 0x60 для J5 и 0x70 для J4. На плате есть два светодиода D1, и D2-D1 показывает силу выходного напряжения, а D2 показывает силу напряжения питания. Чем выше выходное напряжение или напряжение питания, тем выше яркость светодиода D1 или D2. Вы также можете проверить эти светодиоды с помощью потенциометра на VCC или на выводе AOUT.
Взаимодействие модуля АЦП / ЦАП PCF8591 с Arduino
Полная программа и работа видео приводится в конце данного руководства.
Во-первых, нам нужно определить библиотеку для связи I 2 C и ЖК-дисплея.
#включают
Затем определите несколько макросов. Первый макрос предназначен для определения адреса шины данных для IC, а второй макрос предназначен для определения адреса первого входного контакта модуля, на который подается вход от pot.
#define PCF8591 (0x90 >> 1) #define AIn0 0x00
Затем определите контакты ЖК-дисплея с Arduino и инициализируйте значение, которое мы получаем на аналоговом контакте.
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; ЖК-дисплей LiquidCrystal (rs, en, d4, d5, d6, d7); int Value = 0;
Теперь перейдем к настройке функции. Здесь, в первой строке, мы инициализировали связь I 2 C. Во второй строке мы инициализировали ЖК-дисплей, на котором печатаем аналоговые значения. Узнайте больше о взаимодействии ЖК-дисплея 16x2 с Arduino здесь.
пустая настройка () { Wire.begin (); lcd.begin (16,2); }
В петле функции, первая линия, чтобы начать передачу, т.е. он начинает PCF8591. Вторая строка сообщает IC провести аналоговое измерение на первом аналоговом входном контакте. Третья строка завершает передачу, а четвертая строка получает измеренные данные с аналогового вывода.
void loop () { Wire.beginTransmission (PCF8591); Wire.write (AIn0); Wire.endTransmission (); Wire.requestFrom (PCF8591, 1);
В следующей части поместите значение, считанное с аналогового вывода, в переменную Value, определенную ранее. И в следующих строках выведите это значение на ЖК-дисплей.
Значение = Wire.read (); lcd.print ("Значение АЦП ="); lcd.print (Значение); задержка (500); lcd.clear ();}
Наконец загрузите код в Arduino и запустите его. Аналоговые значения начнут отображаться на ЖК-дисплее. Отрегулируйте ручку кастрюли, и вы увидите постепенное изменение значений.