- Modulo DAC MCP4725 (convertitore da digitale ad analogico)
- Comunicazione I2C nel DAC MCP4725
- Componenti richiesti
- Schema elettrico
- Programmazione DAC Arduino
- Conversione da digitale ad analogico utilizzando MCP4725 e Arduino
Sappiamo tutti che i microcontrollori funzionano solo con valori digitali ma nel mondo reale abbiamo a che fare con segnali analogici. Ecco perché ADC (Convertitori da analogico a digitale) è disponibile per convertire i valori analogici del mondo reale in forma digitale in modo che i microcontrollori possano elaborare i segnali. Ma cosa succede se abbiamo bisogno di segnali analogici da valori digitali, ecco che arriva il DAC (convertitore da digitale ad analogico).
Un semplice esempio di convertitore da digitale ad analogico è la registrazione di una canzone in studio in cui un artista cantante utilizza il microfono e canta una canzone. Queste onde sonore analogiche vengono convertite in forma digitale e quindi memorizzate in un file in formato digitale e quando il brano viene riprodotto utilizzando il file digitale memorizzato, quei valori digitali vengono convertiti in segnali analogici per l'uscita degli altoparlanti. Quindi in questo sistema viene utilizzato DAC.
Il DAC può essere utilizzato in molte applicazioni come controllo del motore, controllo della luminosità delle luci LED, amplificatore audio, codificatori video, sistemi di acquisizione dati ecc.
In molti microcontrollori è presente un DAC interno che può essere utilizzato per produrre un'uscita analogica. Ma i processori Arduino come ATmega328 / ATmega168 non hanno DAC integrato. Arduino ha la funzione ADC (convertitore da analogico a digitale) ma non ha DAC (convertitore da digitale ad analogico). Ha un DAC a 10 bit nell'ADC interno ma questo DAC non può essere utilizzato come autonomo. Quindi qui in questo tutorial del DAC Arduino, usiamo una scheda aggiuntiva chiamata Modulo DAC MCP4725 con Arduino.
Modulo DAC MCP4725 (convertitore da digitale ad analogico)
L' IC MCP4725 è un modulo convertitore da digitale ad analogico a 12 bit utilizzato per generare tensioni analogiche in uscita da (0 a 5 V) ed è controllato utilizzando la comunicazione I2C. Inoltre è dotato di memoria non volatile EEPROM integrata.
Questo IC ha una risoluzione a 12 bit. Ciò significa che utilizziamo (da 0 a 4096) come ingresso per fornire l'uscita di tensione rispetto alla tensione di riferimento. La tensione di riferimento massima è 5V.
Formula per calcolare la tensione di uscita
Tensione O / P = (Tensione di riferimento / Risoluzione) x Valore digitale
Ad esempio, se usiamo 5V come tensione di riferimento e supponiamo che il valore digitale sia 2048. Quindi per calcolare l'uscita DAC.
Tensione O / P = (5/4096) x 2048 = 2,5 V.
Pinout di MCP4725
Di seguito è riportata l'immagine di MCP4725 con i nomi dei pin che indicano chiaramente.
Perni di MCP4725 |
Uso |
SU |
Uscita in tensione analogica |
GND |
GND per l'uscita |
SCL |
Linea I2C Serial Clock |
SDA |
Linea dati seriale I2C |
VCC |
Tensione di riferimento in ingresso 5 V o 3,3 V. |
GND |
GND per l'ingresso |
Comunicazione I2C nel DAC MCP4725
Questo DAC IC può essere interfacciato con qualsiasi microcontrollore utilizzando la comunicazione I2C. La comunicazione I2C richiede solo due fili SCL e SDA. Per impostazione predefinita, l'indirizzo I2C per MCP4725 è 0x60 o 0x61 o 0x62. Per me è 0x61. Utilizzando il bus I2C possiamo collegare più DAC IC MCP4725. L'unica cosa è che dobbiamo cambiare l'indirizzo I2C dell'IC. La comunicazione I2C in Arduino è già spiegata in dettaglio nel tutorial precedente.
In questo tutorial collegheremo un DAC IC MCP4725 con Arduino Uno e forniremo il valore di ingresso analogico al pin Arduino A0 utilizzando un potenziometro. Quindi l'ADC verrà utilizzato per convertire il valore analogico in forma digitale. Dopodiché, quei valori digitali vengono inviati a MCP4725 tramite il bus I2C per essere convertiti in segnali analogici utilizzando il DAC MCP4725 IC. Il pin A1 di Arduino viene utilizzato per controllare l'uscita analogica di MCP4725 dal pin OUT e infine visualizzare i valori e le tensioni di ADC e DAC nel display LCD 16x2.
Componenti richiesti
- Arduino Nano / Arduino Uno
- Modulo display LCD 16x2
- MCP4725 DAC IC
- Potenziometro 10k
- Breadboard
- Cavi per ponticelli
Schema elettrico
La tabella seguente mostra la connessione tra MCP4725 DAC IC, Arduino Nano e Multi-meter
MCP4725 |
Arduino Nano |
Multimetro |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 o OUT |
A1 |
+ ve terminale |
GND |
GND |
-ve terminale |
VCC |
5V |
NC |
Collegamento tra LCD 16x2 e Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Dal pin centrale del potenziometro per regolare il contrasto del display LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
UN |
+ 5V |
K |
GND |
Viene utilizzato un potenziometro con il pin centrale collegato all'ingresso analogico A0 di Arduino Nano, il pin sinistro collegato a GND e il pin più a destra collegato a 5 V di Arduino.
Programmazione DAC Arduino
Il codice completo di Arduino per il tutorial DAC viene fornito alla fine con un video dimostrativo. Qui abbiamo spiegato il codice riga per riga.
In primo luogo, comprende la libreria per I2C e LCD utilizzando wire.h e liquidcrystal.h biblioteca.
#includere
Quindi definire e inizializzare i pin LCD in base ai pin che abbiamo collegato con Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definisce i pin del display LCD RS, E, D4, D5, D6, D7
Quindi definire l'indirizzo I2C dell'IC DAC MCP4725
#define MCP4725 0x61
In the void setup ()
Per prima cosa inizia la comunicazione I2C sui pin A4 (SDA) e A5 (SCL) di Arduino Nano
Wire.begin (); // Inizia la comunicazione I2C
Quindi impostare il display LCD in modalità 16x2 e visualizzare un messaggio di benvenuto.
lcd.begin (16,2); // Imposta il display LCD in modalità 16X2 lcd.print ("CIRCUIT DIGEST"); ritardo (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC con MCP4725"); ritardo (2000); lcd.clear ();
Nel vuoto loop ()
1. Per primo nel buffer inserire il valore del byte di controllo (0b01000000)
(010-Imposta MCP4725 in modalità di scrittura)
buffer = 0b01000000;
2. La seguente dichiarazione legge il valore analogico dal pin A0 e lo converte in valori digitali (0-1023). Arduino ADC ha una risoluzione a 10 bit, quindi moltiplicarlo per 4 dà: 0-4096, poiché il DAC ha una risoluzione a 12 bit.
adc = analogRead (A0) * 4;
3. Questa affermazione serve per trovare la tensione dal valore di ingresso ADC (da 0 a 4096) e la tensione di riferimento come 5V
float ipvolt = (5.0 / 4096.0) * adc;
4. Sotto la prima riga inserisce i valori di bit più significativi nel buffer spostando 4 bit a destra nella variabile ADC, e la seconda riga inserisce i valori di bit meno significativi nel buffer spostando 4 bit a sinistra nella variabile ADC.
buffer = adc >> 4; buffer = adc << 4;
5. La seguente dichiarazione legge la tensione analogica da A1 che è l'uscita DAC (pin OUTPUT dell'IC DAC MCP4725). Questo pin può anche essere collegato al multimetro per controllare la tensione di uscita. Scopri come utilizzare il multimetro qui.
unsigned int analogread = analogRead (A1) * 4;
6. Inoltre, il valore della tensione dalla variabile analogread viene calcolato utilizzando la formula seguente
float opvolt = (5.0 / 4096.0) * analogread;
7. La seguente dichiarazione viene utilizzata per iniziare la trasmissione con MCP4725
Wire.beginTransmission (MCP4725);
Invia il byte di controllo a I2C
Wire.write (buffer);
Invia l'MSB a I2C
Wire.write (buffer);
Invia l'LSB a I2C
Wire.write (buffer);
Termina la trasmissione
Wire.endTransmission ();
Ora finalmente visualizza quei risultati nel display LCD 16x2 usando 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 (analogread); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); ritardo (500); lcd.clear ();
Conversione da digitale ad analogico utilizzando MCP4725 e Arduino
Dopo aver completato tutte le connessioni del circuito e caricato il codice in Arduino, varia il potenziometro e guarda l'output sul display LCD . La prima riga del display LCD mostrerà il valore e la tensione dell'ADC in ingresso, mentre la seconda riga mostrerà il valore e la tensione del DAC in uscita.
È inoltre possibile controllare la tensione di uscita collegando un multimetro ai pin OUT e GND di MCP4725.
È così che possiamo convertire i valori digitali in analogici interfacciando il modulo DAC MCP4725 con Arduino.