HOME

8-místný zobrazovač se sériovým stykem

návrh vylepšení konstrukce z ME 1988



Pozor! Níže popsané zařízení je přežitek a tento článek je úplně zbytečný. I kdyby to někdo měl potřebu realizovat, bylo by daleko snadnější to realizovat jednočipem (MCU). Proto prosím všechny ty, kteří se bez jednočipáku nedojdou ani vychcat, aby ve vlastním zájmu nečetli dál. Tohle je pouze pro velmi úzký okruh lidí, které to diskrétní TTL prostě baví. A bacha! Je to dlóóóuhýýý... Ale výživný:-)

Během jednoho e-mailového rozhovoru došla "řeč" na 8-místný multiplexovaný LED displej se sériovým rozhraním popsaným v zelené ročence amára Mikroelektronika 1988 (dále jen ME1988). Celé zapojení je realizováno z klasických TTL obvodů. A to se mi líbí:-) Nastudoval jsem si princip tohoto zapojení a následně si jako mentální cvičení zkusil navrhnout nějaká dále popsaná vylepšení. Předem ale upozorňuji, že jako celek jsem to (zatím) nezkoušel. Nicméně fragmenty tohoto zapojení jsem již dříve prakticky ověřil v jiných podobných konstrukcích. Nakonec jsem to ale vyzkoušel celé...


TTL displej z ME 1988
Obálka ME 1988
TTL displej z ME 1988
Původní zapojení displeje

Ještě se vrátím k tomu původnímu zapojení. V originálním schématu je podle mě chyba. Společný bod D3, R12, C6 a C7 by totiž měl být uzeměn. Doplnil jsem to do schématu výše červeně. Desku jsem nezkoumal, ale předpokládám, že tam je to OK, když to autor podle všeho úspěšně provozoval. Dále jsem se domníval, že stejná velikost odporů R44-R59 bude problém a PNP tranzistory společných anod se neotevřou díky tomu děliči napětí :2. Ovšem záhy jsem si uvědomil, že v kolektoru je zapojen vždy LED segment displeje a také další spínací tranzistor. Čili je ten kolektor "podepřen" dostatečně velkým napětím, aby to fungovalo. Vyzkoušel jsem si to v praxi s tranzistorem a ledkou. Přesto bych ty odpory R52-59 dal větší. Třeba 3K3. I to jsem vyzkoušel.



Vylepšení 1: nesymetrické hodiny a zhasínání dipleje

Při multiplexním řízení LED displejů je dobrým zvykem před změnou pozice aktivní znakovky a aktivních segmentů, původně svítící znakovku zhasnout (vypnout segmenty). V praxi totiž obvykle nelze zaručit, že změna společné elektrody a změna konfigurace segmentů nastane ve stejném čase. Vždy jedno předchází druhému a to se projeví tzv. duchy. Duchové jsou prosvítající segmenty přecházejícího, nebo následujícího znaku na aktivní, či sousední znakovce. Podle toho co nastane dříve. Jestli změna společné elektrody, nebo změna konfigurace svítících segmentů. Takové zobrazení pak nevypadá hezky. U displeje z ME1988 si troufnu odhadnout, že duchové budou v podobě prosvítání předcházejícího znaku v aktivní znakovce, protože celkové zpoždění vybavení RAM 7489 a dekodéru D147 bude asi větší, než zpoždění samotného dekodéru 7442. Čili nejprve je přepnuta znakovka a teprve poté je změněna konfigurace segmentů. Na kratičký okamžik se tedy na nové znakovce objeví znak z té předcházející. A bohužel to velmi často bývá pouhým okem vidět. Pokud na předcházející znakovce byl zobrazován znak 8 a na následující třeba 1. Uvidíme v té jedničce i ducha osmičky.

V původním zapojení z ME1988 se toto neřeší. Řeší se pouze vypnutí zobrazení v okamžiku zápisu nových dat do RAM deaktivací převodníku D147 signálem /BO (správně BI/RBO). To je taky důležité, neboť v době tohoto zápisu by byl na displeji maglajs. Ale bylo by velmi jednoduché potlačovat zobrazení i v době přechodu na další znakovku a zapnout zobrazení až po ustálení stavů na výstupech společných anod i segmentů. Jak na to?

Stačí použít na taktování (signál CU) toho adresového čítače 74193 nesymetrické hodiny s poměrem puls:mezera cca 1:41:8 a v době vysoké úrovně hodin potlačit zobrazení "zataháním" za BO. Čítač je totiž inkrementován vzestupnou hranou hodin a během následující vysoké úrovně by se zobrazení potlačilo. Během té doby si ostatní obvody "vyřídí co potřebují" a až budou jejich výstupy stabilní, zobrazení se v době nízké úrovně opět zapne. Aby nebyl zbytečně snižován jas svítících znaků, měla by nízká úroveň trvat mnohem déle, než vysoká. V praxi se mi osvědčil právě výše zmíněný poměr. Mám to vyzkoušeno prakticky na podobně řešeném displeji a je to skvělé, ostré a bez duchů.

