Připojení expanderu - rozšíření počtu vstupů a výstupů mikroprocesoru

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: Naše rozhodování o použití některého z výše uvedených způsobů dosažení rozšířeného počtu 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 100 Kč (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ě 120 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ů

Zpět na hlavní stránku

Copyright © Michal Fuksa 2001