- MCP4725 DAC modulis (skaitmeninis į analoginį keitiklį)
- „I2C“ ryšys MCP4725 DAC
- Būtini komponentai
- Grandinės schema
- DAC „Arduino“ programavimas
- „Digital to Analog Conversion“ naudojant „MCP4725“ ir „Arduino“
Visi žinome, kad mikrovaldikliai veikia tik su skaitmeninėmis vertybėmis, tačiau realiame pasaulyje turime susidurti su analoginiais signalais. Štai kodėl ADC (analoginiai į skaitmeninius keitiklius) yra skirti konvertuoti realaus pasaulio analogines vertes į skaitmeninę formą, kad mikrovaldikliai galėtų apdoroti signalus. Bet ką daryti, jei mums reikia analoginių signalų iš skaitmeninių verčių, taigi čia yra DAC (Digital to Analog Converter).
Paprastas „ Digital to Analog“ keitiklio pavyzdys yra dainos įrašymas studijoje, kur atlikėjas dainininkas naudoja mikrofoną ir dainuoja dainą. Šios analoginės garso bangos yra konvertuojamos į skaitmeninę formą ir tada saugomos skaitmeninio formato faile, o kai daina grojama naudojant saugomą skaitmeninį failą, šios skaitmeninės vertės yra konvertuojamos į analoginius signalus garsiakalbio išvesties klausimais. Taigi šioje sistemoje naudojamas DAC.
DAC gali būti naudojamas daugelyje programų, tokių kaip variklio valdymas, LED žibintų valdymo ryškumas, garso stiprintuvas, vaizdo koduotojai, duomenų gavimo sistemos ir kt.
Daugelyje mikrovaldiklių yra vidinis DAC, kuris gali būti naudojamas analoginiam išėjimui gaminti. Tačiau „Arduino“ procesoriuose, tokiuose kaip „ATmega328“ / „ATmega168“, nėra integruoto DAC. „Arduino“ turi ADC funkciją (iš analoginio į skaitmeninį keitiklį), tačiau neturi DAC (skaitmeninio į analoginį keitiklį). Vidiniame ADC yra 10 bitų DAC, tačiau šio DAC negalima naudoti kaip atskiro. Taigi čia, šioje „Arduino DAC“ pamokoje, mes naudojame papildomą plokštę, vadinamą „ MCP4725 DAC Module“ su „Arduino“.
MCP4725 DAC modulis (skaitmeninis į analoginį keitiklį)
„MCP4725 IC“ yra 12 bitų skaitmeninio - analoginio keitiklio modulis, naudojamas išvesties analoginėms įtampoms generuoti nuo (0 iki 5 V) ir valdomas naudojant I2C ryšį. Jis taip pat pateikiamas su nepastovia atmintimi EEPROM.
Šis IC turi 12 bitų skiriamąją gebą. Tai reiškia, kad mes naudojame (nuo 0 iki 4096) kaip įvestį, kad gautume įtampos išėjimą, palyginti su etalonine įtampa. Didžiausia atskaitos įtampa yra 5 V.
Formulė išėjimo įtampai apskaičiuoti
O / P įtampa = (etaloninė įtampa / skiriamoji geba) x skaitmeninė vertė
Pavyzdžiui, jei mes naudojame 5 V kaip atskaitos įtampą ir tarkime, kad skaitmeninė vertė yra 2048. Taigi, norint apskaičiuoti DAC išvestį.
O / P įtampa = (5/4096) x 2048 = 2,5 V
MCP4725 kištukas
Žemiau yra MCP4725 vaizdas su aiškiai nurodomais smeigtukų pavadinimais.
MCP4725 kaiščiai |
Naudokite |
OUT |
Išvestis Analoginė įtampa |
BND |
BND išėjimui |
SCL |
„I2C“ serijinio laikrodžio linija |
SDA |
„I2C Serial Data“ linija |
VCC |
Įėjimo etaloninė įtampa 5 V arba 3,3 V |
BND |
BND įvestis |
„I2C“ ryšys MCP4725 DAC
Šį DAC IC galima susieti su bet kuriuo mikrovaldikliu naudojant I2C ryšį. „I2C“ ryšiui reikia tik dviejų laidų SCL ir SDA. Pagal numatytuosius nustatymus MCP4725 I2C adresas yra 0x60 arba 0x61 arba 0x62. Man jo 0x61. Naudodami I2C magistralę galime sujungti kelis MCP4725 DAC IC. Vienintelis dalykas yra tai, kad turime pakeisti IC I2C adresą. „I2C“ komunikacija „Arduino“ sistemoje jau išsamiai paaiškinta ankstesnėje pamokoje.
Šioje pamokoje mes sujungsime MCP4725 DAC IC su „Arduino Uno“ ir pateiksime analoginę įvesties vertę „Arduino“ kaiščiui A0, naudodami potenciometrą. Tada ADC bus naudojama konvertuoti analoginę vertę į skaitmeninę formą. Po to tos skaitmeninės vertės per I2C magistralę siunčiamos į MCP4725, kad būtų konvertuotos į analoginius signalus naudojant DAC MCP4725 IC. „Arduino“ kaištis A1 naudojamas patikrinti analoginę MCP4725 išvestį iš kaiščio OUT ir galiausiai rodyti tiek ADC, tiek DAC reikšmes ir įtampą 16x2 LCD ekrane.
Būtini komponentai
- „Arduino Nano“ / „Arduino Uno“
- 16x2 LCD ekranas
- MCP4725 DAC IC
- 10k potenciometras
- Bandomoji Lenta
- Šuolių laidai
Grandinės schema
Žemiau esančioje lentelėje parodytas ryšys tarp MCP4725 DAC IC, „Arduino Nano“ ir „Multi-meter“
MCP4725 |
„Arduino Nano“ |
Multimetras |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 arba OUT |
A1 |
+ ve terminalas |
BND |
BND |
-ve terminalas |
VCC |
5V |
NC |
Ryšys tarp 16x2 LCD ir „Arduino Nano“
LCD 16x2 |
„Arduino Nano“ |
VSS |
BND |
VDD |
+ 5 V |
V0 |
Nuo potenciometro centrinio kaiščio galite reguliuoti LCD kontrastą |
RS |
D2 |
RW |
BND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5 V |
K. |
BND |
Potenciometrą yra naudojamas su centro kaiščio prijungtas prie A0 analogas įvesties Arduino Nano, kairiųjų kaiščio prijungtas prie GND ir dešinės labiausiai kaiščio prijungtas prie 5V iš Arduino.
DAC „Arduino“ programavimas
Pabaigoje pateikiamas išsamus „DAC“ mokymo programos „Arduino“ kodas su demonstraciniu vaizdo įrašu. Čia mes paaiškinome kodą eilutėmis.
Pirmiausia įtraukite I2C ir LCD biblioteką naudodami „ wire.h“ ir „ liquidcrystal.h“ biblioteką.
# įtraukti
Tada nustatykite ir inicializuokite LCD kaiščius pagal kaiščius, kuriuos sujungėme su „Arduino Nano“
„LiquidCrystal lcd“ (2,3,4,5,6,7); // Apibrėžkite LCD ekrano kaiščius RS, E, D4, D5, D6, D7
Tada nustatykite MCP4725 DAC IC I2C adresą
#define MCP4725 0x61
Tuščioje sąrankoje ()
Pirmiausia pradėkite „I2C“ ryšį prie „Arduino Nano“ kaiščių A4 (SDA) ir A5 (SCL).
Viela.prasideda (); // Pradeda I2C ryšį
Tada nustatykite LCD ekraną 16x2 režimu ir rodykite sveikinimo pranešimą.
lcd.prade (16,2); // Nustato LCD ekraną 16X2 režimu lcd.print („CIRCUIT DIGEST“); vėlavimas (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print („Arduino“); lcd.setCursor (0,1); lcd.print ("DAC su MCP4725"); vėlavimas (2000); lcd.clear ();
Tuščiajame cikle ()
1. Pirmiausia į buferį įdėkite kontrolinio baito vertę (0b01000000)
(010-nustato MCP4725 rašymo režimu)
buferis = 0b01000000;
2. Šis teiginys nuskaito analoginę vertę iš kaiščio A0 ir paverčia ją skaitmeninėmis reikšmėmis (0-1023). „Arduino ADC“ yra 10 bitų skiriamoji geba, todėl padauginus iš 4 gaunama: 0–4096, nes DAC yra 12 bitų skiriamoji geba.
adc = analogRead (A0) * 4;
3. Šiuo teiginiu siekiama rasti įtampą iš ADC įėjimo vertės (nuo 0 iki 4096) ir etaloninę įtampą kaip 5 V
plūduriuojantis ipvolt = (5,0 / 4096,0) * adc;
4. Žemiau pirmos eilutės svarbiausios bitų vertės pateikiamos buferyje, perkeliant 4 bitus į dešinę ADC kintamajame, o antroje eilutėje mažiausiai reikšmingos bitų vertės pateikiamos buferyje, perkėlus 4 bitus į kairę ADC kintamajame.
buferis = adc >> 4; buferis = adc << 4;
5. Šis teiginys nuskaito analoginę įtampą iš A1, kuri yra DAC išvestis (MCP4725 DAC IC išvesties kaištis). Šis kaištis taip pat gali būti prijungtas prie multimetro, norint patikrinti išėjimo įtampą. Sužinokite, kaip naudotis „Multimetru“ čia.
nepasirašytas int analoginis = analogRead (A1) * 4;
6. Toliau įtampos vertė pagal kintamą analoginį rodmenį apskaičiuojama pagal toliau pateiktą formulę
plūdinis opvoltas = (5,0 / 4096,0) * analoginis skaitymas;
7. Šis sakinys naudojamas perdavimui pradėti MCP4725
„Wire.beginTransmission“ (MCP4725);
Siunčia valdymo baitą į I2C
Wire.write (buferis);
Siunčia MSB į I2C
Wire.write (buferis);
Siunčia LSB į I2C
Wire.write (buferis);
Baigia perdavimą
„Wire.endTransmission“ ();
Dabar pagaliau pateikite tuos rezultatus LCD 16x2 ekrane naudodami 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 (analoginis skaitymas); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); vėlavimas (500); lcd.clear ();
„Digital to Analog Conversion“ naudojant „MCP4725“ ir „Arduino“
Baigę visas grandinės jungtis ir įkelkite kodą į „Arduino“, pakeiskite potenciometrą ir žiūrėkite LCD išvestį . Pirmoje LCD ekrane bus rodoma įvesties ADC vertė ir įtampa, o antroje eilutėje bus rodoma išėjimo DAC vertė ir įtampa.
Taip pat galite patikrinti išėjimo įtampą, prijungdami multimetrą prie MCP4725 OUT ir GND kaiščių.
Taip galime konvertuoti skaitmenines reikšmes į „Analog“, susiedami DAC modulį MCP4725 su „Arduino“.