Sunteți pe pagina 1din 21

4.

SISTEMUL DE AFIARE CU LCD

Scopul leciei: Prezentarea pe scurt a principiului de afiare a caracterelor alfanumerice i a schemelor bloc utilizate n acest scop. Prezentarea unui controler tipic utilizat la realizarea panourilor alfanumerice cu cristale lichide. Familiarizarea cu structurile de program n asamblor i n limbajul C necesare pentru controlul unui panou de afiare LCD.

4.1. Principiul de lucru al afioarelor alfanumerice


O dat cu dezvoltarea capacitii i vitezei de prelucrare a informaiei de ctre sistemele digitale, a aprut necesitatea afirii nu numai a informaiei numerice, ci i a informaiei alfanumerice i chiar grafice. Cele mai rspndite implementri pentru sistemele miniaturale i portabile utilizeaz pentru panourile de afiare diode electroluminescente (Light Emitting Diode LED) sau cristale lichide LCD (Liquid Crystal Display). Dac primele variante n epoca de nceput a electronicii digitale foloseau sistemele de afiare cu segmente, care necesitau implementri i circuite de comand simple, acum se folosesc pe scar larg implementri folosind matrice de puncte, care implic implementri i circuite mai complexe, dar care asigur o inteligibilitate, estetic i complexitate de afiare mai mari.

4.1.1.

Matrice de 5 x 7 puncte

Caracterele alfanumerice standard pot fi reprezentate cel mai simplu cu ajutorul unei matrice de puncte avnd 5 coloane i 1 0 0 0 1 7 linii. Dac se asociaz fiecrui punct al acestei matrice una din 1 1 0 1 1 strile aprins (luminos) sau stins (ntunecat), atunci din 1 0 1 0 1 combinaia acestora se poate sintetiza caracterul alfanumeric 1 0 0 0 1 dorit. Pentru exemplificare, n Fig. 4.1 este artat reprezentarea 1 0 0 0 1 matriceal a literei M folosindu-se n acest scop o codificare 1 0 0 0 1 liniar. Simbolul 1 din figur poate reprezenta un punct aprins, 1 0 0 0 1 atunci cnd matricea este realizat cu LED-uri, sau poate reprezenta un punct ntunecat (negru), atunci cnd este realizat Fig. 4.1. Afiarea literei M pe cu cristale lichide (LCD). o matrice de 5 x 7 puncte Imaginea astfel conceput pentru fiecare caracter alfanumeric va trebui s fie memorat (pe linii sau pe coloane) n vederea utilizrii ei pentru afiare. Pentru exemplul din Fig. 4.1 va trebui s se memoreze 7 linii a cte 5 bii fiecare. n Fig. 4.2 sunt indicate structurile matriceale a patru caractere alfanumerice care vor fi stocate pe linii (7 linii a cte 5 bii fiecare). Din aceast figur se observ c va fi nevoie de 3 bii de adresare (A2, A1, A0) pentru a identifica o anumit linie a matricei i de un numr de 7 bii suplimentari (A3, A4, A5, A6, A7, A8 i A9) pentru a identifica n mod unic matricea rezervat unui anumit caracter. Biii A3 = b0, A4 = b1, A5 = b2, A6 = b3, A7 = b4, A8 = b5 i A9 = b6 determin n mod unic caracterul alfanumeric i sunt cunoscui sub numele de cod ASCII (American Standard Code for Information Interchange) al caracterului. Cu cei apte bii ai codului ASCII pot fi identificate 128 caractere alfanumerice distincte. 1

4.1.2.

Generator de caractere

Pentru a le putea utiliza n scopul afirii, cele 128 de matrice binare (de cte 5 coloane i 7 linii) vor trebui s fie memorate ntr-o memorie nevolatil (de exemplu ROM, PROM, EPROM, EEPROM sau FLASH) memorie care, odat ncrcat cu aceast informaie, va fi cunoscut sub numele de generator de caractere (Fig. 4.3).

COD ASCII
b6 b5 b4 b3 b2 b1 b0 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Q0 Q1 Q2 Q3 Q4 Q0 Q1 Q2 Q3 Q4 Q0 Q1 Q2 Q3 Q4 Q0 Q1 Q2 Q3 Q4

x x 0 0 0 0 0 1 0 1 0 1 0 0 0 x x 0 0 1 1 1 0 0 1 0 1 1 1 0

0 0 0 1 1 1 0 1 0 0 0 1 1 0 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0 0 0 0 0 1 1 1 0

0 1 1 1 1 1 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0

1 0 1 1 1 0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 1 0 1 1 1 0 0

1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0

Fig. 4.2. Afiarea caracterelor @, B, D i F Generatorul de caractere din Fig. 4.3 funcioneaz n felul urmtor: Se aplic codul ASCII al caracterului care urmeaz a fi generat pe intrrile b0, b1, b6. Pe biii de adres cei mai puini semnificativi, se genereaz adresele liniilor caracterului cu ajutorul unui tact local divizat cu 7. De la 7 adrese consecutive astfel generate, se citete matricea liniar corespunztoare caracterului, generat linie cu linie pe ieirile Q0, , Q4 (pentru un caracter anume, codul ASCII rmne neschimbat, se modific doar biii de adres cei mai puini semnificativi A2, A1, A0).
:7
A0 A1 A2 Codul ASCII al caracterului b0 b1 b2 b3 b4 b5 b6 A3 A4 A5 A6 A7 A8 A9 GENERATOR DE CARACTERE Q0 Q1 Q2 Q3 Q4

Tact local

Fig. 4.3. Generator de caractere

4.1.3.

Afior pentru un caracter alfanumeric

O matrice de puncte cu 7 linii a cte 5 coloane realizat cu LED-uri sau cristale lichide va permite afiarea caracterului alfanumeric citit (generat) din generatorul de caractere (Fig. 4.4). 2

Schema logic a unui afior pentru un caracter alfanumeric prezentat n Fig. 4.4 cuprinde, pe lng generatorul de caractere descris anterior, matricea de 35 de puncte precum i circuite electronice de cuplare a liniilor, respectiv a coloanelor, la decodor, respectiv la generatorul de caractere.
COD ASCII

:7

b6 b5 b4 b3 b2 b1 b0
GENERATOR DE CARACTERE

CIRCUIT DE CUPLARE COLOANE

X X X X X CIRCUIT DE DECODARE CIRCUIT DE CUPLARE LINII X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X

