Sunteți pe pagina 1din 34

Microcontrolere -Proiect-

Afisaj LCD cu Tastatura

Indrumator: S.I.dr.ing. Angel Ciprian Cormos

Student: Dan Alexandru Marin Grupa: 8316

Afisaj LCD cu Tastatura

Cuprins 1. Introducere 2. Proiectare Hardware Schema bloc Prezentarea generala a modulelor 3. Schemele Electrice 4. Cablajul Circuitului 5. Proiectare Software Organigrama codului Softul/Programul 6. Mentenanta 7. Cost producere 8. Bibliografie

Afisaj LCD cu Tastatura

1. Introducere
Descriere comerciala
MINI TASTATURA CU DISPLAY
Oricum ai privi-o, e pur si simplu incredibila. Tastatura QWERTY cu ecran LCD 16x2 iti permite sa afisezi instantaneu caracterele apasate. Diferenta o face marimea super portabila, super de tinut cu o mana si totusi super potrivita.

Design subtire si usor


Cu o marime potrivita, nuantat intr-una din cele 5 culori din care puteti alege, si un material antiderapant pentru a fi usor de tinut si folosit cu o singura mana, tastatura pune la discretia utilizatorului toate literele alfabetului (englezesc). Tastele mecanice de pe tastatura-LCD ofera timp de raspuns rapid si raspuns tactil superior catre tastele create din cauciuc. In plus, tastele sunt testate pentru durabilitate cu o durata de pana la 50 miliaone de cicluri de viata. Ecranul LCD confera o perspectiva detaliata din aproape orice pozitie asupra a ceea ce scrieti datorita reglajului inclinatiei acestuia. In plus, poate fi reglata si luminozitatea din rezistorul semireglabil din spatele device-ului

Taste silentioase
Silentioase, fara taste non-clicking si un inel incorporat sub fiecare tasta pentru amortizare reduce semnificativ distragerea atentiei cauzate de zgomotul creat de apasarea tastelor - fara a sacrifica timpul de reactie. Cipul ATMega16 conceput de Atmel aduce in interiorul unei tastaturi arhitectura pe 8 biti, specifica diferitor aplicatii mult mai complexe.

Afisaj LCD cu Tastatura

2. Proiectare Hardware
Schema Bloc -placa emisieTastatura Atribuitor Identificare Litere

Memorie Flash

Memorare

Impachetare RS232

MUFA Mediu de

transmisie

Tastatura:
Este folosita pentru introducerea datelor in program pentru afisarea pe LCD. Este alcatuita din 26 de butoane organizate in format qwerty.

Atribuitor:
Atribuie fiecarui buton apasat de pe tastatura o valoare corespunzatoare literei in cod ascii pentru a putea fi interpredata de microcontroler.

Memoria Flash:
In ea este incarcat programul care atribuie fiecarui buton o valoare si face posibila tranmiterea intre doua placi.

Afisaj LCD cu Tastatura

Memorare:
Valoarea butonului va fi inmagazinata in memorie inainte de a fi trimisa mai departe .

Impachetare RS232:
Cu ajutorul modului de comunicatie RS232 vom restrange informatia si o vom putea transmite mai departe spre placa de receptie.

Mufa:
Este un conector de tip mama D -SUB 9 pini.

Mediul de transmisie:
Este serial RS232 printr -un cablu serial cu 2 mufe tata D -SUB 9 pini.

-placa receptie-

Afisaj LCD 16x2

Mediu de transmisie

MUFA

Mediul de transmisie:
Este identic cu cel de pe placa de emisie.

Mufa:
Este de acelasi tip ca cea de pe placa de emisie.

Afisaj LCD 16x2:


Este un display cu 16 caractere pozitionate pe doua linii. El poate afisa atat caracterele din codul ascii dar si caractere speciale create special.

Afisaj LCD cu Tastatura

3. Schemele Electrice
-placa emisie-

Afisaj LCD cu Tastatura

Componente folosite:
-

Atmega16 Caracteristici principale


