Programujeme AVR v jazyku C - 6. časť

Publikované: 07.03.2012, Kategória: Mikroprocesory

www.svetelektro.com

V dalších častiach seriálu budeme potrebovať zobrazovať rôzne údaje, preto som sa rozhodol v tejto časti bližšie venovať pripojeniu LCD displeja ku mikrokontroléru a jeho obsluhe v programe.

Pripojenie LCD displeja ku mikrokontroleru:

LCD displej obsahuje obvod (nazývaný radič), ktorý nám uľahčuje prácu s displejom. Obsahuje komunikačné rozhranie, preddefinovanú sadu znakov atď. Nám potom stačí poslať cez komunikačné rozhranie niekoľko príkazov na vypísanie znakov na displej. Najčastejšie používaným radičom na znakové LCD displeje sa stal legendárny HD47780.

Schéma zapojenia LCD displeja:
Dátové linky môžeme zapojiť na ktorýkoľvek PORT mikropočítača. Prepojenie potom definujeme v hlavičkovom súbore knižnice.



Popis pinov displeja:
Pin č.1 (VSS) – GND
Pin č.2 (VDD) – napájacie napätie v rozsahu 3,3 až 5V
Pin č.3 (VO) – na tento pin pripájame trimer ktorým nastavujeme kontrast displeja.
Pin č.4 (RS) – dátový pin (Register select), určuje či chceme cez dátové vodiče prenášať inštrukcie alebo dáta
Pin č.5 (R/W) – nastavujeme ním či chceme do displeja zapisovať alebo z neho čítať. Zvyčajne využívame len zápis, preto tento pin pripájame na GND.
Pin č.6 (E) – dátovy pin (Enable), zapnutie/vypnutie LCD displeja
Piny č. 7-14 (DB0-DB7) – obojsmerná dátová linka
Pin č. 15 – Anóda (+) podsvietenia LCD displeja
Pin č. 16 –Katóda (-) podsvietenia LCD displeja

Práca s displejom pomocou mikrokontroléra:

Nakoľko na internete existuje množstvo knižníc pre prácu zo znakovými displejmi, je jeho ovládanie oveľa jednoduchšie ako by ste možno čakali :)
Knižnica ktorú používam obsahuje 2 súbory lcd.c a lcd.h, ktorá obsahuje funkcie na jednoduché ovládanie LCD displeja.

Pre využívanie tejto knižnice v našom projekte treba spraviť nasledovné:
1) Vytvoriť nový projekt (viď 1.časť seriálu) alebo otvoriť existujúci projekt v AVR studio 4.

2) Do adresára kde sa nachádza náš projekt skopírujeme súbory lcd.c a lcd.h

3) Tieto súbory je treba pridať aj do nášho projektu v AVR studio 4. Klikneme pravým tlačidlom na položku „Source Files“ a zvolíme možnosť „Add existing source files“ a vyberieme súbor lcd.c. Obdobným spôsobom pridáme aj hlavičkový súbor lcd.h položku „Header files“ .




4) Nakoniec pridáme hlavičkový súbor do hlavného programu - #include „lcd.h“

Nastavenie hlavičkového súboru lcd.h:
Slúži na nastavenie práce s LCD displejom. V mnohých prípadoch stačí nastaviť len počet znakov na riadok, počet riadkov a rozloženie pinov na ovládanie displeja. Pokiaľ máte LCD displej 2x16 znakov a je zapojený podľa hore uvedenej schémy, netreba v tomto súbore nič nastavovať.







Knižnica obsahuje nasledovné funkcie na prácu s LCD displejom:
lcd_init(uint8_t dispAttr); - inicializácia LCD displeja, ako parameter funkcie možno zvoliť nasledovné možnosti:
LCD_DISP_OFF - displej vypnutý
LCD_DISP_ON – displej zapnutý, kurzor vypnutý
LCD_DISP_ON_CURSOR – displej zapnutý, kurzor zapnutý
LCD_DISP_ON_CURSOR_BLINK – displej zapnutý, kurzor bliká
lcd_clrscr(void); - vymazanie LCD displeja
lcd_home(void); - nastaví kurzor na domovskú pozíciu
lcd_gotoxy(uint8_t x, uint8_t y); - nastavenie kurzora na zadanú pozíciu x a y displeja (indexovanie je od 0)
lcd_putc(char c); - zobraz znak
lcd_puts(const char *s); - zobraz reťazec znakov
lcd_puts_p(const char *progmem_s); - zobraz reťazec znakov umiestený vo Flash pamäti
lcd_command(uint8_t cmd); - vyšle príkaz na displej

Výpis textu na displej:
Príklad č.1 - prvý text:


Príklad č.2 – využitie funkcie gotoxy(x,y);


Príklad č.3 – vypísanie špeciálneho znaku
Pokiaľ chceme vypísať nejaký špeciálny znak môžeme tak urobiť pomocou funkcie lcd_putc(); kde napíšeme adresu znaku z nasledovnej tabuľky.
Napr. pre vypísanie znaku OHM je to teda hodnota 0b11110100.

Výpis čísel na displej:
Pokiaľ chceme zobraziť číslo na displeji, musíme ho skonvertovať na reťazec znakov. Pokiaľ ide o celé čísla využívame funkciu itoa() alebo sprintf().

Funkcia itoa ma nasledovné parametre - itoa(int value, char *string, int radix);
int value – premenná typu int v ktorej sa nachádza číslo ktoré chceme skonvertovať
char *string – ukazovateľ na reťazec znakov do ktorého sa zapíše naše číslo
int radix – základ čísla, určíme v akej sústave má byť výsledné číslo

Príklad č.1 – práca s číslami pomocou funkcie itoa();

Funkcia sprintf má nasledovne parametre - sprintf ( char * str, const char * format, ... );, funguje podobne ako printf, s tým rozdieľom že výsledok zapíše do textového reťazca.
char * str – Ukazovateľ na pole znakov
const char * format – zápis reťazca

Problém nastane pokiaľ chceme vypísať desatinné číslo na displej pomocou funkcie sprintf(); .
Preto treba upraviť parametre projektu, aby sme s nimi mohli pracovať.
V menu teda vyberieme Project -> Configuration Options a prejdeme na záložku Libraries kde pridáme súbory libprintf_flt.a and libm.a




Potom chodte do záložky „Custom options“ , potom zvolte „Linker Options“, a pridajte prepínače-Wl,-u,vfprintf




Po tejto operácií môžete pracovať s desatinnými číslami typu float alebo double.
Príklad č.2 – práca s desatinnými číslami pomocou funkcie sprintf().



V ďalšej časti seriálu sa bližšie pozrieme na prácu s AD-prevodníkmi!