- Módulo DAC MCP4725 (convertidor digital a analógico)
- Comunicación I2C en MCP4725 DAC
- Componentes requeridos
- Diagrama de circuito
- Programación DAC Arduino
- Conversión de digital a analógico usando MCP4725 y Arduino
Todos sabemos que los microcontroladores funcionan solo con valores digitales pero en el mundo real tenemos que lidiar con señales analógicas. Es por eso que ADC (convertidores analógicos a digitales) está ahí para convertir valores analógicos del mundo real en formato digital para que los microcontroladores puedan procesar las señales. Pero, ¿qué pasa si necesitamos señales analógicas de valores digitales, entonces aquí viene el DAC (convertidor digital a analógico)?
Un ejemplo simple de convertidor de digital a analógico es grabar una canción en un estudio donde un artista cantante está usando un micrófono y cantando una canción. Estas ondas de sonido analógicas se convierten en formato digital y luego se almacenan en un archivo de formato digital y cuando la canción se reproduce utilizando el archivo digital almacenado, esos valores digitales se convierten en señales analógicas para la salida del altavoz. Entonces en este sistema se usa DAC.
DAC se puede utilizar en muchas aplicaciones, como control de motores, control de brillo de las luces LED, amplificador de audio, codificadores de video, sistemas de adquisición de datos, etc.
En muchos microcontroladores hay un DAC interno que se puede utilizar para producir una salida analógica. Pero los procesadores Arduino como ATmega328 / ATmega168 no tienen DAC incorporado. Arduino tiene la función ADC (convertidor analógico a digital) pero no tiene DAC (convertidor digital a analógico). Tiene un DAC de 10 bits en el ADC interno, pero este DAC no se puede utilizar de forma independiente. Entonces, aquí en este tutorial de Arduino DAC, usamos una placa adicional llamada Módulo DAC MCP4725 con Arduino.
Módulo DAC MCP4725 (convertidor digital a analógico)
MCP4725 IC es un módulo convertidor de digital a analógico de 12 bits que se utiliza para generar voltajes analógicos de salida de (0 a 5 V) y se controla mediante comunicación I2C. También viene con memoria EEPROM no volátil incorporada.
Este IC tiene una resolución de 12 bits. Esto significa que usamos (0 a 4096) como entrada para proporcionar la salida de voltaje con respecto al voltaje de referencia. El voltaje de referencia máximo es de 5 V.
Fórmula para calcular el voltaje de salida
Voltaje O / P = (Voltaje / Resolución de referencia) x Valor digital
Por ejemplo, si usamos 5V como voltaje de referencia y supongamos que el valor digital es 2048. Entonces, para calcular la salida DAC.
Voltaje O / P = (5/4096) x 2048 = 2.5V
Pinout de MCP4725
A continuación se muestra la imagen de MCP4725 con los nombres de los pines que indican claramente.
Pines de MCP4725 |
Utilizar |
AFUERA |
Salidas de voltaje analógico |
GND |
GND para salida |
SCL |
Línea de reloj serial I2C |
SDA |
Línea de datos en serie I2C |
VCC |
Voltaje de referencia de entrada 5 V o 3,3 V |
GND |
GND para entrada |
Comunicación I2C en MCP4725 DAC
Este DAC IC se puede interconectar con cualquier microcontrolador que utilice la comunicación I2C. La comunicación I2C requiere solo dos cables SCL y SDA. De forma predeterminada, la dirección I2C para MCP4725 es 0x60 o 0x61 o 0x62. Para mí es 0x61. Utilizando el bus I2C podemos conectar varios IC DAC MCP4725. Lo único que necesitamos es cambiar la dirección I2C del IC. La comunicación I2C en Arduino ya se explica en detalle en el tutorial anterior.
En este tutorial, conectaremos un IC DAC MCP4725 con Arduino Uno y proporcionaremos un valor de entrada analógica al pin A0 de Arduino mediante el uso de un potenciómetro. Luego, ADC se utilizará para convertir el valor analógico en formato digital. Después de eso, esos valores digitales se envían a MCP4725 a través del bus I2C para convertirse en señales analógicas usando el DAC MCP4725 IC. El pin A1 de Arduino se usa para verificar la salida analógica de MCP4725 desde el pin OUT y finalmente mostrar los valores y voltajes de ADC y DAC en la pantalla LCD de 16x2.
Componentes requeridos
- Arduino Nano / Arduino Uno
- Módulo de pantalla LCD 16x2
- MCP4725 DAC IC
- Potenciómetro 10k
- Tablero de circuitos
- Cables de puente
Diagrama de circuito
La siguiente tabla muestra la conexión entre MCP4725 DAC IC, Arduino Nano y Multímetro
MCP4725 |
Arduino Nano |
Multímetro |
SDA |
A4 |
CAROLINA DEL NORTE |
SCL |
A5 |
CAROLINA DEL NORTE |
A0 o FUERA |
A1 |
+ ve terminal |
GND |
GND |
-ve terminal |
VCC |
5V |
CAROLINA DEL NORTE |
Conexión entre LCD 16x2 y Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Desde la clavija central del potenciómetro para ajustar el contraste de la pantalla LCD |
RS |
D2 |
RW |
GND |
mi |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
UN |
+ 5V |
K |
GND |
Se utiliza un potenciómetro con el pin central conectado a la entrada analógica A0 de Arduino Nano, el pin izquierdo conectado a GND y el pin derecho más conectado a 5V de Arduino.
Programación DAC Arduino
El código completo de Arduino para el tutorial DAC se proporciona al final con un video de demostración. Aquí hemos explicado el código línea por línea.
En primer lugar, incluye la biblioteca para I2C y LCD mediante wire.h y liquidcrystal.h biblioteca.
#incluir
A continuación, defina e inicialice los pines LCD de acuerdo con los pines que hemos conectado con el Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definir los pines de la pantalla LCD RS, E, D4, D5, D6, D7
A continuación, defina la dirección I2C del DAC IC MCP4725
#define MCP4725 0x61
En la configuración del vacío ()
Primero comience la comunicación I2C en los pines A4 (SDA) y A5 (SCL) de Arduino Nano
Wire.begin (); // Inicia la comunicación I2C
A continuación, configure la pantalla LCD en el modo 16x2 y muestre un mensaje de bienvenida.
lcd.begin (16,2); // Configura la pantalla LCD en modo 16X2 lcd.print ("CIRCUIT DIGEST"); retraso (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC con MCP4725"); retraso (2000); lcd.clear ();
En el bucle vacío ()
1. Primero en el búfer, coloque el valor del byte de control (0b01000000)
(010-Establece MCP4725 en modo de escritura)
búfer = 0b01000000;
2. La siguiente declaración lee el valor analógico del pin A0 y lo convierte en valores digitales (0-1023). Arduino ADC tiene una resolución de 10 bits, así que multiplíquelo por 4 para obtener: 0-4096, ya que el DAC tiene una resolución de 12 bits.
adc = analogRead (A0) * 4;
3. Esta declaración es para encontrar el voltaje del valor de entrada ADC (0 a 4096) y el voltaje de referencia como 5V
ipvolt flotante = (5.0 / 4096.0) * adc;
4. Debajo de la primera línea se colocan los valores de bit más significativos en el búfer desplazando 4 bits a la derecha en la variable ADC, y la segunda línea coloca los valores de bit menos significativos en el búfer al desplazar 4 bits a la izquierda en la variable ADC.
buffer = adc >> 4; buffer = adc << 4;
5. La siguiente declaración lee el voltaje analógico de A1 que es la salida DAC (pin OUTPUT del MCP4725 DAC IC). Este pin también se puede conectar al multímetro para verificar el voltaje de salida. Aprenda a usar Multímetro aquí.
unsigned int analogread = analogRead (A1) * 4;
6. Además, el valor de voltaje de la lectura analógica variable se calcula utilizando la fórmula siguiente
flotador opvolt = (5.0 / 4096.0) * lectura analógica;
7. La siguiente declaración se utiliza para iniciar la transmisión con MCP4725
Wire.beginTransmission (MCP4725);
Envía el byte de control a I2C
Wire.write (búfer);
Envía el MSB a I2C
Wire.write (búfer);
Envía el LSB a I2C
Wire.write (búfer);
Finaliza la transmisión
Wire.endTransmission ();
Ahora, finalmente, muestre esos resultados en la pantalla LCD 16x2 usando lcd.print ()
lcd.setCursor (0,0); lcd.print ("Una IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvoltio); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (lectura analógica); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); retraso (500); lcd.clear ();
Conversión de digital a analógico usando MCP4725 y Arduino
Después de completar todas las conexiones del circuito y cargar el código en Arduino, varíe el potenciómetro y observe la salida en la pantalla LCD . La primera línea de la pantalla LCD mostrará el valor y voltaje de ADC de entrada, y la segunda línea mostrará el valor y voltaje de DAC de salida.
También puede verificar el voltaje de salida conectando un multímetro al pin OUT y GND del MCP4725.
Así es como podemos convertir valores digitales en analógicos mediante la interfaz del módulo DAC MCP4725 con Arduino.