Le immagini dei prodotti sono solo a scopo informativo e potrebbero presentare piccole differenze, a seconda del lotto e del fornitore. Le specifiche e i prezzi dei prodotti potrebbero essere soggetti a modifiche senza preavviso. Facciamo del nostro meglio per aggiungere specifiche quanto più precise e corrette possibili alla pagina del prodotto, ma è possibile che non siano del tutto corrette. Se identifichi un caso del genere, ti preghiamo di segnalarcelo.
Il prodotto è destinato agli specialisti e richiede personale qualificato e autorizzato. Il prodotto non include istruzioni di montaggio/uso . La messa in funzione del prodotto da parte di persone non qualificate comporta la perdita della garanzia secondo i Termini e Condizioni presenti sul sito.
Le specifiche tecniche indicate (corrente, potenza, ecc.) rappresentano valori massimi consentiti in condizioni ideali di funzionamento. Per un utilizzo sicuro e una durata ottimale, si raccomanda di utilizzare il prodotto in regime continuo a non più del 50% dei valori massimi specificati.
Modulo DAC MCP4725, I2C, 12 bit, con EEPROM, HW-315
Modulo breakout con il convertitore MCP4725, un DAC a 12 bit con interfaccia I2C, che trasforma un valore digitale in una tensione analogica reale sul pin OUT, utile per generazione di segnale, riferimenti di tensione regolabili e controllo analogico in progetti con Arduino, ESP32, STM32 o Raspberry Pi. Dispone di memoria EEPROM interna, indirizzo I2C selezionabile tramite il jumper ADDR e pull-up disattivabili per montaggi con più moduli sullo stesso bus, con alimentazione da 2.7 - 5.5 VDC.
Acquistando questo prodotto guadagni 0,58 RON in punti fedeltà.
Spedizione veloce gratuita per ordini superiori a 100EUR nella maggior parte de paesi UE.
Spediamo dal nostro magazzino entro 24 ore
Ricevi punti a ogni ordine, per un valore del 5%.
Il modulo MCP4725 è un convertitore digitale-analogico a 12 bit con interfaccia I2C, che consente a una scheda di sviluppo o a un computer di generare in uscita una vera tensione analogica, non solo un segnale PWM filtrato. È utile laddove sia necessaria una tensione di riferimento regolabile, un segnale di controllo analogico per un amplificatore o un motore, oppure una forma d’onda generata digitalmente, come un’onda sinusoidale o una rampa, per progetti audio, strumenti di misura, automazione e controllo di processo.
Il circuito principale è il MCP4725, un DAC con risoluzione a 12 bit, memoria EEPROM interna per il mantenimento del valore di uscita e della configurazione dopo lo spegnimento dell’alimentazione, e uscita di tipo rail-to-rail riferita alla tensione di alimentazione VCC. La comunicazione avviene tramite I2C, con supporto per le modalità Standard a 100 kbps, Fast a 400 kbps e High-Speed a 3.4 Mbps, mentre il tempo di assestamento tipico dell’uscita è di 6 us. L’indirizzo sul bus è selezionabile tramite il pin di indirizzo A0, il che consente di utilizzare più moduli MCP4725 sullo stesso bus I2C.
Tra le caratteristiche principali figurano il connettore a 6 pin OUT, GND, SCL, SDA, VCC e un secondo GND, il jumper ADDR per la selezione dello stato del pin di indirizzo A0 e le resistenze di pull-up sul bus I2C, che possono essere disattivate quando sullo stesso bus sono collegati più moduli. L’alimentazione del modulo avviene con una tensione compresa tra 2.7 e 5.5 VDC, applicata ai pin VCC e GND.
Tramite l’interfaccia I2C, il modulo è compatibile con Arduino, ESP32, STM32, Raspberry Pi e qualsiasi altra scheda di sviluppo o computer dotato di una porta I2C disponibile.
Specifiche:
Tensione di alimentazione: 2.7 - 5.5 VDC
Corrente di uscita: massimo 25 mA
Chip: MCP4725
Tipo: convertitore digitale-analogico (DAC) con EEPROM
Risoluzione: 12 bit (4096 passi)
Interfaccia: I2C (Standard 100 kbps, Fast 400 kbps, High-Speed 3.4 Mbps)
Indirizzo I2C predefinito: 0x60 (pin ADDR / A0 collegato a massa)
Tempo di assestamento: 6 us (tipico)
Pull-up I2C: disattivabili, per il collegamento di più moduli sullo stesso bus
Uscita: tensione analogica rail-to-rail, riferita a VCC
Dimensioni: 14.9 x 15.2 mm
Layout:

