- MCP4921 DAC (digitalno-analogni pretvarač)
- Komponente potrebne
- Shematski
- Objašnjenje koda
- Testiranje digitalne u analognu pretvorbu pomoću PIC-a
Digitalno i analogno sastavni su dio elektronike. Većina uređaja ima i ADC i DAC i koriste se kada postoji potreba za pretvaranjem signala iz analognog u digitalni ili digitalni u analogni. Također su signali iz stvarnog svijeta poput zvuka i svjetlosti analogni po svojoj prirodi, pa kad god se ovi signali iz stvarnog svijeta moraju koristiti, digitalni signali moraju se pretvoriti u analogne, na primjer za proizvodnju zvuka pomoću zvučnika ili za kontrolu izvora svjetlosti.
Druga vrsta DAC-a je modul širine impulsa (PWM). PWM uzima digitalnu riječ i generira digitalni impuls s promjenjivom širinom impulsa. Kad se ovaj signal propusti kroz filtar, rezultat će biti čisto analogan. Analogni signal može imati više vrsta podataka u signalu.
U ovom uputstvu spojit ćemo DAC MCP4921 s Microchipom PIC16F877A za digitalnu u analognu pretvorbu.
Ovdje ćemo u ovom uputstvu pretvoriti digitalni signal u analogni signal i prikazati ulaznu digitalnu vrijednost i izlaznu analognu vrijednost na LCD-u 16x2. Omogućit će 1V, 2V, 3V, 4V i 5V kao konačni analogni izlaz koji je prikazan u videu danom na kraju. O DAC-u možete dalje saznati u našem dragocjenom vodiču o povezivanju DAC-a s pločama Raspberry Pi, Arduino i STM32.
DAC se može koristiti u mnogim aplikacijama kao što su upravljanje motorom, upravljanje svjetlinom LED svjetla, pojačalo zvuka, video koderi, sustavi za prikupljanje podataka itd. Prije nego što prijeđete izravno na dio za povezivanje, važno je imati pregled o MCP4921.
MCP4921 DAC (digitalno-analogni pretvarač)
MCP4921 je 12-bitni DAC, tako da će MCP4921 pružiti 12 bitova izlazne razlučivosti. DAC rezolucija znači broj digitalnih bitova koji se mogu pretvoriti u analogni signal. Koliko vrijednosti možemo postići iz toga, temelji se na formuli. Za 12-bitni je = 4096. To znači da DAC s 12-bitnom razlučivosti može proizvesti 4096 različitih izlaza.
Koristeći ovu vrijednost, lako se može izračunati pojedinačni analogni napon koraka. Za izračunavanje koraka potreban je referentni napon. Kako je logički napon uređaja 5V, napon koraka je 5/4095 (4096-1 jer početna točka za digitalno nije 1, već je 0), što je 0,00122100122 milivolta. Dakle, promjena od 1 bita promijenit će analogni izlaz s 0,00122100122.
Dakle, to je bio dio konverzije. MCP4921 je 8-pin IC. Pin dijagram i opis može se naći u nastavku.


MCP4921 IC komunicira s mikro Protokolom SPI. Za SPI komunikaciju uređaj mora biti glavni, koji predaje podatke ili naredbu vanjskom uređaju povezanom kao slave. U komunikacijskom sustavu SPI, više podređenih uređaja može se povezati s jednim glavnim uređajem.
Da biste predali podatke i naredbu, važno je razumjeti registar naredbi.
Na slici ispod prikazan je registar naredbi,

Naredbu registar je 16-bitni registar. Bit-15 do bit-12 koristi se za naredbu konfiguracije. Unos podataka i konfiguracija jasno su prikazani na gornjoj slici. U ovom projektu MCP4921 će se koristiti kao sljedeća konfiguracija -
|
Bitni broj |
Konfiguracija |
Vrijednost konfiguracije |
|
Bit 15 |
DAC A |
0 |
|
Bit 14 |
Nebuferirano |
0 |
|
Bit 13 |
1x (V OUT * D / 4096) |
1 |
|
Bit 12 |
Izlazni kontrolni bit za dolje |
1 |
Dakle, Binarni je 0011 zajedno s podacima koji se određuju od D11 do D0 bitova registra. Treba predati 16-bitne podatke 0011 xxxx xxxx xxxx, gdje su prva 4 bita MSB-a konfiguracija, a ostatak LSB. To će biti jasnije ako se vidi vremenski dijagram naredbe za pisanje.

Prema vremenskom dijagramu i tablici podataka, CS pin je nizak za cijelo razdoblje pisanja naredbe na MCP4921.
Sada je vrijeme za povezivanje uređaja s hardverom i pisanje kodova.
Komponente potrebne
Za ovaj projekt potrebne su sljedeće komponente -
- MCP4921
- PIC16F877A
- Kristal od 20 MHz
- LCD zaslon 16x2 karaktera.
- 2k otpor -1 kom
- Kondenzatori 33pF - 2 kom
- Otpor 4.7k - 1 kom
- Multimetar za mjerenje izlaznog napona
- Ploča za kruh
- 5V napajanje, telefonski punjač može raditi.
- Mnogo spojnih žica ili berg žica.
- Programsko okruženje Microchip s programskim kompletom i IDE s kompajlerom
Shematski
Dijagram sklopa za povezivanje DAC4921 s PIC mikrokontrolerom dat je u nastavku:

Krug je izrađen u Breadboard-

