Svetelektro.com

Svetelektro.com

Meno:
Heslo:

Programujeme AVR v jazyku C - 6. časť

Kategória: Mikroprocesory | 07.03.2012 | Autor: zawin 

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!
 

10.01.2013

Mikrokontroléry rady AVR - Virtual USB

 8755   8  Hodnotenie: 4.8Hodnotenie: 4.8Hodnotenie: 4.8Hodnotenie: 4.8Hodnotenie: 4.8

Priemerné hodnotenie: 5
Hlasov: 16

Vynikajúci

Zvoľte počet hviezdičiek:
Vynikajúci
Veľmi dobrý
Dobrý
Priemerný
Zlý



Za obsah komentárov je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: Peťus - 07.03.2012
(O užívateľovi | Poslať súkromú správu) http://www.chiptron.cz
není tam chybička? "lcd_puts("Hello World /n Svetelektro.com"); //vypis text " v docu co si posílal si jí tam přitom měl.
Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: pixell - 29.05.2012
(O užívateľovi | Poslať súkromú správu)
 
Hmm preco mi to nechce prelozit avr studio kde je ta chyby ako to ma byt spravne napisane
Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: pixell - 30.05.2012
(O užívateľovi | Poslať súkromú správu)
 
v kniznici je napisane toto asi tam bude problem ci? #error "This library requires AVR-GCC 3.3 or later, update to newer AVR-GCC compiler !"

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: luboss17 - 07.03.2012
(O užívateľovi | Poslať súkromú správu) http://lubosweb.php5.sk
myslim ze hned v prvom zdrojaku je vynechany znak LF cize

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: zawin - 07.03.2012
(O užívateľovi | Poslať súkromú správu) http://svetelektro.com
Malo by to byt opravene. Dik za upozornenie

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: zabacik181 - 10.04.2012
(O užívateľovi | Poslať súkromú správu)
ak mam megu16 tak co vsetko treba zmenit v suboroch lcd.c/lcd.h
Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: maestro33 - 19.08.2012
(O užívateľovi | Poslať súkromú správu)
 
Netreba tam nic menit, treba si dat pozor na vystupne porty, mega8 ich ma odlisne od 16tky. A samozrejme ak mas externy krystal, treba zadat jeho frekvenciu do header.h

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: miso2451 - 16.07.2012
(O užívateľovi | Poslať súkromú správu)
Možem použit aj tento display http://www.sos.sk/?str=371&artnum=68622&name=BOLYMIN-BC2004DBNHEH ? obsahuje radič ST7066U

chyba... (Hodnotenie: 1)
Od: madboy - 26.08.2012
(O užívateľovi | Poslať súkromú správu)
Hral som sa s Proteus 7 ako simulatorom a všetko tam fungovalo perfgektne potom som skusim zapojit v realite a nespravylo to nič ... Nemal by dakdo dajaku dobru radu? ako na to? Dakujem za každu radu ...

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: majo505 - 29.12.2012
(O užívateľovi | Poslať súkromú správu)
zravim chcel by som sa spitat ci treba robit niejake zmeny v lcd.h ak pouzivam displej 1x16? lebo ked nieco vypisem na displej dhsie ako osem znakov pomocou funkcie "lcd_puts" tak sa mi zobrazi iba prvych osem znakov druha polovica displeja vobec nereaguje ..ak mozte niejaku radu co s tim ? dik

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: wwsly - 16.03.2013
(O užívateľovi | Poslať súkromú správu)
Ahoj, chci se zeptat zda je možné namapovat pin R/W na PC0, datové a řídící piny na jiný port. Prostě, tak aby mi displey nesežral víc jak 6 pinů.

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: ves178 - 18.04.2013
(O užívateľovi | Poslať súkromú správu)
Ahoj, zkoušel jsem tvuj přiklad z LCD, a mám takový problém. Display vypíše všechno krome desetiného čísla 3.14, misto něho je tam ?. Nevíte v čem může být problém? Díka za každou radu, klidně mi pište na meila: tomdatyne@seznam.cz

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: m6r3k - 04.05.2013
(O užívateľovi | Poslať súkromú správu)
inač nebolo by na škodu doplniť subor lcd.c o #include util/delay.h> ( AVR studio 5 to inač nevezme)

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: milan_b - 28.10.2014
(O užívateľovi | Poslať súkromú správu)
Čaute, chcem sa spýtať....je tu viac ľudí, ktorí mali problém rozbehať program v reáli, teda ja takisto. Myslím, že som urobil všetko podľa návodu, ale ako keby sa mi disp nechcel inicializovať, ako keby vôbec inicializácia neprebehla. Mám rozmer 4x20, v lcd.h som zmenil rozmery lcd, ostatné som ponechal, nakoľko som lcd pripojil na rovnaký port. Ďakujem.
Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: milan_b - 28.10.2014
(O užívateľovi | Poslať súkromú správu)
 
Zabudol som napísať, že používam attmegu328P...
Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: jaNEk555 - 18.12.2014
(O užívateľovi | Poslať súkromú správu)
 
s pôvodnou knižnicou od Petra Feluryho mi to ide, je tu: http://homepage.hispeed.ch/peterfleury/avr-software.html#libs

Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: frico - 30.01.2015
(O užívateľovi | Poslať súkromú správu)
Skusal som to na 2x16 islo to dobre. Ale som skusil som lcd 4x20 nevypise nic. Skusal som to s atmega8 a lcd je DMC20481 #define LCD_LINES 4 #define LCD_DISP_LENGTH 20 #define LCD_LINE_LENGTH 0x40 #define LCD_START_LINE1 0x00 #define LCD_START_LINE2 0x40 to to je podla datashetu #define LCD_START_LINE3 0x14 #define LCD_START_LINE4 0x54 #define LCD_WRAP_LINES 0
Re: Programujeme AVR v jazyku C - 6. časť (Hodnotenie: 1)
Od: frico - 30.01.2015
(O užívateľovi | Poslať súkromú správu)
 
moze byt ze su zle fuse bit?
Autor stránky je Ondrej Závodský(zawin), o graficky design sa stará Ľuboš Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
Čas potrebný k spracovaniu stránky 0.04 sekúnd