Sunteți pe pagina 1din 9

Limbaje de programarea pentru roboţi L5

Lucrare de laborator nr. 5

AFIŞAJUL ALFANUMERIC CU CRISTALE LICHIDE LCD

1. Scopul lucrării
În cadrul lucrării, studenţii vor primi informaţii asupra construcţiei unui afişor LCD şi modul în
care se folosesc pinii acestui dispozitiv electronic. Pentru început se va afişa un text pe LCD şi apoi
se va afişa valoarea unei mărimi analogice convertită într-un semnal digital.
În lucrare se va prezenta convertorul analog digital aflat în structura microcontrolerului PIC. Se
vor preciza care sunt pinii care se pot folosi şi funcţiile care se pot utiliza pentru convertirea şi
afişarea valorii unei mărimi analogice.

2. Consideraţii teoretice
Afişoarele alfanumerice cu cristale lichide pot afişa simboluri şi caractere formate din matrice
de puncte (dot matrix).
După vizibilitatea caracterelor se deosebesc afişaje cu vizibilitate standard (unghiul de vizare
30...40 grd), respectiv afişoare cu unghi de vizare dublu.
După modul de formare a imaginii există module transreflective care nu necesită iluminare şi
reflective cu backlight care dispun de o sursă proprie de iluminare cu LED sau folie
electroluminiscentă.
După culoarea imaginii sunt afişoare normale cu matricea de puncte întunecate pe fond
luminos sau inverse.
Diagrama bloc a unui afişor LCD este prezentată în Fig. 1.

Controler LCD
DB0 - DB7 LSI COM 1 – COM 16 Panou LCD
E KS0070B-00
2 linii x 16 caractere
R/W
RS SEG 1 - SEG 80

V0
VDD
VSS
Fig. 1

1
Limbaje de programarea pentru roboţi L5
Semnificaţia pinilor este prezentată în tabelul de mai jos.
Număr
Simbol Funcţia
pin
1 Vss Terminal la masa circuitului a modulului
2 VDD Terminal alimentare a modulului 2,7 până la 5,5 V
3 V0 Alimentare pentru LCD
4 RS Selectarea registrului
RS = 0 registrul de instrucţiuni
RS = 1 registrul de date
5 R/W Read / Write
R/W = 1 (Read)
R/W = 0 (Write)
6 E Enable
7 DB0
8 DB1
Bus de date bidirecţional. Transferul de date se efectuează
9 DB2
prin pinii DB0 – DB7, odată, în cazul interfeţei de date.
10 DB3
Lungimea este de 8 biţi. A doua oară transferul de date se
11 DB4
realizează prin DB4 – DB7 în cazul lungimii interfeţei de
12 DB5
date este de 4 biţi.
13 DB6
14 DB7
15 NC
16 NC

Majoritatea afişoarelor de acest tip folosesc ca driver circuitul integrat Hitachi HD44780.
Interfaţa de comunicaţie este una paralelă pe 8 biţi, permiţând astfel să se efectueaze scrieri sau
citiri de date într-un mod simplu şi rapid.

Fig. 2

Pe cele 8 fire de date se transmit octeţi (grupuri de 8 biţi), aceşti octeţi reprezentând coduri
interne ale LCD-ului (în modul de instrucţiuni) sau coduri ASCII ale caracterelor ce se doresc a fi
afişate (în modul de date). Din punct de vedere hardware interfaţarea se efectuează pin la pin cu
microcontrolerul.
În cazul în care se doreşte interfaţare pe 8 fire este suficient să se conecteze toţi pinii D0-D7 la
acelaşi port şi cei de control RS, RW şi EN pe un alt port şi să se scrie programul ţinând cont de

2
Limbaje de programarea pentru roboţi L5
această structură. Pinii VSS şi GND se conectează la alimentare şi masă Pinul 3, VLC, se conectează
direct la masa, pentru contrast maxim, sau într-un potenţiometru pentru a putea regla contrastul.
Există şi o variantă de interfaţare economică pe 4 biţi de date +2 biţi pentru comenzi. Daca nu
intenţionăm să citim informaţia provenită de la LCD ci doar să scriem date pe el, atunci pinul RW
se leagă la masă.

