joi, 9 februarie 2012

Afisorul alfanumeric - LCD HD44780

Afisorul alfanumeric in baza controllerului LCD  HD44780, devenit standard pentru afisoarele de acest tip, este unul din cele mai utilizate dispozitive de iesire alfanumerice. Fiind limitat doar la reprezentarea textului monocrom este pe larg intalnit la copiatoare, fax, imprimante, si alte dispozitive de uz comun.




Afisorul are cateva configuratii standard: 8x1, 16x2, 20x2, 20x4, fiind capabil sa afiseze maxim 80 caractere. Pentru configuratii mai mari a afisorului, vizualizarea unui numar mai mare de 80 caractere, ca de exemplu afisorul 40x4, se va utiliza un chip aditional.
Cel mai des utilizat este afisorul cu configuratia 16x2, care poate fi usor gasit in magazinele de componente electronice. Este utilizat pe larg pentru constructia de prototipuri si in randurile amatorilor de aplicatii cu microcontrollere. Anume acest tip il vom lua ca exemplu pentru explicatiile lucrului cu afisorul alfanumeric.

Interfata afisorului prezentat aici este una paralela. Orice afisor interfatat paralel care se poate gasi in prezent va avea la baza un controller de tip Hitachi HD44780 sau unul compatibil cu acest cip.Ca regula afisorul are 14 pini de conexiune.


  • D0 - D7 -  Bus de date bidirectional.
  • R/W - determina scrierea sau citirea pentru afisor
  • RS - selectarea registrului pentru transfer. RS = 0 registrul de instructiuni este selectat, RS = 1 registrul de date este selectat. Cu acest bit se poate configura ca prin bus-ul de date sa se transfere o camanda sau un caracter.
  • E - Bit de activare al LCD. Cand E = 0, LCD nu este activ respectiv semnalale de pe D, RW si RS vor fi ignorate, Cand E = 1, Afisorul este activat si va procesa datele de pe ceilalti pini de interfatare. De mentionat ca scriere datele sunt aplicate pe frontul descrescator al semnalului E., iar la citire, datele vor fi valide odata cu frontul crescator si se vor pastra pana la urmatorul front descrescator.
  • Vo - Setarea contrastului pentru afisor.
  • Vdd si Vss -  pini de alimentare a Afisorului.

Conectare
Afisorul poate fi conectat in doua moduri, de 8 biti si de 4 biti ai sinei de date. In bodul pe 8 bitieste mai simplu transferul de date (nu este nevoie de a inregistra tetradele consecutiv), in cel de 4 biti, facem economie de pini.



Structura interna a controllerului HD44780
Interior afisorul are la baza un sistem de control care opereaza cu comenzile si memoria interna. Memoria interna este reprezentata de catre trei bancuri diferite DDRAM, CGRAM si CGROM.

DDRAM - Memoria pentru afisare. Inregistrarile in aceasta memorie vor putea fi vizibile la ecran. In asa mod, inregistrarea la adresa 0x00 valoarea 0x31, pe ecran va aparea un caracter, si anume cifra "1".
De mentionat este faptul ca memoria este cu mult mai mare decat regiune vizibila a afisorului. Ca regula memoria DDRAM contine 80 de locatii, a cate 40 pentru fiecare linie. cu adresele 0x00 .. 0x27 pentru primul rand si respectiv 0x40 .. 0x67 pentru randul doi.

Afisarea la ecran se face dupa prncipiul ferestrei mobile, si ca urmare, pentru afisorul 2x16 regiunea vizibila va cuprinde doar cate 16 adrese, din fiecare rand, pastrand acelasi deplasament pentru fiecare rand..


CGROM este memoria pentru generatorul de caractere. Atunci cand inscriem in DDRAM un byte, din CGROM se preia simbolul respectiv pentru codul caracterului reprezentat prin byteul inscris si se afiseaza pe LCD. Aceste simboluri nu pot fi modificate.