TTL displej z ME 1988
Nový oscilátor s NE555 s nastavitelnou střídou

Tento asymetrický oscilátor by bylo možné vytvořit i z toho, co je v původním schématu. On koneckonců podle těch kondů asymetrický je, ale ne tolik a není toho využito. Dal bych tam oscilátor s NE555 dle předešlého obzázku. Trimrem se dá nastavit střída tak, aby jas znakovek byl co největší, ale ještě se nezačaly objevovat duchové. Duchové se budou objevovat v případě, že puls bude příliš krátký a tudíž zatemnění nestačí pokrýt přechodové stavy čítače a zpoždění RAM a dekodérů. Taky tam ten puls vůbec nějaký být musí, aby došlo k inkrementaci čítače adres 74193:-)

Co se týká frekvence, je to taky jednoduché. U podobně řešených multiplexních LED displejů se mi osvědčilo, aby byl celý displej obsloužen do cca 10 ms. Jen pro informaci: jeden půlsnímek TV PAL signálu se vykresluje 20 ms a celý obraz 40 ms. A taky to vidíme bez blikání. Čili pro 8-místný displej platí, že na obsluhu jedné znakovky máme 10/8=1,25 ms. To odpovídá minimální taktovací frekvenci toho čítače na 0,8 KHz. S uvedenými součástkami by (vypočtená) frekvence toho 555 oscilátoru měla být cca 1,2 KHz a to je v pohodě.



Vylepšení 1.5: náhrada dekodéru spol. anod 7442 typem 74138

S ohledem na další vylepšování tohoto displeje bych udělal ještě jednu změnu. Nahradil bych dekodér anod 7442 dekodérem 74138 (3205). Ten má totiž na rozdíl od 7442 řídící vstupy sloužící k jeho blokování. Pak by se na potlačení zobrazení nepoužíval vstup /BO u D147, ale vstupy /E1, /E2 a E3 dekodéru 74138. V daném zapojení je totiž jedno, jestli zobrazení potlačíme vypnutím segmentů, nebo vypnutím společných anod. S 74138 ušetříme dvě diody na montážní AND a jeden invertor na negaci hodin. Hodiny přivedeme přímo do vstupu /E2 a signál zatemnění při zápisu (/LOAD) do RAM do vstupu E3. Vstup /E1 připojíme na GND a BO u D147 připojíme na log. 1.

TTL displej z ME 1988
Dekodér společných anod 74138 namísto 7442



Vylepšení 2: UART RX

Původní zapojení používá nestandardní protokol přenosu bez start a stopbitů. Posílá se 8 bitů v podobě 8 pulsů a logická úroveň je kódována délkou pulsů. Log. 0 představuje puls délky T, log. 1 je puls délky 2T a celková délka pro jeden bit činí 3T. Je to podobné, jako ukládání dat na magnetofon u některých starých osmibitových počítačů. Tam však délku pulsů při zápisu i přehrávání měřil procesor. Tady jsou pulsy odměřovány pomocí dvojice MKO s běžnými odpory a kondenzátory. Princip je v původním článku dobře popsaný. Dovedu si představit, že sladění tohoto displeje s algoritmen na odesílací straně nebylo vůbec snadné. A to ještě nepočítám ty různé derivační a integrační RC články na generování zápisových pulsů pro 74193 a RAM 7489. To je taky ošklivé. Toto řešení se mi celkově nelíbilo a tak jsem zkusil zapojení upravit na příjem dat z klasického UARTu a také jsem se chtěl zbavit té RC havěti na generování zápisových pulsů. Vše pochopitelně v TTL s použitím tehdy již vyráběných obvodů. Zde je moje řešení:


TTL displej z ME 1988
Přijímač TTL UART RX

Zapojení obsahuje 2 klopné obvody RS (KO1 a KO2), které je potřeba po zapnutí nastavit do klidového stavu. To provádí generátor signálu /RESET se dvěma invertory a RC článkem. Resetování je možné i ručně tlačítkem RES. Během resetu a krátce po něm se předpokládá klidový stav sériové linky RX=1.

V klidu je KO1 překlopen tak, že výstup RES393=1 a tím je čítač přijatých bitů udržován v resetu (výstupy=0). Jako čítač přijatých bitů slouží dvojitý 4-bitový čítač v jednom pouzdře 74393, ale je možné jej nahradit dvojicí klasických 7493. KO2 je překlopen tak, že výstup /LOAD=1 a tím je povoleno čítání čítače adres 74193 v displeji a displej tak může zobrazovat. Jelikož jsou výstupy čítače přijatých bitů 74393 udržovány v log.0, je zablokován dekodér 74138 (3205) a jeho výstupy jsou v log.1, čili neaktivní.