Fig. 4.4. Schem logic de afiare a unui caracter alfanumeric Structura concret a acestor circuite de cuplare depinde de modul de realizare a matricei (cu LED-uri sau cu cristale lichide). Decodorul din schem are rolul de a selecta pe rnd liniile matricei (n funcie de adresa A2A1A0) permind afiarea pe linia selectat a informaiei specifice caracterului respectiv. Din cele de mai sus, rezult c scrierea caracterului alfanumeric se face linie cu linie. Pentru ca ochiul uman s perceap caracterul alfanumeric sub forma sa real (continu, fr plpire), caracterul va trebui s fie rescris, de partea electronic, ntr-o caden de minim 50 ori pe secund.

4.1.4.

Afior pentru patru caractere

Principiul de afiare prezentat n Fig. 4.4 poate fi generalizat pentru afiarea mai multor caractere alfanumerice pe una sau mai multe linii ale unui panou de afiare. Pentru a nelege principiul precum i modificrile care se impun a fi aduse schemei din Fig. 4.4, este prezentat n continuare schema bloc a unui sistem de afiare pentru patru caractere alfanumerice dispuse pe o linie. Modificrile din schem sunt urmtoarele: prezena a patru matrice pentru afiare; cuplarea generatorului de caractere la cele patru matrice se face printr-un circuit de demultiplexare; selecia matricei pe care urmeaz a fi afiat caracterul alfanumeric se face prin biii de adres a0 i a1 aplicai circuitului de demultiplexare; o memorie de date de tip RAM pentru memorarea codurilor ASCII ale caracterelor alfanumerice care vor fi afiate (notat de obicei ca Display Data RAM DDRAM). n exemplul ales, prezentat n Fig. 4.5, la patru adrese consecutive din memoria RAM vor fi memorate codurile ASCII ale caracterelor M, B, F i D. Aceste coduri sunt: 4Dh, 42h, 46h i 44h. Adresarea memoriei RAM se face prin biii a1 i a0 generai de Tact 1 prin intermediul unui divizor 3

cu 4. Intrrile de date ale memoriei RAM sunt cuplate la o interfa cu exteriorul de unde urmeaz a fi nscrise (de la o tastatur, un microcontroler etc.) codurile ASCII ale caracterelor M, B, F i D, care urmeaz a fi afiate.
Interfaa cu exteriorul a0 MEMORIE DE DATE a1

Tact 2

:7

:4

Tact 1

b0 b1 b2 b3 b4 b5 b6
GENERATOR DE CARACTERE Q0 Q1 Q2 Q3 Q4 CIRCUIT DE DEMULTIPLEXARE I CUPLARE COLOANE
A0 A1 A2

CIRCUIT DE CUPLARE LINII

1 0 0 0 1 1 1 0 1 1 1 0 1 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 M0

1 1 1 1 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 M1

1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 M2

1 1 1 0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 1 0 1 1 1 0 0 M3

CIRCUIT DE DECODARE

Fig. 4.5. Schema logic de afiare a patru caractere alfanumerice Funcionarea schemei este urmtoarea: cu Tact 2, prin intermediul divizorului cu 7, se genereaz adresa primei linii (A0 = A1 = A2 = 0). Cu Tact 1, prin intermediul divizorului cu 4, se genereaz pe rnd adresele (a0 = 0, a1 = 0), (a1 = 0, a0 = 1), (a1 = 1, a0 = 0) i (a1 = 1, a0 = 1), corespunztoare celor patru locaii din memoria RAM unde sunt stocate codurile ASCII ale celor patru caractere. Pentru (a1 = 0, a0 = 0), la ieirile memoriei RAM va aprea codul ASCII al caracterului M (4Dh), care aplicat generatorului de caractere mpreun cu biii A2 = 0, A1 = 0 i A0 = 0, va genera prima linie a matricei care descrie litera M. Circuitul de demultiplexare va dirija aceti cinci bii din prima linie a matricei care reprezint litera M ctre prima matrice de afiare (deoarece demultiplexorul, la rndul su, este adresat cu biii a1 = 0 i a0 = 0, ceea ce asigur selecia matricei de afiare notat cu M0). Apoi, cu adresa (a1 = 0, a0 = 1), se genereaz prima linie a literei B care va fi dirijat ctre matricea M1 etc. Dup ce s-au afiat liniile unu n toate cele patru matrice, se va modifica adresa A2 = 0, A1 = 0 i A0 = 1 prin Tact 2 i, printr-un proces similar, se vor afia liniile doi ale caracterelor. Dac procesul de rescriere a celor patru matrice se face cu o caden de minim 50 de ori pe secund, ochiul va percepe secvena MBFD ca fiind afiat continuu pe panoul de afiare.

4.2. Afior elementar cu cristale lichide


Cristalele lichide au fost descoperite n 1888 de Friedrich Reinitzer studiind trecerea substanelor numite benzoat de colesteril n stare lichid. Ele sunt substane care prezint o anizotropie a proprietilor i a cror stare de echilibru se numete stare mezomorf (o stare ntre cea lichid i cea solid).

Lumina care trece prin cristalele lichide urmeaz alinierea moleculelor o proprietate a strii solide. Aplicarea unui cmp electric sau magnetic modific alinierea cristalelor lichide o proprietate a strii lichide. Exist dou tipuri de cristale lichide i anume: nematice i colesterice. Cristalele lichide nematice devin opace sub efectul unui cmp electric sau magnetic pe cnd cele colesterice i schimb culoarea sub efectul acelorai cmpuri. Afioarele cu cristale lichide sunt pasive, de tipul TN (Twisted Nematic), i se bazeaz pe dirijarea unei lumini de fond, de culoare alb, printr-un strat de cristal lichid. Alinierea moleculelor unui cristal lichid se poate face cu ajutorul unor suprafee prevzute cu caneluri microscopice (canelurile paralele implic i alinierea paralel a moleculelor). Pentru a realiza un element de afiare (de exemplu un punct din matricea prezentat n Fig. 4.1), cristalul lichid se dispune ntre dou plci transparente prevzute cu caneluri microscopice. Canelurile plcii superioare sunt orientate perpendicular pe canelurile plcii inferioare. Rezult c moleculele de pe cele dou plci vor avea axa longitudinal rotit cu 90 iar moleculele aflate ntr-o poziie intermediar ntre cele dou plci vor fi rsucite proporional cu poziia pe care o ocup. Lumina polarizat are proprietatea de a urmri alinierea moleculelor. n consecin, dac introducem o lumin polarizat pe partea superioar a elementului, avnd direcia de polarizare n direcia canelurilor plcii superioare, la trecerea prin stratul de cristal lichid direcia de polarizare a luminii se va roti, conform rotirii alinierii moleculelor, i va ajunge n partea de jos a elementului de afiare avnd direcia de polarizare rotit cu 90 (vezi Fig. 4.6). Avnd n vedere cele prezentate mai sus, putem realiza un element de afiare dup structura prezentat n Fig. 4.7.

