Erasmus+ KA-202 Proiecte de parteneriate strategice pentru ... · Antet Condensator C1, C2 2 22pF...
Transcript of Erasmus+ KA-202 Proiecte de parteneriate strategice pentru ... · Antet Condensator C1, C2 2 22pF...
1
Erasmus+ KA-202
Proiecte de parteneriate strategice pentru educație și formare profesională
Titlul proiectului: "Predarea și învățarea microcontrolerelor prin limbajul
PicBasicPro (PBP) în VET"
Acronimul proiectului: "PBPinVET"
Numărul proiectului: "2016-1-TR01-KA202-033963"
KIT ȘI MODUL TASTATURĂ
Ce este o tastatură
O tastatură este un sistem de butoane aranjate într-o matrice care funcționează ca un
dispozitiv de comutare pentru a asigura o conexiune între o linie și o coloană.
Figure: 3x3 and 3x4 keypads
2
Atunci când tastatura este denumită, aceasta este codată ca 3x4 și 4x4. La această
codificare, primul număr este numărul de coloane, al doilea număr este numărul de rânduri.
Figura de mai jos prezintă numele de pini ale tastaturii pentru conexiuni.
Column-2
Row-1
Column-1
Row-4
Column-3
Row-3
Row-2
Row-1
Row-2
Row-3
Column-1
Row-4
Column-1
Column-2
Column-3
Column-4
Figura: Pinuri de conectare pentru tastaturi 3x3 și 3x4
Principii de interfațare a tastaturii
Interfața cu câteva butoane este simplă, dar când sunt necesare mai multe, o tastatură
este aproape esențială.
Figura de mai jos arată dispunerea tastaturii cu 12 butoane și 16 taste.
După cum se vede, ele sunt aranjate ca o matrice, acest lucru minimizează cantitatea
de linii I/O necesare, în caz contrar ar trebui să se utilizeze 12 sau 16 intrări pentru interfața
cu aceleași cantități de taste. Prin aranjarea cheilor în Rânduri și Coloane, avem nevoie doar
de 7 sau 8 intrări pentru a o utiliza, dar prețul de plată este că trebuie folosit o rutină de
scanare a tastaturii.
3
Figura: Structura tastaturii cu 12 butoane și 16 taste
Rutina de scanare a tastaturii caută sistematic o apăsare de tastă. Începe prin a stabili
conexiunile la pinii coloanei ca intrări și conexiunile la pinii de rând ca ieșiri. Intrările sunt
susținute de rezistențele interne de tracțiune. Obiectul căutării este să aflăm dacă una dintre
rândurile tastaturii este conectată la una dintre coloane și, dacă da, care dintre ele. Rutina de
scanare trage una dintre liniile de rând scăzute, apoi se uită la intrarea coloanelor pentru a
vedea dacă este detectat un 0. Dacă nu, atunci încearcă următorul rând; acest lucru este
continuat până când toate rândurile de rânduri au fost scanate.
Există la fel de multe rutine de scanare a tastaturii ca și în cazul programatorilor.
Fiecare programator are modul său de a face lucrurile. Cu toate acestea, oricare ar fi modul de
a face treaba în mod eficient este OK.
Utilizarea unei tastaturi
O tehnică de scanare este folosită de obicei pentru a detecta tastatura care este apăsată
pe tastatură. Rândurile sunt conectate la pinii RB4, RB5, RB6 și RB7, în timp ce coloanele
sunt conectate la pinii RB0, RB1 și RB2 ai portului B al PIC16F84 cu rezistențe de tracțiune
de 10KΩ. Întregii rânduri și coloanele sunt la nivelul 0 logic. Procesul de scanare este
efectuat pentru a detecta butonul apăsat în timpul fazei de scriere a programului. Pentru a
detecta tasta presată, în primul rând rândul 1 este făcut logic 1. Dacă 1, 2 sau 3 este apăsat pe
oricare dintre taste, nivelul coloanei se face logică 1. De exemplu, dacă este apăsată tasta 1 ,
rândul 1 și coloana 1 vor fi întrerupte. Dacă este apăsat numărul 2, această coloană 2 este
făcută logică 1, dacă tasta 3 este apăsată, coloana 3 devine logică 1. Se determină că una din
tastele de pe rândul 1 nu a fost apăsată. Același proces va fi efectuat și pentru alte rânduri.
4
Figura: O conexiune pentru tastatura 3x4 la microcontroler
O tastatură 4x4 constă din 16 taste cu comutatoare mecanice interne la fiecare poziție
a tastei. Figura de mai jos prezintă o tastatură tipică 4x4 conectată la PORT D a unui
microcontroler PIC. Tastatura funcționează pe principiul "scanării și detectării", unde RD0,
RD1, RD2 și RD3 sunt configurate ca intrări și conectate la coloanele tastaturii prin
intermediul rezistențelor de tragere. RD4, RD5, RD6 și RD7 sunt configurate ca ieșiri și conectate la rândurile tastaturii.
Figura: O tastatură 4x4, conectată la un microcontroler
5
Programul trimite logic 1 la fiecare rând al tastaturii în schimb și verifică coloanele
citirea stării logice la coloană. Apăsarea oricărei taste va face ca logica 1 să fie aplicată pinilor
de intrare ai microcontrolerului. Software-ul detectează ce tastă este apăsată prin scanarea
intrărilor. De exemplu, presupunem că în timp ce trimitem logica 1 la rândul 2 unde numerele
4, 5, 6, B sunt detectate, intrarea RD2 este logică 1. În acest caz, tasta presată trebuie să fie
numărul 5 și așa mai departe.
Schema de circuit a kitului tastatură:
Figura: Circuitul electronic al kitului modulului tastaturii
6
Lista componentelor utilizate pentru implementarea practică a kitului
tastatură:
Comment Description Designator Quantity Value Antet Condensator C1, C2 2 22pF
ICSP
programming Antet, 5-Pin P1 1 NSL25G-5p
Display Antet, 10-Pin P2 1 NSL25G-10p
Tastatura Antet, 10-Pin P3 1 NSL25G-10p
Antet 2 Antet, 2-Pin P4 1
DG128-5.0-
02P-14-
00A(H)
RPot Potentiometru R1 1 5K
Res1 Rezistenta R2 1 10K
Res1 Rezistenta R3 1 10K
PIC16F84-
04/SO
Flash/EEPROM 8-Bit Microcontroller,
1K (x14-Bit words) Flash Program
Memory, 68 Bytes Data RAM, 4 MHz,
18-Pin SOIC, Standard VDD Range,
Commercial Temperature U1 1 PIC16F84-04
LM7805CT Series 3-Terminal Positive Regulator U2 1 LM7805
4MHz Oscilator de cristal Y1 1 4MHz
Cables 1
Keyboard 3x4 keypad 1
Display 2x8
characters 44780 LCD Display 1
LED Led rosu 4
Rezistenta 6 300, 10K
7
COMANDA SPECIALĂ pentru acest KIT
GOSUB
Sintaxă: Etichetă GOSUB
Salt la subrutina de la Etichetă salvând adresa de întoarcere din stivă. Spre
deosebire de GOTO, când se ajunge la o instrucțiune RETURN, execuția se reia
cu instrucțiunea urmând ultima instrucțiune GOSUB executată. Un număr
nelimitat de subrutine pot fi utilizate într-un program. Subrutinele pot fi, de
asemenea, imbricate. Cu alte cuvinte, este posibil ca o subrutină să apeleze o altă
subrutină. O astfel de cuibare a subrutinei ar trebui să fie limitată la maximum
patru niveluri adânci.
Exemplu
GOSUB beep ' Executați subrutina numită beep
...
beep: HIGH 0 ' Porniți LED-ul conectat la Pin0
SOUND 1,[80,10] ' Difuzor bip conectat la Pin1
LOW 0 ' Opriți LED-ul conectat la Pin0
RETURN ' Du-te înapoi la rutina principală care ne-a sunat
ÎNTOARCERE
Sintaxa: ÎNTOARCERE
Întoarcere din subrutină. RETURN reia executarea la declarația care urmează după
GOSUB care a numit subrutina.
Exemplu:
GOSUB sub1 ' Mergeți la subrutina etichetă sub1
...
sub1:
SEROUT 0,N2400,["Lunch"] ' Trimiteți "Pranz" din seria Pin0
RETURN ' Reveniți la programul principal după Gosub
8
EXEMPLE DE PROGRAM PENTRU MODULUL ȘI KITUL TASTATURĂ
CIRCUIT-1: Utilizați schema principală de circuit de mai sus.
Titlul circuitului: Programul care se afișează pe ecranul LCD atunci când una
dintre tastele 1, 2 sau 3 din prima linie a tastaturii este apăsată
Descrierea circuitului:
Pentru a ușura înțelegerea logicii lucrării cu tastatură, în program sunt utilizate
primul rând și trei coloane ale tastaturii. Ce tastă este apăsată pe acest prim rând
al tastaturii, numărul de cheie este afișat pe ecranul LCD.
Programul PicBasicPro:
'****************************************************************
Nume: PROGRAMUL CARE SE APLICĂ PE SCREENUL LCD CÂND
Una din cheile 1, 2, 3 pe prima linie a lui
Tastatura este presată
' Autor: PBPinVET
'****************************************************************
' Set LCD Data port
DEFINE LCD_DREG PORTA
' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 0
' Set LCD Register Select port
DEFINE LCD_RSREG PORTB
' Set LCD Register Select bit
DEFINE LCD_RSBIT 7
' Set LCD Enable port
DEFINE LCD_EREG PORTA
' Set LCD Enable bit
DEFINE LCD_EBIT 4
' Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
' Set number of lines on LCD
DEFINE LCD_LINES 2
OPTION_REG.7=0 ' Extracția externă a PortB este activată
TRISA=%00000000 ' Setați pini PORTA ca ieșiri
TRISB=%01110000 ' Setați pinii B4-B6 ai intrărilor PORTB, alții sunt ieșiri
9
KEY VAR BYTE ' Declarați KEY ca octet
SYMBOL ROW1=PORTB.0 ' Definiți portb.0 ca Row1
SYMBOL COLON1=PORTB.4 ' Definiți portb.4 ca Colon1
SYMBOL COLON2=PORTB.5 ' Definiți portb.5 ca Colon2
SYMBOL COLON3=PORTB.6 ' Definiți portb.5 ca Colon3
PORTA=0 ' Clear PORTA
PORTB=0 'Clear PORTB
KEY_SCAN:
LOW ROW1
IF COLON1=0 THEN ' Dacă este apăsată tasta 1
KEY=1
GOSUB LCD ' dute la LCD sub- program
ENDIF
IF COLON2=0 THEN ' Dacă este apăsată tasta 2
KEY=2
GOSUB LCD ' dute la LCD sub- program
ENDIF
IF COLON3=0 THEN ' Dacă este apăsată tasta 3
KEY=3
GOSUB LCD ' dute la LCD sub- program
ENDIF
GOTO KEY_SCAN
LCD:
LCDOUT $FE,1," KEY=",#KEY ' Afișați numărul tastei apăsate
PAUSE 50 ' Asteptati 50ms
RETURN
END ' Sfarsitul programului
10
CIRCUIT-2: Utilizați schema principală de circuit de mai sus.
Titlul circuitului: Programul care utilizează 3 coloane și 4 rânduri ale tastaturii pentru afișarea
numerelor 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, # (11) și * (12) LCD atunci când este apăsată o tastă.
Programul PicBasicPro:
'****************************************************************
Nume: PROGRAM CARE DISPLAY NUMĂRUL CHEIE PE SCREENUL LCD CÂND
ESTE PRESUPAT O UTILIZARE A TEXTURILOR PE TASTATURĂ
' Autor: PBPinVET
'****************************************************************
' Set LCD Data port
DEFINE LCD_DREG PORTA
' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 0
' Set LCD Register Select port
DEFINE LCD_RSREG PORTB
' Set LCD Register Select bit
DEFINE LCD_RSBIT 7
' Set LCD Enable port
DEFINE LCD_EREG PORTA
' Set LCD Enable bit
DEFINE LCD_EBIT 4
' Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
' Set number of lines on LCD
DEFINE LCD_LINES 2
OPTION_REG.7=0 ' Extracția externă a PortB este activată
TRISA=%00000000 ' Setați pini PORTA ca ieșiri
TRISB=%01110000 ' Setați pinii B4-B6 ai intrărilor PORTB, alții sunt ieșiri
KEY VAR BYTE ' Declarați KEY ca octet
SYMBOL ROW1=PORTB.0
SYMBOL ROW2=PORTB.1
SYMBOL ROW3=PORTB.2
SYMBOL ROW4=PORTB.3
SYMBOL COLON1=PORTB.4
SYMBOL COLON2=PORTB.5
SYMBOL COLON3=PORTB.6
11
PORTA=0
PORTB=0
KEY_SCAN:
LOW ROW1
IF COLON1=0 THEN:KEY=1 : GOSUB LCD
IF COLON2=0 THEN:KEY=2 : GOSUB LCD
IF COLON3=0 THEN:KEY=3 : GOSUB LCD
HIGH ROW1
LOW ROW2
IF COLON1=0 THEN:KEY=4 : GOSUB LCD
IF COLON2=0 THEN:KEY=5 : GOSUB LCD
IF COLON3=0 THEN:KEY=6 : GOSUB LCD
HIGH ROW2
LOW ROW3
IF COLON1=0 THEN:KEY=7 : GOSUB LCD
IF COLON2=0 THEN:KEY=8 : GOSUB LCD
IF COLON3=0 THEN:KEY=9 : GOSUB LCD
HIGH ROW3
LOW ROW4
IF COLON1=0 THEN:KEY=10 : GOSUB LCD
IF COLON2=0 THEN:KEY=0 : GOSUB LCD
IF COLON3=0 THEN:KEY=12 : GOSUB LCD
HIGH ROW4
GOTO KEY_SCAN
LCD:
LCDOUT $FE,1," KEY=",#KEY ' Afișați numărul tastei apăsate
PAUSE 50 ' Asteptati 50ms
RETURN
END ' Sfârșitul programului
12
CIRCUIT-3: Utilizați schema principală de circuit de mai sus.
Titlul circuitului: Programul afișează numărul de două cifre de pe ecranul LCD când este
introdus de pe tastatură.
Programul PicBasicPro:
'****************************************************************
Nume: Programul afișează numărul de două cifre, introdus de la tastatură, pe ecranul LCD.
'Autor: PBPinVET
'****************************************************************
' Set LCD Data port
DEFINE LCD_DREG PORTA
' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 0
' Set LCD Register Select port
DEFINE LCD_RSREG PORTB
' Set LCD Register Select bit
DEFINE LCD_RSBIT 7
' Set LCD Enable port
DEFINE LCD_EREG PORTA
' Set LCD Enable bit
DEFINE LCD_EBIT 4
' Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
' Set number of lines on LCD
DEFINE LCD_LINES 2
OPTION_REG.7=0 ' Extracția externă a PortB este activată
TRISA=%00000000 ' Setați pini PORTA ca ieșiri
TRISB=%01110000 ' Setați pinii B4-B6 ai intrărilor PORTB, alții sunt ieșiri
KEY VAR BYTE ' Declarați KEY ca octet
ONES VAR BYTE ' Declarați ONES ca un octet
TENS VAR BYTE ' Declarați TENS ca un octet
SYMBOL ROW1=PORTB.0
SYMBOL ROW2=PORTB.1
SYMBOL ROW3=PORTB.2
SYMBOL ROW4=PORTB.3
SYMBOL COLON1=PORTB.4
SYMBOL COLON2=PORTB.5
SYMBOL COLON3=PORTB.6
PORTA=0 : PORTB=0 : key=0 : ONES=0 : TENS=0
KEY_SCAN:
13
LOW ROW1
IF COLON1=0 THEN:KEY=1 : gosub lcd
IF COLON2=0 THEN:KEY=2 : gosub lcd
IF COLON3=0 THEN:KEY=3 : gosub lcd
HIGH ROW1
LOW ROW2
IF COLON1=0 THEN:KEY=4 : gosub lcd
IF COLON2=0 THEN:KEY=5 : gosub lcd
IF COLON3=0 THEN:KEY=6 : gosub lcd
HIGH ROW2
LOW ROW3
IF COLON1=0 THEN:KEY=7 : gosub lcd
IF COLON2=0 THEN:KEY=8 : gosub lcd
IF COLON3=0 THEN:KEY=9 : gosub lcd
HIGH ROW3
LOW ROW4
IF COLON1=0 THEN:KEY=10 : gosub lcd
IF COLON2=0 THEN:KEY=0 : gosub lcd
IF COLON3=0 THEN:KEY=12 : gosub lcd
HIGH ROW4
GOTO KEY_SCAN
LCD:
TENS=ONES
ONES=KEY
LCDOUT $FE,1," NUMBER= ",DEC TENS,DEC ONES 'Afișați un număr din două cifre
PAUSE 200
RETURN
END
14
CIRCUIT-4: Schimbați circuitul principal ca în diagrama de mai jos. Scoateți ecranul LCD
și conectați 4 LED-uri în circuit printr-o placă de proiect.
Titlul circuitului: Programul care arată valoarea presetată a tastelor pe LED-uri, conectate la
portul A.
Programul PicBasic Pro:
'****************************************************************
Nume: Programul afișează valoarea cheii presate pe LED-urile conectate la PortA. De
exemplu, dacă este apăsat numărul 9, 1010 este afișat pe LED-uri ca număr binar.
'Autor: PBPinVET
'****************************************************************
OPTION_REG.7=0 ' Extracția externă a PortB este activată
TRISA=%00000000 ' Setați pini PORTA ca ieșiri
TRISB=%01110000 ' Setați pinii B4-B6 ai intrărilor PORTB, alții sunt ieșiri
KEY VAR BYTE ' Declarați KEY ca octet
SYMBOL ROW1=PORTB.0
SYMBOL ROW2=PORTB.1
SYMBOL ROW3=PORTB.2
SYMBOL ROW4=PORTB.3
SYMBOL COLON1=PORTB.4
SYMBOL COLON2=PORTB.5
SYMBOL COLON3=PORTB.6
15
PORTA=0: PORTB=0: KEY=0 ' Clear PortA, PortB, Key
KEY_SCAN: ' Start scanning the keypad
LOW ROW1
IF COLON1=0 THEN:KEY=1 : gosub LED
IF COLON2=0 THEN:KEY=2 : gosub LED lcd
IF COLON3=0 THEN:KEY=3 : gosub LED lcd
HIGH ROW1
LOW ROW2
IF COLON1=0 THEN:KEY=4 : gosub LED
IF COLON2=0 THEN:KEY=5 : gosub LED
IF COLON3=0 THEN:KEY=6 : gosub LED
HIGH ROW2
LOW ROW3
IF COLON1=0 THEN:KEY=7 : gosub LED
IF COLON2=0 THEN:KEY=8 : gosub LED
IF COLON3=0 THEN:KEY=9 : gosub LED
HIGH ROW3
LOW ROW4
IF COLON1=0 THEN:KEY=10 : gosub LED
IF COLON2=0 THEN:KEY=0 : gosub LED
IF COLON3=0 THEN:KEY=12 : gosub LED
HIGH ROW4
GOTO KEY_SCAN
LED:
PORTA=KEY ' Afișați valoarea variabilei cheie pe PortA
PAUSE 500
RETURN
END
16
Imagine: vizualizarea LED-urilor
CIRCUIT-5: Utilizați schema de circuit revizuită de mai sus.
Titlul circuitului: Programul afișează valoarea tastei apăsate pe LED-urile conectate la PortA.
Programul care contorizează binar înainte prin LED-uri conectate la portA, de la valoarea
numerică introdusă de la tastatură.
NOTĂ: Acest program este aproape același cu cel precedent. Deci, doar o parte a programului
de subrutine cu LED-uri este scrisă aici.
Programul PicBasicPro:
'****************************************************************
Nume: Programul afișează valoarea cheii presate pe LED-urile conectate la PortA. De
exemplu, dacă este apăsat numărul 9, 1010 este afișat pe LED-uri ca număr binar.
'Autor: PBPinVET
'****************************************************************
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
LED:
PORTA=KEY
PAUSE 500
KEY=KEY+1
GOTO LED
END
17
CIRCUIT-6: Utilizați schema de circuit revizuită de mai sus.
Titlul circuitului: Aplicație de blocare combinată
Descrierea circuitului: programul este aliniat LED-ului timp de 5 secunde, conectat la
PortA.0, când sunt introduse cifrele de 1357 de pe tastatură.
Programul PicBasicPro:
'****************************************************************
'Nume: Aplicație de blocare combinată (parola: 1357)
'Autor: PBPinVE T
'****************************************************************
OPTION_REG.7=0 External pull-Ups of PortB is ON
TRISA=%00000000 ' Setați pini PORTA ca ieșiri TRISB=%01110000 ' Setați pinii B4-B6 ai intrărilor PORTB, alții sunt ieșiri
' ***** Declarați tipurile de variabile
KEY VAR BYTE
ONES VAR BYTE
TENS VAR BYTE
HUNDREDS VAR BYTE
THOUSANDS VAR BYTE
NUMBER VAR WORD
PASSWORD VAR WORD
' ***** Declarați pinii pentru tastatură
SYMBOL ROW1=PORTB.0
SYMBOL ROW2=PORTB.1
SYMBOL ROW3=PORTB.2
SYMBOL ROW4=PORTB.3
SYMBOL COLON1=PORTB.4
SYMBOL COLON2=PORTB.5
SYMBOL COLON3=PORTB.6
PORTA=0 : PORTB=0 : KEY=0
ONES=0 : TENS=0 : HUNDREDS=0 : THOUSANDS=0
PASSWORD=1357
KEY_SCAN: ' Scan the keypad
LOW ROW1
IF COLON1=0 THEN:KEY=1 : gosub LED
IF COLON2=0 THEN:KEY=2 : gosub LED
IF COLON3=0 THEN:KEY=3 : gosub LED
HIGH ROW1
LOW ROW2
18
IF COLON1=0 THEN:KEY=4 : gosub LED
IF COLON2=0 THEN:KEY=5 : gosub LED
IF COLON3=0 THEN:KEY=6 : gosub LED
HIGH ROW2
LOW ROW3
IF COLON1=0 THEN:KEY=7 : gosub LED
IF COLON2=0 THEN:KEY=8 : gosub LED
IF COLON3=0 THEN:KEY=9 : gosub LED
HIGH ROW3
LOW ROW4
IF COLON1=0 THEN:KEY=10 : gosub LED
IF COLON2=0 THEN:KEY=0 : gosub LED
IF COLON3=0 THEN:KEY=12 : gosub LED
HIGH ROW4
GOTO KEY_SCAN
LED:
THOUSANDS=HUNDREDS : HUNDREDS =TENS
TENS=ONES : ONES=KEY
NUMBER=1000* THOUSANDS+100* HUNDREDS+10*TENS+ONES
IF PASSWORD=NUMBER THEN
HIGH PORTA.0
PAUSE 5000
LOW PORTA.0
ENDIF
PAUSE 500
RETURN
END