Maticová klávesnice

Z MAM wiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (comment on problem line)
m
 
Řádka 64: Řádka 64:
Třeba klávesa '''7''' spíná vzájemně '''ROW3''' a '''COL1''', tedy '''PD2''' a '''PC2'''. Abychom zjistili, zda je stisknutá, dáme na '''PD2''' tvrdou logickou nulu a na '''PC2''' měkkou logickou jedničku a po chvíli otestujeme stav '''PC2''' (SBIS je "Skip if BIt Set" - přeskočí následující instrukci, je-li bit roven 1):
Třeba klávesa '''7''' spíná vzájemně '''ROW3''' a '''COL1''', tedy '''PD2''' a '''PC2'''. Abychom zjistili, zda je stisknutá, dáme na '''PD2''' tvrdou logickou nulu a na '''PC2''' měkkou logickou jedničku a po chvíli otestujeme stav '''PC2''' (SBIS je "Skip if BIt Set" - přeskočí následující instrukci, je-li bit roven 1):
<pre>
<pre>
-
SBI DDRD, 2
+
SBI DDRD, 2 ; PD2 is output - ROW
-
SBI PORTC, 2 ;enables pull-up rezistor on this pin
+
;      CBI PORTD, 2  ; PD2=0
 +
;      CBI DDRC, 2  ; PC2 is input - COLUMN
 +
SBI PORTC, 2 ; enables pull-up resistor on this pin
...
...
SBIS PINC, 2
SBIS PINC, 2

Aktuální verze z 7. 3. 2013, 10:25

S připojením jednotlivých tlačítek jsme se seznámili při našem prvním pokusu v simulátoru AVR, jakmile se množství tlačítek zvětší (6 a více), ušetříme vývody procesoru zapojením tlačítek do matice a jejich postupným souřadnicovým čtením. Naše klávesnice má 16 tlačítek 0-9, A-D,*,# zapojených v matici 4*4, je tedy připojena 8 vodiči, 4 pro řady a 4 pro sloupce.

Obsluha klávesnice je obdobná jako v prvním pokusu v simulátoru AVR s interním pull-up rezistorem, jen nemáme tlačítka připojená druhým koncem přímo k zemi, ale všechny vodorovné řady připojíme k výstupním portům. Vždy jenom jedna budicí řada je ve stavu L, všechny ostatní jsou v H. Která řada je v L periodicky měníme. Sloupce jsou interními pull-up rezistory (měkká jednička) drženy v H. Zachycení stavu L na některém sloupci znamená stisknutí tlačítka, jeho souřadnici určuje řada a sloupec, na kterých je nalezena úroveň L.

Schéma zapojení potom vypadá např. takto:

Soubor:IC-matrix keyb.png

Takhle klávesnice vypadá, včetně originální dokumentace (na obrázku není barevný plochý kabel, ten vede pod klávesnicí nahoru):


[editovat] Propojení klávesnice s procesorem

Na černém konektoru do kontaktního pole, od kterého vede barevný plochý kabel dolů, jsou sloupce a řádky klávesnice připojeny takto:

COL1 COL3 ROW1 ROW3
COL2 COL4 ROW2 ROW4

Vývody ATmega168, ke kterým by tato klávesnice šla připojit:

PC5 PC4 PC3 PC2 ... ... ...
)
RESET PD0 PD1 PD2 PD3 ... ... ...

Fragmenty programu níže na této stránce předpokládají propojení COL1..4 s PC2..5 a propojení ROW1..4 s PD0..3.

[editovat] Programové ovládání

Speciální registry potřebné k ovládání portů C a D jsou u ATmega168/88 všechny ještě v rozsahu dostupném instrukcemi jako SBI a CBI, na těchto I/O adresách:

	.EQU DDRC = $07
	.EQU PORTC = $08
	.EQU PINC = $06

	.EQU DDRD = $0A
	.EQU PORTD = $0B
	.EQU PIND = $09

Třeba klávesa 7 spíná vzájemně ROW3 a COL1, tedy PD2 a PC2. Abychom zjistili, zda je stisknutá, dáme na PD2 tvrdou logickou nulu a na PC2 měkkou logickou jedničku a po chvíli otestujeme stav PC2 (SBIS je "Skip if BIt Set" - přeskočí následující instrukci, je-li bit roven 1):

	SBI DDRD, 2  ; PD2 is output - ROW
;       CBI PORTD, 2  ; PD2=0
;       CBI DDRC, 2   ; PC2 is input - COLUMN
	SBI PORTC, 2 ; enables pull-up resistor on this pin
	...
	SBIS	PINC, 2
	...

Třeba při použití částí blikacího programu může dioda měnit barvy, je-li klávesa 7 stisknuta:

	SBI DDRD, 2
	SBI PORTC, 2
GO:
	RCALL   COLOR1
	RCALL	WAIT
	SBIS	PINC, 2
	RCALL	COLOR2
	RCALL	WAIT
	RJMP	GO

Při krokování přes debugWIRE nám pro ověření funkce tlačítka dokonce stačí jen se dívat na stav portu PINC - při každém kroku se zobrazení aktualizuje, i když program sám s portem právě nepracuje.

Osobní nástroje