Nyní čekáme na sériová data. Příchodem startbitu (RX=0) se překlopí KO1 a uvolní se čítač 74393. Ten začne čítat frekvenci, která je 16x vyšší, než domluvená přenosová rychlost. Pro 9600 Bd je to 153,6 KHz. Jako zdroj hodin je ideální krystalový TTL oscilátor s běžně dostupným krystalem 2,4576 MHz vyděleným :16 pomocí dalšího 4-bitového čítače 7493. Na jeho výstupu D je již požadovaných 153,6 KHz. Tento signál si pro příště označíme jako CLKRX.

Jakmile se výstup D první poloviny 74393 překlopí do log.1, je přijímaný bit z RX zapsán do posuvného registru 74164 v displeji. V tomto okamžiku se nacházíme zhruba v polovině přijímaného bitu a tudíž je stav na RX stabilní. Na konci přijímaného bitu se sestupnou hranou na D inkrementuje druhý čítač v 74393. Ten funguje jako počitadlo přijatých bitů. Po 9 přijatých bitech (8 platných + 1 start) máme na výstupech 74164 přijatých 8 platných datových bitů. V tomto okamžiku aktivujeme dekodér 74138 (3205) a čekáme na další impulsy hodin. Po krátké prodlevě je nejprve překlopen KO2, čímž je aktivován /LOAD=0 a do čítače adres 74193 je asynchronně nahrána adresa pro RAM 7489. Po další prodlevě je vygenerován zápisový impuls /WE=0 pro RAM a teprve poté je zpětným překlopením KO2 uvolněn čítač adres (/LOAD=1) a displej může dále zobrazovat.

Teprve pak je vygenerován signál /STOP=0, který překlopí KO1 zpět do klidové polohy. Časově se v té době pohybujeme cca v 1/4 stopbitu (RX=1). Pak je celý obvod připraven přijmout další data začínající startbitem RX=0. Signál RESET393, případně jeho komplement z druhého výstupu KO1, se dá využít jako indikace BUSY/READY pro vysílací stranu.

Dekodér 74138 je ještě uvolňován/blokován vstupními hodinami CLKRX zavedenými do vstupu E3 dekodéru 74138. Obvod je uvolněn při vysoké úrovni hodin CLKRX. Je to z toho důvodu, aby byly spolehlivě eliminovány nechtěné parazitní mezistavy asynchronního čítače 74393. Po stavu 3 totiž následuje mezistav 2, který by mohl vygenerovat falešný zápisový impuls /WE. Tímto způsobem jsou mezistavy spolehlivě eliminovány. Objevují se totiž těsně po sestupné hraně hodin, ale v té době je dekodér 74138 blokovaný. Taky by pomohl kondík cca 1nF na /WE proti zemi, ale jednak kurví hranu signálu a druhak je to jen nouzové řešení. Blokace hodinami je lepší.

Formát datového slova a význam jednotlivých bitů je shodný s původním zapojením v ME1988, jen se zde používá standardní UART přenos 9600 8N1, nebo lépe 8N2. Dva stopbity by byly lepší pro zotavení obvodu po příjmu předchozí informace, ale i ten 1 stopbit by měl stačit vzhledem k rychlosti bipolárních TTL obvodů. Vlastně je tu ještě jeden rozdíl. Původní zapojení očekává data vyslaná stylem MSB first, kdežto standardní UART posílá LSB first. Náprava je snadná. Buď prohodit výstupy 74164, nebo před odesláním data softwarově otočit, aby se původní D7 vysílal jako první.

Jak jsem psal již u Vylepšení č. 1.5, namísto dekodéru 7442 pro spínání apolečných anod displejů navrhuji použít 74138 (3205), protože má několik uvolňovacích vstupů, které se dají použít pro zhasnutí displeje lépe, než aktivovat BO na dekodéru D147. Signál /LOAD z KO2 lze zavést do vstupu E3 na 74138 a displej tak bude zhasnutý během celého cyklu nahrávání čítače 74193 a zápisu do RAM. Do druhého vstupu /E2 obvodu 74138 se dá zavést přímo výstup ze zobrazovacích hodin se střídou cca 1:6 a v době úrovně H bude displej opět zhasnutý, než se ustálí výstupy čítače 74193, RAM 7489 a dekodéru D147. Zobrazení tak bude ostré a bez duchů, které se v původním zapojení zákonitě musely objevovat, viz. Vylepšení č.1. Vstup /E1 74138 lze spojit s /E2, nebo připojit na GND. Tento návrh je již v první kapitole Vylepšení č. 1.5.

