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
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
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
Plik z chomika:
militare
Inne pliki z tego folderu:
Podstawy projektowania systemów mikroprocesorowych, cz. 1.pdf
(113 KB)
Podstawy projektowania systemów mikroprocesorowych, cz. 10.pdf
(113 KB)
Podstawy projektowania systemów mikroprocesorowych, cz. 11.pdf
(152 KB)
Podstawy projektowania systemów mikroprocesorowych, cz. 12.pdf
(59 KB)
Podstawy projektowania systemów mikroprocesorowych, cz. 2.pdf
(119 KB)
Inne foldery tego chomika:
• Prostowniki i zasilacze
[CD14] - Dlaczego Hitler Kazał Zabić Ernsta Rohma
▣ Bardzo Ściśle Tajne
▣ Bitwa o Anglię
▣ Bohaterowie II Wojny Światowej lektor chomikuj
Zgłoś jeśli
naruszono regulamin