- Modul DAC MCP4725 (digitalno-analogni pretvornik)
- Komunikacija I2C v DCP MCP4725
- Potrebne komponente
- Shema vezja
- Programiranje DAC Arduino
- Digitalna v analogna pretvorba z uporabo MCP4725 in Arduino
Vsi vemo, da mikrokrmilniki delujejo samo z digitalnimi vrednostmi, v resničnem svetu pa se moramo spoprijeti z analognimi signali. Zato je ADC (analogni v digitalni pretvornik) namenjen pretvorbi analognih vrednosti iz resničnega sveta v digitalno obliko, da lahko mikrokrmilniki obdelajo signale. Kaj pa, če potrebujemo analogne signale iz digitalnih vrednosti, zato prihaja DAC (digitalno-analogni pretvornik).
Preprost primer za pretvornik Digital to Analog je snemanje pesmi v studiu, kjer umetniški pevec uporablja mikrofon in poje pesem. Ti analogni zvočni valovi se pretvorijo v digitalno obliko in nato shranijo v datoteko digitalnega formata. Ko se skladba predvaja z uporabo shranjene digitalne datoteke, se te digitalne vrednosti pretvorijo v analogne signale za izhod zvočnikov. V tem sistemu se torej uporablja DAC.
DAC se lahko uporablja v številnih aplikacijah, kot so krmiljenje motorja, nadzor svetlosti LED-luči, ojačevalnik zvoka, video dajalniki, sistemi za pridobivanje podatkov itd.
V mnogih mikrokrmilnikih obstaja notranji DAC, ki se lahko uporablja za analogni izhod. Toda procesorji Arduino, kot je ATmega328 / ATmega168, nimajo vgrajenega DAC. Arduino ima funkcijo ADC (analogno v digitalni pretvornik), vendar nima DAC (digitalno v analogni pretvornik). Ima 10-bitni DAC v notranjem ADC, vendar tega DAC ni mogoče uporabiti kot samostojnega. Torej, v tej vadnici za Arduino DAC uporabljamo dodatno ploščo, imenovano MCP4725 DAC Module z Arduino.
Modul DAC MCP4725 (digitalno-analogni pretvornik)
MCP4725 IC je 12-bitni digitalno-analogni pretvorniški modul, ki se uporablja za generiranje izhodnih analognih napetosti od (0 do 5V) in ga krmili s pomočjo komunikacije I2C. Na voljo je tudi z neprekinjenim pomnilnikom EEPROM.
Ta IC ima 12-bitno ločljivost. To pomeni, da uporabljamo (0 do 4096) kot vhod za zagotavljanje izhodne napetosti glede na referenčno napetost. Največja referenčna napetost je 5V.
Formula za izračun izhodne napetosti
O / P napetost = (referenčna napetost / ločljivost) x digitalna vrednost
Na primer, če za referenčno napetost uporabimo 5V in predpostavimo, da je digitalna vrednost 2048. Torej za izračun izhoda DAC.
Napetost O / P = (5/4096) x 2048 = 2,5V
Izrez MCP4725
Spodaj je slika MCP4725 z jasno navedenimi imeni zatičev.
Zatiči MCP4725 |
Uporaba |
OUT |
Izhodi analogne napetosti |
GND |
GND za izhod |
SCL |
Linija serijske ure I2C |
SDA |
Vrstica serijskih podatkov I2C |
VCC |
Vhodna referenčna napetost 5V ali 3,3V |
GND |
GND za vnos |
Komunikacija I2C v DCP MCP4725
Ta IC DAC je lahko povezan s katerim koli mikrokrmilnikom s pomočjo komunikacije I2C. Za komunikacijo I2C potrebujete le dve žici SCL in SDA. Privzeto je naslov I2C za MCP4725 0x60 ali 0x61 ali 0x62. Zame je 0x61. Z vodilom I2C lahko povežemo več IC IC MCP4725. Edina stvar je, da moramo spremeniti naslov I2C IC. Komunikacija I2C v Arduinu je že podrobno razložena v prejšnji vadnici.
V tej vadnici bomo povezali IC MCP4725 DAC z Arduino Uno in z potenciometrom podali analogno vhodno vrednost na Arduino pin A0. Nato bo ADC uporabljen za pretvorbo analogne vrednosti v digitalno obliko. Nato se te digitalne vrednosti prek vodila I2C pošljejo na MCP4725, da se pretvorijo v analogne signale s pomočjo DAC MCP4725 IC. Arduino pin A1 se uporablja za preverjanje analognega izhoda MCP4725 iz pin OUT in na koncu prikaže tako vrednosti ADC & DAC kot napetosti na 16x2 LCD zaslonu.
Potrebne komponente
- Arduino Nano / Arduino Uno
- Zaslonski modul LCD 16x2
- MCP4725 DAC IC
- 10k potenciometer
- Breadboard
- Jumper žice
Shema vezja
Spodnja tabela prikazuje povezavo med MCP4725 DAC IC, Arduino Nano in Multi-meter
MCP4725 |
Arduino Nano |
Multimeter |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 ali OUT |
A1 |
+ ve terminal |
GND |
GND |
-ve terminal |
VCC |
5V |
NC |
Povezava med 16x2 LCD in Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Od sredinskega zatiča potenciometra za nastavitev kontrasta LCD-ja |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Potenciometer se uporablja s srednjim zati povezan A0 analoga vhod Arduino Nano, levo pin GND in desni večini pin priključen na 5V z Arduino.
Programiranje DAC Arduino
Popolna koda Arduino za vadnico DAC je podana na koncu s predstavitvenim videoposnetkom. Tu smo razložili kodo po vrsticah.
Najprej vključite knjižnico za I2C in LCD z uporabo knjižnice wire.h in liquidcrystal.h.
#include
Nato določite in inicializirajte zatiče LCD glede na zatiče, ki smo jih povezali z Arduino Nano
LCD LiquidCrystal (2,3,4,5,6,7); // Določite zatiče LCD zaslona RS, E, D4, D5, D6, D7
Nato definirajte naslov I2C IC DAC MCP4725
#define MCP4725 0x61
V nastavitvi void ()
Najprej začnite komunikacijo I2C na nožicah A4 (SDA) in A5 (SCL) Arduino Nano
Wire.begin (); // Začne komunikacijo I2C
Nato nastavite LCD zaslon v način 16x2 in prikažite pozdravno sporočilo.
lcd.begin (16,2); // nastavi LCD v načinu 16X2 lcd.print ("CIRCUIT DIGEST"); zamuda (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC z MCP4725"); zamuda (2000); lcd.clear ();
V void zanki ()
1. Najprej v medpomnilnik postavite vrednost kontrolnega bajta (0b01000000)
(010-nastavi MCP4725 v načinu pisanja)
medpomnilnik = 0b01000000;
2. Naslednja izjava prebere analogno vrednost iz zatiča A0 in jo pretvori v digitalne vrednosti (0-1023). Arduino ADC je 10-bitna ločljivost, zato jo pomnožite s 4 daje: 0-4096, saj je DAC 12-bitna ločljivost.
adc = analogRead (A0) * 4;
3. Ta trditev je najti napetost iz vhodne vrednosti ADC (0 do 4096) in referenčno napetost kot 5V
float ipvolt = (5,0 / 4096,0) * adc;
4. Pod prvo vrstico najpomembnejše bitne vrednosti v pomnilniku postavite tako, da v spremenljivki ADC premaknete 4 bite v desno, druga vrstica pa v vmesnik vstavi najmanj pomembne bitne vrednosti tako, da v spremenljivki ADC premaknete 4 bite v levo.
medpomnilnik = adc >> 4; medpomnilnik = adc << 4;
5. Naslednja izjava bere analogno napetost iz A1, ki je izhod DAC (IZHODNI zatič MCP4725 DAC IC). Ta zatič lahko priključite tudi na multimeter, da preverite izhodno napetost. Tukaj preberite, kako uporabljati multimeter.
nepodpisano int analogread = analogRead (A1) * 4;
6. Nadalje se vrednost napetosti iz spremenljivega analognega branja izračuna po spodnji formuli
float opvolt = (5,0 / 4096,0) * analogno branje;
7. Naslednji stavek se uporablja za začetek prenosa z MCP4725
Wire.beginTransmission (MCP4725);
Pošlje kontrolni bajt v I2C
Wire.write (medpomnilnik);
Pošlje MSB v I2C
Wire.write (medpomnilnik);
Pošlje LSB v I2C
Wire.write (medpomnilnik);
Konča prenos
Wire.endTransmission ();
Zdaj te rezultate končno prikažite na LCD 16x2 zaslonu z uporabo lcd.print ()
lcd.setCursor (0,0); lcd.print ("IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (analogno branje); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); zamuda (500); lcd.clear ();
Digitalna v analogna pretvorba z uporabo MCP4725 in Arduino
Ko končate vse povezave vezij in naložite kodo v Arduino, spremenite potenciometer in si oglejte izhod na LCD-ju . Prva vrstica LCD-ja prikazuje vhodno vrednost ADC in napetost, druga vrstica pa izhodno vrednost DAC in napetost.
Izhodno napetost lahko preverite tudi tako, da multimeter priključite na OUT in GND zatič MCP4725.
Tako lahko pretvorimo digitalne vrednosti v analogne, če povežemo modul DAC MCP4725 z Arduino.