Podstawy projektowania systemów mikroprocesorowych, cz. 8.pdf

(120 KB) Pobierz
Podstawy projektowania systemów mikroprocesorowych, część 8
K U  R S
Podstawy projektowania systemów
mikroprocesorowych, część 8
Jednym z†podstawowych elementÛw interfejsu uøytkownika
w†systemach cyfrowych jest klawiatura. W†tej czÍúci
cyklu pokazujemy, w†jaki sposÛb do³¹czyÊ i†jak
obs³ugiwaÊ lokalne klawiatury o†stykach do³¹czanych
bezpoúrednio do portÛw mikrokontrolera.
Obs³uga klawiatury
Chociaø klawiatura bez w¹tp-
ienia naleøy do grupy omÛwionych
w†poprzednim odcinku elementÛw
stykowych, to jednak sposÛb obs³u-
gi duøej liczby przyciskÛw jest za-
gadnieniem nieco bardziej skompli-
kowanym (choÊ przy niewielkiej
liczbie przyciskÛw sposÛb obs³ugi
nie rÛøni siÍ od obs³ugi pojedyn-
czych elementÛw stykowych). Kla-
wiatura jest jednym z†najpopular-
niejszych urz¹dzeÒ wejúciowych
umoøliwiaj¹cych komunikacjÍ uøyt-
kownika z†systemem mikroproceso-
rowym i†wp³ywanie na sposÛb je-
go dzia³ania. W†zaleønoúci od fun-
kcji pe³nionej przez dany system
klawiatura moøe osi¹gaÊ rozmiary
uk³adu kilkunastu czy kilkudziesiÍ-
ciu klawiszy. W†zaleønoúci od licz-
by klawiszy zmienia siÍ takøe spo-
sÛb obs³ugi programowej, poczyna-
j¹c od bezpoúredniego odczytu sta-
nu portu, a†koÒcz¹c na rozbudowa-
nych procedurach obs³ugi klawia-
tur matrycowych. Obec-
nie w†uk³adach potrzebuj¹-
cych duøej liczby klawiszy co-
raz popularniejsze staje siÍ wyko-
rzystanie gotowych klawiatur
z†komputerÛw PC.
Jeøeli w†projektowanym systemie
nie jest potrzebna duøa liczba kla-
wiszy, wykorzystuje siÍ bezpoúred-
nie po³¹czenie mikrowy³¹cznikÛw
tworz¹cych klawiaturÍ do linii por-
tu mikrokontrolera. SytuacjÍ tak¹
przedstawiono na rys. 27 . Po³¹cze-
nie wykonano bezpoúrednio, bez
øadnych dodatkowych rezystorÛw
podci¹gaj¹cych (oczywiúcie, o†ile
wykorzystywane linie posiadaj¹ re-
zystory wewnÍtrzne), gdyø umiesz-
czona zazwyczaj w†pobliøu mikro-
kontrolera klawiatura nie jest na-
raøona na zak³Ûcenia oraz nie ma
koniecznoúci stosowania pr¹dÛw
gwarantuj¹cych samooczyszczanie
stykÛw (nastÍpuje ono w†sposÛb
mechaniczny, wskutek dzia³ania
znacznej si³y nacisku palca). Pros-
tota uk³adowa tego rozwi¹zania
wp³ywa rÛwnieø na prostotÍ oprog-
ramowania. Detekcja naciúniÍcia
przycisku odbywa siÍ na zasadzie
odczytu stanu konkretnej linii por-
tu - ì0î oznacza klawisz wciúniÍ-
ty. UwzglÍdniaj¹c zjawiska ³¹cze-
niowe (drgania stykÛw) obs³uga
programowa moøe byÊ identyczna
jak omÛwiona wczeúniej dla in-
nych elementÛw stykowych. Nale-
øy jedynie zwielokrotniÊ liczbÍ po-
mocniczych zmiennych odpowiada-
j¹cych liczbie stosowanych klawi-
szy. Wad¹ prezentowanego uk³adu
jest koniecznoúÊ zarezerwowania
jednej linii portu mikrokontrolera
dla jednego klawisza i†zwi¹zane
z†tym trudnoúci wygospodarowania
linii sygna³owych przy wiÍkszej
liczbie klawiszy i†innych urz¹dzeÒ
korzystaj¹cych z†portÛw mikrokont-
rolera.
Na rys. 28 przedstawiono nie-
co bardziej ekonomiczne rozwi¹za-
nie. Linie jednego portu s¹ wyko-
rzystywane przez dwa urz¹dzenia
- w†tym przypadku jednym urz¹-
Rys. 27
Rys. 28
88
Elektronika Praktyczna 10/2003
32651594.009.png 32651594.010.png 32651594.011.png 32651594.012.png 32651594.001.png 32651594.002.png 32651594.003.png 32651594.004.png 32651594.005.png 32651594.006.png
 
