- Mòdul DAC MCP4725 (convertidor digital a analògic)
- Comunicació I2C a MCP4725 DAC
- Components necessaris
- Esquema de connexions
- Programació DAC Arduino
- Conversió digital a analògica mitjançant MCP4725 i Arduino
Tots sabem que els microcontroladors només funcionen amb valors digitals, però al món real hem de tractar amb senyals analògics. És per això que ADC (convertidors analògics a digitals) està disponible per convertir els valors analògics del món real en forma digital perquè els microcontroladors puguin processar els senyals. Però, què passa si necessitem senyals analògics de valors digitals, així que aquí ve el DAC (convertidor digital a analògic).
Un exemple senzill del convertidor digital a analògic és gravar una cançó a l’estudi on un artista cantant utilitza micròfon i canta una cançó. Aquestes ones sonores analògiques es converteixen en forma digital i després s’emmagatzemen en un fitxer de format digital i quan la cançó es reprodueix mitjançant un fitxer digital emmagatzemat, aquests valors digitals es converteixen en senyals analògics per a la sortida dels altaveus. Per tant, en aquest sistema s’utilitza el DAC.
El DAC es pot utilitzar en moltes aplicacions com ara el control del motor, el control de la brillantor de les llums LED, l’amplificador d’àudio, els codificadors de vídeo, els sistemes d’adquisició de dades, etc.
En molts microcontroladors hi ha un DAC intern que es pot utilitzar per produir sortida analògica. Però els processadors Arduino com ATmega328 / ATmega168 no tenen DAC incorporat. Arduino té la funció ADC (convertidor analògic a digital), però no té convertidor DAC (convertidor digital a analògic). Té un DAC de 10 bits a l’ADC intern, però aquest DAC no es pot utilitzar com a independent. Així doncs, aquí en aquest tutorial Arduino DAC, fem servir una placa addicional anomenada mòdul DAC MCP4725 amb Arduino.
Mòdul DAC MCP4725 (convertidor digital a analògic)
MCP4725 IC és un mòdul de convertidor digital a analògic de 12 bits que s’utilitza per generar tensions analògiques de sortida de (0 a 5V) i es controla mitjançant la comunicació I2C. També inclou memòria no volàtil incorporada EEPROM.
Aquest CI té una resolució de 12 bits. Això significa que fem servir (0 a 4096) com a entrada per proporcionar la tensió de sortida respecte a la tensió de referència. La tensió màxima de referència és de 5 V.
Fórmula per calcular el voltatge de sortida
Voltatge O / P = (Voltatge / Resolució de referència) x Valor digital
Per exemple, si fem servir 5V com a tensió de referència i suposem que el valor digital és 2048. Per calcular la sortida DAC.
Voltatge O / P = (5/4096) x 2048 = 2,5V
Pinout de MCP4725
A continuació es mostra la imatge de MCP4725 amb els noms dels pins que indiquen clarament.

|
Pins de MCP4725 |
Ús |
|
Fora |
Sortides de tensió analògica |
|
GND |
GND per a la sortida |
|
SCL |
Línia de rellotge sèrie I2C |
|
SDA |
Línia de dades sèrie I2C |
|
VCC |
Voltatge de referència d’entrada 5V o 3,3V |
|
GND |
GND per a l'entrada |
Comunicació I2C a MCP4725 DAC
Aquest IC DAC es pot connectar amb qualsevol microcontrolador mitjançant la comunicació I2C. La comunicació I2C requereix només dos cables SCL i SDA. Per defecte, l'adreça I2C per a MCP4725 és 0x60 o 0x61 o 0x62. Per a mi és 0x61. Mitjançant l’autobús I2C podem connectar múltiples IC DAC MCP4725. L'única cosa és que hem de canviar l'adreça I2C de l'IC. La comunicació I2C a Arduino ja s’explica amb detall al tutorial anterior.

En aquest tutorial connectarem un IC DAC MCP4725 amb Arduino Uno i proporcionarem un valor d’entrada analògic al pin A0 d’Arduino mitjançant un potenciòmetre. A continuació, s'utilitzarà ADC per convertir el valor analògic en forma digital. Després, aquests valors digitals s’envien a MCP4725 mitjançant un bus I2C per convertir-los en senyals analògics mitjançant l’IC DAC MCP4725. El pin Arduino A1 s’utilitza per comprovar la sortida analògica de MCP4725 des del pin OUT i, finalment, mostrar els valors i tensions ADC i DAC a la pantalla LCD de 16x2.
Components necessaris
- Arduino Nano / Arduino Uno
- Mòdul de pantalla LCD de 16x2
- MCP4725 DAC IC
- Potenciòmetre de 10 k
- Taula de pa
- Jumper Wires
Esquema de connexions