PIC 16

Fig. 3

Din punct de vedere al modului de comunicaţie se parcurg următorii paşi:


 Se setează dacă se doreşte a se trimite o instrucţiune sau un caracter de date (pinul R/S).
 Se trimit cei mai importanţi 4 biti din octet.
 Se activează o perioadă de timp pinul EN.
 Se trimit cei mai puţin semnificativi 4 biţi din octet.
 Se activează din nou o perioadă de timp pinul EN.
In varianta de interfaţare pe 4 biţi, timpul necesar scrierii in modulul LCD creşte semnificativ
faţă de varianta de interfaţare standard.

3. Convertorul analog – digital (ADC)

Pentru a putea fi utilizate într-un sistem de calcul digital, semnale analogice trebuiesc
convertite în valori numerice discrete.
Un convertor analog – digital (ADC) este un circuit care converteşte o tensiune analogică de la
intrare într-o valoare digitală. Aceasta poate fi reprezentată în mai multe feluri în funcţie de
codificarea datelor: în binar, cod Gray, etc.

3
Limbaje de programarea pentru roboţi L5
Conversia semnalelor analogice în semnale digitale poate fi realizată prin:
 Metode hardware:
 convertoare tensiune – frecvenţă sau tensiune –timp;
 convertoare cu pantă simplă dublă sau multiplă;
 convertoare cu eşantionare (sample & hold);
 convertoare sigma-delta (convertoare pe 1bit).
 - Metode software:
 aproximaţii succesive;
 măsurarea timpului de încărcare al unui condensator.
O caracteristică importantă a unui ADC o constituie rezoluţia acestuia. Rezoluţia indică
numărul de valori discrete pe care convertorul poate să le furnizeze la ieşirea sa în intervalul de
măsură. Deoarece rezultatele conversiei sunt de obicei stocate intern sub formă binară, rezoluţia
unui convertor analog-digital este exprimată in biţi.

Fig. 4

De exemplu, dacă rezoluţia unui convertor este de 10 biţi atunci el poate furniza 2 10 = 1024
valori diferite la ieşire. Dacă gama de măsurare este de 0-5V, rezoluţia de măsurare va fi:

O altă caracteristică importantă a unui convertor analog-digital o constituie rata de eşantiona-


re. Aceasta depinde de timpul dintre două conversii succesive şi afectează modul în care forma de
undă originală va fi redată după procesarea digitală.
Care este rata minimă de eşantionare pentru a reproduce fără pierderi un semnal de o frecvenţa
data?
Teorema lui Nyquist spune că o rată de eşantionare de minim două ori mai mare decât
frecvenţa semnalului măsurat este necesară pentru acest lucru, teorema aplicându-se şi pentru un
4
Limbaje de programarea pentru roboţi L5
semnal compus dintr-un intreg spectru de frecvenţe, cum ar fi vocea umană.
Limitele maxime ale auzului uman sunt 20Hz – 20kHz dar frecvenţele vocii sunt în gama 80 -
4000 Hz, de aceea, centralele telefonice folosesc o rată de eşantionare a semnalului de 8000Hz.
Rezultatul este o reproducere inteligibilă a vocii umane, suficientă pentru transmiterea de informaţii
într-o convorbire obişnuită. Înregistrarea pe un CD audio are o rată de eşantionare de 44100Hz ceea
ce este mai mult decât suficient pentru reproducerea fidelă a tuturor frecvenţelor audibile.

Fig. 5

Convertorul analog-digital inclus în microcontrolerul PIC 16F877A este un ADC cu


aproximări succesive. Are o rezoluţie de 10 biţi şi poate măsura orice tensiune din gama 0- 5V de
pe opt intrări analogice multiplexate. Dacă semnalul de la intrare este prea mic în amplitudine,
convertorul are facilitatea de preamplificare a acestuia in două setări, de 10x sau de 200x.
Relaţia dintre valoarea pusă în registrul ADC şi tensiunea măsurată este următoarea:

unde Vin este tensiunea măsurată, iar Vref este tensiunea aleasă ca referinţă.

4. Aplicaţii
Aplicaţia 1.
Scopul acestei aplicaţii este afişarea unui text pe LCD. Pentru interfaţarea mai uşoară a unui
modul LCD, în programul utilizat există două biblioteci (LCD Library şi LCD Custom Library)
care au funcţii care pot fi apelate într-un program. Cele două biblioteci realizează interfaţarea pe 4
biţi. Prima, LCD Library, se utilizează când portul de date (D7,...,D4) şi portul de control (RS, R/W,
E) se leagă la un singur port al microcontrolerului. Cea de a doua bibliotecă, LCD Custom Library,
se foloseşte atunci când cele două porturi ale LCD –ului se leagă la porturi diferite ale
microcontrolerului.
Funcţiile care se pot folosi pentru biblioteca LCD Library sunt următoarele:
5
Limbaje de programarea pentru roboţi L5
1. Lcd_Config(&PORTD, RS, EN, R/W, D7, D6, D5, D4) – configurează porturile de date şi
control ;
2. Lcd_Init(&PORTD);
3. Lcd_Out(rândul, coloana, “text”) – tipăreşte textul pe ecranul LCD – ului pe rândul şi
coloana precizată;
4. Lcd_Cmd(comandă) – trimite comanda către LCD. Principalele comenzi sunt:
- LCD_FIRST_ROW – mută cursorul pe primul rând;
- LCD_CLEAR - şterge ecranul;
- LCD_CURSOR_OFF – opreşte afişarea cursorului;
- LCD_TURN_OFF – opreşte afişarea pe LCD.
Lcd Funcţiile care se pot folosi pentru biblioteca LCD_Custom_Library sunt următoarele:
1. Lcd_Custom_Config(&PORTD, D7, D6, D5, D4, &PORTB, RS, R/W, EN) – iniţializează
portul de date (legătura la portul microcontrolerului) şi portul de control;
2. Lcd_Custom_Out(rând, coloană, “text”) – tipăreşte text pe rândul şi coloana specificată;
3. Lcd_Custom_Out_Cp(“text”) – tipăreşte text la poziţia curentă a cursorului;
4. Lcd_Custom_Cmd(comandă) – trimite comanda la LCD. Se folosesc comenzile prezentate
mai sus.
5. Lcd_Out_Cp(“text”) – tipăreşte text la poziţia curentă a cursorului.

Programul pentru afişarea unui text are următoarea forma scris în pseudocod:
comentarii despre aplicaţie
declară variabila text astfel char *text;
instrucţiunea principala (main) {
setarea registrului TRISB ca ieşire;
setarea registrului TRISD ca ieşire;
se iniţializează portul de date şi de control al LCD – ului (Lcd_Custom_Config);
se dă comanda de ştergere a ecranului;
se apelează funcţia de întârziere cu 1/10 din secundă (Delay_ms(100));
se tipăreşte pe ecran la rândul 1 şi coloana 2, textul Roboţi;
se apelează funcţia de întârziere cu 1/10 din secundă (Delay_ms(100));
}

Aplicaţia 2.