1. Header a 6 pin: fornito non saldato, per montaggio su breadboard o collegamento con cavi Dupont.
2. OUT: uscita di tensione analogica generata dal convertitore.
3. GND: massa del segnale di uscita, adiacente al pin OUT.
4. SCL: linea di clock dell’interfaccia I2C.
5. SDA: linea dati dell’interfaccia I2C.
6. VCC: alimentazione positiva del modulo, tra 2.7 e 5.5 VDC.
7. ADDR: jumper per lo stato del pin di indirizzo A0, collegato di default a massa per l’indirizzo 0x60.
8. GND: massa di alimentazione, adiacente ai pin VCC e ADDR.
9. Circuito MCP4725: il convertitore digitale-analogico originale, montato in package SOT-23-6.
10. Fori di montaggio: due fori per il fissaggio meccanico della scheda.
Pinout:
| Connettore | Pin | Funzione |
|---|---|---|
| J1 Header | OUT | Uscita tensione analogica (DAC) |
| J1 Header | GND | Massa del segnale di uscita |
| J1 Header | SCL | Clock I2C |
| J1 Header | SDA | Dati I2C |
| J1 Header | VCC | Alimentazione 2.7 - 5.5 VDC |
| J1 Header | GND | Massa alimentazione |
| ADDR (A0) | Indirizzo I2C |
|---|---|
| Predefinito, collegato a GND | 0x60 |
| Ponte verso VCC | 0x61 |
Utilizzo:
Collegate VCC e GND a una sorgente da 2.7 - 5.5 VDC, ad esempio al pin 5V o 3.3V della scheda di sviluppo, rispettando la polarità.
Collegate SCL e SDA ai pin I2C della scheda di sviluppo, ad esempio A4 e A5 su Arduino Uno oppure i pin I2C dedicati su ESP32, STM32 o Raspberry Pi.
Se la scheda di sviluppo lavora a 3.3 V e il modulo è alimentato a 5 V, alimentate il modulo a 3.3 V invece di usare un convertitore di livello su SCL e SDA.
Lasciate il jumper ADDR invariato per l’indirizzo 0x60, oppure eseguite il ponte verso VCC quando avete bisogno del secondo indirizzo, 0x61, sullo stesso bus.
Se utilizzate più moduli MCP4725 sullo stesso bus I2C, disattivate le resistenze di pull-up su tutti i moduli tranne uno.
Dal programma, inizializzate la comunicazione I2C e inviate un valore compreso tra 0 e 4095 al modulo, che verrà convertito in una tensione proporzionale disponibile sul pin OUT.
Misurate la tensione di uscita tra i pin OUT e GND adiacente, con un multimetro o un oscilloscopio.
Per generare una forma d’onda, aggiornate il valore inviato a intervalli brevi e regolari nel ciclo del programma, tenendo conto che il tempo di assestamento tipico dell’uscita è di 6 us, mentre la velocità reale è limitata principalmente dalla velocità del bus I2C.
Non superate la tensione massima di alimentazione di 5.5 VDC e non invertite la polarità sui pin VCC e GND.
Diagramma dimensioni:

