Maticová klávesnice

Z MAM wiki

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Schéma zapojení maticové klávesnice)
m (comment on problem line)
Řádka 65: Řádka 65:
<pre>
<pre>
SBI DDRD, 2
SBI DDRD, 2
-
SBI PORTC, 2
+
SBI PORTC, 2 ;enables pull-up rezistor on this pin
...
...
SBIS PINC, 2
SBIS PINC, 2

Verze z 10. 3. 2011, 12:24

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):


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.

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
	SBI PORTC, 2 ;enables pull-up rezistor 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