CGRAM este la fel o memorie pentru generatorul de caractere, doar ca aceasta memorie poate fi modificata. Spatiul de adrese al acestei memorii reprezinta spatiul pentru 8 caractere de la inceputul  memoriei CGROM. pentru fiecare simbol este rezervat a cate 8 byte, respectiv, memoria CGRAM va cuprinde 64 byte de la inceputul spatiului de adrese CGROM. 
Memoria CGRAM este utilizata pentru introducerea caracterelor utilizatorului. Un simbol va reprezenta un tablou de 5 x 8 puncte, respectiv pentru a inregistra un caracter este nevoie de a completa un asemenea tablou dupa cum urmeaza, priul rand al tabloului grafic,cel de sus, va corespunde cu primul byte al caracterului. de mentionat ca bitii 7..5 al byte-ului inregistrat nu sunt vizualizati.

Tabelul de comenzi

Instruction Code
RS
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
Clear display
0
0
0
0
0
0
0
0
0
1
Curata ecranul afisorului si returneaza cursorul la pozitia initiala. (addresa 0).
Cursor home
0
0
0
0
0
0
0
0
1
*
Returneaza cursorul la pozitia initiala (address 0). La fel si cu deplasamentul ferestrei de afisare. Continutul DDRAM ramane neschimbat.
Entry mode set
0
0
0
0
0
0
0
1
I/D
S
Seteaza directia deplasarii cursorului (I/D), activeaza deplasarea ferestrei de afisare (S). aceste setari sunt luate in consideratie in timpul operatiilor de citire/scriere.
Display On/Off control
0
0
0
0
0
0
1
D
C
B
Aprinde/Stinge ecranul (D),  Aprinde/Stinge cursorul (C) si activeaza/deactiveaza licarirea caracterului la pozitia cursorului (B).
Cursor/display shift
0
0
0
0
0
1
S/C
R/L
*
*
Deplasare cursor/deplasare ecran (S/C) in directia de deplasare (R/L). Continutul DDRAM ramane neschimbat. 
Function set
0
0
0
0
1
DL
N
F
*
*
Seteaza marimea interfetei (1-8bit/0-4bit) (DL), numarul de linii (N) si fontul (0 - 5x8 / 1 - 5x10) (F).
Set CGRAM address
0
0
0
1
CGRAM address
Seteaza adresa de citire/scriere pentru CGRAM.
Set DDRAM address
0
0
1
DDRAM address
Seteaza adresa de citire/scriere pentru DDRAM.
Read busy-flag and address counter
0
1
BF
CGRAM / DDRAM address
Citeste indicatorul Busy-flag (BF) care indica ca dispoziticul este ocupat cu o operatie interna. totodata citeste contorul de adresa curenta a  memorie CGRAM or DDRAM  (in dependenta de care a fost selectata cu o operatie precedenta).
Write to CGRAM or DDRAM
1
0
write data
Inscrie date in CGRAM or DDRAM.
Read from CGRAM or DDRAM
1
1
read data
Citeste date din CGRAM or DDRAM.






Modul de operare .cu controllerul LCD HD44780

Initializare Porturilor pentru MCU.
1. RS,RW,E - iesire
2. DB7.. DB0 - intrare.


Asteptarea dispozitivului, verificare BF
Inainte de a aplica o operatie fie de transfer de date fie o comanda este nevoie sa ne asiguram ca dispozitivul nu este ocupat cu vreo operatie precedenta. va trebui verificat daca indicatorul BF = 0, indicand ca dispozitivul este gata sa promeasca o comanda.
  1. Portul conectat la sina de date setat spre iesire cu pull-up activat. (DDR=0, PORT=1)
  2. RS = 0  (registru de comenzi)
  3. RW = 1 (citire)
  4. E=1 
  5. pauza de cateva tacturi
  6. E = 0 
  7. Citire port date. daca bitul 7 este setat ("1") se repeta operatia pana cand se va reseta.


Scriere comanda
  1. Asteptare dispozitiv
  2. RS = 0   (registru de comenzi)
  3. RW = 0 (scriere)
  4. E = 1
  5. Port date spre iesire
  6. Setarea pe port a codului comenzii.
  7. Pauza
  8. E = 0 (datele sunt transferate in dispozitiv pe frontul descrescator)
  9. Restabilire portului de date pe intrare


