Při návrhu
zařízení se můžeme dostat do situace, kdy potřebujeme více vstupních nebo
výstupních vývodů než které nám sám mikroprocesor nabízí. Problém s nedostakem
v/v vývodů můžeme ře‘it několika způsoby:
použitím mikroprocesoru s roz‘ířeným počtem v/v vývodů |
doplněním mikroprocesoru o expandér |
multiplexováním vstupů/demultiplexováním výstupů |
Na‘e rozhodování
o použití některého z vý‘e uvedených způsobů dosažení roz‘ířeného počtu vstupních / výstupních (v/v)
vývodů může ovlivnit několik faktorů. Může jím být např. velikost desky plo‘ných
spojů, kterou nesmíme překročit. Tady jednoznačně vítězí ře‘ení s použitím verze
mikroprocesoru s roz‘ířeným počtem vstupů/výstupů. Nepotřebujeme totiž žádnou
dal‘í žádnou dal‘í součástku (IO) a i když je poudro takovéhoto mikroprocesoru o
něco vět‘í, pořád toto ře‘ení vychází prostorově nejméně náročné. Dal‘ím
faktorem může být cena výsledného zařízení. Pokud se podíváme do nějakého ceníku
s elektronickými součástkami, zjistíme, že:
(uvedeme si konkrétní případ s
mikroprocseory ATMEL)
- typ AT89C2051 nám nabízí 15 v/v za cena kolem 50 Kč (2003)
(pokud budeme využívat sér.kanál, externí přeru‘ení, externí zdroj pro čítače
nebo analogový komparátor, může nám pro volné použití zůstat pouze 7 v/v
vývodů)
- typ AT89C51 (89C52) nám nabízí 32 v/v za cenu téměř stejnou jakou u
AT89C2051 - přibližně 70 Kč. Při použití alternativních funkcí v/v vývodů
(sér.kanál, ext.přeru‘ní atd.) budeme mít k dispozici nějakých 24 v/v
vývodů
- expander 82C43 nám umožní roz‘ířit mikroprocesor o 16 v/v při
použití 5 v/v vývodů mikroprocesoru, cena tohoto expanderu činí přibližně 200
Kč, ve výprodeji kolem 40 Kč.
- obvod 82C55A nám umožní roz‘ířit mikroprocesor
o 24 v/v při použití 8 v/v vývodů mikroprocesoru, cena tohoto obvodu činí
přibližně 100 Kč.
Posledním faktorem je náročnost programové obsluhy. Při
použití mikroprocesoru s roz‘ířeným počtem v/v se nesetkáme s žádnými problémy,
v‘echny v/v jsou nám k dispozici, lze je adresovat jednotlivě. Naopak při
použití expanderu je nutná náročněj‘í softwarová obsluha - nějakým způsobem je
nutné zaadresovat požadované v/v a režim expanderu. V/v obvykle nelze adresovat
jednotlivě (po bitech), ale po skupinách, na‘těstí expandery poskytují režim
log.součinu, čímž lze zajistit adresování (při zápisu) jen určitých v/v (bitů).
Je tedy vždy dobré zvážit, který způsob roz‘íření v/v výchazí pro danou
aplikaci nejvýhodněji. Pokud výrobce nabízí variantu mikroprocesoru s roz‘ířeným
počtem v/v, je toto vždy výhodněj‘í než použití externího expanderu (z hlediska
obsazené plochy DPS, ceny i jednoduchosti programové obsluhy).
Rozdíl
mezi druhým a třetím způsobem roz‘íření počtu v/v (tedy použití expanderu a
multiplex./demultiplex. vstupů a výstupů) není zcela jednoznačný. Funkce
expanderu je totiž také založena na multiplexování vstupů a demultiplexování
výstupů. Do třetího způsobu si ale v na‘em povídání zařadíme integrovaný obvod
8205, který funguje jako dekoder 1 z n, a ten na rozdíl od expanderu 82C43 nebo
82C55A dokáže pracovat pouze jednosměrně - nelze programově zvolit funkci jeho
v/v vývodů. Musí být vždy pevně zapojen buď jako multiplexor vstupů nebo jako
demultiplexor výstupů. Dále se o tomto obvodu nebudeme zmiňovat - nemá dnes
praktické využití, nevyrábí se, s trochou ‘těstí ho lze sehnat ve výprodeji.
Integrovaný obvod 82C43 Intel výrobu a
dal‘í podporu IO 82C43 zastavil, dnes tento obvod vyrábí firma OKI Semiconductor pod označením MSM82C43. Jak jsme
si už uvedli vý‘e, IO 82C43 pracuje jako expander - je určený pro roz‘íření
počtu vstupů a výstupů mikroprocsoru 8051 (původně k 8048). Jde o
programovatelný obvod, který obsahuje čtyři 4-bitové obousměrné porty P4 až P7.
Obvod se k mikroprocesoru připojuje přes port P2 (P20 až P23), z
mikroprocesoru nám tedy expander "ukousne" čtyři v/v piny pro sebe. Činnost
obvodu se řídí signálem přivedeným na vstup PROG. V klidovém stavu je signál
PROG v log.1. Při přechodu z l do 0 si řídící logika expanderu zjistí z
přijatých dat na portu 2 řídící slovo (4 bity), které generujeme v programu
mikroprocesoru. Podle řídícího slova se vybraný port (P4,P5,P6,P7) expanderu
nastaví do daného funkčního režimu dle tabulky níže. Za řídící slovem následují
samotná data (4 bity), která představují logický stav jednotlivých pinů
nastaveného portu (dle režimu). Způsob zápisu a čtení dat do/z portu je nejlépe
vidět z obr.1. V‘echny časy tnějaký index zakreslené v časových
průbězích jsou v desítkách, případně stovkách nanosekund, proto jejich vliv není
z programového hlediska rozhodující a tudíž si je zde nebudeme blíže popisovat.
Podrobně jsou popsány v datasheetu. Obvod
82C43 vykonává svou činnost, pokud je na vstupu CS
log.0.
Adresování portů |
Kódování režimů |
P21 |
P20 |
Port |
P23 |
P22 |
Režim |
0 |
0 |
P4 |
0 |
0 |
čtení |
0 |
1 |
P5 |
0 |
0 |
zápis |
1 |
0 |
P6 |
1 |
0 |
OR |
1 |
1 |
P7 |
1 |
1 |
AND |
Tab.1 Kódování řídícího
slova
Obr.1 Časové průběhy při zápisu/čtení dat do/z expanderu
82C43
Obr.2
Propojení mikroprocesoru AT89C2051 s expanderem 82C43
Ukážeme si jednoduchou programovou obsluhu expanderu -
program pro čtení(2), pro zápis (1a,1b) a nakonec pro čtení i zápis dat
(3). Pro v‘echny 3 programy vycházíme ze zapojení na obr.2. Místo tlačítek
TL1 až TL4 může použít přepínače (jedna poloha bude +5V a druhá zem - ani
jedna poloha přepínače nesmí zůstat nezapojena z důvodu vysokoohmového
vstupu expanderu při čtení). |
|
|
Příklad 1a - zápis
prog bit p1.4
;
org 0
jmp zac
org 30h
zac: mov a,#0ffh
anl a,#11110101b ;zápis 0000 do P5
mov p1,a
clr prog
anl a,#11100000b
mov p1,a
setb prog
konec: jmp konec
end
Pokud budeme používat port P5 v celém programu pouze k zápisu,
můžeme použít namísto adresování celého portu P1 (89C2051) jen bitové adresování
P1.0 až P1.3. Nastavení výstupů tak může být pro někoho přehledněj‘í, nemusíme
si také hlídat zbylé piny portu P1 (v předchozím příkladě jsme k tomu, abychom
neovlivnili stav pinů P1.5 až P1.7, museli použít instrukci ANL).
Příklad 1b - zápis
(bitové adresování)
p20 bit p1.0
p21 bit p1.1
p22 bit p1.2
p23 bit p1.3
prog bit p1.4
;
org 0
jmp start
org 30h
start: setb p20 ;port P5 - zápis
clr p21
setb p22
clr p23
clr prog
setb p20 ;data (1001)
clr p21
clr p22
setb p23
setb prog
konec: jmp konec
end
Příklad 2 -
čtení
prog bit p1.4
;
org 0
jmp zac
org 30h
zac: nop
start: mov p1,#11110010b ;čtení z P6
clr prog
orl p1,#0fh
mov a,p1 ;v acc je stav vstupů P60 až P63
setb prog
konec: jmp start
end
Následující příklad nám poslouží k ověření správné funkce
čtení - načte se stav vstupů portu P6 (tj. stav tlačítek TL1 až TL4) a stav P6
se zapí‘e do portu P5 (LED diody D1 až D4). Stisknuté tlačítko odpovídá
rozsvícené LEDce.
Příklad 3 - čtení a zápis
prog bit p1.4
;
org 0
jmp start
org 30h
start: mov p1,#11110010b ;čtení z P6
clr prog
orl p1,#0fh
mov a,p1
setb prog
nop
mov p1,#11110101b ;zápis P6 do P5
clr prog
anl a,#11101111b
mov p1,a
setb prog
delay: mov r1,#255 ;krátká prodleva
znov: mov r2,#255
opak: djnz r2,opak
djnz r1,znov
konec: jmp start
end
Jak jsme si uvedli vý‘e, obvod zpracovává řídící slova a pak
dále pracuje jen tehdy, pokud je na vstupu CS log.0.
Jde tedy o jakýsi povolovací (nebo též výběrový) vstup, který můžeme také řídit
přes výstup mikroprocesoru nebo jej můžeme nechat trvale připojený na zem, tak
jak je tomu na obr.2. Vstup CS ale můžeme využít i
jinak - pomocí něj můžeme k mikroprocesoru připojit několik obvodů 8243 aniž
bychom museli využít dal‘ích pětic vstupů/výstupů mikroprocesoru. K 8051
připojíme dekodér 1 z n (např. 74138), jehož výběrové vstupy připojíme na
výstupy 8051 a výstupy dekodéru připojíme na povolovací vstupy CS jednotlivých expanderů. Pětici v/v pinů z 8051
přivedeme paralelně na vstupy P20 až P23 v‘ech expanderů.
Lépe to celé bude
vidět na obr. 3. Je zřejmé, že úspora volných v/v mikroprocesoru bude značná.
Např. pro 8 expanderů potřebujeme 3 výstupy z 8051 (pro dekoder) namísto 40
(tedy dokonce více, než kolik nám nabízí standardní verze 8051!) při zapojení
každého expanderu samostatně. Ale vždy je něco za něco - úspora v/v je na úkor
náročněj‘í programové obsluhy. Navíc toto ře‘ení není vhodné, pokud potřebujeme
rychle číst stavy vstupů. Toto ře‘ení je tedy výhodné předev‘ím pro roz‘íření
počtu výstupů mikroprocesoru.
Obr.3 Použití dekodéru 1 z n pro připojení více expanderů
|
© DH servis 2002 - |