Fig. 4.6. Trecerea luminii polarizate printr-un element de afiare cu cristal lichid

Fig. 4.7. Element de afiare cu cristal lichid: a) fr b) cu tensiune aplicat ntre plci

Structura este iluminat cu lumin alb i pentru a obine o lumin polarizat sunt prevzute dou filtre de polarizare, unul n partea superioar, cel de-al doilea n partea inferioar a structurii, avnd direcii de polarizare perpendiculare. ntre cele dou filtre de polarizare, este dispus cristalul lichid delimitat la rndul lui de dou plci transparente prevzute cu caneluri microscopice paralele. Canelurile paralele de pe placa transparent de jos sunt orientate perpendicular fa de cele de pe placa de sus. 5

Celula de afiare funcioneaz astfel: n lipsa unui cmp electric sau magnetic (Fig. 4.7.a), lumina polarizat, obinut la ieirea filtrului de polarizare aflat n zona superioar a celulei, intr n stratul de cristal lichid, va urma orientarea moleculelor, i, n consecin, va iei din stratul de cristal lichid cu o rotire de 90 a direciei de polarizare i va putea trece prin cel de-al doilea filtru de polarizare amplasat n parte inferioar a structurii. n cazul aplicrii unei tensiuni (Fig. 4.7.b), moleculele cristalului lichid se vor orienta n direcia cmpului electric aplicat. n consecin lumina polarizat care intr n stratul de cristal lichid nu i va mai roti direcia de polarizare i va fi blocat de filtrul aflat n parte inferioar a structurii.

n concluzie, dac afiorul este iluminat cu o surs de lumin alb, zonele afiajului asupra crora nu se aplic tensiune vor aprea luminoase, iar zonele asupra crora se aplic o tensiune electric vor aprea ntunecate.

4.3. Modul de afiare cu cristale lichide


Unul dintre cele mai frecvente dispozitive pentru a cror comand este utilizat microcontrolerul este afiorul cu cristale lichide (LCD). Sunt cunoscute mai multe tipuri de LCDuri. n funcie de modul de reprezentare al valorilor care se afieaz, acestea pot fi: numerice, alfanumerice i grafice. n cadrul acestei lecii ne vom ocupa de controlul i comanda modulelor de afiare cu cristale lichide a caracterelor alfanumerice. Schema bloc general a unui astfel de modul este prezentat n Fig. 4.8.

Fig. 4.8. Schema bloc general a unui modul LCD Schema se compune din urmtoarele blocuri componente: Panoul de afiare (LCD PANEL) se va caracteriza prin urmtorii parametri: culoarea fondului i a caracterelor care se afieaz, iar n cazul afioarelor de tip alfanumeric, prin numrul caracterelor afiabile pe o linie precum i prin numrul de linii afiate. Controlerul de comand (LCD Controller) poate fi circuitul integrat HD44780 sau unul echivalent cu acesta (KS0066, KS0070, SED1278 etc.) i este componenta de baz a unui modul LCD, deoarece majoritatea performanelor display-ului sunt determinate de structura lui intern. Rolul circuitului este de a primi date de la o surs extern i de a comunica direct cu afiorul cu cristale lichide (LCD PANEL) pentru afiarea datelor

respective. Comunicaia cu procesorul se face prin trei linii de comand/control (E, R/ W , RS) i 4 sau 8 linii bidirecionale pentru date (DB0 DB7). Liniile VDD i VSS sunt pentru alimentarea modulului iar v0 pentru setarea/reglarea contrastului de afiare. Un singur controller HD44780 poate comanda afiarea a 8 caractere pe linie sau a cte 8 caractere pe dou linii. Extensia afirii la 1 (linie) x 16 (caractere) respectiv 2 x 16 sau chiar mai mult (1x20, 1x40 respectiv 2 x 24, 2 x 40, 4 x 16, 4 x 20, 4 x 24, 4 x 40), se poate obine prin utilizarea unuia sau mai multor module de extindere (blocul EXPANSION CHIP(S) din Fig. 4.8), cum este de exemplu HD44100, care poate mri capacitatea de afiare la 2 x 16, ca n cazul modulului de afiare LM016L.

4.3.1.

Controlerul de comand HD44780

Pentru realizarea funciilor specifice controlului i comenzii afiorului cu cristale lichide, circuitul HD44780 are o structur hardware (vezi Fig. 4.9) care-i asigur urmtoarele caracteristici: poate fi configurat s lucreze cu procesor de 4 sau de 8 bii; poate comanda singur un afior cu cristale lichide de pn la dou linii a cte opt caractere fiecare; poate fi extins pentru comanda a pn la 80 de caractere; are oscilator intern cu rezisten extern. Schema bloc n Fig. 4.9 este prezentat schema bloc a controlerului HD44780. Componentele de baz ale circuitului sunt urmtoarele: Dou registre de 8 bii, unul pentru stocarea temporar a instruciunilor IR (Instruction Register), cellalt pentru stocarea temporal a datelor care se afieaz DR (Data Register). Memorie de date (Display Data RAM DDRAM), de 80 caractere, care conine codurile caracterelor care se afieaz pe ecranul LCD. Generator de caractere predefinite (Character Generator ROM CGROM) care conine setul de caractere alfanumerice definite de fabricant (ele nu pot fi modificate de ctre utilizator). Capacitatea memoriei CGROM variaz, n funcie de tipul de controler. Pentru controlerul HD44780, memoria CGROM are o capacitate de 9.920 bii pentru un total de 240 caractere predefinite, i anume 208 caractere pe matrice de 5 x 7 puncte i 32 caractere suplimentare pe matrice de 5 x 10 puncte. Generator de caractere definite de utilizator (Character Generator RAM CGRAM), este memoria n care se rescriu abloane de caractere de ctre utilizator. Acestea se vor terge n lipsa alimentrii. Are o capacitate de 64 x 8 bii i pot fi scrise n aceast memorie 8 caractere de 5x7 puncte sau 4 caractere de 5x10 puncte. Numrtor de adres (Address Counter AC), un numrtor care aloc adrese att memoriei DDRAM ct i memoriei CGRAM. Dup scrierea n i citirea din aceste memorii, AC este incrementat, respectiv decrementat, cu 1. Controlerul HD44780 are implementate, sau permite crearea, unui numr mare de funcii de comand i control a afirii, care sunt executate prin instruciuni de baz, ca de exemplu: tergerea afiajului (Display clear), iniializarea cursorului (Cursor home), validarea sau invalidarea afirii (Display on/off), afiarea cu clipirea caracterelor (Display character blink), deplasarea cursorului (Cursor shift), deplasarea afiajului (Display shift). 7

