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.
- 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.
- Portul conectat la sina de date setat spre iesire cu pull-up activat. (DDR=0, PORT=1)
- RS = 0 (registru de comenzi)
- RW = 1 (citire)
- E=1
- pauza de cateva tacturi
- E = 0
- Citire port date. daca bitul 7 este setat ("1") se repeta operatia pana cand se va reseta.
Scriere comanda
- Asteptare dispozitiv
- RS = 0 (registru de comenzi)
- RW = 0 (scriere)
- E = 1
- Port date spre iesire
- Setarea pe port a codului comenzii.
- Pauza
- E = 0 (datele sunt transferate in dispozitiv pe frontul descrescator)
- Restabilire portului de date pe intrare
Scriere date
- Asteptare dispozitiv
- RS = 1 (registru de date)
- RW = 0 (scriere)
- E = 1
- Port date spre iesire
- Setarea pe port a datelor pentru transfer.
- Pauza
- E = 0 (datele sunt transferate in dispozitiv pe frontul descrescator)
- Restabilire portului de date pe intrare
Citire date
- Asteptare dispozitiv
- Portul conectat la sina de date setat spre iesire cu pull-up activat. (DDR=0, PORT=1)
- RS = 1 (registru de date)
- RW =1 (citire)
- E = 1 (Datele sunt transferate din LCD pe frontul crescator)
- Pauza
- Citirea datelor de pe port
- 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.
Afisarea unui caracter si deplasarea cursorului
- 00111000 - Bus-ul de date pe 8 biti, afisare in 2 randuri.
- 00000001 - Curatarea ecranului
- 00000110 - Incrementarea adresei la fiecare acces, Ecranul nu se deplaseaza.
Afisarea unui caracter si deplasarea cursorului
- 00001100 - Aprinde ecran (D=1)
- 00000001 - Curatare ecran, Memoria DDRAM este selectata
- 00010100 - Deplasare cursor (S/C=0) la dreapta (R/L=1)
- 00110001 - Transfer in memeoria DDRAM (RS=1) a caracterului "1″, cod 0х31
Generarea unui caracter in memoria CGRAM
- 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.
- 00000001 - transferul primului byte de date (RS=1)
- 00000010
- 00000100
- 00001000
- 00011111
- 00000010
- 00000100
- 00001000 - Transferul ultimului byte de date.
- 10000000 - Comanda de trecere la adresa 0x00 a memoriei DDRAM (RS=0)
- 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:
- E=1
- Pauza
- Setam pe port tetrada superioara
- E=0
- Pauza
- Е=1
- Pauza
- Setam pe port tetrada inferioara
- Е=0
Citire
- E=1
- Pauza
- culegem din port tetrada superioara
- Е=0
- Pauza
- Е=1
- Pauza
- Culegem din port tetrada inferioara
- Е=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
Niciun comentariu:
Trimiteți un comentariu