Extras din proiect
INTRODUCERE: Aceasta aplicatie arata cum sa interfatam un microcontroller PIC la un modul de afisaj cu cristale lichide Hitachi. Programul scris in limbajul de asamblare Parallax, afiseaza texte pe display, citeste starea display-ului, si creeaza caractere predefinite de catre utilizator.
Modulele LCD bazate pe controllerul Hitachi 44780 sunt ieftine si usor de gasit, avand un domeniu de la 8 la 80 de caractere. Cat timp o descriere completa a caracteristicilor si functiilor acestor LCD-uri nu este scopul acestei aplicatii, voi prezenta in continuare elementele principale.
Modulele LCD Hitachi, afiseaza setul de caractere ASCII standard si in plus, simboluri japoneze, grecesti precum si simboluri matematice. Se alimenteaza de la o sursa simpla de 5V cc si comunica cu o magistrala sau cu un controller prin 11 linii de intrare/iesire. Liniile de date sunt three-state; ele intra in starea de inalta impedanta cand LCD-ul nu e activat.
Cele trei linii de control, ‘controleaza’ LCD-ul. Linia de enable (E) determina daca LCD-ul este controlat sau recepteaza date de la alte dispozitive. Cand e dezactivat, LCD-ul ignora toate datele primite precum si semnalele de control. Cand e activat, LCD-ul verifica starea celorlalte doua linii de control si raspunde in consecinta. Linia de read/write (R/W) determina daca LCD-ul citeste biti de pe liniile de date, sau scrie biti pe acestea.
Register-select (R/S) determina daca LCD-ul interpreteaza daca datele sunt tratate ca instructiuni sau caractere. Tabela de adevar pentru liniile de control este urmatoarea:
E 0 LCD dezactivat
1 LCD activat
R/W 0 Scrie in LCD
1 Citeste din LCD
RS 0 Instructiuni
1 Caractere/bytes
Scrierea in LCD cere pasii principali urmatori. (Pentru citirea din LCD se urmareste aceeasi secventa, dar bitul R/W trebuie setat.)
- Resetarea bitului R/W
- Setarea sau resetarea corespunzatoare bitului RS
- Setarea bitului E (E=1)
- Resetarea bitului E (E=0)
Cand LCD-ul e alimentat, se autoreseteaza si asteapta instructiuni. Tipic, aceste instructiuni pornesc display-ul, initializeaza cursorul si seteaza display-ul pentru afisarea de la stanga spre dreapta.
Odata LCD-ul initializat, poate receptiona date sau instructiuni. Daca este receptionat un caracter, acesta este afisat pe ecran si cursorul este mutat cu o pozitie mai la dreapta. Cursorul marcheaza urmatoarea locatie la care un caracter va fi afisat. Procesarea interna a LCD-ului e similara. Un pointer la memorie determina unde va fi stocat urmatorul octet. Cand e receptat un nou octet, pointerul avanseaza cu o pozitie. Pentru scrierea in locatii secventiale, se face intai stabilirea adresei de start si apoi se face scrierea octet cu octet.
Caracterele sunt stocate in memoria RAM de display de date (DD). Independent de numarul de caractere vizibile pe display, corespunzatoare LCD-ul are 80 de octeti de DD RAM. Caracterele off-screen RAM pot fi facute vizibile prin derularea display-ului.
LCD-ul are 64 octeti de RAM pentru generatorul de caractere (CG). Datele din CG RAM determina hartile de biti a caracterelor corespunzatoare codurilor 0 pana la 7 (in cod ASCII normal acestea sunt codurile de control). Pentru a descarca harti de biti in LCD, prima oara se seteaza adresa CG RAM-ului in punctul de start dorit (de obicei 0), si apoi se scriu octetii in LCD. Pentru ca pointerul se incrementeaza cu fiecare scriere, nu trebuie retinute adresele specificate. In figura se exemplifica un model de definire. Programul listat arata cum sa se defineasca un caracter definit de utilizator:
Adresele in Harta de biti Date Datele
Character Generator ‘retw’
RAM
Inaintea scrierii in DD RAM dupa definirea caracterelor utilizator, programul trebuie sa seteze o adresa DD RAM. LCD citeste si scrie oricare bloc de RAM (DD sau CG) care a fost specificat intr-o instructiune de setare de adresa. Odata setata adresa in DD RAM, datele urmatoare vor afisa un caracter la locatia corespunzatoare de pe ecran.
Pana acum, am vorbit despre citirea si scriereain LCD ca si cum ar fi fost o memorie obisnuita. Dar nu este asa. Unui controller LCD ii iau 40 pana la 120 microsecunde pentru a executa o citire sau scriere. Pentru a evita ca PIC-ul sa astepte in cazul cel mai nefavorabil, o intarziere intre operatii, LCD-ul are o instructiune de 1 microsecunda care citeste counter-ul de adresa si un flag ocupat. Cand flagul ocupat e setat (1), LCD-ul nu poate scrie sau citi. Programul include o subrutina (blip_E) care asigura ca flagul ocupat e resetat (0) inaintea preluarii controlului LCD-ului.
Adresa returnata impreuna cu flagul ocupat este fie un pointer la DD fie la CG RAM, depinde de ultima adresa setata.
Figura urmatoare este de fapt o lista a instructiunilor LCD-ului pentru scrierea si citirea memoriei. Alte cateva instructiuni utile apar ca si constante la inceputul listingului programului
Preview document
Conținut arhivă zip
- Arhitectura si Organizarea Calculatoarelor.doc