A la taula següent es mostra la connexió entre IC DAC MCP4725, Arduino Nano i Multi-meter
|
MCP4725 |
Arduino Nano |
Multímetre |
|
SDA |
A4 |
NC |
|
SCL |
A5 |
NC |
|
A0 o OUT |
A1 |
+ ve terminal |
|
GND |
GND |
-ve terminal |
|
VCC |
5V |
NC |
Connexió entre LCD 16x2 i Arduino Nano
|
Pantalla LCD de 16x2 |
Arduino Nano |
|
VSS |
GND |
|
VDD |
+ 5V |
|
V0 |
Des del potenciómetre Pin central per ajustar el contrast de la pantalla LCD |
|
RS |
D2 |
|
RW |
GND |
|
E |
D3 |
|
D4 |
D4 |
|
D5 |
D5 |
|
D6 |
D6 |
|
D7 |
D7 |
|
A |
+ 5V |
|
K |
GND |
S'utilitza un potenciòmetre amb pin central connectat a l'entrada analògica A0 d'Arduino Nano, pin esquerre connectat a GND i pin més dret connectat a 5V d'Arduino.

Programació DAC Arduino
El tutorial de codi Arduino complet per al DAC es dóna al final amb un vídeo de demostració. Aquí hem explicat el codi línia per línia.
En primer lloc, incloeu la biblioteca per a I2C i LCD mitjançant la biblioteca wire.h i liquidcrystal.h.
#incloure
A continuació, definiu i inicialitzeu els pins LCD segons els pins que hem connectat amb l'Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definiu els pins de pantalla LCD RS, E, D4, D5, D6, D7
A continuació, definiu l'adreça I2C de l'ICC DAC MCP4725
#define MCP4725 0x61
A la configuració buida ()
Primer comenceu la comunicació I2C als pins A4 (SDA) i A5 (SCL) d’Arduino Nano
Wire.begin (); // Comença la comunicació I2C
A continuació, configureu la pantalla LCD en mode 16x2 i mostreu un missatge de benvinguda.
lcd.begin (16,2); // Estableix la pantalla LCD en mode 16X2 lcd.print ("CIRCUIT DIGEST"); retard (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC amb MCP4725"); endarreriment (2000); lcd.clear ();
Al bucle buit ()
1. Primer, a la memòria intermèdia, poseu el valor del byte de control (0b01000000)
(010-Sets MCP4725 en mode d'escriptura)
memòria intermèdia = 0b01000000;
2. La següent afirmació llegeix el valor analògic del pin A0 i el converteix en valors digitals (0-1023). Arduino ADC té una resolució de 10 bits, de manera que multipliqueu-lo per 4 donant: 0-4096, ja que el DAC té una resolució de 12 bits.
adc = analogRead (A0) * 4;
3. Aquesta afirmació consisteix a trobar el voltatge del valor d'entrada ADC (0 a 4096) i el voltatge de referència com a 5V
float ipvolt = (5.0 / 4096.0) * adc;
4. A sota de la primera línia es col·loquen els valors de bits més significatius a la memòria intermèdia desplaçant 4 bits a la dreta a la variable ADC, i la segona línia posa els valors de bits menys significatius a la memòria intermèdia desplaçant 4 bits a l'esquerra a la variable ADC.
buffer = adc >> 4; buffer = adc << 4;
5. A la següent afirmació es llegeix la tensió analògica de A1 que és la sortida DAC (pin OUTPUT del DAC IC MCP4725). Aquest pin també es pot connectar al multímetre per comprovar la tensió de sortida. Obteniu informació sobre com utilitzar el multímetre aquí.
unsigned int analogread = analogRead (A1) * 4;
6. A més, el valor del voltatge de la variable lectura analògica es calcula mitjançant la fórmula següent
float opvolt = (5.0 / 4096.0) * analògic;
7. S'utilitza la declaració següent per iniciar la transmissió amb MCP4725
Wire.beginTransmission (MCP4725);
Envia el byte de control a I2C
Wire.write (memòria intermèdia);
Envia el MSB a I2C
Wire.write (memòria intermèdia);
Envia el LSB a I2C
Wire.write (memòria intermèdia);
Finalitza la transmissió
Wire.endTransmission ();
Ara, finalment, mostreu aquests resultats a la pantalla LCD 16x2 mitjançant lcd.print ()
lcd.setCursor (0,0); lcd.print ("A IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (lectura analògica); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); retard (500); lcd.clear ();
Conversió digital a analògica mitjançant MCP4725 i Arduino
Després de completar totes les connexions del circuit i carregar el codi a Arduino, varieu el potenciòmetre i mireu la sortida a la pantalla LCD . La primera línia de pantalla LCD mostrarà el valor i la tensió ADC d’entrada, i la segona línia mostrarà el valor i la tensió DAC de sortida.

També podeu comprovar la tensió de sortida connectant un multímetre al pin OUT i GND de MCP4725.

Així podem convertir els valors digitals en analògics mitjançant la interfície del mòdul DAC MCP4725 amb Arduino.
