Pentru a stabili o comunicare bună între lumea umană și lumea mașinilor, unitățile de afișare joacă un rol important. Și astfel sunt o parte importantă a sistemelor încorporate. Unitățile de afișare - mari sau mici, funcționează pe același principiu de bază. Pe lângă unitățile de afișare complexe, cum ar fi afișajele grafice și distribuțiile 3D, trebuie să știți lucrul cu afișaje simple, cum ar fi unitățile 16x1 și 16x2. Unitatea de afișare 16x1 va avea 16 caractere și se află într-un singur rând. Ecranul LCD 16x2 va avea 32 de caractere în total 16 în prima linie și alte 16 în a 2 -a linielinia. Aici trebuie să înțelegem că în fiecare caracter există 5x10 = 50 pixeli, deci pentru a afișa un caracter toți cei 50 pixeli trebuie să funcționeze împreună. Dar nu trebuie să ne facem griji pentru că există un alt controler (HD44780) în unitatea de afișare care face treaba de a controla pixelii. (îl puteți vedea în unitatea LCD, este ochiul negru din spate).
Componente necesare
Hardware:
Microcontroler ATmega32
Alimentare (5v)
Programator AVR-ISP
JHD_162ALCD (LCD 16x2)
Condensator 100uF.
Software:
Atmel studio 6.1
Progisp sau magie flash
Diagrama și explicația circuitului
Așa cum se arată în interfața LCD cu circuitul ATmega32, puteți vedea că PORTA ATMEGA32 este conectată la portul de date LCD. Aici ar trebui să vă amintiți să dezactivați comunicarea JTAG în PORTC din ATMEGA prin schimbarea octeților siguranței, dacă doriți să utilizați PORTC ca un port de comunicație normal. În ecranul LCD 16x2 există 16 pini peste tot, dacă există o lumină de fundal, dacă nu există lumină de fundal, vor exista 14 pini. Se poate alimenta sau lăsa pinii luminii din spate. Acum, în cele 14 pinii există 8 pini de date (7-14 sau D0-D7), 2 pini de alimentare (1 & 2 sau VSS & VDD sau gnd & + 5v), 3 rd pini pentru controlul contrastului (VEE-control cât de gros personajele ar trebui să fie afișat), 3 pini de control (RS & RW & E)
În circuitul de mai sus pentru a interfața LCD 16x2 cu microcontroler AVR, puteți observa că am luat doar doi pini de control. Acest lucru oferă flexibilitatea unei mai bune înțelegeri. Bitul de contrast și READ / WRITE nu sunt adesea folosite, astfel încât acestea pot fi scurtcircuitate la sol. Acest lucru pune LCD în cel mai mare contrast și modul de citire. Trebuie doar să controlăm ENABLE și pinii RS pentru a trimite caractere și date în consecință.
Conexiunile dintre microcontrolerul ATmega32 și LCD 16x2 sunt date mai jos:
PIN1 sau VSS - masă
PIN2 sau VDD sau VCC - + 5v putere
PIN3 sau VEE - sol (oferă un contrast maxim optim pentru un începător)
PIN4 sau RS (Register Selection) - PD6 al microcontrolerului
PIN5 sau RW (citire / scriere) - masă (pune LCD în modul de citire facilitează comunicarea pentru utilizator)
PIN6 sau E (Enable) - PD5 al microcontrolerului
PIN7 sau D0 - PA0 al microcontrolerului
PIN8 sau D1 - PA1
PIN9 sau D2 - PA2
PIN10 sau D3 - PA3
PIN11 sau D4 - PA4
PIN12 sau D5 - PA5
PIN13 sau D6 - PA6
PIN14 sau D7 - PA7
În circuit puteți vedea că am folosit comunicarea pe 8 biți (D0-D7), totuși acest lucru nu este obligatoriu și putem folosi și comunicarea pe 4 biți (D4-D7), dar programul de comunicare pe 4 biți devine un pic complex pentru începători, așa că doar am mers cu Comunicare pe 8 biți.
Deci, din simpla observare din tabelul de mai sus, conectăm 10 pini de LCD la controler, în care 8 pini sunt pini de date și 2 pini pentru control.
Lucru
Acum, pentru a începe, trebuie să cunoașteți funcțiile a 10 pini de 16x2 LCD (8 pini de date + 2 pini de control). Cei 8 pini de date sunt pentru trimiterea de date sau comenzi pe LCD. În doi pini de control:
1. PIN-ul RS (Register selection) este pentru a indica ecranului LCD dacă îi trimitem date sau îi comandăm.
De exemplu:
În tabelul de mai sus unul pentru un port de date (D7-D0) valoarea „0b0010 1000 sau 0x28” spune LCD-ului să afișeze simbolul „(”. În tabelul doi aceeași valoare de 0x28 spune LCD-ului „sunteți un LCD 5x7 punct și comportați-vă ca unul ", astfel încât pentru aceeași valoare utilizatorul poate defini două lucruri, acum această situație este neutralizată de pinul de selectare a înregistrării, dacă pinul RS este setat jos, atunci LCD înțelege că trimitem comanda. Dacă punem pinul RS la mare, atunci LCD înțelege că trimitem datele. Astfel, în ambele cazuri, LCD respectă valoarea portului de date în funcție de valoarea pinului RS.
2. Pinul E (Enable) este pur și simplu pentru a indica „LED-ul de indicare a puterii unui computer”, acest pin este setat la mare pentru a spune LCD-ului „să primească portul de date al formularului de date al controlerului”. Odată ce acest pin scade după maxim, ecranul LCD procesează datele primite și arată rezultatul corespunzător. Deci, acest pin este setat la mare înainte de trimiterea datelor și tras în jos după trimiterea datelor.
Acum, după conectarea hardware-ului, porniți Atmel studio și începeți un nou proiect pentru scrierea programului, deschideți acum ecranul de programare și începeți programul de wring. Programul trebuie să urmeze după cum urmează.
Mai întâi îi spunem controlerului ce porturi folosim pentru date și controlul ecranului LCD. Apoi spuneți controlerului când trebuie să trimiteți date sau o comandă în consecință, jucând cu pinii RS și E.
Scurtă explicație a conceptelor utilizate în program:
1. E este setat ridicat (indicând ecranului LCD să primească date) și RS este setat scăzut (indicând ecranului LCD că dăm comanda)
2. Oferind valoarea 0x01 portului de date ca o comandă pentru a șterge ecranul
3. E este setat ridicat (indicând LCD-ului să primească date) și RS este setat ridicat (indicând ecranului LCD că dăm date)
4. Luarea unui șir de caractere trimitând fiecare caracter într-un șir unul câte unul.
5. E este setat scăzut (indicând ecranului LCD că am terminat de trimis date)
6. După ultima comandă, LCD-ul termină comunicarea și procesează datele și afișează șirul de caractere pe ecran.
În acest scenariu vom trimite personajele unul după altul. Caracterele sunt date LCD-ului prin coduri ASCII (American standard Code for Information Interchange).
Tabelul codurilor ASCII este prezentat mai sus. Aici pentru ca afișajul LCD să arate un caracter „@” trebuie să trimitem un cod hexazecimal „64”. Dacă trimitem „0x62” pe ecranul LCD, va apărea simbolul „>”. În acest fel, vom trimite codurile corespunzătoare pe ecranul LCD pentru a afișa un nume.
Modul de comunicare între microcontrolerul LCD și ATmega32 AVR este cel mai bine explicat pas cu pas al codului C de mai jos,