16KB de memorie Flash reinscriptibil pentru stocarea programelor 1KB de memorie RAM 512B de memorie EEPROM dou numrtoare/temporizatoare de 8 bii un numrtor/temporizator de 16 bii conine un convertor analog digital de 10 biti, cu intrri multiple conine un comparator analogic conine un modul USART pentru comunicaie serial (port serial) dispune de un cronometru cu oscilator intern ofer 32 de linii I/O organizate n patru porturi (PA, PB, PC, PD).

Butoane PushButton folosite pe post de taste folosit dupa specificatia producatorului. Rezistenta R2 10k ohm 1/2W folosita in circuitul de reset pentru a furniza o intaziere dandui timp condensatorului sa se incarce si sa stabilizeze circuitul, este folosita la specificatia producatorului. Condensatorul C7 de 100nF 6.3v folosit pentru a stabiliza circuitul de reset la specificatia producatorului.

Afisaj LCD cu Tastatura

Condensatorul de 100nF 6.3v si condensator electrolitic de 470uF de 6.3v care fac parte din circuitul de alimentare pentru microcontroler fiind folosite la filtrarea curentului care vine de la USB la specificatia producatorului. Conector USB-B tata folosit pentru alimentare la specificatia producatorului. Conector 2x1 pentru conexiunea RS232

-placa receptie-

Componente folosite:
-

Atmega16 Caracteristici principale


16KB de memorie Flash reinscriptibil pentru stocarea programelor 1KB de memorie RAM 512B de memorie EEPROM dou numrtoare/temporizatoare de 8 bii un numrtor/temporizator de 16 bii conine un convertor analog digital de 10 biti, cu intrri multiple conine un comparator analogic conine un modul USART pentru comunicaie serial (port serial)

Afisaj LCD cu Tastatura

dispune de un cronometru cu oscilator intern ofer 32 de linii I/O organizate n patru porturi (PA, PB, PC, PD).

Display LCD 16x2 care foloseste controlerul Hitachi HD44780 pentru interfata paralela, este folosit la specificatia producatorului.

Potentiometru 10k ohm 50mW folosita pentru a regla luminozitatea LCD -ului Butoane PushButton folosit pentru circuitul de reset folosite la specificatia producatorului. Rezistenta 10k ohm 1/2W folosita in circuitul de reset pentru a furniza o intaziere dandui timp condensatorului sa se incarce si sa stabilizeze circuitul, este folosita la specificatia producatorului. Condensatorul C7 de 100nF 6.3v folosit pentru a stabiliza circuitul de reset la specificatia producatorului. Condensatorul de 100nF 6.3v si condensator electrolitic de 470uF de 6.3v care fac parte din circuitul de alimentare pentru microcontroler fiind folosite la filtrarea curentului care vine de la USB la specificatia producatorului. Conector USB-B tata folosit pentru alimentare la specificatia producatorului. Conector 2x1 pentru conexiunea cu circuitul RS232

Afisaj LCD cu Tastatura

-circuit RS232-

Componente folosite:
-

Max232 circuit integrat folosit pentru convertirea semnalelor


Condensatoare de 1uF 6.3V Mufa mama D -SUB 9 pini pentru a face legatura intre doua circuite Conector 2x1 pentru a conecta circuitul RS232 la Atmega16 Componentele folosite in circuitul de mai sus sunt folosite la specificatia producatorului pentru a asigura o buna functionare a circuitelor

Afisaj LCD cu Tastatura

4. Cablajul Circuitului
-placa emisie-

10

Afisaj LCD cu Tastatura

Top copper PCB

Bottom Copper PCB

11

Afisaj LCD cu Tastatura

Top Silk PCB

12

Afisaj LCD cu Tastatura

-placa receptie-

13

Afisaj LCD cu Tastatura

Top Copper PCB

Bottom Copper PCB

14

Afisaj LCD cu Tastatura

Top Silk PCB

-circuit RS232-

5. Proiectarea Software
15

Afisaj LCD cu Tastatura

Organigrama Codului
-placa emisieStart

Initializare

Citire Butoane