Scriere date
  1. Asteptare dispozitiv
  2. RS = 1   (registru de date)
  3. RW = 0 (scriere)
  4. E = 1
  5. Port date spre iesire
  6. Setarea pe port a datelor pentru transfer.
  7. Pauza
  8. E = 0 (datele sunt transferate in dispozitiv pe frontul descrescator)
  9. Restabilire portului de date pe intrare


Citire date
  1.  Asteptare dispozitiv
  2.  Portul conectat la sina de date setat spre iesire cu pull-up activat. (DDR=0, PORT=1)
  3.  RS = 1   (registru de date)
  4.  RW =1  (citire)
  5.  E = 1 (Datele sunt transferate din LCD pe frontul crescator)
  6.  Pauza
  7.  Citirea datelor de pe port
  8.  E = 0


Initializare Afisor
Inainte de utiliza afisorul se recomanda initializarea acestuia, fara de care o mare parte a afisoarelor pe baza de HD44780 nu vor putea functiona normal, unele realizari a afisoarelor de acest tip au aceasta initializare (bus pe 8 biti, curosr la pozitia 0) automat la pornire. Pentru a realiza initializarea este necesara aplicarea unui set de comenzi catre afisor.

  1. 00111000   -   Bus-ul de date pe 8 biti, afisare in 2 randuri.
  2. 00000001   -   Curatarea ecranului
  3. 00000110   -   Incrementarea adresei la fiecare acces, Ecranul nu se deplaseaza.


Afisarea unui caracter si deplasarea cursorului

  1. 00001100 - Aprinde ecran (D=1)
  2. 00000001 - Curatare ecran, Memoria DDRAM este selectata
  3. 00010100 - Deplasare cursor (S/C=0) la dreapta (R/L=1)
  4. 00110001 - Transfer in memeoria DDRAM (RS=1) a caracterului "1″, cod 0х31
Generarea unui caracter in memoria CGRAM
  1. 01001000   -   comanda de selectie a adresei 0x08 in memoria CGRAM adresa de inceput a caracterului cu codul 0x01  (RS=0)  , al doilea dupa num de ordine, amintim ca fiecare caracter ocupa 8 byte. 
  2. 00000001   -   transferul primului byte de date (RS=1)
  3. 0000001
  4. 00000100
  5. 00001000
  6. 00011111
  7. 00000010
  8. 00000100
  9. 00001000   -   Transferul ultimului byte de date.
  10. 10000000   -   Comanda de trecere la adresa 0x00 a memoriei DDRAM (RS=0)
  11. 00000001   -   Transferul codului de caracter 0x01 la adresa curenta (RS=1), codul caracterului fiind tocmai a celui generat mai sus.


Lucru in modul de tranfer pe 4 biti
Acest mod nu are nimic diferit fata de cel pe 8 biti, doar ca transferul se executa in doua selectii, a cate o tedrada pentru fiecare

Scriere:
  1. E=1
  2. Pauza
  3. Setam pe port tetrada superioara
  4. E=0
  5. Pauza
  6. Е=1
  7. Pauza
  8. Setam pe port tetrada inferioara
  9. Е=0

Citire

  1. E=1
  2. Pauza
  3. culegem din port tetrada superioara
  4. Е=0
  5. Pauza
  6. Е=1
  7. Pauza
  8. Culegem din port tetrada inferioara
  9. Е=0




Articolul reprezinta o sinteza inspirata din referintele:
http://en.wikipedia.org/wiki/Hitachi_HD44780_LCD_controller
http://easyelectronics.ru/avr-uchebnyj-kurs-podklyuchenie-k-avr-lcd-displeya-hd44780.html
http://www.geocities.com/dinceraydin/lcd/index.html
http://www.harrington.force9.co.uk/Projects/LCDModules/introduction_to_programming_lcd_.htm
http://www.dnatechindia.com/Tutorial/8051-Tutorial/Interfacing-LCD-to-8051.html