- Circuito integrato principale
- MCP4725
- Interfaccia di comunicazione
- I2C
- Risoluzione convertitore
- 12 bit
Produs destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie si cercetare.
Produsul trebuie utilizat numai conform specificatiilor tehnice mentionate in descriere si/sau in documentatia produsului.
Avertismente generale de siguranta:
Nu utilizati produsul la tensiuni, curenti sau temperaturi peste valorile specificate.
Montajul si conectarea trebuie realizate de persoane cu cunostinte tehnice minime in domeniul electric/electronic.
Evitati scurtcircuitele, inversarea polaritatii si conectarea gresita a alimentarii.
Nu lasati produsul alimentat nesupravegheat in timpul testelor.
Produsul nu este jucarie si nu este destinat copiilor.
Pentru modulele electronice, se recomanda utilizarea in carcase, panouri sau montaje protejate, dupa caz.
Identificare produs:
Denumirea produsului, codul/SKU-ul si caracteristicile tehnice sunt mentionate in pagina produsului si/sau pe eticheta ambalajului.
Producator / Importator / Distribuitor:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Website: www.sigmanortec.ro
Persoana responsabila in UE:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Documentatie si siguranta:
Pentru informatii suplimentare, fise tehnice, declaratii de conformitate sau instructiuni, ne puteti contacta la [email protected].
/*
Test code for MCP4725 I2C DAC Breakout Module (HW-315)
Board: Arduino Uno (Arduino AVR Boards package, Tools > Board > Arduino Uno)
Library: Adafruit MCP4725 by Adafruit (Library Manager), requires Wire (built in)
Wiring:
Arduino 5V -> MCP4725 VCC
Arduino GND -> MCP4725 GND
Arduino A4 (SDA) -> MCP4725 SDA
Arduino A5 (SCL) -> MCP4725 SCL
Output is read between MCP4725 OUT and the GND pin next to it.
*/
#include <Wire.h>
#include <Adafruit_MCP4725.h>
Adafruit_MCP4725 dac;
const uint8_t MCP4725_I2C_ADDRESS = 0x60; // default address, ADDR pad tied to GND
const float VCC = 5.0; // Arduino 5V rail used as DAC reference
void setup() {
Serial.begin(9600);
while (!Serial) {
// wait for native USB serial ports
}
Wire.begin(); // start I2C as master on A4 (SDA) and A5 (SCL)
Serial.println("MCP4725 test starting...");
if (!dac.begin(MCP4725_I2C_ADDRESS)) {
Serial.println("Error: MCP4725 not found on the I2C bus, check wiring and address");
while (1) {
// stop here, nothing else to test without the DAC
}
}
Serial.println("MCP4725 found and initialized");
}
void loop() {
// Slowly ramp the output from 0 to full scale and back, printing the approximate voltage
for (int32_t code = 0; code <= 4095; code += 256) {
dac.setVoltage(code, false); // update DAC register only, do not write to EEPROM
float voltage = code * VCC / 4095.0;
Serial.print("Code: ");
Serial.print(code);
Serial.print(" Approx voltage: ");
Serial.print(voltage, 2);
Serial.println(" V");
delay(300);
}
for (int32_t code = 4095; code >= 0; code -= 256) {
dac.setVoltage(code, false);
float voltage = code * VCC / 4095.0;
Serial.print("Code: ");
Serial.print(code);
Serial.print(" Approx voltage: ");
Serial.print(voltage, 2);
Serial.println(" V");
delay(300);
}
}
Il modulo MCP4725 è un convertitore digitale-analogico con interfaccia I2C, che genera una tensione analogica reale sul pin OUT, partendo da un valore digitale inviato da una scheda di sviluppo. Questo tutorial mostra come collegare e programmare il modulo con una scheda Arduino Uno, per ottenere una tensione regolabile tra 0 V e la tensione di alimentazione.