Identificare Buton Apasat

Asociere cu
Litera

Trimitere Cod Litera

-placa receptieStart

Initializare
NU Verificare Primire Date

DA

Afisare LCD

Descriere pasi organigrama

16

Afisaj LCD cu Tastatura

-placa emisieStart: Inceputul programului Initializare: Initializam porturile pentru intrare taste si intrare/iesire spre RS232
ldi r16,0b00000000 out DDRA,r16 ; pinii PA7...PA0 sunt intrari ldi r16,0b00000000 out DDRB,r16 ; pinii PB7...PB0 sunt intrari ldi r16,0b00000000 out DDRC,r16 ; pinii PC7...PC0 sunt intrari ldi r16,0b00000001 out DDRD,r16 ; pinii PD7,PD2 si PD1 sunt intrari si PD0 iesire mai initializam si conexiunea USART USART_Init: ldi r16,0b00001000 ;in randurile de mai jos se configureaza out UCSRB,r16 ;modulul USART prin registrii UCSRB si UCSRC ldi r16,0b10100110 out UCSRC,r16 ldi r16,0x00 out UBRRH,r16 ldi r16,0x33 out UBRRL,r16 ldi r16,(1<<RXEN)|(1<<TXEN) ; Enable receiver and transmitter out UCSRB,r16 ; Set frame format: 8data, 2stop bit ldi r16,(1<<URSEL)|(1<<USBS)|(3<<UCSZ0) out UCSRC,r16 ret Citire Butoane: citim butoanele sa vedem care buton a fost apasat

Identificare Buton Apasat: folosing comanda SBRS vedem care buton a fost
apasat ex: sbrs r17,PA0

Asociere cu litera: dupa ce am verificat care buton a fost apasat il trimitem la o subrutina cu comanda call ex : call tr_A si ii atribuim o valoare ascii cu
comanda ldi ex: ldi r21,0x41

Trimitere Cod Litera: dupa asociere trimitem codul ascii al literei la bufferul UDR ex: out UDR,r21

-placa receptie17

Afisaj LCD cu Tastatura

Start: Inceputul programului Initializare: Initializam porturile pentru iesire display si intrare/iesire spre RS232:
ldi r16,0b11110111 out DDRC,r16 ; pinii PC7,PC6,PC5,PC4,PC2,PC1,PC0 sunt iesiri ldi r16,0b11111100 out DDRD,r16 ; pinii PD0 si PD1 sunt intrari initializam conexiunea USART: USART_Init: ldi r16,0b00001000 ;in randurile de mai jos se configureaza out UCSRB,r16 ;modulul USART prin registrii UCSRB si UCSRC ldi r16,0b10100110 out UCSRC,r16 ldi r16,0x00 out UBRRH,r16 ldi r16,0x33 out UBRRL,r16 ldi r16,(1<<RXEN)|(1<<TXEN) ; Enable receiver and transmitter out UCSRB,r16 ; Set frame format: 8data, 2stop bit ldi r16,(1<<URSEL)|(1<<USBS)|(3<<UCSZ0) out UCSRC,r16 ret si initializam si conexiunea cu display -ul LCD folosing comanda call sa apelam subrutina init_disp ex: call init_disp

Verificare Primire Date: Conexiunea USART verifica daca s -au primit date pe
UDR cu subrutina: USART_Receive: sbis UCSRA, RXC ; Wait for data to be received rjmp USART_Receive in r17, UDR ; Get and return received data from buffer ret

Afisare LCD: Afisarea pe display -ul LCD se face apeland o subrutina numita
put_char

Softul/Programul

18

Afisaj LCD cu Tastatura

-placa emisie/* * cod_placa_emisie.asm * * Created: 12.01.2014 04:25:20 * Author: Danyel */ .include "m16def.inc" jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset jmp reset reset: ldi r16,high(RAMEND) out SPH,r16 ldi r16,low(RAMEND) out SPL,r16 ldi r16,0b00000000 out DDRA,r16 ; pinii PA7...PA0 sunt intrari ldi r16,0b00000000 out DDRB,r16 ; pinii PB7...PB0 sunt intrari ldi r16,0b00000000 out DDRC,r16 ; pinii PC7...PC0 sunt intrari

