- MCP4725 DAC-modul (digital till analog omvandlare)
- I2C-kommunikation i MCP4725 DAC
- Komponenter krävs
- Kretsschema
- DAC Arduino-programmering
- Digital till analog konvertering med MCP4725 och Arduino
Vi vet alla att mikrokontrollerna bara arbetar med digitala värden men i verkligheten måste vi hantera analoga signaler. Det är därför ADC (analoga till digitala omvandlare) finns för att konvertera verkliga analoga värden till digital form så att mikrokontroller kan bearbeta signalerna. Men vad händer om vi behöver analoga signaler från digitala värden, så här kommer DAC (Digital till Analog Converter).
Ett enkelt exempel för Digital till Analog-omvandlare är att spela in en sång i studion där en artistsångare använder mikrofon och sjunger en sång. Dessa analoga ljudvågor omvandlas till digital form och lagras sedan i en digital formatfil och när låten spelas med den lagrade digitala filen konverteras dessa digitala värden till analoga signaler för högtalarutgång. Så i detta system används DAC.
DAC kan användas i många applikationer som motorstyrning, LED-lampornas ljusstyrka, ljudförstärkare, videokodare, datainsamlingssystem etc.
I många mikrokontroller finns en intern DAC som kan användas för att producera analog utgång. Men Arduino-processorer som ATmega328 / ATmega168 har inte inbyggd DAC. Arduino har ADC-funktion (Analog till Digital Converter) men den har ingen DAC (Digital till Analog Converter). Den har en 10-bitars DAC i intern ADC men denna DAC kan inte användas som fristående. Så här i denna Arduino DAC-handledning använder vi ett extra kort som heter MCP4725 DAC-modul med Arduino.
MCP4725 DAC-modul (digital till analog omvandlare)
MCP4725 IC är en 12-bitars digital till analog omvandlarmodul som används för att generera analoga utspänningar från (0 till 5V) och den styrs med hjälp av I2C-kommunikation. Den levereras också med EEPROM-minne om flyktigt minne.
Denna IC har 12-bitars upplösning. Det betyder att vi använder (0 till 4096) som ingång för att tillhandahålla spänningsutgången med avseende på referensspänning. Max referensspänning är 5V.
Formel för beräkning av utspänning
O / P-spänning = (referensspänning / upplösning) x digitalt värde
Till exempel om vi använder 5V som referensspänning och låt oss anta att det digitala värdet är 2048. Så för att beräkna DAC-utgången.
O / P-spänning = (5/4096) x 2048 = 2,5V
Pinout av MCP4725
Nedan är bilden av MCP4725 med tydligt angivande stiftnamn.
Stift av MCP4725 |
Använda sig av |
UT |
Utgångar Analog spänning |
GND |
GND för utdata |
SCL |
I2C seriell klocklinje |
SDA |
I2C Seriell datalinje |
VCC |
Ingångsreferensspänning 5V eller 3,3V |
GND |
GND för inmatning |
I2C-kommunikation i MCP4725 DAC
Denna DAC IC kan anslutas till vilken mikrokontroller som helst som använder I2C-kommunikationen. I2C-kommunikation kräver endast två ledningar SCL och SDA. Som standard är I2C-adressen för MCP4725 0x60 eller 0x61 eller 0x62. För mig är det 0x61. Med hjälp av I2C-buss kan vi ansluta flera MCP4725 DAC IC. Det enda är att vi behöver ändra I2C-adressen för IC. I2C-kommunikation i Arduino har redan förklarats i detalj i föregående handledning.
I den här handledningen ansluter vi en MCP4725 DAC IC med Arduino Uno och ger ett analogt ingångsvärde till Arduino-stift A0 med en potentiometer. Då kommer ADC att användas för att konvertera analogt värde till digital form. Därefter skickas dessa digitala värden till MCP4725 via I2C-buss för att omvandlas till analoga signaler med DAC MCP4725 IC. Arduino-stift A1 används för att kontrollera den analoga utgången från MCP4725 från stiftet OUT och slutligen visa både ADC- och DAC-värden och spänningar på 16x2 LCD-skärmen.
Komponenter krävs
- Arduino Nano / Arduino Uno
- 16x2 LCD-skärmmodul
- MCP4725 DAC IC
- 10k potentiometer
- Bakbord
- Bygeltrådar
Kretsschema
Nedanstående tabell visar anslutningen mellan MCP4725 DAC IC, Arduino Nano och Multi-meter
MCP4725 |
Arduino Nano |
Multimeter |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 eller OUT |
A1 |
+ har terminal |
GND |
GND |
-ve terminal |
VCC |
5V |
NC |
Anslutning mellan 16x2 LCD och Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Från Potentiometer Center Pin för att justera LCD-kontrasten |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
En potentiometer används med mittstift ansluten till A0 analog ingång på Arduino Nano, vänster stift ansluten till GND och högst högsta stift ansluten till 5V Arduino.
DAC Arduino-programmering
Komplett Arduino-kod för DAC-handledning ges i slutet med en demonstrationsvideo. Här har vi förklarat koden rad för rad.
Inkludera först biblioteket för I2C och LCD med hjälp av wire.h och liquidcrystal.h- biblioteket.
#omfatta
Därefter definierar och initialiserar du LCD-stiften enligt stift som vi har anslutit till Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definiera LCD-skärmstift RS, E, D4, D5, D6, D7
Definiera sedan I2C-adressen för MCP4725 DAC IC
#definiera MCP4725 0x61
I ogiltig installation ()
Börja först I2C-kommunikationen vid stiften A4 (SDA) och A5 (SCL) i Arduino Nano
Wire.begin (); // Börjar I2C-kommunikationen
Ställ sedan in LCD-skärmen i 16x2-läge och visa ett välkomstmeddelande.
lcd.begin (16,2); // Ställer in LCD i 16X2-läge lcd.print ("CIRCUIT DIGEST"); fördröjning (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC med MCP4725"); fördröjning (2000); lcd.clear ();
I tomrummet ()
1. Först i buffert placera kontrollbytevärdet (0b01000000)
(010-sätter MCP4725 i skrivläge)
buffert = 0b01000000;
2. Följande uttalande läser det analoga värdet från stift A0 och omvandlar det till digitala värden (0-1023). Arduino ADC är 10-bitars upplösning så multiplicera den med 4 ger: 0-4096, eftersom DAC är 12-bitars upplösning.
adc = analogRead (A0) * 4;
3. Detta uttalande är att hitta spänningen från ADC-ingångsvärdet (0 till 4096) och referensspänningen som 5V
float ipvolt = (5.0 / 4096.0) * adc;
4. Under första raden placeras de mest betydande bitvärdena i bufferten genom att flytta 4 bitar åt höger i ADC-variabeln, och den andra raden placerar de minst signifikanta bitvärdena i bufferten genom att flytta 4 bitar åt vänster i ADC-variabeln.
buffert = adc >> 4; buffert = adc << 4;
5. Följande uttalande läser analog spänning från A1 som är DAC-utgången (MCP4725 DAC IC: s OUTPUT-stift). Denna stift kan också anslutas till multimeter för att kontrollera utspänningen. Lär dig hur du använder multimeter här.
osignerad int analogread = analogRead (A1) * 4;
6. Vidare beräknas spänningsvärdet från den variabla analogläsningen med formeln nedan
float opvolt = (5.0 / 4096.0) * analogläs;
7. Följande uttalande används för att påbörja överföringen med MCP4725
Wire.beginTransmission (MCP4725);
Skickar kontrollbyte till I2C
Wire.write (buffert);
Skickar MSB till I2C
Wire.write (buffert);
Skickar LSB till I2C
Wire.write (buffert);
Avslutar överföringen
Wire.endTransmission ();
Visa äntligen resultaten i LCD 16x2-skärmen med 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); fördröjning (500); lcd.clear ();
Digital till analog konvertering med MCP4725 och Arduino
När du har slutfört alla kretsanslutningar och laddat upp koden till Arduino, varierar du potentiometern och ser utgången på LCD-skärmen . Första raden på LCD-skärmen visar ingångs-ADC-värdet och spänningen, och den andra raden visar det utgående DAC-värdet och spänningen.
Du kan också kontrollera utspänningen genom att ansluta en multimeter till OUT- och GND-stiftet på MCP4725.
Så här kan vi konvertera digitala värden till analog genom att koppla ihop DAC-modulen MCP4725 med Arduino.