- MCP4921 DAC (digitální na analogový převodník)
- Požadované komponenty
- Schematické
- Vysvětlení kódu
- Testování digitálně-analogového převodu pomocí PIC
Digitální a analogové je nedílnou součástí elektroniky. Většina zařízení má jak ADC, tak DAC a používají se, když je potřeba převádět signály z analogového na digitální nebo digitální na analogový. Také signály ze skutečného světa, jako je zvuk a světlo, jsou v přírodě analogické, takže kdykoli je třeba tyto signály ze skutečného světa použít, je třeba převést digitální signály na analogové, například pro produkci zvuku pomocí reproduktorů nebo pro ovládání zdroje světla.
Dalším typem DAC je Pulse Width Modulator (PWM). PWM vezme digitální slovo a generuje digitální puls s proměnnou šířkou pulzu. Když tento signál projde filtrem, bude výsledek čistě analogový. Analogový signál může mít v signálu více typů dat.
V tomto tutoriálu budeme propojovat DAC MCP4921 s Microchip PIC16F877A pro digitální na analogový převod.
Zde v tomto výukovém programu převedeme digitální signál na analogový a zobrazíme vstupní digitální hodnotu a výstupní analogovou hodnotu na 16x2 LCD. Poskytne 1V, 2V, 3V, 4V a 5V jako konečný analogový výstup, což je ukázáno na videu uvedeném na konci. O DAC se můžete dále dozvědět v našem cenném tutoriálu o propojení DAC s deskami Raspberry Pi, Arduino a STM32.
DAC lze použít v mnoha aplikacích, jako je ovládání motoru, ovládání jasu LED světel, audio zesilovač, video kodéry, systémy pro sběr dat atd. Před skokem přímo na část rozhraní je důležité mít přehled o MCP4921.
MCP4921 DAC (digitální na analogový převodník)
MCP4921 je 12bitový DAC, takže MCP4921 poskytne 12 bitů výstupního rozlišení. Rozlišení DAC znamená počet digitálních bitů, které lze převést na analogový signál. Kolik hodnot z toho můžeme dosáhnout, je založeno na vzorci. Pro 12bitový je to = 4096. To znamená, že DAC s 12bitovým rozlišením může produkovat 4096 různých výstupů.
Použitím této hodnoty lze snadno vypočítat jediné analogové krokové napětí. Pro výpočet kroků je nutné referenční napětí. Protože logické napětí pro zařízení je 5V, krokové napětí je 5/4095 (4096-1, protože počáteční bod pro digitální není 1, je 0), což je 0,00122100122 milivoltů. Takže změna o 1 bit změní analogový výstup s 0,00122100122.
To byla tedy část konverze. MCP4921 je 8-pin IC. Schéma pinů a popis naleznete níže.
MCP4921 IC komunikuje s mikrokontrolérem protokolem SPI. Pro komunikaci SPI musí být zařízení master, které odesílá data nebo příkazy externímu zařízení připojenému jako slave. V komunikačním systému SPI lze k jednomu hlavnímu zařízení připojit více slave zařízení.
Chcete-li odeslat data a příkaz, je důležité porozumět registru příkazů.
Na následujícím obrázku je zobrazen registr příkazů,
Registr příkazů je 16-bitový registr. Pro konfigurační příkaz se používá bit-15 až bit-12. Vstup dat a konfigurace jsou jasně znázorněny na obrázku výše. V tomto projektu bude MCP4921 použit jako následující konfigurace-
Číslo bitu |
Konfigurace |
Hodnota konfigurace |
Bit 15 |
DAC A |
0 |
Bit 14 |
Bez vyrovnávací paměti |
0 |
Bit 13 |
1x (V OUT * D / 4096) |
1 |
Bit 12 |
Bit pro řízení výstupu |
1 |
Takže binární je 0011 spolu s daty, která jsou určena bity D11 až D0 registru. 16bitová data 0011 xxxx xxxx xxxx je třeba odeslat, kde první 4 bity MSB je konfigurace a zbytek je LSB. Bude to jasnější, když uvidíte diagram časování příkazu zápisu.
Podle časovacího diagramu a datového listu je pin CS nízký po celou dobu psaní příkazu k MCP4921.
Nyní je čas propojit zařízení s hardwarem a psát kódy.
Požadované komponenty
U tohoto projektu jsou vyžadovány následující součásti -
- MCP4921
- PIC16F877A
- 20 MHz krystal
- Displej LCD 16x2 znaků.
- 2k rezistor -1 ks
- Kondenzátory 33pF - 2 ks
- 4,7k rezistor - 1 ks
- Multimetr pro měření výstupního napětí
- Prkénko na prkénko
- Napájení 5 V, nabíječka telefonu může fungovat.
- Spoustu připojovacích nebo Berg kabelů.
- Programovací prostředí mikročipů s programovací sadou a IDE s kompilátorem
Schematické
Obvodové schéma pro propojení DAC4921 s mikrokontrolérem PIC je uvedeno níže:
Obvod je konstruován v Breadboard-
Vysvětlení kódu
Kompletní kód pro převod digitálních signálů na analogové s PIC16F877A je uveden na konci článku. Jako vždy musíme nejprve nastavit konfigurační bity v mikrokontroléru PIC.
// PIC16F877A Configuration Bit Settings // 'C' source line config commands // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT deaktivováno) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR povoleno) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (Pin RB3 / PGM má funkci PGM; programování nízkého napětí povoleno) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = VYPNUTO // Zápis do paměti Flash programu Povolení bitů (ochrana proti zápisu vypnuta; veškerá programová paměť může být zapsána ovládáním EECON) #pragma config CP = VYPNUTO // Bit kódu ochrany kódu paměti programu (ochrana kódu vypnuta)
Níže uvedené řádky kódu se používají pro integraci hlavičkových souborů LCD a SPI, deklaruje se také frekvence XTAL Frequency a DAC CS pin.
Výukový program a knihovnu PIC SPI najdete na daném odkazu.
#zahrnout
Funkce SPI_Initialize_Master () je mírně upravena pro jinou konfiguraci požadovanou pro tento projekt. V tomto případě je registr SSPSTAT nakonfigurován takovým způsobem, že vstupní data vzorkovaná na konci doby výstupu dat a také hodiny SPI nakonfigurované jako Transmit se vyskytují při přechodu z aktivního režimu do režimu nečinnosti hodin. Jiné je stejné.
void SPI_Initialize_Master () { TRISC5 = 0; // Nastavit jako výstup SSPSTAT = 0b11000000; // str. 74/234 SSPCON = 0b00100000; // str. 75/234 TRISC3 = 0; // Nastavit jako výstup pro režim slave }
Také pro níže uvedenou funkci je SPI_Write () mírně upravena. K přenosu dat dojde po vyčištění vyrovnávací paměti, aby byl zajištěn dokonalý přenos dat přes SPI.
void SPI_Write (char incoming) { SSPBUF = incoming; // Zápis dat zadaných uživatelem do vyrovnávací paměti while (! SSPSTATbits.BF); }
Důležitou součástí programu je ovladač MCP4921. Je to trochu složitá část, protože příkaz a digitální data jsou děrovány dohromady, aby poskytovaly kompletní 16bitová data přes SPI. Tato logika je však jasně uvedena v komentářích ke kódu.
/ * Tato funkce slouží k převodu digitální hodnoty na analogovou. * / void convert_DAC (unsigned int value) { / * Velikost kroku = 2 ^ n, tedy 12bit 2 ^ 12 = 4096 Pro 5V reference bude krok 5/4095 = 0,0012210012210012V nebo 1mV (přibližně) * / nepodepsaný int kontejner; unsigned int MSB; unsigned int LSB; / * Krok: 1, uložena 12bitová data do kontejneru Předpokládejme, že data jsou 4095, v binárním formátu 1111 1111 1111 * / container = value; / * Krok: 2 Vytvoření figuríny 8 bitů. Takže dělením 256 jsou horní 4 bity zachyceny v LSB LSB = 0000 1111 * / LSB = kontejner / 256; / * Krok: 3 Odeslání konfigurace s děrováním 4bitových dat. LSB = 0011 0000 NEBO 0000 1111. Výsledek je 0011 1111 * / LSB = (0x30) - LSB; / * Krok: 4 Kontejner má stále 21bitovou hodnotu. Extrahování spodních 8 bitů. 1111 1111 A 1111 1111 1111. Výsledkem je 1111 1111, což je MSB * / MSB = 0xFF & container; / * Krok: 4 Odeslání 16bitových dat rozdělením na dva bajty. * / DAC_CS = 0; // CS je během přenosu dat nízký. Podle datového listu je vyžadován SPI_Write (LSB); SPI_Write (MSB); DAC_CS = 1; }
V hlavní funkci se používá smyčka „for“, kde se vytvářejí digitální data pro vytváření výstupu 1 V, 2 V, 3 V, 4 V a 5 V. Digitální hodnota se počítá proti výstupnímu napětí / 0,0012210012210012 milivoltů.
void main () { system_init (); úvodní obrazovka (); int číslo = 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 (číslo); lcd_com (SECOND_LINE); lcd_puts ("Výstup: -"); lcd_print_number (volt); lcd_puts ("V"); convert_DAC (číslo); __delay_ms (300); } } }
Testování digitálně-analogového převodu pomocí PIC
Integrovaný obvod je testován pomocí multimetru. Na obrázcích níže je na LCD zobrazeno výstupní napětí a digitální data. Multimetr ukazuje blízký odečet.
Kompletní kód s fungujícím videem je přiložen níže.