Z původního zapojení displeje se ponechá vše, kromě těch MKO 74123 a té opičárny derivačních a integračních článků kolem hradla IO1. Oscilátor ze dvou hradel IO1 bych nahradil výše zmíněným nesymetrickým AKO s NE555. Má lepší hrany. A nastavitelnou střídu. Vstup BO na D147 se přes pullup 3K3-4K7 připojí na +5V a zhasínat se bude blokováním dekodéru 74138, použitého namísto 7442. Odpory R52 až R59 bych zvednul na 3K3-4K7.

Signálem RX je v tomto zapojení pochopitelně myšlen klasický TTL signál. Pro připojení třeba na RS232 by byl nutný ještě nějaký převodník úrovní typu MAX232, nebo cokoliv jiného i třeba z diskrétních součástek. Jen tak v rychlosti jsem našel dvě různé varianty jednoduchého převodu RS232 TX na TTL RX:


TTL displej z ME 1988
Jednoduchý převodník RS232 TX na TTL RX



Vylepšení 3: krystalem řízené zobrazovací hodiny

A když už tam ten krystalem 2,4576 MHz řízený oscilátor máme, nač tam mít ještě další zdroj hodin pro zobrazování? Stačí použít další dvojitý čítač 74393 a frekvenci 153,6 KHz opět vydělit 16 (9,6 KHz) a dalším stupněm a 3-vstupým hradlem AND generovat zobrazovací hodiny pro 74193. Jejich frekvence bude 9,6/8=1,2 KHz a poměr puls:mezera bude 1:7. Co si přát víc? První stupeň čítače lze ještě využít pro generování nižších frekvencí CLKRX pro nižší přenosové rychlosti, viz. schéma. Čili zcela odpadá AKO z hradel, nebo NE555.

TTL displej z ME 1988
Krystalem řízený zobrazovací oscilátor

Pochopitelně se dají využít i další výstupy tohoto čítače/děliče 74393 a také výstupy toho předešlého 7493. Dá se tak volit přenosová rychlost v širokých mezích. Namísto krystalu 2,4576 MHz lze využívat krystal 4,915 MHz, jen se musí posunout to hradlo AND 7411 o jeden výstup dozadu.



Vylepšení 4: pouze jedna RAM 7489 stačí!

Posledním "červeným hadrem na býka" pro mě bylo využití, nebo spíše nevyužití dvojice pamětí RAM 7489 každá s kapacitou 16x4 bity. Obě jsou totiž využity jen zčásti a přitom by se celý potřebný prostor vešel jen do jedné. V původním zapojení se do jedné RAM ukládají kódy znaků a je využito jen 8x4 bity. Do druhé RAM se ukládají informace o desetinných tečkách u každého znaku a využívá se jen 8x1 bit.

Upravil jsem tedy zapojení na použití pouze jedné RAM 7489 16x4. Na adresách 00-07h se ukládá 4-bitový kód znaku, na adresách 08-0Fh se ukládá 1-bitový "kód" desetinné tečky. Ale lze to organizovat i tak, že bude na přeskáčku vždy kód znaku - kód tečky - kód znaku - kód tečky... a nebo třeba úplně jinak. Záleží na pořadí připojení adresových vstupů RAM k čítači 74193. V následujícím zapojení je to tak, jak jsem psal prvně. První polovina RAM je na znaky, druhá na tečky. Tečka.

Formát přijímaného slova se nemění (D0-D3 je kód znaku, D4-D6 je adresa, D7 je "kód" tečky). Přijímací část se též moc nemění, pouze přibyl třetí klopný obvod RS (KO3) a nějaká hradla na výstupech dekodéru 74138. Výsledkem je, že po přijetí 9 bitů je nejprve zapsán kód znaku (/ZNAK, /LOAD a /WE), poté je zapsán kód tečky (/TECKA, /LOAD a /WE) a následně je prijímač opět uveden do klidového stavu (/STOP). Kód znaku je zapsán do dolní poloviny RAM 7489, což zajišťuje signál /ZNAK=0 přivedený na A vstup předvolby čítače 74193. V té chvíli je signál /TECKA=1 a tím se zajistí, aby se na D0 vstup RAM "protlačil" bit D0 z přijmutého slova. Při zápisu tečky je signálem /ZNAK=1 adresována horní polovina RAM 7489 a /TECKA=0 přepne multiplexer tak, že na D0 RAM se objeví D7 z přijatého slova. Jednoduché jak facka:


TTL displej z ME 1988
Úprava TTL UART RX pro jedinou RAM 7489