Fig. 4.9. Schema bloc a circuitului HD44780 Circuitul se alimenteaz cu o tensiune cuprins ntre 2,7 V i 5,5 V i este resetat la punerea sub tensiune. Conexiuni externe Aa cum rezult din schema bloc a circuitului HD44780, acesta are mai multe linii de intrare/ieire pentru comunicaia cu exteriorul, i anume: 3 linii de control (E, RS, R/ W ) i un bus de date de 8 linii (DB0, DB1, ..., DB7) pentru comunicaia cu o surs extern de date (de exemplu, un microprocesor sau un sistem de dezvoltare cu microcontroler); 4 linii (CL1, CL2, D, M) de comand i control al circuitului de extensie;

16 linii (COM1 COM16) i nc 40 (SEG1 SEG40) pentru afiarea caracterelor (vezi exemplificrile de afiare a caracterelor n matrice de 5 x 7 i 5 x 10 puncte, cu i fr cursor, din Fig. 4.10); 2 linii pentru tact, OSC1 pentru cuplarea unui generator de tact extern, respectiv OSC2 pentru conectarea unei rezistene externe cnd se lucreaz cu oscilatorul propriu; 7 linii (VCC, GND, V1 V5) pentru legarea la diferite surse de tensiune de alimentare. n continuare sunt descrise doar semnalele de comand i control la interfaa cu sursa extern de date (microcontrolerul), a cror aciune trebuie bine cunoscut pentru o corect programare a circuitului, respectiv a modulului LCD. RS (Register Select) Pe cele 8 linii de intrare/ieire de date (DB0 DB7) circul dou tipuri de informaie: instruciuni (sau comenzi) de la un procesor extern la controlerul LCD i date (mesajul propriuzis) care trebuie afiate pe display. Bitul RS selecteaz unul din aceste dou tipuri de informaie care se afl la un moment dat pe bus-ul de date, astfel: dac RS = 0, informaia de pe bus-ul de date trebuie tratat ca instruciune (de exemplu, Clear Display, Cursor on etc.) i va fi depus n registrul de instruciuni (IR); dac RS = 1, datele care se transmit pe bus sunt de tip text i fac parte din mesajul care trebuie afiat; ele vor fi depuse n registrul de date (DR) i vor fi procesate corespunztor pentru afiare pe ecran. E (Enable) Activeaz trimiterea datelor ctre modulul LCD. Pentru a asigura transferul datelor (mesaj care trebuie afiat sau comenzi) ctre LCD, trebuie ntreprinse prin program, n mod succesiv, urmtoarele aciuni: Se reseteaz E (E = 0) pe toat durata de timp necesar configurrii celorlalte dou linii de control (RS, R/ W ) i/sau punerea datelor supuse transferului pe bus-ul de date al modulului. Se seteaz E (E = 1) i se ateapt timpul necesar efecturii transferului. Acest timp difer n funcie de tipul LCD-ului i de productor (este dat n foaia de catalog). Datorit vitezelor diferite de execuie a operaiilor de ctre procesorul exterior i de ctre controlerul modulului LCD, trebuie avute n vedere introducerea unor temporizri specifice pentru a asigura timpul necesar execuiei comenzilor de ctre modulul LCD. Se reseteaz E (E = 0) dup ncheierea transferului. R/ W (Read/Write) Selecteaz tipul de operaie care se execut cu datele de pe bus la un moment dat: cnd R/ W = 0, informaia (instruciune sau mesaj) urmeaz s fie scris n registrele modulului LCD; cnd R/ W = 1, operaia care se execut este de citire de ctre procesorul extern a unor informaii furnizate de controlerul LCD; n setul de instruciuni al controlerului LCD, exist o singur instruciune (Get LCD Status) care reprezint o comand de citire, toate celelalte sunt de scriere, aa nct R/ W va fi aproape ntotdeauna pe 0.

4.3.2.

Modulul de afiare LCD

Pentru detalii legate de modulul de afiare LCD i a modului de utilizare al acestuia, se recomand consultarea foii de catalog a controlerului HD 44780 care se gsete n fiierul LAB PICDEM 2 Plus\Datasheets\HD44780 2x16 LCD.

a)

b)

c) Fig. 4.10. Ilustrarea afirii caracterelor: a) pe o linie, 8 caractere n matrice de 5 x 7; b) pe o linie, 8 caractere n matrice de 5 x 10 puncte; c) pe dou linii, cte 8 caractere pe linie, n matrice de 5 x 7 puncte.

10

4.4. Desfurarea leciei