6
Limbaje de programarea pentru roboţi L5
Scopul aplicaţiei este citirea valorii unui semnal analogic şi afişarea valorii acestuia pe ecranul
LCD – ului. Pentru generarea semnalului analogic se va utiliza potenţiometrul semireglabil de pe
placa de dezvoltare.
Pe primul rând al LCD – ului se va afişa valoarea citită de pe un canal al convertorului analog
digital (PORT A). Pentru afişarea valorii ADC – ului, care este un număr pe 10 biţi, este necesar
utilizarea unei funcţii din bibliotecă (Adc_Read), care este inclusă pentru a asigura o activitate
confortabilă cu modulul. Sintaxa acestei funcţii este:
Adc_Read(canal).
Această funcţie iniţializează convertorul analog digital (ADC) şi îl conectează la oscilatorul
microcontrolerului. Parametrul canal reprezintă pinul de la PORT A, de la care se achiziţionează
valoarea digitală. Pentru configurarea convertorului analog digital este necesar ca pinii utilizaţi să
fie consideraţi ca pini de intrare (TRISA = 0xFF – toţi pinii sunt pentru intrare). Apoi se
configurează intrările analogice şi tensiunea de referinţă (Vref).
După ce este citită valoarea digitală pe 10 biţi, această valoare este transformată în intervalul
0...5000 mV. Folosind funcţia IntToStr(întreg,text) se transformă numarul întreg al valorii citite
într-un şir de caractere. În continuare, textul este transmis spre afişare la LCD.
În această aplicaţie, potenţiometrul este conectat la pinul RA3 al portului A, iar LCD este
conectat aşa cum s-a prezentat în Aplicaţia 1.
Programul are următoarea formă scris în pseudocod:
comentarii despre aplicaţie
#include”built_in.h”
declară variabila şir *text (char *text = ”Test ADC”;)
declară variabila şir de 4 caractere (char txt[4];)
declară variabila de tip întreg fără semn adc_rd (unsigned int adc_rd;)
declară variabila de tip întreg long tlong (long tlong;)

instrucţiunea principala (main)


{
setarea registrului TRISA ca intrare;
setarea registrului TRISD ca ieșire;
se configurează tensiunea VDD ca tensiune de referinţă Vref (ADCON1 = 0x82;)
se iniţializează portul de date şi de control al LCD – ului (Lcd_Custom_Config);
se dă comanda de ştergere a ecranului (Lcd_Custom_Cmd(LCD_CLEAR););
se apelează funcţia de întârziere cu 1/10 din secundă (Delay_ms(100));
se tipăreşte pe ecran la rândul 1 şi coloana 1, textul ”Test ADC”;

7
Limbaje de programarea pentru roboţi L5
se apelează funcţia de întârziere cu 1/10 din secundă (Delay_ms(100));

deschide bucla de ciclare continuă


{
se afişează pe ecranul LCD – ului textul ” U = ”;
se apelează funcţia de întârziere cu o secundă (Delay_ms(1000));
se transmite variabilei adc_rd valoarea obţinută de la convertorul analog digital, canal 3;
valoarea citită este convertită în milivolţi (tlong = (long)adc_rd * 5000;
numărul întreg din intervalul 0 ... 1023 este convertit în intervalul 0 – 5000
(tlong = tlong/1023;)
se transformă numărul întreg (tlong) într-un şir de caractere (txt), (IntToStr(tlong,txt);)
se afişează şirul de caractere txt pe ecranul LCD;
se apelează funcţia de întârziere cu o secundă (Delay_ms(1000));
} // se închide bucla de ciclare
} // se închide funcţia main

6. Modul de lucru
1. Analizaţi schema electronică folosită pentru alimentarea convertorului analog digital şi a
LCD - ului.
2. Realizaţi programul pentru prima aplicaţie folosind MikroC şi programul scris în pseudocod.
În acest fel se va afişa un text pe ecranul LCD – ului. În acelaşi program afişaţi pe prima linie la
coloana a 2 textul Mecanica, iar pe a doua linie scrieti textul Robotica
3. Realizaţi programul pentru a doua aplicaţie folosind MikroC şi programul scris în pseudocod
în Aplicaţia 2. Rotind axul poteţiometrului urmăriţi valoarea afişată pe ecranul LCD – ului.

8
Limbaje de programarea pentru roboţi L5

Varianta 1
Toți pinii LCD – ului se leagă la portul B. Conexunile sunt urmatoarele:
RS --> RB4 R/W --> 0 EN --> RB5;
D4 --> RB0 D5 --> RB1 D6 --> RB2 D7 --> RB3.
Canalul prin care se introduce mărimea analogica este RA3.

Varianta 2
Port_data se leagă la portul B și Port_ctrl se leagă la portul D. Conexunile sunt urmatoarele:
RS --> RD2 R/W --> 0 EN --> RD3;
D4 --> RB4 D5 --> RB5 D6 --> RB6 D7 --> RB7.
Canalul prin care se introduce mărimea analogica este RA1.

S-ar putea să vă placă și