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


Časové průběhy při zápisu/čtení dat do/z expanderu
Obr.1 Časové průběhy při zápisu/čtení dat do/z expanderu 82C43

Propojení 8051 s expanderem 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.

Použití dekodéru 1 z n pro připojení více expanderů
Obr.3 Použití dekodéru 1 z n pro připojení více expanderů

Vytisknout stránku
Zpátky Zpátky
© DH servis 2002 -