Při zobrazování je v multiplexu na každé znakovce nejprve zobrazen znak a poté tečka. Je-li adresována první polovina RAM (A3=0) je uvolněn dekodér znaků D147 a naopak hradlem NAND zablokováno zobrazení tečky. Při adresování horní poloviny RAM (A3=1) je tomu naopak. Dekodér D147 je aktivací signálu /BO zablokován a zobrazení tečky je povoleno. Kód znaku (D0-D3), stejně jako "kód" tečky (D7) v odesílaném slově musí být invertovaný. Paměť RAM 7489 totiž zapsaná data na výstupech invertuje. Inverze se zařídí softwarově na odesílací straně.

Je to jako kdybychom obsluhovali displej 16-místný a proto je nutné zvednout i minimální frekvenci hodin časujících čítač 74193. Pokud opět vyjdeme z předpokladu, že by celý displej měl být obsloužen do 10 ms, pak minimální frekvence by měla být 1/(10/16) = 1,6 KHz. Ale není to nutné. Pokud použijeme pro generování hodin 1,2 KHz obvod popsaný v předešlém Vylepšení č. 2 odvozený od krystalem řízených hodin, bude celý displej obsloužen za 13,3 ms, což by mělo být ještě v pohodě (1 půlsnímek PAL TV signálu trvá 20 ms).


TTL displej z ME 1988
Zobrazovací obvod pro jedinou RAM 7489 a dekodér D147

Takto upravené zapojení nevyžaduje moc obvodů navíc. Přibude pouze pár hradel a naopak ubude jedna 7489. Všechny činnosti jsou synchronizované a časované exaktně z krystalem řízených hodin. Čili žádné obezličky v podobě RC článků a MKO nejsou potřeba (vyjma resetu po zapnutí)!



Vylepšení 5: hexaznaky

Díky dekodéru D147 je popisovaný displej schopen zobrazovat dekadické číslice 0-9 a pomocné znaky (tzv. hieroglyfy) určené pro měřící přístroje. Tím je popisovaný displej předurčen pro vzdálené zobrazování měřených veličin. Jenže lidé se 16 prsty na rukou potřebují hexaznaky:-) Co s tím? Pomoc je jednoduchá. Stačí vyjmout D147 z objímky a vrazit tam třeba D345. Žádné další úpravy nejsou nutné. Jen nebude fungovat test segmentů (LT), neboť pin 3 je u D345 nezapojen (NC). Použít se dá také D346. Zde by to chtělo už malou úpravu pro nastavení výstupního proudu, ale asi ani to není nutné, protože proud je stejně omezen bázovými odpory spínacích tranzistorů. Přesto bych na ten pin dal dělič ze dvou odporů 22K. Nevýhodou použití hexapřevodníku je to, že na displeji nebudeme schopni zobrazit mezeru, která se u D147 a kompatibilních ukrývá pod kódem 0Fh. Ale i to se dá řešit, viz. úprava následující a asi i finální:-)

Obecně se dá říci, že na místě převodníku lze použít jakýkoliv kompatibilní převodník, což mohou být obvody 7446/47/246/247/347, D146/147, D345/346, D347/348. Dost podrobně jsem se jim věnoval v článku o 7-segmentových dekodérech.



Vylepšení 6: Finále? Univerzální displej!

V předešlém Vylepšení č. 5 jsou popsány výhody a nevýhody použití klasických a hexadecimálních 7-segmentových dekodérů. Ale proč se jimi nechat omezovat? Proč se toho převodníku prostě nezbavíme a neumožníme displeji zobrazovat veškeré znaky a symboly, které 7-segmentový displej umožňuje a to včetně desetinné tečky? Do jediné paměti 7489 se to vejde. Na sudých adresách budou kofigurace segmentů A-D, na lichých E-H (DT). Namísto dekodéru znaků a hradla pro ovládání tečky použijeme dva 3-stavové 4-bitové oddělovače přepínané signálem z čítače adres 74193. Jeden oddělovač bude aktivovat horní segmenty A, B, C, D a druhý oddělovač pak segmenty E, F, G, DT, viz. [2]. Na výstup oddělovače lze přímo připojit tranzistorové pole ULN2803, které je pro tyto účely přímo navrženo. Odpadá spousta malých součástek (8x tranzistor a 16x odpor). ULN2803 obsahuje bázové pulldown odpory. Čili, bude-li výstup oddělovače ve 3. stavu, bude segment zhasnutý. Jako oddělovač jsem původně uvažoval 74240, který obsahuje 2 nezávislé 4-bitové 3-stavové invertující budiče. Díky inverzi by pak nebylo nutné invertovat data na odesílací straně. Později jsem návrh přepracoval na neivertující 74244. Sice bude nutné data před odesláním invertovat, ale zase je možné využít uvolňovací /ME vstup paměti 7489 pro TEST displeje. Rozpojením jumperu se rozsvítí všechny segmenty na všech znakovkách. Podobně je řešena ruční deaktivace (BLANK) zobrazení pomocí vstupu /E1 na dekodéru společných anod 74138. Ještě lepší než 74244 by byl 74241, protože by odpadl invertor na ovládání uvolňovacích vstupů, ale typ 74244 je běžnější a ten invertor tam stejně k dispozici máme.