Objašnjenje koda
Kompletni kod za pretvaranje digitalnih signala u analogni s PIC16F877A dan je na kraju članka. Kao i uvijek, prvo moramo postaviti konfiguracijske bitove u PIC mikrokontroleru.
// PIC16F877A Postavke konfiguracijskog bita // Izjave o konfiguraciji izvorne crte 'C' // CONFIG #pragma config FOSC = HS // Bitovi za odabir oscilatora (HS oscilator) #pragma config WDTE = OFF // Bit za omogućavanje nadzornika vremena (WDT onemogućen) # pragma config PWRTE = OFF // Bit za uključivanje i isključivanje timera (PWRT onemogućen) #pragma config BOREN = ON // Bit za omogućavanje resetiranja Brown-out (omogućen BOR) #pragma config LVP = OFF // Niskonaponski (pojedinačno napajanje)) Bit za omogućavanje serijskog programiranja u krugu (pin RB3 / PGM ima PGM funkciju; omogućeno je programiranje niskog napona) #pragma config CPD = OFF // Bit zaštite podataka EEPROM memorijskog koda (zaštita podataka EEPROM koda isključena) #pragma config WRT = OFF // Flash programiranje bita Omogući bitove (isključiti zaštitu; u cijelu memoriju programa može se upisati EECON kontrola) #pragma config CP = OFF // Flash program za zaštitu zaštitnog koda memorije (zaštita koda isključena)
Sljedeći retci koda koriste se za integriranje LCD i SPI datoteka zaglavlja, također je deklarirana XTAL frekvencija i CS pin kontakt DAC-a.
Vodič i knjižnicu PIC SPI možete pronaći na datoj poveznici.
#include
Funkcionisanje SPI_Initialize_Master () malo je izmijenjeno za drugačiju konfiguraciju potrebnu za ovaj projekt. U ovom je slučaju SSPSTAT registar konfiguriran na takav način da se ulazni podaci uzorkovani na kraju vremena izlaza podataka i također SPI sat konfiguriran kao Prijenos javljaju na prijelazu iz aktivnog stanja u stanje mirovanja sata. I drugo je isto.
void SPI_Initialize_Master () { TRISC5 = 0; // Postavi kao izlaz SSPSTAT = 0b11000000; // str 74/234 SSPCON = 0b00100000; // str 75/234 TRISC3 = 0; // Postavi kao izlaz za slave način }
Također, za donju funkciju, SPI_Write () je malo izmijenjen. Prijenos podataka dogodit će se nakon brisanja međuspremnika radi osiguranja savršenog prijenosa podataka preko SPI-a.
void SPI_Write (char dolazno) { SSPBUF = dolazno; // Upisati podatke dane od korisnika u međuspremnik while (! SSPSTATbits.BF); }
Važan dio programa je upravljački program MCP4921. To je pomalo lukav dio jer se naredba i digitalni podaci spajaju kako bi se dobili cjeloviti 16-bitni podaci preko SPI-a. Međutim, ta je logika jasno prikazana u komentarima koda.
/ * Ova je funkcija za pretvaranje digitalne vrijednosti u analognu. * / void convert_DAC (nepotpisana int vrijednost) { / * Veličina koraka = 2 ^ n, prema tome 12bit 2 ^ 12 = 4096 Za referencu od 5V, korak će biti 5/4095 = 0,0012210012210012V ili 1mV (približno) * / nepotpisani int spremnik; nepotpisani int MSB; nepotpisan int LSB; / * Korak: 1, pohranio je 12-bitne podatke u spremnik Pretpostavimo da su podaci 4095, u binarnom obliku 1111 1111 1111 * / container = value; / * Korak: 2 Stvaranje lažnog 8-bitnog. Dakle, dijeljenjem 256, gornja 4 bita se hvataju u LSB LSB = 0000 1111 * / LSB = container / 256; / * Korak: 3 Slanje konfiguracije probijanjem 4-bitnih podataka. LSB = 0011 0000 ILI 0000 1111. Rezultat je 0011 1111 * / LSB = (0x30) - LSB; / * Korak: 4 Spremnik i dalje ima 21-bitnu vrijednost. Izdvajanje donjih 8 bitova. 1111 1111 I 1111 1111 1111. Rezultat je 1111 1111 što je MSB * / MSB = 0xFF & container; / * Korak: 4 Slanje podataka od 16 bita dijeljenjem u dva bajta. * / DAC_CS = 0; // CS je nizak tijekom prijenosa podataka. Prema tehničkom listu potreban je SPI_Write (LSB); SPI_Write (MSB); DAC_CS = 1; }
U glavnoj funkciji koristi se 'for loop' gdje se stvaraju digitalni podaci za stvaranje izlaza od 1V, 2V, 3V, 4V i 5V. Digitalna vrijednost izračunava se prema izlaznom naponu / 0,0012210012210012 milivolta.
void main () { system_init (); uvodni_zaslon (); int broj = 0; int volt = 0; while (1) { for (volt = 1; volt <= MAX_VOLT; volt ++) { number = volt / 0.0012210012210012; clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("DATA Sent: -"); lcd_print_number (broj); lcd_com (SECOND_LINE); lcd_puts ("Izlaz: -"); lcd_print_number (volt); lcd_puts ("V"); convert_DAC (broj); __zakašnjenje_ms (300); } } }
Testiranje digitalne u analognu pretvorbu pomoću PIC-a
Izgrađeni krug ispituje se pomoću multimetra. Na slikama ispod, izlazni napon i digitalni podaci prikazani su na LCD-u. Multimetar pokazuje pomno očitanje.

Kompletni kod s radnim video zapisom priložen je u nastavku.