19

Afisaj LCD cu Tastatura

ldi r16,0b00000001 out DDRD,r16 ; pinii PD7 si PD2 sunt intrari, PD1,PD0 iesiri main: cli USART_Init: ldi r16,0b00001000 ;in randurile de mai jos se configureaza out UCSRB,r16 ;modulul USART prin registrii UCSRB si UCSRC ldi r16,0b10100110 out UCSRC,r16 ldi r16,0x00 out UBRRH,r16 ldi r16,0x33 out UBRRL,r16 ; Enable receiver and transmitter ldi r16,(1<<RXEN)|(1<<TXEN) out UCSRB,r16 ; Set frame format: 8data, 2stop bit ldi r16,(1<<URSEL)|(1<<USBS)|(3<<UCSZ0) out UCSRC,r16 ret

in r17,PINA sbrs r17,PA0 call tr_A sbrs r17,PA1 call tr_B sbrs r17,PA2 call tr_C sbrs r17,PA3 call tr_D sbrs r17,PA4 call tr_E sbrs r17,PA5 call tr_F sbrs r17,PA6 call tr_G sbrs r17,PA7 call tr_H in r17,PINB sbrs r17,PB0 call tr_I sbrs r17,PB1 call tr_J

20

Afisaj LCD cu Tastatura

sbrs r17,PB2 call tr_K sbrs r17,PB3 call tr_L sbrs r17,PB4 call tr_M sbrs r17,PB5 call tr_N sbrs r17,PB6 call tr_O sbrs r17,PB7 call tr_P in r17,PINC sbrs r17,PC0 call tr_Q sbrs r17,PC1 call tr_R sbrs r17,PC2 call tr_S sbrs r17,PC3 call tr_T sbrs r17,PC4 call tr_U sbrs r17,PC5 call tr_V sbrs r17,PC6 call tr_W sbrs r17,PC7 call tr_X in r17,PIND sbrs r17,PD2 call tr_Y sbrs r17,PD3 call tr_Z tr_A: ldi r21,0x41 out UDR,r21 call wait ret tr_B: ldi r21,0x42 out UDR,r21 call wait ret

21

Afisaj LCD cu Tastatura

tr_C: ldi r21,0x43 out UDR,r21 call wait ret tr_D: ldi r21,0x44 out UDR,r21 call wait ret tr_E: ldi r21,0x45 out UDR,r21 call wait ret tr_F: ldi r21,0x46 out UDR,r21 call wait ret tr_G: ldi r21,0x47 out UDR,r21 call wait ret tr_H: ldi r21,0x48 out UDR,r21 call wait ret tr_I: ldi r21,0x49 out UDR,r21 call wait ret tr_J: ldi r21,0x4A out UDR,r21

22

Afisaj LCD cu Tastatura

call wait ret tr_K: ldi r21,0x4B out UDR,r21 call wait ret tr_L: ldi r21,0x4C out UDR,r21 call wait ret tr_M: ldi r21,0x4D out UDR,r21 call wait ret tr_N: ldi r21,0x4E out UDR,r21 call wait ret tr_O: ldi r21,0x4F out UDR,r21 call wait ret tr_P: ldi r21,0x50 out UDR,r21 call wait ret tr_Q: ldi r21,0x51 out UDR,r21 call wait ret tr_R:

23

Afisaj LCD cu Tastatura

ldi r21,0x52 out UDR,r21 call wait ret tr_S: ldi r21,0x53 out UDR,r21 call wait ret tr_T: ldi r21,0x54 out UDR,r21 call wait ret tr_U: ldi r21,0x55 out UDR,r21 call wait ret tr_V: ldi r21,0x56 out UDR,r21 call wait ret tr_W: ldi r21,0x57 out UDR,r21 call wait ret tr_X: ldi r21,0x58 out UDR,r21 call wait ret tr_Y: ldi r21,0x59 out UDR,r21 call wait ret