TTL displej z ME 1988
Finální zobrazovač pro jedinou RAM 7489 a bez dekodéru znaků (varianta s tranzistorovými poli)

Tranzistorové pole by se dalo využít i pro spínání společných anod. Například mnou testované "PNP" pole TBD62783. Sice by se musel ještě invertovat výstup dekodéru společných anod, ale je to pořád lepší, než to hejno tranzistorů a odporů. Na inverzi lze opět použít 74240, případně lépe 74540. Jelikož jsem s použitím tranzistorových polí v jistých konzervativních kruzích narazil, předkládám i variantu s diskrétními transsistory:-)


TTL displej z ME 1988
Finální zobrazovač pro jedinou RAM 7489 a bez dekodéru znaků (varianta s tranzistory)

Je zřejmé, že data se pak musí odesílat nadvakrát. Nejprve konfigurace segmentů A-D a poté konfigurace segmentů E-H (DT). Ale to by nemuselo tolik vadit. Důležité je, že displej pak zobrazí úplně cokoliv, co mu 7-segmentovky dovolí. A také se opět zjednodušší přijímací část, neboť odpadne KO3 a zůstane jen KO2 tak, jak je to v původním návrhu Vylepšení č. 2. Úplné zapojení přijímací části včetně generátoru zobrazovacího kmitočtu je níže. Podrobný popis činnosti viz. Vylepšení č. 2 a 3.


TTL displej z ME 1988
Finální zapojení UART přijímací části displeje

Formát datového slova bude podobný, jako v původním displeji. D0-D3 budou konfiguace segmentů A-D, resp. E-H (DT), D4-D6 bude pozice (0-7) na displeji a D7 bude rozlišení, zda se data budou zapisovat na sudou (D7=0), či lichou (D7=1) adresu v RAM. Tedy zdali se jedná o kód pro segmenty A-D, nebo E-H (DT). Pro jeden znak se tedy musí vyslat dva kódy se shodnou pozicí znakovky. Konfigurace segmentů na D0-D3 musí být invertována (log.0 = segment svítí). Nesmíme zapomenout, že UART posílá data stylem LSB first, tedy D7 bude na výstupu Q0 šoupáku 74164!

Výše uvedená finální zapojení jsou již optimalizována tak, aby bylo všech hradel využito beze zbytku. Jsou zde použity obvody 7400, 7410 a 74(L)S04 po jednom kuse. Na ten krystalový oscilátor je opravdu nutný schottkyho obvod. Mám vyzkoušeny S, LS i ALS. U zapojení s diskrétními tranzistory pro ovládání 7-segmentovek je zapotřebí 12 integrovaných obvodů (všechny využity naplno). U zapojení s tranzistorovými poli je potřeba 15 integráčů (počítám-li i ta pole). Původní zapojení z ME1988 čítá 8 pouzder IO.



Zkusíme to paralelně?

Celý předchozí text se točí kolem displeje se sériovým nahráváním dat. Ale samotný zobrazovací obvod lze bez problému připojit a obsluhovat i paralelním rozhraním. Tak třeba pomocí známého obvodu 8255. Pokud třeba bránu PA a alespoň polovinu brány PC nastavíme jako výstup, můžeme sem přímo náš displej připojit. Na PA připojíme datové vstupy RAM 7489 a předvolbu čítače 74193. Na PC připojíme /WE, /LOAD a třeba i vstupy /ME RAM 7489 (TEST segmentů) a /E1 dekodéru 74138 (BLANK). Jediné, co musíme vyřešit jsou zobrazovací hodiny CU. Pokud v systému nemáme vhodný zdroj hodin, můžeme kdykoliv použít třeba ten AKO s NE555 z Vylepšení č. 1. Na zbylé porty obvodu 8255 můžeme připojit třeba tento kodér klávesnice. Získáme tak školní jednodeskáč eňo ňůňo, kde se o zobrazování a klávesnici v podstadě nebude potřeba starat:-) Volný 8255 je i v PMI-80, takže pokusovat je na čem.

Nemáme-li 8255, můžeme použít libovolný budič s latchem od 4-bitových (7475, 74175, apod.) po 8-bitové (3212, 74273/4, 74573/4, apod.). Displej by také bylo možné připojit přímo na sběrnici procesoru. Ale chtělo by to, aby ta sběrnice byla posílená nějakými budiči. Přeci jen je to TTL zátěž. Čítač 74193 sice můžeme použít LS, nebo dokonce HCT, ale RAM 7489 je prostě TTL... A ještě jedna věc se u přímého připojení na sběrnici musí vyřešit. A sice zpoždění signálu /WE za /LOAD. Dá se použít ta "opičárna" RC článků kolem invertoru IO1 z původního zapojení displeje v ME1988.



