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 1
Row-1 Row-2 Row-3 Column-1 Row-4 Column-1 Column-2 Column-3 Column-4 Column-2 Row-1 Column-1 Row-4 Column-3 Row-3 Row-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. 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. 2
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. 3
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 4
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 5
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 6
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... beep: HIGH 0 SOUND 1,[80,10] LOW 0 RETURN ' Executați subrutina numită beep ' Porniți LED-ul conectat la Pin0 ' Difuzor bip conectat la Pin1 ' Opriți LED-ul conectat la Pin0 ' 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 7
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 TRISA=%00000000 TRISB=%01110000 ' Extracția externă a PortB este activată ' Setați pini PORTA ca ieșiri ' Setați pinii B4-B6 ai intrărilor PORTB, alții sunt ieșiri 8
KEY VAR BYTE SYMBOL ROW1=PORTB.0 SYMBOL COLON1=PORTB.4 SYMBOL COLON2=PORTB.5 SYMBOL COLON3=PORTB.6 ' Declarați KEY ca octet ' Definiți portb.0 ca Row1 ' Definiți portb.4 ca Colon1 ' Definiți portb.5 ca Colon2 ' Definiți portb.5 ca Colon3 PORTA=0 PORTB=0 ' Clear PORTA '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 PAUSE 50 RETURN END ' Afișați numărul tastei apăsate ' Asteptati 50ms ' Sfarsitul programului 9
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 TRISA=%00000000 TRISB=%01110000 KEY VAR BYTE ' Extracția externă a PortB este activată ' Setați pini PORTA ca ieșiri ' Setați pinii B4-B6 ai intrărilor PORTB, alții sunt ieșiri ' 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 10
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 PAUSE 50 RETURN END ' Afișați numărul tastei apăsate ' Asteptati 50ms ' Sfârșitul programului 11
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 TRISA=%00000000 TRISB=%01110000 KEY VAR BYTE ONES VAR BYTE TENS VAR BYTE ' Extracția externă a PortB este activată ' Setați pini PORTA ca ieșiri ' Setați pinii B4-B6 ai intrărilor PORTB, alții sunt ieșiri ' Declarați KEY ca octet ' Declarați ONES ca un octet ' 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: 12
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 13
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 TRISB=%01110000 KEY VAR BYTE ' Setați pini PORTA ca ieșiri ' Setați pinii B4-B6 ai intrărilor PORTB, alții sunt ieșiri ' 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 14
PORTA=0: PORTB=0: KEY=0 KEY_SCAN: ' Clear PortA, PortB, Key ' 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 PAUSE 500 RETURN END ' Afișați valoarea variabilei cheie pe PortA 15
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: END PORTA=KEY PAUSE 500 KEY=KEY+1 GOTO LED 16
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 TRISB=%01110000 ' Setați pini PORTA ca ieșiri ' 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 17
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 18