24

Afisaj LCD cu Tastatura

tr_Z: ldi r21,0x5A out UDR,r21 call wait ret wait: in r21,UCSRA ;citesc starea modulului USART sbrs r21,UDRE ;verific daca registrul de emisie/receptie e gol rjmp wait ;registrul nu este gol, mai astept ret ;registrul este gol, revin din asteptare USART_Transmit: ; Wait for empty transmit buffer sbis UCSRA,UDRE rjmp USART_Transmit ; Put data (r21) into buffer, sends the data out UDR,r21 ret

-placa receptie.include "m16def.inc" .equ rs=PC2 .equ e=PC0 .equ ctrl=PORTC jmp jmp jmp jmp jmp jmp jmp jmp jmp jmp jmp jmp jmp jmp jmp jmp reset reset reset reset reset reset reset reset reset reset reset reset reset reset reset reset

25

Afisaj LCD cu Tastatura

jmp reset jmp reset jmp reset jmp reset jmp reset reset: ldi r16,high(RAMEND) out SPH,r16 ldi r16,low(RAMEND) out SPL,r16 ldi r16,0b11110111 out DDRC,r16 ; pinii PC7,PC6,PC5,PC4,PC2,PC1,PC0 sunt iesiri ldi r16,0b11111100 out DDRD,r16 ; pinii PD0 si PD1 sunt intrari main: cli cbi ctrl,e cbi ctrl,rs ldi r16,0b00001000 out TCCR0,r16 in r16,TIMSK andi r16,0b11111100 out TIMSK,r16 USART_Init: ; Set baud rate out UBRRH, r17 out UBRRL, r16 ; Enable receiver and transmitter ldi r16, (1<<RXEN)|(1<<TXEN) out UCSRB,r16 ; Set frame format: 8data, 2stop bit ldi r16,(1<<URSEL)|(1<<USBS)|(3<<UCSZ0) out UCSRC,r16 ret

call init_disp ldi r17,0b10000000 call set_ram bucla: call USART_Receive call put_char rjmp bucla

26

Afisaj LCD cu Tastatura

init_disp: cbi ctrl,rs ldi r16,0b00100000 out PORTC,r16 sbi ctrl,e call wait_48us cbi ctrl,e ldi r16,0b00100000 out PORTC,r16 sbi ctrl,e call wait_48us cbi ctrl,e ldi r16,0b10000000 out PORTC,r16 sbi ctrl,e call wait_48us cbi ctrl,e call wait_30ms ldi r16,0b00000000 out PORTC,r16 sbi ctrl,e call wait_48us cbi ctrl,e ldi r16,0b11000000 out PORTC,r16 sbi ctrl,e call wait_48us cbi ctrl,e call wait_30ms ldi r16,0b00000000 out PORTC,r16 sbi ctrl,e call wait_48us cbi ctrl,e ldi r16,0b00010000 out PORTC,r16 sbi ctrl,e call wait_48us cbi ctrl,e call wait_30ms ldi r16,0b00000000

27

Afisaj LCD cu Tastatura

out PORTC,r16 sbi ctrl,e call wait_48us cbi ctrl,e ldi r16,0b00100000 out PORTC,r16 sbi ctrl,e call wait_48us cbi ctrl,e call wait_30ms ret

set_ram: cbi ctrl,rs mov r16,r17 andi r16,0xF0 ;se retine doar nibble (4 biti) superior out PORTC,r16 sbi ctrl,e nop nop cbi ctrl,e mov r16,r17 andi r16,0x0F ;se retine doar nibble (4 biti) inferior swap r16 ;interschimba nibble (4 biti) sup. cu nibble (4 biti) inf. out PORTC,r16 sbi ctrl,e nop nop cbi ctrl,e call wait_48us ret put_char: sbi ctrl,rs mov r16,r17 andi r16,0xF0 ; se retine doar nibble (4 biti) superior out PORTC,r16 sbi ctrl,e nop nop cbi ctrl,e mov r16,r17 andi r16,0x0F ; se retine doar nibble (4 biti) inferior swap r16 ; interschimba nibble (4 biti) sup. cu nibble (4 biti) inf. out PORTC,r16