Come funziona:
MCP4725 è un DAC con risoluzione di 12 bit, il che significa che accetta valori digitali tra 0 e 4095. La tensione di uscita si calcola approssimativamente con la formula Vout = codice x VCC / 4096, dove VCC è la tensione di alimentazione del modulo. Con un'alimentazione di 5 V, il codice 0 produce circa 0 V, il codice 2048 produce circa 2,5 V, mentre il codice 4095 produce circa 5 V. Il modulo mantiene l'ultimo valore scritto nella memoria EEPROM interna, così può riavviarsi con la stessa uscita anche senza che il microcontrollore abbia trasmesso ancora nulla dopo l'alimentazione.
Di cosa hai bisogno:
- 1 x MCP4725 I2C DAC Breakout Module
- 1 x Scheda di sviluppo Uno R3 con Wifi ESP8266, compatibile Arduino
- 1 x Cavo MiniUSB, 30 cm
- 1 x 40 fili Dupont 10 cm, Femmina-Femmina
Collegamento:
Il modulo si alimenta direttamente dal pin da 5 V della scheda Arduino Uno, mentre le linee I2C si collegano ai pin dedicati A4 e A5.
| Pin prodotto | Si collega a | Ruolo |
|---|---|---|
| VCC | Arduino Uno 5V | Alimentazione modulo, entro i limiti 2,7 - 5,5 VDC |
| GND | Arduino Uno GND | Massa comune |
| SDA | Arduino Uno A4 | Linea dati I2C |
| SCL | Arduino Uno A5 | Linea clock I2C |
Arduino Uno funziona a 5 V logici, lo stesso livello accettato dal modulo, quindi non è necessario un convertitore di livello su SDA e SCL. I pin A4 e A5 hanno pull-up interno attivato automaticamente dalla libreria Wire, sufficiente per un singolo modulo sul bus.
Scheda e librerie:
Da Arduino IDE selezionate la scheda Arduino Uno, disponibile implicitamente nel pacchetto Arduino AVR Boards. Non è necessario nessun indirizzo aggiuntivo in File Preferences per questa scheda. Installate da Library Manager la libreria Adafruit MCP4725 da Adafruit, che ha bisogno anche della libreria Wire, già inclusa in Arduino IDE.
Il codice:
Il codice inizializza il modulo all'indirizzo I2C 0x60, invia in sequenza alcuni valori noti e poi genera un ciclo di onda sinusoidale sull'uscita.
/*
Board: Arduino Uno (Arduino AVR Boards package)
Library: Adafruit MCP4725 by Adafruit (requires Wire, included with Arduino IDE)
Wiring:
Arduino 5V -> MCP4725 VCC
Arduino GND -> MCP4725 GND
Arduino A4 (SDA) -> MCP4725 SDA
Arduino A5 (SCL) -> MCP4725 SCL
*/
#include <Wire.h>
#include <Adafruit_MCP4725.h>
Adafruit_MCP4725 dac;
const uint8_t MCP4725_I2C_ADDRESS = 0x60; // default address, ADDR pad tied to GND
const float VCC = 5.0; // Arduino 5V rail used as the DAC reference
void setup() {
Serial.begin(9600);
while (!Serial) {
// wait for the serial port on boards that need it
}
Wire.begin(); // join the I2C bus as master on A4 (SDA) and A5 (SCL)
if (!dac.begin(MCP4725_I2C_ADDRESS)) {
Serial.println("MCP4725 not found, check wiring and I2C address");
while (1) {
// halt here, nothing useful can be done without the DAC
}
}
Serial.println("MCP4725 ready");
}
void loop() {
// Step through a few known DAC codes and print the expected output voltage
uint16_t steps[] = {0, 1024, 2048, 3072, 4095};
for (uint8_t i = 0; i < 5; i++) {
uint16_t code = steps[i];
dac.setVoltage(code, false); // write the code to the DAC register only, not to EEPROM
float voltage = code * VCC / 4095.0;
Serial.print("DAC code: ");
Serial.print(code);
Serial.print(" -> approx output: ");
Serial.print(voltage, 2);
Serial.println(" V");
delay(1000);
}
// Generate one slow sine wave cycle to show a continuously changing analog output
Serial.println("Generating sine wave cycle...");
for (uint16_t angleDeg = 0; angleDeg < 360; angleDeg += 5) {
float angleRad = angleDeg * PI / 180.0;
float normalized = (sin(angleRad) + 1.0) * 0.5; // normalize sine to 0..1
uint16_t code = (uint16_t)(normalized * 4095);
dac.setVoltage(code, false);
delay(20);
}
}
Come funziona il codice:
All'inizio del programma sono incluse le librerie Wire e Adafruit_MCP4725, è creato l'oggetto dac di tipo Adafruit_MCP4725 ed è definita la costante MCP4725_I2C_ADDRESS con il valore 0x60, indirizzo predefinito del modulo con il pin ADDR legato a massa.
Nella funzione setup viene inizializzata la comunicazione seriale, viene avviato il bus I2C con Wire.begin, quindi viene chiamato dac.begin con l'indirizzo del modulo. Se il modulo non risponde, il messaggio di errore è visualizzato sul monitor seriale e il programma rimane bloccato in un ciclo di attesa.
Nella funzione loop, il vettore steps contiene cinque codici digitali rappresentativi tra 0 e 4095. Per ogni valore, dac.setVoltage invia il codice al modulo, mentre il programma calcola e visualizza sul monitor seriale la tensione approssimativa attesa all'uscita, usando la formula codice x VCC / 4095.
Dopo aver esaminato i cinque valori, il codice genera un ciclo completo di onda sinusoidale, calcolando per ogni angolo tra 0 e 360 gradi un valore normalizzato tra 0 e 1 con la funzione sin, che trasforma in un codice digitale tra 0 e 4095 inviato al modulo con dac.setVoltage.
Risultato:
Aprite il monitor seriale a 9600 baud. Vedrete il messaggio di conferma dell'inizializzazione del modulo, quindi i cinque codici digitali insieme alla tensione approssimativa calcolata per ciascuno, seguiti dal messaggio che annuncia la generazione del ciclo di onda sinusoidale. Se misurate i pin OUT e GND con un multimetro durante ogni pausa di un secondo, leggerete una tensione vicina a quella visualizzata sul monitor.
MCP4725 ready
DAC code: 0 -> approx output: 0.00 V
DAC code: 1024 -> approx output: 1.25 V
DAC code: 2048 -> approx output: 2.50 V
DAC code: 3072 -> approx output: 3.75 V
DAC code: 4095 -> approx output: 5.00 V
Generating sine wave cycle...
DAC code: 0 -> approx output: 0.00 V
DAC code: 1024 -> approx output: 1.25 V
DAC code: 2048 -> approx output: 2.50 V
DAC code: 3072 -> approx output: 3.75 V
DAC code: 4095 -> approx output: 5.00 V
Problemi frequenti:
Se il monitor seriale visualizza il messaggio che il modulo non è stato trovato, verificate che SDA e SCL non siano invertiti tra loro e che la massa del modulo sia collegata alla massa della scheda Arduino.
Se la tensione misurata su OUT è sempre 0 V, verificate se il modulo è alimentato correttamente su VCC e se avete scritto nel codice un valore diverso da 0 verso la funzione setVoltage.
Se il modulo non risponde all'indirizzo I2C 0x60, verificate il jumper ADDR, perché un ponte accidentale verso VCC sposta l'indirizzo del modulo a 0x61.
Se i valori letti su OUT sembrano instabili o rumorosi, verificate che i fili utilizzati per l'alimentazione e per l'I2C siano corti e ben fissi, e che il modulo non sia alimentato contemporaneamente da due sorgenti diverse.
Se utilizzate due moduli MCP4725 sullo stesso bus e uno di loro non risponde correttamente, verificate che abbiate disattivato le resistenze di pull-up su tutti i moduli tranne uno.
Limitazioni e suggerimenti:
La tensione di uscita del modulo è limitata tra 0 V e la tensione di alimentazione VCC, non può generare tensioni negative o superiori all'alimentazione. La risoluzione di 12 bit offre passi di circa 1,2 mV a un'alimentazione di 5 V, sufficienti per la maggior parte delle applicazioni di controllo e generazione di segnale, ma insufficienti per misurazioni di precisione molto elevata. La velocità di aggiornamento dell'uscita è limitata dalla velocità del bus I2C e dal tempo di stabilizzazione di 6 us del convertitore, il che rende il modulo adatto per segnali lenti o di controllo, non per segnali audio ad alta frequenza. Partendo da questo circuito, potete costruire un generatore di segnale con forme d'onda variate, una sorgente di tensione di riferimento regolabile per altri circuiti o un anello di controllo analogico per un amplificatore o un driver di motore.