Jak stanovit kód znaku?

Pro stanovení správného kódu 7-segmentového znaku při přímém řízení bez dekodéru jsem připravil tuto pomůcku.



Tak. A teď ještě aby to někdo vyzkoušel postavit...


No, nakonec jsem to pochopitelně nevydržel a vyzkoušel si to sám:-) Nejprve jsem chtěl vyzkoušet samotný multiplex. Pro jednoduchost jsem použil hotový 4-místný LED displej SA s propojenými segmenty. Zkusil jsem tedy kombinaci finálního zapojení 1 a 2 zobrazovače tak, že společné anody spínají tranzistory BC640 a segmenty spíná tranzistorové pole ULN2803. Paměť chybí a tudíž pullup odpory na vstupech 74244 zajišťují, že svítí všechny segmenty displeje. K taktování zobrazovacího čítače 74193 jsem postavil oscilátor s NE555 dle Vylepšení č.1. Kmitočet vyšel cca 1,5 KHz, délku kladného pulsu jsem nastavil na cca 0,1 mS, což odpovídá střídě cca 1:5. Kladný puls blokuje dekodér společných anod 74138 dle Vylepšení č.1,5. Výsledek pokusu viz. obrázek níže vlevo.


TTL displej z ME 1988
1. pokus: zatím bez paměti
TTL displej z ME 1988
2. pokus: s pamětí EEPROM


Dalším krokem byla instalace krystalového oscilátoru 2,5476 MHz a odvození zobrazovacího kmitočtu pomocí děličů v souladu s Vylepšením č.3. Zobrazovací kmitočet je přesně 1,2 KHz a délka kladného pulsu 0,104 mS, střída 1:7. Abych mohl zobrazit něco smysluplného, naprogramoval jsem si do EEPROM 28C64 nějaké texty a testovací znaky (vi. přiložený soubor ZIP). Testovací znaky jsou navrženy tak, aby mi pomohly odhalit případné přeslechy (duchy) mezi skupinami segmentů, či mezi znakovkami. Dle očekávání, tam žádné nejsou. Testováno i v úplné tmě. Výsledek pokusu s nápisem "AHOJ." viz. obrázek výše vpravo. Z fotek to úplně nevyplývá, ale displej je v reálu krásně kontrastní.

Obsah testovací EEPROM

Dalším logickým krokem bylo otestování samotné přijímací části. Osadil jsem ji přesně podle finálního zapojení. Jelikož zatím nebyla potřebná RAM 7489, do jejího prostoru jsem zapíchl 8x LED modul se vstupy připojenými na výstupy šoupáku 74164. Po nezbytné kontrole zapojení jsem připojil noťas s USB/TTL UART převodníkem, spustil Hyperterminál a zkoušel mačkat čudlíky na klaviatuře. A výsledek? Ledky předpisově zobrazovaly ASCII kódy odesílaných znaků. Vzal jsem si k ruce ASCII tabulku a vše perfektně sedělo. Na následujícím obrázku je zrovna přijaký znak "j" (6Ah). Přenos standardní 9600 Bd, 8N1.


TTL displej z ME 1988
3. pokus: test přijímače
TTL displej z ME 1988
Drobná úprava přijímače


Při kontrole a oživování přijímače se ukázalo, že pro účely diagnostiky by bylo vhodné resetovat nejen KO1 a KO2, ale také šoupák 74164. Na plonkový výstup KO1 je vhodné připojit kontrolní LED, která pak signalizuje připravenost (READY) přijímače na příjem z UARTu. Úpravy jsem zanesl do fragmentu zapojení výše. Tlačítko RESET a diodu READY je vhodné vyvést někam na panel finálního výrobku.

Nakonec nastal očekávaný okamžik a došlo k osazení RAM 7489 a k vzájemnému propojení zobrazovací a přijímací části. Kdyby mě "trochu" nepotrápil ohnutý napájecí pin obvodu 7489, který nezajel do pole a já si toho nevšiml až po 2 hodinách, tak by to šlapalo na první dobrou:-) Ale alespoň jsem díky tomu celý obvod naprosto dokonale zanalyzoval a vše funguje přesně dle očekávání. Jelikož se k odesílání binárních dat jednoduchý Hyperterminál nehodí, povolal jsem do akce RealTerm a vše šlape. Ale ani to nebylo bez problémů. Chytil jsem se totiž do vlastní pasti, kdy jsem při testování s EEPROM nemusel invertovat data segmentů, ale pro 7489 je inverze nutná. BUM!, další hodina pátrání, proč to nechodí. Tedy ono to chodilo, ale poznat na první pohled, že na LED displeji máte znaky inverzně se prostě nedá...:-)