28

Afisaj LCD cu Tastatura

sbi ctrl,e nop nop cbi ctrl,e call wait_48us ret wait_48us: ldi r16,0x00 out TCNT0,r16 ldi r16, 0x06 ;se incarca valoarea de prag: 0x06=6 out OCR0,r16 ;6 * 1/(8MHz/64) =48us in r16,TCCR0 andi r16,0b11111000 ;se porneste timerul si este setat sa numere ori r16,0b00000011 ; la fiecare 64 perioade de ceas, fara a modif. alti biti out TCCR0,r16 11 wait: in r16,TIFR sbrs r16,OCF0 ;se asteapta atingerea pragului OCR0 rjmp wait in r16,TIFR ori r16,0b00000010 out TIFR,r16 ;se reseteaza flagul in r16,TCCR0 andi r16,0b11111000 ;se opreste timerul out TCCR0,r16 ret wait_30ms: ldi r16,0x00 out TCNT0,r16 ldi r16, 0xF0 ;se incarca valoarea de prag: 0xF0=240 out OCR0,r16 ;240 * 1/(8MHz/1024) =~ 30ms in r16,TCCR0 andi r16,0b11111000 ;se porneste timerul si este setat sa numere ori r16,0b00000101 ; la fiecare 1024 per. de ceas, fara a modif. alti biti out TCCR0,r16 wait1: in r16,TIFR sbrs r16,OCF0 ;se asteapta atingerea pragului OCR0 rjmp wait1 in r16,TIFR ori r16,0b00000010 out TIFR,r16 ;se reseteaza flagul in r16,TCCR0 andi r16,0b11111000 ;se opreste timerul

29

Afisaj LCD cu Tastatura

out TCCR0,r16 ret USART_Receive: ; Wait for data to be received sbis UCSRA, RXC rjmp USART_Receive ; Get and return received data from buffer in r17, UDR ret

6.

Mentenanta
30

Afisaj LCD cu Tastatura

In unei defectiuni a aparatului:


Va rugam sa verificati toate conexiunile intre cele doua module, conexiunea la display. Daca display -ul s -a spart, el poate fi inlocuit usor cu unul nou. Daca scrisul de pe display nu este lizibil va rugam sa ajustati luminozitatea LCD -ului cu ajutorul potentiometrului de pe placa. Daca afisajul s -a blocat si nu raspunde la nicio tasta trimisa va rugam sa reporniti aparatul folosing butonul de reset de pe placa. Daca aveti probleme de software, va rugam trimiteti produsul la garantie pentru o reprogramare software. Pentru orice alta problema va rugam sa ne contactati la alcdtst@gmail.com cu problema dumneavoastra.

7. Cost productie
31

Afisaj LCD cu Tastatura

Microcontroler Atmega16 20 RON x2 buc 40 RON; Push Button 1.25 RON x24buc 30 RON; Rezistenta 10k ohm 1/2W 0.6 RON x2 buc 1.2 RON; Potentiometru 10k ohm 50mW 4 RON x1 buc 4 RON; Condensator 100nF 6.3V 0.4 RON x4 buc 1.6 RON; Condensator electrolitic 470uF 6.3V 2 RON x2 buc 4 RON; Conector USB-B 2.25 RON x2 buc 4.5 RON; Conector 2x1 tata 1.2 RON x2 buc 2.4 RON; Display LCD 16x2 25 RON x1 buc 25 RON; Placa PCB 5 RON x2 buc 10 RON;

32

Afisaj LCD cu Tastatura

8. Bibliografie
Curs Microcontrolere UPB Bucuresti 2013/2014 http://www.tet.pub.ro Datasheet Atmel Atmega16 http://www.atmel.com Easy AVR 4 manual http://www.mikroe.com Hi-quality http://www.avrbeginners.net/ http://www.engineersgarage.com/ http://www.adelaida.ro/ http://www.avrfreaks.net/

33