K U  R S
List. 10. Procedura obługująca prostą klawiaturę pokazaną na rys. 28
;KLAWISZE - zmienna bajtowa przechowująca stan klawiszy (1 - naciśnięty)
;BUFOR - zmienna bajtowa przechowująca daną do wysłania do zatrzasku
Na rys. 29 przedstawiono spo-
sÛb do³¹czenia klawiatury do mik-
rokontrolera z†wykorzystaniem
wspÛlnych linii z†innym urz¹dze-
niem, ktÛrym jest... rÛwnieø kla-
wiatura! Przedstawiony na rysun-
ku uk³ad pod³¹czenia przyciskÛw
tworzy klawiaturÍ matrycow¹. Cha-
rakterystyczn¹ cech¹ takiego roz-
wi¹zania jest moøliwoúÊ wyrÛønie-
nia na schemacie wierszy i†ko-
lumn, na przeciÍciu ktÛrych znaj-
duj¹ siÍ elementy zwieraj¹ce
(przyciski). Moøliwa do obs³uøenia
liczba klawiszy jest zaleøna od
liczby wierszy i†kolumn matrycy,
i†jest rÛwna iloczynowi tych
dwÛch wartoúci.
Zasada dzia³ania uk³adu jest
nastÍpuj¹ca: odczytywanie stanu
klawiszy odbywa siÍ w†sposÛb
grupowy, tzn. jednoczeúnie odczy-
tywany jest stan jednego rzÍdu
klawiszy (jeden wiersz lub jedna
kolumna) - za³Ûømy, øe w†naszym
uk³adzie bÍdziemy klawiaturÍ
sprawdzaÊ odczytuj¹c stan klawi-
szy pogrupowanych w†wiersze
(zgodnie z†kolejn¹ numeracj¹ na
schemacie). W†takiej konfiguracji
linie P1.4 do P1.7 bÍd¹ pracowa-
³y jako wejúcie, natomiast linie
P1.0 do P1.3 jako wyjúcie (nie
jest konieczne stosowanie rezysto-
;sekwencje napisano jako podprogramy wywoływane rozkazem LCALL
KLAWIATURA:
MOV P1,#0FFH ;ustawienie linii portu P1
CLR P3.0
;zerowanie linii P3.0
MOV A,P1
;odczyt stanu linii
CPL A
;negacja bitów (aby uzyskać 1 dla naciśniętego klawisza)
MOV KLAWISZE,A ;zapamiętanie stanu klawiatury
SETB P3.0
;ustawienie linii P3.0 (aby naciskanie klawiszy nie
;wpływało na stan linii portu P1
RET
;powrót do programu głównego
ZATRZASK:
MOV P1,BUFOR ;przesłanie danych do portu P1
SETB P3.7
;generacja sygnału strobującego
CLR P3.7
;(należy pamiętać o wyzerowaniu linii P3.7 po resecie
;mikrokontrolera - w części programu inicjującej
;zmienne i rejestry)
RET
;powrót do programu głównego
dzeniem jest klawiatura, natomiast
drugim uk³ad zatrzaskowy ( latch )
74LS573 (moøe to byÊ takøe do-
wolny inny uk³ad posiadaj¹cy wej-
úcie zezwalaj¹co/strobuj¹ce i†pozo-
staj¹cy obojÍtny na stan linii, gdy
wejúcie to jest nieaktywne). Przed-
stawiony schemat uwzglÍdnia je-
dynie klawiaturÍ czteroprzyciskow¹
(dla zachowania czytelnoúci rysun-
ku), ale nic nie stoi na przeszko-
dzie, aby pod³¹czona klawiatura
wykorzystywa³a wszystkie osiem
linii portu.
Uk³ad ten dzia³a nastÍpuj¹co:
jeøeli chcemy przesy³aÊ dane do
rejestru zatrzaskowego, wÛwczas
konieczne jest ustawienie linii
P3.0 w†stan wysoki. NastÍpnie
wysy³amy do portu P1 bajt prze-
znaczony do przes³ania, a†potem
generujemy sygna³ strobuj¹cy (im-
puls): ustawiamy i†zerujemy liniÍ
P3.7 - zbocze opadaj¹ce powoduje
zatrzaúniÍcie informacji w†rejestrze
i†pamiÍtanie jej gdy P3.7=0. Gdy
chcemy obs³uøyÊ klawiaturÍ, nale-
øy wpisaÊ do portu P1 wartoúÊ
0xFF (ustawienie wszystkich linii
w†stan wysoki w†celu wykorzysta-
nia ich jako wejúcia), a†nastÍpnie
wyzerowaÊ liniÍ P3.0. Jeøeli ktÛ-
ryú z†klawiszy zostanie wciúniÍty,
to odpowiednia linia portu P1 zo-
stanie wprowadzona w†stan niski
(wskutek po³¹czenia z†lini¹ P3.0
pozostaj¹c¹ w†stanie niskim). Od-
czytuj¹c stan portu P1 odczytuje-
my zatem stany klawiszy (ì0î -
klawisz wciúniÍty) - po dokonaniu
odczytu naleøy z†powrotem usta-
wiÊ liniÍ P3.0 w†stan wysoki.
Uk³ad dzia³a³by rÛwnieø popra-
wnie, gdyby pominiÍto zastosowa-
ne diody w³¹czone szeregowo
z†przyciskami, jednak mog³yby wy-
st¹piÊ przek³amania przy zapisie
do rejestru, gdyby w†czasie trans-
misji kilka przyciskÛw by³o naciú-
niÍtych rÛwnoczeúnie. Dlatego teø
lepiej wspomniane diody zastoso-
waÊ. Przyk³adow¹ sekwencjÍ roz-
kazÛw obs³uguj¹cych wspomniany
uk³ad zamieszczono na list. 10 .
List. 11. Program obsługi klawiatury matrycowej (schemat na rys. 29)
;KLAW1_8 - pomocnicza zmienna bajtowa pamiętająca stan klawiszy SW1
; do SW8 (najmłodszy bit oznacza stan SW8, “1” oznacza
; klawisz wciśnięty)
;KLAW8_16 - pomocnicza zmienna bajtowa pamiętająca stan klawiszy SW8
;
do SW16 (najmłodszy bit oznacza stan SW16, “1” oznacza
;
klawisz wciśnięty)
CZYTAJ_KLAWISZE: ;procedura wywoływana przez LCALL
MOV P1,#0FFH ;ustawienie linii portu P1 w stan wysoki
CLR P1.3 ;wyzerowanie linii P1.3
MOV A,P1 ;odczyt stanu linii portu P1 (czytamy 1 wiersz)
SETB P1.3 ;ustawienie linii P1.3 (bo stan już odczytaliśmy)
CPL A ;negacja (aby 1 oznaczała wciśnięty klawisz)
ANL A,#0F0H ;maskowanie młodszych 4 bitów - interesują nas starsze
MOV KLAW1_8,A ;zapamiętanie stanu 4 klawiszy
CLR P1.2 ;wyzerowanie linii P1.2
MOV A,P1 ;odczyt stanu linii portu P1 (czytamy 2 wiersz)
SETB P1.2 ;ustawienie linii P1.2
CPL A ;negacja
ANL A,#0F0H ;maskowanie
SWAP A ;zamienienie miejscami połówek bajtu (bo wiersz 2 to 4
;młodsze bity KLAW1_8)
ORL A,KLAW1_8 ;połączenie informacji o obu wierszach
MOV KLAW1_8,A ;zapamiętanie stanu wszystkich ośmiu klawiszy
CLR P1.1 ;wyzerowanie linii P1.1
MOV A,P1 ;odczyt stanu linii portu P1 (czytamy 3 wiersz)
SETB P1.1 ;ustawienie linii P1.1
CPL A ;negacja
ANL A,#0F0H ;maskowanie
MOV KLAW8_16,A ;zapamiętanie stanu 4 klawiszy (SW9-SW12)
CLR P1.0 ;wyzerowanie linii P1.0
MOV A,P1 ;odczyt stanu linii portu P1 (czytamy 4 wiersz)
SETB P1.0 ;ustawienie linii P1.0
CPL A ;negacja
ANL A,#0F0H ;maskowanie
SWAP A ;zamienienie miejscami połówek bajtu
ORL A,KLAW8_16 ;połączenie informacji o obu wierszach
MOV KLAW8_16,A ;zapamiętanie stanu wszystkich ośmiu klawiszy
RET
;powrót do programu głównego
Elektronika Praktyczna 10/2003
89
32651594.007.png
K U  R S
rÛw podci¹gaj¹cych dla linii P1.0
i†P1.1 mikrokontrolerÛw
AT89Cx051, gdyø stan wysokiej
impedancji i†stan wysoki s¹ tu
nierozrÛønialne - na pracÍ uk³adu
wp³ywa tylko stan niski). WstÍp-
nie naleøy do portu P1 wpisaÊ
same jedynki (ustawiÊ wszystkie
linie), nastÍpnie moøemy przejúÊ
do odczytu pierwszego wiersza.
Dokonujemy tego zeruj¹c progra-
mowo liniÍ P1.3 (linie P1.0 do
P1.2 pozostaj¹ w†stanie wysokim)
i†odczytuj¹c stan wyprowadzeÒ
P1.4...P1.7 - stan tych linii od-
zwierciedla stan klawiszy w†pier-
wszym wierszu (SW1...SW4) -
przyk³adowo stan niski na linii
P1.6 oznacza wciúniÍcie SW2.
W†podobny sposÛb postÍpujemy
dla pozosta³ych wierszy, kolejno
zeruj¹c pojedynczo linie P1.2,
P1.1 i†P1.0 (pozosta³e linie w†sta-
nie wysokim) i†odczytuj¹c stan
czterech starszych linii portu.
Rozwi¹zanie programowe bÍdzie
polegaÊ na jednorazowym odczy-
taniu stanu wszystkich klawiszy,
a†nastÍpnie przekazaniu informacji
o†naciúniÍciach do programu g³Ûw-
nego (przez zapamiÍtanie w†po-
mocniczej zmiennej). Przyk³adow¹
procedurÍ obs³ugi klawiatury mat-
rycowej zamieszczono na list. 11 .
Gdyby zaistnia³a potrzeba od-
czytywania stanu klawiatury ko-
lumnami, to zmieni¹ siÍ jedynie
funkcje wyprowadzeÒ: kolejno ze-
rowaÊ bÍdziemy wyprowadzenia
P1.4...P1.7, a†odczytywaÊ P1.0...P1.3
(tym razem konieczne bÍd¹ rezys-
tory podci¹gaj¹ce dla P1.0 i†P1.1
mikrokontrolerÛw AT89Cx051).
Rys. 29
W†przypadku naciúniÍcia wiÍcej
niø jednego klawisza istnieje niebez-
pieczeÒstwo odczytania przez uk³ad
dziwnej kombinacji naciúniÍtych kla-
wiszy (podobna cecha jak w†uk³a-
dzie z†rys. 28, choÊ tutaj nie zosta-
n¹ przek³amane øadne transmitowa-
ne dane - tylko klawiatura korzysta
z†tych linii portu). Aby temu zapo-
biec moøna zastosowaÊ diodÍ szere-
gowo w³¹czon¹ z†kaødym klawiszem
(patrz rys. 28). W†naszym przypad-
ku (odczytywane wiersze klawiatu-
ry) diody naleøy w³¹czyÊ katodami
w†kierunku linii wierszy
(P1.0...P1.3). Gdybyúmy klawiaturÍ
chcieli odczytywaÊ kolumnami, to
naleøy diody pod³¹czyÊ odwrotnie.
Zastosowanie klawiatury matry-
cowej w†systemie mikroprocesoro-
wym pozwala na zaspokojenie na-
wet bardzo rozbudowanych potrzeb
dotycz¹cych klawiatury. Istniej¹ jed-
nak aplikacje, w†ktÛrych zastosowa-
nie rozbudowanego uk³adu klawia-
tury jest niemoøliwe ze wzglÍdu na
wykorzystanie w†innych celach li-
nii portÛw mikrokontrolera - po
prostu brakuje nam wolnych linii
niezbÍdnych do obs³ugi duøej
liczby klawiszy. Rozwi¹zania prob-
lemu s¹ dwa: moøna zastosowaÊ
specjalizowany uk³ad scalony lub
lepiej odpowiednio oprogramowany
drugi mikrokontroler (rozwi¹zanie
niejednokrotnie taÒsze i†elastyczniej-
sze) odpowiedzialny tylko i†wy³¹cz-
nie za wykrywanie faktu naciska-
nia klawiszy i†komunikuj¹cy siÍ
z†g³Ûwnym mikrokontrolerem za po-
moc¹ niewielkiej liczby linii (jed-
na, gÛra dwie linie) lub zastoso-
waÊ to samo rozwi¹zanie w†goto-
wej postaci dostarczanej przez wie-
lu producentÛw sprzÍtu komputero-
wego - standardow¹ klawiaturÍ
komputera PC-AT. Zastosowanie
klawiatury PC ma tÍ zaletÍ, øe jest
stosunkowo tanie, a†takøe bardzo
³atwe w†adaptacji i†estetyczne - od-
pada koniecznoúÊ borykania siÍ
z†rozwi¹zaniami mechanicznymi
i†obudow¹ klawiatury. Jedyn¹ wad¹
takiego rozwi¹zania jest koniecznoúÊ
zapoznania siÍ z†doúÊ nietypowym
sposobem komunikacji klawiatury
z†mikroprocesorem. SzczegÛ³y przed-
stawimy za miesi¹c.
Pawe³ Hadam, AVT
pawel.hadam@ep.com.pl
90
Elektronika Praktyczna 10/2003
32651594.008.png
Zgłoś jeśli naruszono regulamin