В сфере электроники существует множество устройств, позволяющих расширить функциональность платформы Arduino Uno. Одним из таких устройств является цифро-аналоговый I2C преобразователь MCP4725. В данной статье мы рассмотрим его подключение к Arduino Uno, обсудим ключевые характеристики предоставим пример использования.
MCP4725 – это компактный и удобный в использовании цифро-аналоговый преобразователь, способный преобразовывать цифровой сигнал в аналоговый по интерфейсу I2C. Его основные характеристики включают разрешение в 12 бит, низкое энергопотребление, широкий диапазон рабочих напряжений (2.7V – 5.5V) и встроенный EEPROM для хранения настроек. Этот модуль позволяет представить аналоговый сигнал с точностью до 4096 значений, что значительно превосходит встроенный в Arduino Uno аналогово-цифровой преобразователь с разрешением 10 бит (1024 значений).
Arduino Uno – это популярная плата для прототипирования с микроконтроллером ATmega328P. Она обладает разнообразными интерфейсами, такими как цифровые и аналоговые входы/выходы, что делает ее удобным инструментом для разработки простых и сложных проектов
Схема подключения
Для подключения MCP4725 к Arduino Uno используем следующую схему:
MCP4725 | Arduino Uno |
---|---|
VCC | 5V |
GND | GND |
SDA | A4 (SDA) |
SCL | A5 (SCL) |
Подключаем питание VCC и землю GND модуля MCP4725 к соответствующим пинам на Arduino Uno. Пины SDA и SCL модуля подключаем к пинам A4 (SDA) и A5 (SCL) Arduino Uno соответственно.
Библиотеки
Для работы с датчиком понадобится библиотека Wire.h. Это стандартная библиотека среды разработки Arduino IDE, поэтому она не требует дополнительной установки.
Пример кода
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include <Wire.h> #define ADDR 0x62 // Адрес датчика может отличаться #define MAX_VALUE 4095 // Максимальное значение для уровня аналогового сигнала void set_output_level(size_t level, bool save_to_eeprom) { uint8_t cmd[3]; // Определяем команду в зависимости от необходимости сохранения значения в EEPROM if (save_to_eeprom == true) { cmd[0] = 0x60; // Команда для установки значения на ЦАП с сохранением в EEPROM } else { cmd[0] = 0x40; // Команда для установки значения на ЦАП без сохранения в EEPROM } // Формируем данные для передачи на ЦАП cmd[1] = (level / 16); // Старшие биты данных cmd[2] = (level % 16) << 4; // Младшие биты данных Wire.beginTransmission(ADDR); // Начинаем общение с датчиком Wire.write(cmd, 3); // Передаем команду из 3 байт Wire.endTransmission(); // Завершаем передачу данных delayMicroseconds(100); } void setup() { Wire.begin(); // Инициализация шины I2C Serial.begin(9600); // Инициализация последовательной связи для вывода информации delay(100); } void loop() { // Плавно увеличиваем значение аналогового выхода от 0 до 4095 for (size_t i = 0; i < MAX_VALUE; i++) { set_output_level(i, false); // Устанавливаем уровень аналогового сигнала без сохранения в EEPROM Serial.print("Выходной сигнал установлен на "); Serial.println(i); // Выводим текущее значение delay(100); } // Плавно уменьшаем значение аналогового выхода от 4095 до 0 for (size_t i = MAX_VALUE; i > 0; i--) { set_output_level(i, false); // Устанавливаем уровень аналогового сигнала без сохранения в EEPROM Serial.print("Выходной сигнал установлен на "); Serial.println(i); // Выводим текущее значение delay(100); } } |
Этот код позволяет постепенно изменять уровень аналогового сигнала от 0 до максимального значения (4095) и обратно с использованием цифро-аналогового преобразователя MCP4725, подключенного к Arduino. Вывод значений происходит через последовательный порт для мониторинга изменения уровня сигнала.
2 комментария. Оставить новый
if (save_to_eeprom == true) {
cmd[0] = 0x40; // Команда для установки значения на ЦАП без сохранения в EEPROM
…
То есть флаг “Записать в EEPROM = true” означает НЕ записывать в EEPROM, или это комментарии перепутаны?
Здравствуйте, спасибо за замечание, исправили команды!
save_to_eeprom == true
означает сохранение значения в EEPROM0x40 – без записи в EEPROM
0x60 – с записью в EEPROM