TTL displej z ME 1988
4. pokus: hotový displej s TTL UART
TTL displej z ME 1988
5. pokus: hotový displej RS232 UART


Posledním krokem bylo ověření činnosti RS232/TTL převodníku. Použil jsem zapojení dle finálního schématu, jen místo diody 1N914 jsem použil běžnější BAT41. Vše fungovalo, a tak jsem si trochu pohrál s přenosovou rychlostí. Přepojováním vstupu CLKRX na různé výstupy čítačů jsem dosáhl přenosových rychlostí 150 - 38400 Bd. Vrtalo mi hlavou, jak jednoduše přenosovou rychlost ještě zvýšit. Jednoduchý výpočet ukázal, že bude stačit vyměnit krystal 2,4576 MHz za 1,8432 MHz. A rázem bylo možné dosáhnout rychlostí 57600 a 115200 Bd. I při nižším kmitočtu zobrazovacího oscilátoru (0,9 KHz) je svit segmentovek stabilní a neblikají. K testování jsem používal dva testovací binární soubory (viz. ZIP archiv níže), které jsem pomocí RealTermu odesílal vždy 100x těsně po sobě bez prodlevy. Nezaznamenal jsem jedinou chybu v přenosu. Ale co si budeme povídat. Ke starým osmibitům se prostě hodí 9600, maximálně 19200 Bd...

Testovací BIN soubory



Formát datového slova

Pro jistotu jsem si musel zvlášť nakreslit formát datového slova displeje. D7 určuje, zdali budeme zapisovat data pro skupinu segmentů A-D (D7=0), nebo skupinu E-H (D7=1). D6..D4 určují pozici znakovky, kterou hodláme aktualizovat. Hodnota 0 je pro znakovku první zprava, hodnota 7 pro první zleva. Pozor: ve finální verzi DPS to z důvodu rozložení spojů bude opačně!! D3..D0 jsou data segmentů. Jejich aktivní úroveň je 0. (0=svítí, 1=nesvítí):



TTL displej z ME 1988


Takto formátovaná data posílám standardní sériovou linkou, jako 8N1. Čili 1 start bit, 8 datových bitů, bez parity, 1 (nebo více) stopbit. Komunikace je bez jakéhokoliv řízení toku na úrovní HW (No HW Flowcontrol). Rychlost přenosu dle zapojení CLKRX. Ve schématech je defaultně zvolena 9600 Bd. Ze struktury protokolu je zřejmé, že lze vždy aktualizovat jen konkrétní znakovku a není nutné přepisovat celý displej.



Test finálního zapojení!

Jelikož v předstihu dorazily DPS pro 8 znakovek (Tesla LQ425 a kompatibilní), jednu jsem hned osadil a vyzkoušel celé zapojení ve finální podobě. Namísto diskrétních tranzistorů BC640 jsem pro spínání spol. anod z úsporných důvodů osadil invertory 74540 a tranzistorové "PNP" pole TBD62783. Do displeje jsem posílal nápisy "12345678" a "Cau Jiri" rychlostí 115200Bd 8N1 opakovaně 100x za sebou a v pohodě...


TTL displej z ME 1988
6. pokus: test znakovek LQ425 (/ME=H)
TTL displej z ME 1988
7. pokus: 12345678



TTL displej z ME 1988
8. pokus: Čau Jiří


K testování finálního zapojení lze použít i testovací sobory uvedené výše v ZIPu. Jen bude text pozpátku, protože adresy znakovek jsou u finálu opačně, než jsem je měl na poli. Levá znakovka má adresu 000b, pravá 111b! Také je nutné mít na paměti, že znakovky LQ425 mají desetinnou tečku před znakem!



Bude deska? Možná... A možná hned 2, nebo 3:-)



TTL displej z ME 1988
Deska pro 8 znakovek LQ425 a kompatibilních v multiplexu

TTL displej z ME 1988
Deska pro finální provedení s tranzistorovými poli

TTL displej z ME 1988
Deska pro finální provedení s diskrétními tranzistory




A k čemu je to dobré?

Na to si bude muset odpovědět každý sám. Prostě 8-místný sedmisegmentový LED displej se standardním sériovým vstupem... Pro mne to bylo jen takové mentální cvičení:-)



Literatura:

[1] Mikroelektronika 1988
[2] Sdělovací technika 11/1982 (Zobrazovač pro systémy s 8080)
[3] Praktická elektronika 5/2003 (Převodník úrovní pro RS232)
[4] archiv Nostalcomp.cz


Publikováno: 1/2022    



« RET          ↑ TOP ↑          HOME