- MCP4725 DAC Module (Digital sa Analog Converter)
- I2C Komunikasyon sa MCP4725 DAC
- Kinakailangan ang Mga Bahagi
- Diagram ng Circuit
- Programming ng DAC Arduino
- Digital sa Analog Conversion gamit ang MCP4725 at Arduino
Alam nating lahat na ang mga Microcontroller ay gumagana lamang sa mga digital na halaga ngunit sa totoong mundo kailangan nating harapin ang mga analog signal. Iyon ang dahilan kung bakit ang ADC (Analog sa Digital Converter) ay naroroon upang i-convert ang totoong mga halaga ng Analog sa Digital form upang ang mga microcontroller ay maaaring maproseso ang mga signal. Ngunit paano kung kailangan natin ng mga signal ng Analog mula sa mga digital na halaga, kaya narito ang DAC (Digital to Analog Converter).
Isang simpleng halimbawa para sa Digital to Analog converter ay ang pagrekord ng isang kanta sa studio kung saan ang isang mang-aawit ng artista ay gumagamit ng mikropono at kumakanta ng isang kanta. Ang mga analog na alon ng tunog na ito ay na-convert sa digital form at pagkatapos ay nakaimbak sa isang digital format file at kapag ang kanta ay pinatugtog gamit ang nakaimbak na digital file na mga digital na halaga ay na-convert sa mga analog signal para sa output ng speaker. Kaya sa sistemang ito ginagamit ang DAC.
Ang DAC ay maaaring magamit sa maraming mga application tulad ng Motor control, Control Brightness ng LED Lights, Audio Amplifier, Video Encoder, Mga Data acquisition System atbp.
Sa maraming mga microcontroller mayroong isang panloob na DAC na maaaring magamit upang makabuo ng analog output. Ngunit ang mga prosesor ng Arduino tulad ng ATmega328 / ATmega168 ay walang inbuilt na DAC. Ang Arduino ay may tampok na ADC (Analog to Digital Converter) ngunit wala itong DAC (Digital to Analog Converter). Mayroon itong 10-bit DAC sa panloob na ADC ngunit ang DAC na ito ay hindi maaaring gamitin bilang standalone. Kaya dito sa Arduino DAC tutorial na ito, gumagamit kami ng isang karagdagang board na tinatawag na MCP4725 DAC Module kasama ang Arduino.
MCP4725 DAC Module (Digital sa Analog Converter)
Ang MCP4725 IC ay isang 12-Bit Digital sa Analog Converter Module na ginagamit upang makabuo ng mga output analog voltages mula (0 hanggang 5V) at kinokontrol ito ng paggamit ng komunikasyon ng I2C. Ito rin ay kasama ng board na hindi masalitaw na memorya ng EEPROM.
Ang IC na ito ay may 12-Bit na resolusyon. Nangangahulugan ito na ginagamit namin ang (0 hanggang 4096) bilang input upang maibigay ang output ng boltahe patungkol sa boltahe ng sanggunian. Ang maximum na boltahe ng sanggunian ay 5V.
Formula upang makalkula ang Output Voltage
O / P Boltahe = (Sanggunian Boltahe / Resolusyon) x Halaga ng Digital
Halimbawa Halimbawa kung gagamitin namin ang 5V bilang sanggunian boltahe at ipagpalagay natin na ang digital na halaga ay 2048. Kaya upang makalkula ang output ng DAC.
O / P Boltahe = (5/4096) x 2048 = 2.5V
Pinout ng MCP4725
Nasa ibaba ang imahe ng MCP4725 na may malinaw na nagpapahiwatig ng mga pangalan ng pin.
Mga Pin ng MCP4725 |
Gamitin |
PALABAS |
Mga output ng Analog Boltahe |
GND |
GND para sa Output |
SCL |
Linya ng I2C Serial Clock |
SDA |
Linya ng Serial Data ng I2C |
VCC |
Input Reference Voltage 5V o 3.3V |
GND |
GND para sa pag-input |
I2C Komunikasyon sa MCP4725 DAC
Ang DAC IC na ito ay maaaring ma-interfaced sa anumang microcontroller gamit ang I2C na komunikasyon. Ang komunikasyon ng I2C ay nangangailangan lamang ng dalawang wires na SCL at SDA. Bilang default, ang I2C address para sa MCP4725 ay 0x60 o 0x61 o 0x62. Para sa akin ang 0x61 na ito. Gamit ang I2C bus maaari naming ikonekta ang maraming MCP4725 DAC IC. Tanging ang bagay lamang ang kailangan nating baguhin ang I2C address ng IC. Ang komunikasyon ng I2C sa Arduino ay naipaliwanag nang detalyado sa nakaraang tutorial.
Sa tutorial na ito ikonekta namin ang isang MCP4725 DAC IC sa Arduino Uno at magbigay ng halaga ng pag-input ng analog sa Arduino pin A0 sa pamamagitan ng paggamit ng potensyomiter. Pagkatapos ay gagamitin ang ADC upang i-convert ang halagang analog sa digital form. Matapos nito ang mga digital na halagang ipinapadala sa MCP4725 sa pamamagitan ng I2C bus upang ma-convert sa mga analog signal gamit ang DAC MCP4725 IC. Ang Arduino pin A1 ay ginagamit upang suriin ang analog output ng MCP4725 mula sa pin OUT at sa wakas ay ipakita ang parehong mga halaga ng ADC & DAC at voltages sa 16x2 LCD display.
Kinakailangan ang Mga Bahagi
- Arduino Nano / Arduino Uno
- 16x2 LCD module ng pagpapakita
- MCP4725 DAC IC
- 10k Potensyomiter
- Breadboard
- Jumper Wires
Diagram ng Circuit
Ipinapakita ng talahanayan sa ibaba ang koneksyon sa pagitan ng MCP4725 DAC IC, Arduino Nano at Multi-meter
MCP4725 |
Arduino Nano |
Multimeter |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 o OUT |
A1 |
+ ng terminal |
GND |
GND |
-ve terminal |
VCC |
5V |
NC |
Koneksyon sa pagitan ng 16x2 LCD at Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Mula sa Potentiometer Center Pin upang ayusin ang kaibahan ng LCD |
Ang RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Ginagamit ang isang potentiometer na may gitnang pin na konektado sa A0 analog input ng Arduino Nano, Left pin na konektado sa GND at kanang pinaka pin na konektado sa 5V ng Arduino.
Programming ng DAC Arduino
Ang kumpletong Arduino code para sa tutorial ng DAC ay ibinibigay sa wakas na may isang demonstration video. Dito ipinaliwanag namin ang linya ng code sa pamamagitan ng linya.
Una, isama ang silid - aklatan para sa I2C at LCD gamit ang wire.h at liquidcrystal.h library.
# isama
Susunod na tukuyin at gawing simula ang mga pin ng LCD alinsunod sa mga pin na konektado namin sa Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Tukuyin ang mga pin na display sa LCD na RS, E, D4, D5, D6, D7
Susunod na tukuyin ang I2C address ng MCP4725 DAC IC
# tukuyin ang MCP4725 0x61
Sa void setup ()
Simulan muna ang komunikasyon ng I2C sa mga pin A4 (SDA) at A5 (SCL) ng Arduino Nano
Wire.begin (); // Nagsisimula ang komunikasyon sa I2C
Susunod na itakda ang LCD display sa 16x2 mode at ipakita ang isang maligayang mensahe.
lcd.begin (16,2); // Nagtatakda ng LCD sa 16X2 Mode lcd.print ("CIRCUIT DIGEST"); pagkaantala (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC na may MCP4725"); pagkaantala (2000); lcd.clear ();
Sa void loop ()
1. Una sa buffer ilagay ang control byte na halaga (0b01000000)
(010-Sets MCP4725 sa mode na Sumulat)
buffer = 0b01000000;
2. Ang sumusunod na pahayag ay binabasa ang halagang analog mula sa pin A0 at ginawang ito sa mga digital na halaga (0-1023). Ang Arduino ADC ay 10-bit na resolusyon kaya't i-multiply ito sa 4 na nagbibigay: 0-4096, dahil ang DAC ay 12-bit na resolusyon.
adc = analogRead (A0) * 4;
3. Ang pahayag na ito ay upang hanapin ang boltahe mula sa halaga ng pag-input ng ADC (0 hanggang 4096) at ang sanggunian na boltahe bilang 5V
float ipvolt = (5.0 / 4096.0) * adc;
4. Sa ibaba ng unang linya ay inilalagay ang Karamihan sa mga makabuluhang halaga ng bit sa buffer sa pamamagitan ng paglilipat ng 4 na mga bits sa kanan sa variable ng ADC, at ang pangalawang linya ay naglalagay ng hindi gaanong makabuluhang mga halaga ng bit sa buffer sa pamamagitan ng paglilipat ng 4 na piraso sa kaliwa sa variable ng ADC.
buffer = adc >> 4; buffer = adc << 4;
5. Ang sumusunod na pahayag ay binabasa ang analog boltahe mula sa A1 na ang output ng DAC (OUTPUT pin ng MCP4725 DAC IC). Ang pin na ito ay maaari ding maiugnay sa multimeter upang suriin ang boltahe ng output. Alamin kung paano gamitin ang Multimeter dito.
unsigned int analogread = analogRead (A1) * 4;
6. Dagdag dito ang halaga ng boltahe mula sa variable analogread ay kinakalkula gamit ang formula sa ibaba
float opvolt = (5.0 / 4096.0) * analogread;
7. Ang sumusunod na pahayag ay ginagamit upang masimulan ang paghahatid sa MCP4725
Wire.beginTransmission (MCP4725);
Ipinapadala ang control byte sa I2C
Wire.write (buffer);
Ipinapadala ang MSB sa I2C
Wire.write (buffer);
Ipinapadala ang LSB sa I2C
Wire.write (buffer);
Nagtatapos sa paghahatid
Wire.endTransmission ();
Ngayon ay sa wakas ay ipakita ang mga resulta sa display na LCD 16x2 gamit ang lcd.print ()
lcd.setCursor (0,0); lcd.print ("Isang 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); pagkaantala (500); lcd.clear ();
Digital sa Analog Conversion gamit ang MCP4725 at Arduino
Matapos makumpleto ang lahat ng mga koneksyon sa circuit at i-upload ang code sa Arduino, ibahin ang potensyomiter at panoorin ang output sa LCD . Ipapakita ng unang linya ng LCD ang input na ADC na halaga at boltahe, at ang pangalawang linya ay ipapakita ang halaga ng output DAC at boltahe.
Maaari mo ring suriin ang output boltahe sa pamamagitan ng pagkonekta ng isang multimeter sa OUT at GND pin ng MCP4725.
Ito ay kung paano namin mai- convert ang mga halagang Digital sa Analog sa pamamagitan ng pag-interfacing ng DAC module MCP4725 sa Arduino.