Hlavní navigace

Rozšíření počtu výstupů portu

30. 7. 2009
Doba čtení: 4 minuty

Sdílet

Na rozdíl od rozšiřování počtu vstupů je nutné použít nějakou paměť, která si zapamatuje stavy výstupu i v době, kdy jsou na výstupu paralelního portu jiné hodnoty (dochází k nastavování jiných výstupů). K tomu se používají klopné obvody D. Těchto obvodů je (stejně jako u hradel) většinou více v jednom pouzdře.

Klopný obvod RS

Nejjednodušší typ klopného obvodu je obvod R-S. Tento obvod má dva vstupy a dva výstupy. Výstupy jsou navzájem negované – na jednom je za normálních okolností vždy opačná hodnota, než na druhém. Jsou-li na obou vstupech (R – reset, S – set) logické 0, obvod si pamatuje předchozí stav. Logická 1 na jednom vstupu mění stav, na obou vstupech zároveň nesmí nastat (na obou výstupech je pak logická 1). Pozor, je vhodné si povšimnout, že obvod složený ze dvou hradel NAND (na schématu) má negované vstupy /R a /S, pamatovací stav je tedy /R=1, /S=1, zapisuje se pomocí log 0 a není povoleno přivést log 0 na oba vstupy najednou.

Tento obvod nám moc nepomůže k rozšíření počtu výstupů, zato ho lze s úspěchem využít k zachytávání krátkých událostí. Za předpokladu, že nepotřebujeme vědět, kdy přesně událost nastala, ani kolikrát (zajímá nás pouze, jestli nastala alespoň jednou nebo ne), lze tento signál přivést na vstup S, vstup R připojit na jeden z výstupů portu a výstup Q na jeden ze vstupů portu. Objevíme-li na vstupu portu logickou 1, víme, že došlo k příchodu signálu (možná stále ještě dochází). Pak můžeme obvod opět resetovat a čekat dál. Například by tím šlo měřit počet průjezdů autíčka na autodráze, za předpokladu, že autodráha sama je tak dlouhá, že autíčko nestihne projet tak rychle, aby mezi tím počítač nestihl vynulovat klopný obvod. Pokud bychom chtěli měřit přesný čas průjezdu, bylo by nutné použít čítač a nevyplatí se to neudělat s jednochipovým mikroprocesorem.

Klopný obvod RST

Z klopného obvodu RS vznikne obvod RST, použijeme-li třívstupová hradla NAND místo dvouvstupových a přidané vstupy spojíme do vstupu T. Tento obvod se chová stejně, jako obvod RS, ale reaguje na vstupy R a S pouze v případě, že na vstupu T je logická 1. Vstup T jsou hodiny (a obvod reaguje na jejich úroveň – obvykle se používají o něco složitější obvody reagující na hranu hodin).

Klopný obvod D

Protože nepotřebujeme přivádět na oba vstupy R a S zároveň stejnou hodnotu (log 1 je zakázaný stav a log 0 je zapamatování, ke kterému dochází také během T=0), můžeme na jeden z nich zapojit negaci druhého. Tím získáme ze dvou hradel NAND a jednoho NOT klopný obvod D. Ten kopíruje hodnotu vstupu D na výstup Q, má-li log 1 na vstupu T.

Porty

Tento obvod si můžete zapojit na nepájivém kontaktním poli (7410 obsahuje 3× 3 vstupový NAND, z jednoho lze udělat invertor spojením jeho vstupů). Dá se postavit i z pěti dvouvstupových hradel NAND.

Porty

Konkrétní IO

Prakticky nemá smysl tento obvod stavět, protože v každé 7474 jsou dva a bez práce. Pokud jich je potřeba více, obvod 74173 obsahuje 4 společně řízené klopné obvody D s možnosti odpojit vstupy i výstupy, 74174, 74175 a 74273 obsahují 6, respektive 4 a 8, společně řízených obvodů D s možností nulování a společnými hodinami. Jeden 74273, nebo dva 74175 si tedy zapamatují celý byte (dva 74174 na zapamatování všech 12ti výstupních bitů paralelního portu prakticky použít nejde – nebylo by je čím řídit).

Pro rozšíření výstupu paralelního portu na 2–4 byte tedy lze použít 2–4 obvody 74273 (po dvojicích) se spojenými vstupy a hodinami ovládanými výstupy control registru. Do 16ti byte lze použít identické zapojení s dekodérem 1z16ti připojeným na control registr. Jeho výstupy se použijí jako hodiny. Jsou aktivní v nule, 74175 reaguje na vzestupnou hranu hodin, k přepisu tedy dochází během změny na jiný byte, nikoliv během jeho nastavení.

Toto zapojení jsem realizoval, když jsem potřeboval čtyřbytový výstup a jednobytový vstup (na ovládání stačily tři vodiče control registru, čtvrtý ovládal vstupní multiplexer, zápis jsem prováděl zapsáním adresy neexistujícího byte), byla to dost velká deska (13 pouzder IO, 8 z nich byly 74175).

Dnes bych pravděpodobně použil několik obvodů 74259, které přímo v sobě mají dekodér 1z8 a jejich výstupy jde programovat postupně jedním vstupem D.

root_podpora

Porty

Způsob ovládání je ze schématu myslím vidět. Označme adresu S0, S1 a S2, registry a, b, c a d, jejich výstupní bity a0 až a7, b0 až b7 … d0 až d7 a vstupní bity Da, Db, Dc a Dd. Pak zapíšeme adresu a data do výstupu portu: „d0 c0 b0 a0 1 0 0 0“ a povolíme G zápisem „d0 c0 b0 a0 0 0 0 0“. Tím jsme zapsali do nejnižších 4 bitů. Pokračujeme „d1 c1 b1 a1 1 0 0 1“, „d1 c1 b1 a1 0 0 0 1“; „d2 c2 b2 a2 1 0 1 0“, „d2 c2 b2 a2 0 0 1 0“; … „d7 c7 b7 a7 1 1 1 1“, „d7 c7 b7 a7 0 1 1 1“. Tím jsme zapsali celé 4 byte.

Je dobré všimnout si, že hodnoty jsou použity (přepsány do registru) až v okamžiku druhého zápisu (s log 0 na /G), takže se zdá, že první zápis je zbytečný. Nicméně první zápis slouží k tomu, aby hodnoty byly na vstupech registru zaručeně dříve, než je povolen jejich přepis do klopných obvodů. Pokud by to tak nebylo, záleží na zpožděních v obvodu, portu, délkách a kapacitách vodičů, zda se přepíší staré hodnoty, nové hodnoty, nebo jejich mix. Spodní tři bity na portu jsou adresou zapisovaných bitů v registrech.

Byl pro vás článek přínosný?