proiect atmega16 conexiune rs232
DESCRIPTION
Proiect Microcontrolere Conexiunea intre 2 uC si afisarea pe LCD a caracterelor introduse de la tastatura.TRANSCRIPT
Microcontrolere
-Proiect-
Afisaj LCD cu
Tastatura
Indrumator: Student:
S.I.dr.ing. Angel Ciprian Cormos Dan Alexandru Marin
Grupa: 8316
Afisaj LCD cu Tastatura
1
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
2
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
3
2. Proiectare Hardware
Schema Bloc
-placa emisie-
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.
Tastatura Atribuitor Identificare
Litere
Memorie
Flash
Memorare
Impachetare
RS232
Mediu de
transmisie
MUFA
Afisaj LCD cu Tastatura
4
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-
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.
Mediu de
transmisie MUFA
Afisaj LCD
16x2
Afisaj LCD cu Tastatura
5
3. Schemele Electrice
-placa emisie-
Afisaj LCD cu Tastatura
6
Componente folosite:
- Atmega16 – Caracteristici principale
- 16KB de memorie Flash reinscriptibilă pentru stocarea programelor
- 1KB de memorie RAM
- 512B de memorie EEPROM
- două numărătoare/temporizatoare de 8 biţi
- un numărător/temporizator de 16 biţi
- conţine un convertor analog – digital de 10 biti, cu intrări multiple
- conţine un comparator analogic
- conţine un modul USART pentru comunicaţie 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
7
- 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ă numărătoare/temporizatoare de 8 biţi
- un numărător/temporizator de 16 biţi
- conţine un convertor analog – digital de 10 biti, cu intrări multiple
- conţine un comparator analogic
- conţine un modul USART pentru comunicaţie serială (port serial)
Afisaj LCD cu Tastatura
8
- 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
9
-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
10
4. Cablajul Circuitului
-placa emisie-
Afisaj LCD cu Tastatura
11
Top copper PCB
Bottom Copper PCB
Afisaj LCD cu Tastatura
12
Top Silk PCB
Afisaj LCD cu Tastatura
13
-placa receptie-
Afisaj LCD cu Tastatura
14
Top Copper PCB
Bottom Copper PCB
Afisaj LCD cu Tastatura
15
Top Silk PCB
-circuit RS232-
5. Proiectarea Software
Afisaj LCD cu Tastatura
16
Organigrama Codului
-placa emisie-
-placa receptie-
Descriere pasi organigrama
Start
Initializare
Citire
Butoane
Identificare
Buton
Apasat
Asociere cu
Litera
Trimitere Cod
Litera
Start
Initializare
Afisare LCD Verificare
Primire
Date
NU
DA
Afisaj LCD cu Tastatura
17
-placa emisie-
Start: 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 receptie-
Afisaj LCD cu Tastatura
18
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
Afisaj LCD cu Tastatura
19
-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
Afisaj LCD cu Tastatura
20
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
Afisaj LCD cu Tastatura
21
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
Afisaj LCD cu Tastatura
22
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
Afisaj LCD cu Tastatura
23
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:
Afisaj LCD cu Tastatura
24
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
Afisaj LCD cu Tastatura
25
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 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
Afisaj LCD cu Tastatura
26
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
Afisaj LCD cu Tastatura
27
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
Afisaj LCD cu Tastatura
28
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
Afisaj LCD cu Tastatura
29
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
Afisaj LCD cu Tastatura
30
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
Afisaj LCD cu Tastatura
31
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 [email protected] cu
problema dumneavoastra.
7. Cost productie
Afisaj LCD cu Tastatura
32
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;
Afisaj LCD cu Tastatura
33
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/