- Module DAC MCP4725 (convertisseur numérique-analogique)
- Communication I2C dans le DAC MCP4725
- Composants requis
- Schéma
- Programmation DAC Arduino
- Conversion numérique-analogique à l'aide de MCP4725 et Arduino
Nous savons tous que les microcontrôleurs ne fonctionnent qu'avec des valeurs numériques, mais dans le monde réel, nous devons traiter des signaux analogiques. C'est pourquoi ADC (Analog to Digital Converters) est là pour convertir les valeurs analogiques du monde réel en forme numérique afin que les microcontrôleurs puissent traiter les signaux. Mais que faire si nous avons besoin de signaux analogiques à partir de valeurs numériques, voici donc le DAC (convertisseur numérique-analogique).
Un exemple simple de convertisseur numérique-analogique consiste à enregistrer une chanson en studio où un artiste chanteur utilise un microphone et chante une chanson. Ces ondes sonores analogiques sont converties en forme numérique puis stockées dans un fichier au format numérique et lorsque la chanson est lue à l'aide du fichier numérique stocké, ces valeurs numériques sont converties en signaux analogiques pour la sortie des haut-parleurs. Donc, dans ce système, DAC est utilisé.
Le DAC peut être utilisé dans de nombreuses applications telles que le contrôle du moteur, le contrôle de la luminosité des lumières LED, l'amplificateur audio, les encodeurs vidéo, les systèmes d'acquisition de données, etc.
Dans de nombreux microcontrôleurs, il existe un DAC interne qui peut être utilisé pour produire une sortie analogique. Mais les processeurs Arduino tels que ATmega328 / ATmega168 n'ont pas de DAC intégré. Arduino a la fonction ADC (convertisseur analogique-numérique) mais il n'a pas de DAC (convertisseur numérique-analogique). Il a un DAC 10 bits dans ADC interne, mais ce DAC ne peut pas être utilisé comme autonome. Donc, ici, dans ce tutoriel Arduino DAC, nous utilisons une carte supplémentaire appelée MCP4725 DAC Module avec Arduino.
Module DAC MCP4725 (convertisseur numérique-analogique)
MCP4725 IC est un module de conversion numérique-analogique 12 bits qui est utilisé pour générer des tensions de sortie analogiques de (0 à 5 V) et il est contrôlé en utilisant la communication I2C. Il est également livré avec une mémoire non volatile EEPROM intégrée.
Ce circuit intégré a une résolution de 12 bits. Cela signifie que nous utilisons (0 à 4096) comme entrée pour fournir la tension de sortie par rapport à la tension de référence. La tension de référence maximale est de 5V.
Formule pour calculer la tension de sortie
Tension O / P = (tension de référence / résolution) x valeur numérique
Par exemple, si nous utilisons 5V comme tension de référence et supposons que la valeur numérique est 2048. Donc, pour calculer la sortie DAC.
Tension O / P = (5/4096) x 2048 = 2,5 V
Brochage du MCP4725
Ci-dessous, l'image du MCP4725 avec des noms de broches indiquant clairement.
Broches de MCP4725 |
Utilisation |
EN DEHORS |
Sorties Tension analogique |
GND |
GND pour la sortie |
SCL |
Ligne d'horloge série I2C |
SDA |
Ligne de données série I2C |
VCC |
Tension de référence d'entrée 5 V ou 3,3 V |
GND |
GND pour l'entrée |
Communication I2C dans le DAC MCP4725
Ce DAC IC peut être interfacé avec n'importe quel microcontrôleur utilisant la communication I2C. La communication I2C ne nécessite que deux fils SCL et SDA. Par défaut, l'adresse I2C pour MCP4725 est 0x60 ou 0x61 ou 0x62. Pour moi, c'est 0x61. En utilisant le bus I2C, nous pouvons connecter plusieurs IC DAC MCP4725. La seule chose est que nous devons changer l'adresse I2C du CI. La communication I2C dans Arduino est déjà expliquée en détail dans le tutoriel précédent.
Dans ce tutoriel, nous connecterons un IC DAC MCP4725 à Arduino Uno et fournirons une valeur d'entrée analogique à la broche Arduino A0 à l'aide d'un potentiomètre. Ensuite, ADC sera utilisé pour convertir la valeur analogique en forme numérique. Ensuite, ces valeurs numériques sont envoyées au MCP4725 via le bus I2C pour être converties en signaux analogiques à l'aide du DAC MCP4725 IC. La broche Arduino A1 est utilisée pour vérifier la sortie analogique du MCP4725 à partir de la broche OUT et enfin afficher les valeurs et les tensions ADC et DAC sur l'écran LCD 16x2.
Composants requis
- Arduino Nano / Arduino Uno
- Module d'affichage LCD 16x2
- MCP4725 DAC IC
- Potentiomètre 10k
- Planche à pain
- Fils de cavalier
Schéma
Le tableau ci-dessous montre la connexion entre MCP4725 DAC IC, Arduino Nano et multimètre
MCP4725 |
Arduino Nano |
Multimètre |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 ou OUT |
A1 |
+ ve terminal |
GND |
GND |
-ve borne |
VCC |
5V |
NC |
Connexion entre l'écran LCD 16x2 et Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
À partir de la broche centrale du potentiomètre pour régler le contraste de l'écran LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
UNE |
+ 5V |
K |
GND |
Un potentiomètre est utilisé avec la broche centrale connectée à l'entrée analogique A0 de Arduino Nano, la broche gauche connectée à GND et la broche la plus à droite connectée à 5V d'Arduino.
Programmation DAC Arduino
Le code Arduino complet pour le didacticiel DAC est donné à la fin avec une vidéo de démonstration. Ici, nous avons expliqué le code ligne par ligne.
En premier lieu, inclure la bibliothèque pour I2C et LCD en utilisant wire.h et liquidcrystal.h bibliothèque.
#comprendre
Ensuite, définissez et initialisez les broches LCD en fonction des broches que nous avons connectées à l'Arduino Nano
LiquidCrystal LCD (2,3,4,5,6,7); // Définir les broches d'affichage LCD RS, E, D4, D5, D6, D7
Ensuite, définissez l'adresse I2C du MCP4725 DAC IC
#define MCP4725 0x61
Dans la configuration vide ()
Commencez d'abord la communication I2C aux broches A4 (SDA) et A5 (SCL) d'Arduino Nano
Wire.begin (); // Commence la communication I2C
Réglez ensuite l'écran LCD en mode 16x2 et affichez un message de bienvenue.
lcd.begin (16,2); // Règle l'écran 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 avec MCP4725"); retard (2000); lcd.clear ();
Dans la boucle vide ()
1. D'abord dans le tampon, mettez la valeur d'octet de contrôle (0b01000000)
(010-définit MCP4725 en mode d'écriture)
tampon = 0b01000000;
2. L'instruction suivante lit la valeur analogique de la broche A0 et la convertit en valeurs numériques (0-1023). Arduino ADC est une résolution de 10 bits donc multipliez-la par 4 donne: 0-4096, car le DAC est une résolution de 12 bits.
adc = analogRead (A0) * 4;
3. Cette déclaration consiste à trouver la tension à partir de la valeur d'entrée ADC (0 à 4096) et la tension de référence en tant que 5V
float ipvolt = (5,0 / 4096,0) * adc;
4. Sous la première ligne place les valeurs de bits les plus significatives dans la mémoire tampon en décalant de 4 bits vers la droite dans la variable ADC, et la deuxième ligne met les valeurs de bits les moins significatives dans la mémoire tampon en décalant de 4 bits vers la gauche dans la variable ADC.
tampon = adc >> 4; buffer = adc << 4;
5. L'instruction suivante lit la tension analogique de A1 qui est la sortie DAC (broche OUTPUT du MCP4725 DAC IC). Cette broche peut également être connectée au multimètre pour vérifier la tension de sortie. Apprenez à utiliser le multimètre ici.
unsigned int analogread = analogRead (A1) * 4;
6. En outre, la valeur de tension de la lecture analogique variable est calculée en utilisant la formule ci-dessous
float opvolt = (5,0 / 4096,0) * lecture analogique;
7. L'instruction suivante est utilisée pour commencer la transmission avec MCP4725
Wire.beginTransmission (MCP4725);
Envoie l'octet de contrôle à I2C
Wire.write (tampon);
Envoie le MSB à I2C
Wire.write (tampon);
Envoie le LSB à I2C
Wire.write (tampon);
Termine la transmission
Wire.endTransmission ();
Maintenant, affichez enfin ces résultats sur l'écran LCD 16x2 à l'aide de lcd.print ()
lcd.setCursor (0,0); lcd.print ("Une adresse IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (lecture analogique); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); retard (500); lcd.clear ();
Conversion numérique-analogique à l'aide de MCP4725 et Arduino
Après avoir terminé toutes les connexions du circuit et téléchargé le code dans Arduino, faites varier le potentiomètre et regardez la sortie sur l'écran LCD . La première ligne de l'écran LCD affichera la valeur et la tension ADC d'entrée, et la deuxième ligne affichera la valeur et la tension du DAC de sortie.
Vous pouvez également vérifier la tension de sortie en connectant un multimètre aux broches OUT et GND du MCP4725.
C'est ainsi que nous pouvons convertir les valeurs numériques en valeurs analogiques en interfaçant le module DAC MCP4725 avec Arduino.