ACTIVITATEA 4.1 COMANDA UNUI AFIOR LCD N LIMBAJ DE ASAMBLARE
Reamintim ca modul de pornire a sistemului de dezvoltare este foarte important pentru corecta funcionare a sa. Mai ales la prima utilizare, paii trebuie parcuri ntocmai, altfel exist riscul ca sistemul s nu funcioneze de loc. Prima activitate va ilustra, folosind limbajul de asamblare, iniializarea afiorului cu cristale lichide de pe placa de demonstraie PICDEM 2 Plus i scrierea unor mesaje simple pe cele dou linii ale sale. 1.1. Pornii sistemul de dezvoltare urmrind paii urmtori: Conectai modulul MPLAB ICD 2 la o intrare USB a PC-ului folosind cablul USB. Ateptai cteva secunde pentru ncrcarea driver-ului de ctre sistemul de operare. Conectai alimentatorul la mufa de alimentare a MPLAB ICD 2. Conectai dup alte cteva secunde placa de demonstraie PICDEM 2 Plus la MPLAB ICD 2 folosind cablul ICD. Lansai programul MPLAB IDE dac nu este deja pornit. Verificai c LED-ul Power de pe placa PICDEM 2 Plus s-a aprins. 1.2. tergei coninutul microcontrolerului de pe placa de demonstraie astfel: Selectai dispozitivul de depanare cu comanda Debugger > Select Tool > MPLAB ICD 2. Acesta trebuie s se conecteze n mod normal automat. Dac nu se realizeaz acest lucru, executai manual conectarea dispozitivului de programare cu comanda Programmer > Connect. tergei coninutul microcontrolerului cu comanda Debugger > Erase Flash Device. Dac toate operaiile anterioare au fost executate corect, n fereastra Output tab-ul MPLAB ICD 2 nu trebuie s apar niciun mesaj de eroare sau avertisment. 1.3. Construii proiectul programului care ilustreaz comanda unui afior cu cristale lichide n limbaj de asamblare parcurgnd urmtorii pai: Creai un director pentru noul proiect, de exemplu My Projects\LCD_ASM. Copiai n aceast nou locaie, din directorul LAB PICDEM 2 Plus\CDsel PICDEMO 2 Plus\PICDEM_2_Plus\pic18, fiierele: 18f4520.lkr, p18lcd.asm i p18math.asm. Lansai din MPLAB IDE vrjitorul de creare a unui nou proiect (Project > Project Wizard) Dai un click pe Next pentru a continua. n pasul 1 selectai pentru Device: PIC18F4520. Continuai cu Next. n pasul 2 selectai pentru Active Toolsuite: Microchip MPASM Toolsuite i bifai csua Store tool locations in project. Continuai cu Next. n pasul 3 selectai la Create New Project File locaia aleas i numele proiectului folosind butonul Browse, de exemplu My Documents\My Project\LCD_ASM\LCD. Continuai cu Next. n pasul 4 adugai la proiect fiierele copiate anterior n directorul proiectului. Pentru aceasta, selectai toate fiierle dorite din directorul proiectului, innd tasta Ctrl apsat i dnd cte un click pe fiecare fiier, i apoi apsai butonul Add>>. Continuai cu Next. Terminai crearea noului proiect cu un click pe butonul Finish i comanda Project > Save Project pentru a salva proiectul nou creat. Creai un nou fiier surs cu comanda File > New (Ctrl + N). n fereastra care apare editai urmtorul program n limbaj de asamblare care v-a asigura afiarea interactiv a unor mesaje text pe afiorul LCD:

11

;PROGRAMUL LCD - utilizarea porturilor pentru comanda unui afisor LCD list p=18f4520 ;seteaza dispozitivul target #include p18f4520.inc ;defineste dispozitivul target CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG CONFIG #define #define #define #define OSC = HS FCMEN = OFF IESO = OFF PWRT = OFF BOREN = OFF WDT = OFF MCLRE = ON PBADEN = OFF LVP = OFF XINST = OFF DEBUG = ON scroll_dir scroll select_dir select

;OFF/ON pentru modul Depanare/Programare

;ON/OFF pentru modul Depanare/Programare TRISA,4 PORTA,4 TRISB,0 PORTB,0

;Push-button RA4 pe PCB ;Push-button RB0 on PCB

EXTERN LCDInit, temp_wr, d_write, i_write, LCDLine_1, LCDLine_2 EXTERN AARGB0, AARGB1, BARGB0 variables ptr_pos ptr_count temp_1 temp_2 temp_3 UDATA RES 1 RES 1 RES 1 RES 1 RES 1

STARTUP CODE 0 NOP goto start NOP NOP NOP PROG1 CODE ;table for standard code ptr: ;0 ;16 ;32 ;48 ;64

stan_table ; data data data data data start

"XXXXXXXXXXXXXXXX" " Apasati RA4 " "----------------" " Lab. PICDEM 2+ " " Apasati RB0 " " "

call LCDInit movlw movwf movlw movwf movlw movwf movlw movwf bsf bsf B'10100100' TXSTA .25 SPBRG B'10010000' RCSTA 0x05 T2CON TRISA,4 TRISB,0 ;initializare USART ;8-bit, Async, High Speed ;9.6kbaud @ 4MHz

;postscalare 1:1, prescalare 4, Timer2 ON

;seteaza RA4 ca Input (switch S2) ;seteaza RB0 ca Input (switch S3)

12

;******************************************************************** ;**** COD STANDARD UTILIZATOR *************************************** ;******************************************************************** intro movlw .0 ;trimite "Apasati RA4" la LCD movwf ptr_pos call stan_char_1 movlw .64 ;trimite " " la LCD movwf ptr_pos call stan_char_2 btfsc bra movlw movwf call call movlw movwf call call call call movlw movwf call call movlw movwf call btfsc bra goto scroll $-2 .16 ptr_pos stan_char_1 delay_1s .16 ptr_pos stan_char_2 delay_1s delay_1s delay_1s .32 ptr_pos stan_char_1 delay_1s .48 ptr_pos stan_char_2 select $-2 intro ;asteapta apasarea lui RA4

;trimite "----------------" la LCD

;intarziere pentru vizualizare ;trimite "----------------" la LCD

;intarziere pentru vizualizare

;trimite " Lab. PICDEM 2+ " la LCD

;intarziere pentru vizualizare ;trimite " Apasati RB0 " la LCD

;asteapta apasarea lui RB0

;******************************************************************** ;**** RUTINE ******************************************************** ;******************************************************************** ;---- Cod Standard, Plasare caractere pe linia 1 -------------------stan_char_1 call LCDLine_1 ;muta cursorul pe linia 1 movlw .16 ;16 char = 1-line plina a LCD movwf ptr_count movlw UPPER stan_table movwf TBLPTRU movlw HIGH stan_table movwf TBLPTRH movlw LOW stan_table movwf TBLPTRL movf ptr_pos,W addwf TBLPTRL,F clrf WREG addwfc TBLPTRH,F addwfc TBLPTRU,F stan_next_char_1 tblrd *+ movff TABLAT,temp_wr call d_write ;trimite caracterul la LCD decfsz ptr_count,F ;muta pointerul la caracterul urmator bra stan_next_char_1

13

movlw movwf btfss goto movlw movwf btfss goto return

"\n" TXREG TXSTA,TRMT $-2 "\r" TXREG TXSTA,TRMT $-2

;linie noua ;muta data in TXREG ;asteapta trimiterea caracterului ;inceput de rand ;muta data in TXREG ;asteapta trimiterea caracterului

