Модуль ADC\DAC PCF8591, код из видео

Модуль собран на микросхеме PCF8591, это 8 битный четырех канальный ЦАП и АЦП в одном корпусе.

 

Описание модуля:

Модуль скорее предназначен для обучения или экспериментов, а не для конкретных устройств, базируется на микросхеме PCF8591 имеющая 4 входа с 8 битным аналого-цифровой преобразователем (АЦП или ADC) и 1 выход с цифро-аналоговым преобразователем (ЦАП или DAC), с подключенными к ним различными «аналоговыми датчиками», (фоторезистор, терморезистор, переменный резистор), на выход ЦАП подключен светодиод. Схема модуля ниже.

Подключение к Arduino

Модуль имеет интерфейс I2C и подключается как и любое другое устройство с I2C, достаточно соединить выходы SDA и SCL и дать питание 5 вольт на модуль.

На примере Arduino Leonardo и модуля RTC, PCF8591 подключается аналогичным образом

Софт:

Возможно для PCF8591 написаны библиотеки, но общение с микросхемой очень простое и можно обойтись двумя функциями, одной для чтения значения с АЦП, и второй для записи значения в ЦАП.

Код
#include <Wire.h>

#define PCF8591 0x48 


void setDAC(byte val){
   Wire.beginTransmission(PCF8591);         // соединяемся с PCF8591
   Wire.write(0x40);                        // включаем DAC     
   Wire.write(val);                         // пишем в DAC значение
   Wire.endTransmission();                  // завершаем соединение
}

byte getADC(byte ch){
  if(ch > 3) ch = 0;                        // проверка
   Wire.beginTransmission(PCF8591);         // соединяемся с PCF8591
   Wire.write(ch);                          // запрашиваем 
   Wire.endTransmission();                  // завершаем соединение
   Wire.requestFrom(PCF8591, 2);            // забераем 2 байта
   byte val0 = Wire.read();
   byte val1 = Wire.read();                 // во втором то что нам нужно
   return val1;                             // возвращаем
}

void setup(){
  Serial.begin(9600);
  Wire.begin();
 
}

void loop(){
  
 for (int i = 0; i < 255; i += 40) setDAC(i);    // генерируем пилообразный сигнал
 
//  for (int i = 0; i <= 3; i++) {          // отправляем в монитор порта значение с ADC
//    Serial.print(i);
//    Serial.print(": ");
//    Serial.print(getADC(i)); 
//    Serial.print(" | ");
// }
// Serial.println();

//  setDAC(getADC(1));            // изменяем яркость светодиода в зависимости от освещенности
//  delay(100);                   
}

Как он работает, можно посмотреть в видео.

Видео:

 Купить модуль:

можно, тут или тут.