;---- Cod Standard, Plasare caractere pe linia 2 -------------------stan_char_2 call LCDLine_2 ;muta cursorul pe linia 2 movlw .16 ;16 char = 1-line plina a LCD movwf ptr_count movlw UPPER stan_table movwf TBLPTRU movlw HIGH stan_table movwf TBLPTRH movlw LOW stan_table movwf TBLPTRL movf ptr_pos,W addwf TBLPTRL,F clrf WREG addwfc TBLPTRH,F addwfc TBLPTRU,F stan_next_char_2 tblrd *+ movff TABLAT,temp_wr call d_write ;trimite caracterul la LCD decfsz ptr_count,F ;muta pointerul la caracterul urmator bra stan_next_char_2 movlw movwf btfss goto movlw movwf btfss goto return "\n" TXREG TXSTA,TRMT $-2 "\r" TXREG TXSTA,TRMT $-2 ;linie noua ;muta data in TXREG ;asteapta trimiterea caracterului ;inceput de rand ;muta data in TXREG ;asteapta trimiterea caracterului

;---- Intarziere 1s ------------------------------------------------delay_1s movlw 0xFF movwf temp_1 movwf temp_2 movlw 0x05 movwf temp_3 d1l1 decfsz temp_1,F bra d1l1 decfsz temp_2,F bra d1l1 decfsz temp_3,F bra d1l1 return

end

14

Salvai fiierul cu numele LCD.ASM n directorul proiectului My Projects\LCD_ASM cu comanda File > Save. nchidei fereastra fiierului surs. Adugai n proiect fiierul creat, editat i salvat anterior, cu comanda Project > Add Files to Project. Verificai c n Project > Build Configuration este bifat opiunea Debug pentru a putea executa programul n modul depanare. Construii ntregul proiect cu comanda Project > Build All. Dac apar unele mesaje de avertizare, selectai butonul corespunztor pentru ca MPLAB IDE s fac singur setrile necesare pentru a putea continua. Putei modifica biii de configurare necesari pentru a evita n viitor aceste avertismente n fiierul surs n poriunea de configurare (liniile de program CONFIG). Urmrii mesajele afiate n fereastra Output tab-ul Build ca s nu apar erori i ultimul mesaj s fie BUILD SUCCEEDED. n cazul apariiei unor erori n timpul construirii ntregului proiect, acestea vor fi afiate n fereastra Output tab-ul Build prin menionarea tipului erorii i a liniei program n care aceasta a aprut. Dup corectarea fiierului surs, va trebui s reconstruii proiectul i s corectai, dac este cazul, n mod asemntor, i restul erorilor aprute, pn la obinerea mesajului BUILD SUCCEEDED. 1.4. Programai microcontrolerul i verificai funcionarea programului LCD, pe care tocmai l-ai construit, astfel: Programai microcontrolerul folosind comanda Debugger > Program. Dac apar unele avertismente, selectai butonul corespunztor pentru a putea continua. Lansai n execuie programul cu Debugger > Run. La pornirea lui, pe primul rnd al LCD-ului trebuie s apar mesajul Apasati RA4. Dup apsarea lui RA4, cele dou rnduri ale afiorului vor fi umplute succesiv, la interval de o secund, cu caracterul -. Dup alte 3 secunde, pe LCD vor apare la interval de o secund mesajele Lab. PICDEM 2+ pe primul rnd, respectiv Apasati RB0 pe cel de-al doilea rnd. Apsarea lui RB0 determin reluarea programului de la nceput. Selectai Debugger > Halt pentru a opri execuia programului. Putei relua execuia programului cu comanda Run. Pentru a relua de la nceput execuia programului, trebuie ca nainte de Run s resetai procesorul cu comanda Debuger > Reset > Processor Reset (F6). 1.5. Reverificai funcionarea programului LCD, incluznd de data aceasta i facilitile de comunicare serial, astfel: Conectai PC-ul la conectorul J1 de pe placa demonstrativ (conectorul DB9 pentru portul serial activ RS-232) folosind fie un cablu serial direct de date (livrat odat cu kit-ul de dezvoltare), fie un cablu adaptor/convertor USB RS-232 (ca cel existent n laborator). Determinai din Device Manager categoria Ports (COM & LPT) care port COM (COMx) este asociat cu portul utilizat pentru conectarea cablului/adaptorului la PC. Deschidei programul Hyper Terminal cu Start > All Programs > Accessories > Communications > HyperTerminal > Com2PicDem dac ai salvat anterior o sesiune a conexiunii seriale (dac nu, urmai punctul 3.3 de la Activitatea 2.3). Lansai n execuie programul. Mesajele care apar pe LCD Fig. 4.11. Mesaje pe terminal trebuie s fie vizualizate i n fereastra terminalului. la punctul 1.7

15

Dac mesajele nu apar, deconectai terminalul (Call > Disconnect) i verificai setrile (ComX, 9600 baud, 8 bii de date, fr paritate, un bit de stop i fr controlul fluxului de date) folosind File > Properties > Connect to > Configure. Reconectai terminalul (Call > Call) i verificai din nou funcionarea programului LCD. Oprii execuia programului. 1.6. Modificati programul anterior astfel nct alte mesaje s fie vizibile pe LCD i n fereastra terminalului, iar caracterele afiate s se succead cu o ntrziere de 0,4 secunde ntre ele: Deschidei fiierul surs LCD.ASM pentru editare. Identificai poriunile de cod care definesc mesajele i care le afieaz caracter cu caracter. Modificai mesajele i ntroducei o ntrziere de o 0,4 secunde la afiarea caracterelor care urmeaz dup primul pe fiecare linie LCD. Reconstruii proiectul modificat. Reprogramai microcontrolerul. Executai programul, verificai funcionarea corect a sa i apoi oprii-l din execuie. 1.7. Modificati programul anterior astfel nct, la lansarea i relansarea n execuie a sa, s se trimit pe portul serial mesajul START (vezi Fig. 4.11).

ACTIVITATEA 4.2 IMPLEMENTAREA UNUI JOC SIMPLU DE DEXTERITATE


Proiectai i implementai n limbaj de asamblare un joc simplu de dexteritate avnd urmtoarele reguli: La pornire, primul rnd este umplut cu caracterul - iar pe al doilea rnd va fi afiat mesajul S2-START S3-STOP. Dup apsarea ntreruptorului S2, un simbol > pornete s defileze dinspre stnga spre dreapta rndului unu al LCD-ului, simultan cu un simbol < care pornete s defileze dinspre dreapta spre stnga pe acelai rnd al LCD-ului. Micarea se repet ciclic pn cnd juctorul apas butonul S3 cnd miscarea caracterelor pe ecran se oprete. Scopul juctorului este s opreasc defilarea atunci cnd cele dou simboluri ajung alturat (><). Un nou joc ncepe prin apsarea butonului S2. n acelai timp cu afiarea defilrii pe ecran, pe terminalul conectat la portul serial al plcii demonstrative PICDEM 2 Plus vor apare mesajele prezentate n Fig. 4.12. Rndurile 3 15 repetate ciclic realizeaz animaia dorit Fig. 4.12. Mesaje pe terminal pentru (defilarea celor dou caractere n direcii opuse). jocul de la Activitatea 4.2 2.1. Proiectai i desenai schema logic a unui program care s respecte regulile prezentate anterior. 2.2. tergei coninutul microcontrolerului de pe placa de demonstraie i nchidei proiectul anterior. 2.3. Creai proiectul programului care implementeaz jocul proiectat la punctul 2.1 i salvati-l n My Projects\JOC_ASM cu numele JOC. 2.4. Creai, editai i adugai la proiect fiierul Joc.ASM n care implementai jocul proiectat. 2.5. Construii ntregul proiect. Programai microcontrolerul. Executai programul, verificai faptul c funcionarea programului este ceea pe care ai dorit-o cnd ai proiectat jocul. Oprii execuia programului.

16

ACTIVITATEA 4.3 COMANDA UNUI AFIOR CU CRISTALE LICHIDE N LIMBAJUL C


Aceast activitate va ilustra, folosind limbajul C, iniializarea afiorului LCD de pe placa de demonstraie PICDEM 2 Plus i scrierea unor mesaje simple pe cele dou linii ale sale. 3.1. tergei coninutul microcontrolerului de pe placa de demonstraie. 3.2. Construii proiectul programului care ilustreaz comanda unui afior cu cristale lichide n limbajul C parcurgnd urmtorii pai: nchidei proiectul anterior cu comanda Project > Close. Creai un director pentru noul proiect, de exemplu My Projects\LCD_C. Copiai n aceast locaie, din directorul LAB PICDEM 2 Plus\Lab Files\04, fiierul lcdinit.C. Verificai c n directorul C:\MCC18\h exist fiierul xlcdGre.h, varianta fiierului xlcd.h modificat pentru configuraia LCD-ului de pe placa demonstrativ PICDEM 2 Plus. Dac el nu exist, copiai-l din directorul LAB PICDEM 2 Plus\Lab Files\04. Din fereastra programului MPLAB IDE lansai vrjitorul de creare a unui nou proiect cu comanda: Project > Project Wizard. Dai un click pe Next pentru a continua. n pasul 1 selectai pentru Device: PIC18F4520. Continuai cu Next. n pasul 2 selectai pentru Active Toolsuite: MicrochipC18 Toolsuite i bifai csua Store tool locations in project. Continuai cu Next. n pasul 3 selectai la Create New Project File locaia aleas i numele proiectului folosind butonul Browse, de exemplu My Documents\My Project\LCD_C\LCD. Continuai cu Next. n pasul 4 adugai la proiect fiierul LCDinit.C copiat anterior n directorul proiectului. Continuai cu Next. Terminai crearea noului proiect cu un click pe butonul Finish i comanda Project > Save Project pentru a salva proiectul nou creat. Creai un nou fiier surs. n fereastra care apare editai urmtorul program n C:
//PROGRAMUL LCD - utilizarea porturilor pentru comanda unui afisor LCD #include <p18f4520.h> #include <xlcdGre.h> #include <delays.h> // configurare #pragma config OSC = HS /* Setare mod High Speed Crystal/Resonator (Domeniu: 4-25 MHz) */ #pragma config PWRT = OFF //OFF/ON pentru modul Debugger/Programmer #pragma config PBADEN = ON /* Setare PORTB<4:0> ca INTRARI ANALOGICE la RESET */ #pragma config WDT = OFF, WDTPS =1 /* Watchdog Timer */ #pragma config LVP = OFF /* ICSP cu o sursa de alimentare */ #pragma config DEBUG = OFF #pragma config CP0 = OFF,CP1 = OFF,CP2 = OFF,CP3 = OFF,CPB = OFF,CPD = OFF /* Protectia codului: Bitii CPn invalideaza citirea/scrierea din exterior */ #pragma config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF,WRT3 = OFF, WRTB = OFF,WRTC = OFF,WRTD = OFF /* Protectie la sciere */ #pragma config EBTR0 = OFF,EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF,EBTRB = OFF /* External Block Table Read:

17

Bitii EBTRn controleaza citirile din tabel */ #define SWITCH PORTAbits.RA4 #define SELECT PORTBbits.RB0 void clear_lcd(int line) { char ln; int x; if(line == 2) ln=0xC0; //adresa ptr. primul caracter rand 2 else ln=0x80; //adresa ptr. primul caracter rand 1 while(BusyXLCD()); //asteapta ca LCD sa nu fie ocupat SetDDRamAddr(ln); //seteaza adresa memoriei LCD for (x=0;x<16;x++) //scrie de 16 ori in LCD { WriteDataXLCD('-'); } return; } void main(void) { ADCON1=0x0F; PORTB=0b00000000; PORTA=0b00000000; TRISB=0b00000001; TRISA=0b00010000;

//0x0f=00001111 //sterge PORTB //sterge PORTA //Pinul RB0-S3 al PORTB este INTRARE //Pinul RA4-S2 al PORTA este INTRARE, // restul sunt IESIRI ???? se pune functia init_lcd din lcd.c OpenXLCD(FOUR_BIT & LINES_5X7); //Configurare LCD Delay1KTCYx(5); //Intirziere 5 ms WriteCmdXLCD(DON&CURSOR_OFF&BLINK_OFF); //Initializare LCD ???? while(1) { SetDDRamAddr(0x80); //inceputul linei 1 WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD('A'); WriteDataXLCD('p'); WriteDataXLCD('a'); WriteDataXLCD('s'); WriteDataXLCD('a'); WriteDataXLCD('t'); WriteDataXLCD('i'); WriteDataXLCD(' '); WriteDataXLCD('R'); WriteDataXLCD('A'); WriteDataXLCD('4'); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); SetDDRamAddr(0xC0); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); //inceputul linei 2

18

WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); while(SWITCH==1) {} clear_lcd(1); Delay10KTCYx(100); clear_lcd(2); Delay10KTCYx(100); Delay10KTCYx(100); Delay10KTCYx(100); SetDDRamAddr(0x80); WriteDataXLCD(' '); WriteDataXLCD('L'); WriteDataXLCD('a'); WriteDataXLCD('b'); WriteDataXLCD('.'); WriteDataXLCD(' '); WriteDataXLCD('P'); WriteDataXLCD('I'); WriteDataXLCD('C'); WriteDataXLCD('D'); WriteDataXLCD('E'); WriteDataXLCD('M'); WriteDataXLCD(' '); WriteDataXLCD('2'); WriteDataXLCD('+'); WriteDataXLCD(' '); SetDDRamAddr(0xC0); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD('A'); WriteDataXLCD('p'); WriteDataXLCD('a'); WriteDataXLCD('s'); WriteDataXLCD('a'); WriteDataXLCD('t'); WriteDataXLCD('i'); WriteDataXLCD(' '); WriteDataXLCD('R'); WriteDataXLCD('B'); WriteDataXLCD('0'); WriteDataXLCD(' '); WriteDataXLCD(' '); WriteDataXLCD(' '); while(BusyXLCD()); while(SELECT==1); }

//asteapta apasarea lui RA4

//intirziere 1s=100x10KTCY

//inceputul linei 1

//inceputul linei a 2-a

//asteapta ca LCD sa nu fie ocupat //asteapta apasarea lui RB0

Salvai fiierul cu numele LCD.C n directorul proiectului My Projects\LCD_C. Bifai n fereastra Save As caseta Add File To Project pentru a aduga automat fiierul n proiect. Dup salvare, nchidei fereastra fiierului surs. 19

Construii ntregul proiect. Urmrii mesajele afiate n fereastra Output tab-ul Build ca s nu apar erori i ultimul mesaj s fie BUILD SUCCEEDED. Dac apar erori, corectai-le n fiierul surs folosind tipul erorii i linia de program care a generat-o afiate n fereastra Output tab-ul Build. Dup corectarea fiierului surs, reconstruii proiectul. Repetai editarea fiierului surs i reconstruirea proiectului pn la obinerea mesajului BUILD SUCCEEDED. 3.3. Programai microcontrolerul i lansai n execuie programul LCD.C construit anterior. Verificai faptul c funcionarea programului este ceea la care v ateptai conform codului surs editat. 3.4. Modificai programul anterior astfel nct alte mesaje s fie generate pe LCD, iar caracterele afiate s se succead cu o ntrziere de 0,4 secunde ntre ele: Deschidei fiierul surs LCD.C pentru editare. Identificai poriunile de cod care definesc mesajele i care le afieaz caracter cu caracter. Modificai mesajele i ntroducei o ntrziere de o 0,4 secunde nainte de afiarea caracterelor care urmeaz dup primul pe fiecare linie LCD. Reconstruii proiectul modificat. Reprogramai microcontrolerul. Executai programul, verificai funcionarea corect a sa i apoi oprii-l din execuie.

ACTIVITATEA 4.4 COMANDA UNUI AFIOR CU CRISTALE LICHIDE N LIMBAJUL C FOLOSIND POINTERI
Gndii-v cum s-ar putea afia o linie de text pe panoul LCD folosind n limbajul C un pointer, fr s fie nevoie s scriei liter cu liter n LCD folosind instruciuni separate. Modificai programul de la punctul 3.2 Activitatea 4.3 folosind implementarea cu pointer. 4.1. Proiectai i desenai schema logic a unui program care s satisfac cerinele prezentate anterior. 4.2. tergei coninutul microcontrolerului de pe placa de demonstraie i nchidei proiectul anterior. 4.3. Creai proiectul programului care implementeaz algoritmul proiectat la punctul 4.1 i salvati-l n My Projects\Pointer_C cu numele POINTER. 4.4. Creai, editai i adugai la proiect fiierul Pointer.C n care implementai algoritmul proiectat. 4.5. Construii ntregul proiect. Programai microcontrolerul. Executai programul, verificai faptul c funcionarea programului este ceea impus n tema activitii. Oprii execuia programului.

4.5. Activiti propuse


1. Studiai foaia de catalog a controlerului HD 44780, folosit n cazul panoului LCD de pe plcile de dezvoltare PICDEM 2 Plus, pe care o gsii n fiierul LAB PICDEM 2 Plus\Datasheets\HD44780 2x16 LCD. Deducei funcionalitatea programului editat la punctul 1.3 i descriei-o folosind o schem logic. Imaginai-v un alt joc simplu de dexteritate bazat pe acionarea a dou butoane i afiarea de caractere ASCII pe LCD. Desenai organigrama care s descrie funcionarea jocului, implementai programul n limbaj de asamblare i verificai funcionarea programului. Implementai n limbaj de asamblare i apoi n limbaj C un zar electronic care s fie aruncat prin apsarea ntreruptorului S3 i s se opreasc, afind valoarea cuprins ntre 1 i 6, la apsarea lui S2.

2. 3.

4.

20

5.

Realizai un program care s afieze ciclic timp de cte 0,4 secunde toate caracterele predefinite n ROM-ul controlerului LCD pe primul rnd i valoarea codului n zecimal pe rndul doi. (Indicaie: folosii funcia itoa definit n stdlib.h pentru a converti valoarea numeric a codului ntr-un string)

4.6. ntrebri
1. 2. Semnalele Tact 1 i Tact 2 din Fig. 4.5 trebuie s fie sincronizate? Cum pot fi ele obinute din acelai semnal de tact local? Pentru funcionarea schemei din Fig. 4.5, aa cum este descris n paragraful 4.1.4, trebuie ca Tact 1 s varieze mai repede dect Tact 2. Cum se modific funcionarea schemei, respectiv modul de afiare a celor patru caractere, dac Tact 2 variaz mai repede dect Tact 1? Schimb acest lucru percepia privitorului? Desenai schema logic a unui circuit de afiare pentru opt caractere alfanumerice (similar cu circuitul din Fig. 4.5) folosind un singur tact local. Care este setul de caractere (codul ROM) inscris n ROM-ul controlerului HD 44780 din plcile de dezvoltare PICDEM 2 Plus utilizate (Indicaie: vezi pagina 17 i 18 din foaia de catalog a controlerului HD 44780 i utilizeaz Aplicaia propus 4 pentru vizualizarea caracterelor din ROM)? Ce avantaje i dezavantaje are modul de comunicare cu controlerul LCD pe 4 bii fa de cel pe 8 bii ?

3. 4.

5.

21