Preliminary!

74xx TTL UART sériák

a další počítačové 74xx TTL komponenty



Na realizaci sériáku opravdu nejsou zapotřebí žádné speciální obvody typu MHB1012, 8251, 16450, apod. Nemám teď na mysli čistě softwarové řešení, myslím na autonomní HW sériové rozhraní postavené z diskrétních TTL obvodů řady 74xx. Opravdu to jde:

Vysílač TTL UART TX


Sériák 74xx TTL
Pokusné zapojení vysílače TX
Sériák 74xx TTL
Screenshot z Hyperterminálu


Přijímač TTL UART RX


Sériák 74xx TTL
Pokusné zapojení přijímače RX
Sériák 74xx TTL
Screenshot z Hyperterminálu 1

Sériák 74xx TTL
Screenshot z Hyperterminálu 2
Sériák 74xx TTL
Screenshot z Hyperterminálu 3

Poznámky: v osazení RX je chybně uveden obvod 73138. Pochopitelně se jedná o 74138. Dále je vhodné uvést, že budou-li RX a TX na jedné desce, budou mít některé integrované obvody společné. Já neměl volná nepájivá pole, takže jsem vždy musel postavit kompletní TX a pak zase kompletní RX.

Abych mohl kontrolovat co přijímá RX, posílal jsem data zpět na terminál vestavěným TX z x51. Proto jsem také nemohl vyzkoušet rychlost 38,4 KBd při příjmu, protože jsem neměl příslušný krystal, abych mohl nastavit rychlost interního TX v x51. Mým maximem bylo 19,2 KBd. Ale TTL RX přijímač by na rychlosti 38,4 KBd šlapat měl, stejně, jako na ní šlape TX. Při rychlosti 57,6 KBd už byly u TX v přenosu chyby. Přičítám to ale spíše (ne)kvalitě zapojení na nepájivých polích a mizerným polím samotným.

TTL sériák má pevně dané parametry (8 bitů, bez parity, přenosová rychlost daná kmitočtem na vstupu). Počet stopbitů je mu fuk. Pochopitelně jsem teoreticky vyřešil i změnu parametrů pomocí konfiguračního registru a nějakých multiplexerů. Takže by se jednoduše dala vložit parita (sudá, lichá, mezera, značka) s pomocí 74180 (74280), dále bych mohl měnit počet platných bitů mezi 7 a 8 a přenosovou rychlost ve 4-8 stupních. Ale nevidím k tomu důvod, jsou to jen kosmetické detaily. Důležité bylo odladění vlastního vysílače a přijímače.


TTL autonomní LED displej v multiplexu

Odladil jsem i TTL autonomní LED 7-seg. displej v multiplexu s vlastní pamětí videoram (2x7489). Na rozdíl od toho, který je třeba v TEMS 80-03A, ten můj nemá duchy. Při změně adresy videoram je displej na krátkou dobu vypnut, stejně jako při zápisu do videoram. Časování jsem převzal z obvodu Intel 8279 a displej tak umí až 16 znaků, které mohou být organizovány libovolně (1x16, 2x8, 4x4 apod). Čitelnost výborná, duchové žádní:-) Foto displeje je níže. Sice tam mám jen čtyřmístnou znakovku, ale časování je pro těch 16 znaků. Obsluha se omezuje pouze na zápis znaku (kombinace segmentů) na příslušnou pozici videoram, takže signály /CS, /WR a data 8 bitů (vč. des. tečky). Hostitelský počítač zastupuje AT89S52 a do displeje zapisuje instrukcí MOVX, tedy jako klasický CPU.


LED displej s multiplexem, 74xx TTL
LED displej s multiplexem


TTL zvuková karta

No, zvuková karta je hodně nadnesený pojem. Jedná se spíše o takové programovatelné pískle, které umožní zvukově se projevit i opravdu jednoduchým a pomalým počítačům. Třeba mojí TTL Claudii-1. Ale ono se asi chystá něco TTL lepšího:-) Přínos karty je v tom, že procesor se nepodílí na časově náročném generování výšky tónu. To dělá karta automaticky na základě jednou zapsané hodnoty výšky (kmitočtu). Procesor tak přímo ovlivňuje jen délku tónu, jako prostý časový interval mezi zápisy hodnot výšky. Karta pracuje se 7-bitovou hodnotou a tedy umí generovat 128 tónů (kmitočtů). Osmý bit je využíván jako signál mute pro umlčení karty.


Zvuková karta, 74xx TTL
TTL zvuková karta


TTL printer port

Když už jsem si dokázal zbastlit TTL sériák, proč bych nemohl vyzkoušet také TTL paralelní, nebo lépe, printer port? Jednu jehličkovou tiskárnu s rozhraním Centronics ještě uchovávám tak co mi v tom brání? Nic:-) Vyhrabal jsem tedy svou stařičkou a více jak 10 let nepoužívanou Epson LQ-300+ a jal se ji vyzkoušet. Autotest dopadl na výbornou a páska dokonce ještě barvila. Zbývalo trochu se ponořit do specifikace rozhraní, které je ale poplatné době svého vzniku a tudíž jednoduché, neřkuli primitivní.

Vyrobil jsem si tedy jednoduchou přechodku Canon 25 na kolíkovou lištu, abych to mohl zapíchnout do nepájivého pole. Signály odpovídající vstupům do tiskárny jsem natvrdo nastavil na klidový stav a na signály odpovídající výstupům z tiskárny pověsil LEDky a začal zkoumat stavy. Zkoušel jsem tiskárnu resetovat, vysouvat papír a zas ho tam dávat a pozoroval reakce na LED. Chovalo se to přesně tak, jak bylo popsáno ve specifikaci.

Nakonec jsem tedy připojil jednočip (89S52) a nasimuloval printer port na jeho portech. Nejprve jsem vyzkoušel jednoduchý tisk řetězce znaků z programové paměti a posléze jsem program upravil na připojení k sériovému terminálu. Na terminálu se napíše text, který se ukládá do vnitřní RAM jednočipu a po stisku Enter se řádek vytiskne na tiskárně. Vše funguje jak má. A kde je to TTL? Nikde:-) Nebudu se s tím piplat. Ale zapojení je snad jasné jak facka. Na výstup se použijí dva záchytné registry (74273,373,374,573,574, apod), jeden na výstup dat, druhý na výstup řídících signálů. Na vstup stavových signálů tiskárny se použije nějaký 3-stavový oddělovač (74244, 245, apod). Pak už jen nějaká hradla na slučování signálů /CSx, /WR, /RD a je to. A máme SPP jak vyšitej. Kdyby někdo toužil po simulaci EPP a chtěl data obousměrná, tak se přidá ještě jeden 3-stavový oddělovač a nějaké to hradlo. Prostě je to tak jednoduchý a průzračný, že to nemá smysl stavět na zkoušku. To by se pak postavilo až "navostro":-)


TTL printer port
TTL printer port
TTL printer port
TTL printer port

Jediný problém, který by se mohl vyskytnout je časování signálu /Strobe. Podle specifikace Centronics má mít záporný puls /Strobe délku 1-2us. To by ale uvažovaný (pomalý) TTL procesor asi nestíhal odčasovat. Řešením by mohl být MKO zapojený jako zkracovač pulsu na výstupu /Strobe. Časování ostatních signálů není vůbec kritické. Jenže ono ani to /Strobe asi nebude tak horké. IBM si Centronics "upravilo" tak, že strobepuls může být až 100 ms a já dokonce vyzkoušel puls délky celé 1 sekundy a taky to fungovalo. Sice se půl minuty nic nedělo, dokud tiskárna nenačetla zhruba 30 znakový řetězec, ale pak jej na jeden zátah vytiskla:-)

Při hrátkách s tiskárnou jsem také poprvé využil svůj nový žůžo bastlíček, který jsem si pro sebe nazval Duino52.

Později jsem našel řešení 74xx LPT portu na HW serveru. Sice tam mají jiné obvody, než bych použil já a taky to mají už v řadě HCT, čili CMOS, ale pro představu, jak by to mohlo vypadat dobrý.


TTL enkodér klávesnice

Dalším TTL celkem určeným pro (snad) budoucí TTL počítač "vyšší třídy", který jsem chtěl mít odladěný, je enkodér alfanumerické klávesnice. Chtěl jsem takový enkodér, který by byl plně autonomní a procesor by se nemusel účastnit čtení matice kláves, ale rovnou by si sáhl pro kód znaku do nějakého záchytného registru. Taktéž aby se procesor nemusel zabývat debouncingem. Zkrátka něco, jako je klávesnicová část obvodu 8279. Nakonec jsem vypotil zapojení, které předkládám.

Na fotografii pochopitelně chybí samotná klávesnice a je simulována drátkem, který se "přepichuje" dle potřeby mezi jedním z 8 výstupů dekodéru 1 z 8 (74138) a jedním z 8 vstupů multiplexeru (74151). Jedná se tedy o matici 8x8 a tedy klávesnice může mít 64 kláves. Je však možné použít matici až pro 128, nebo 256 kláves. Přepichování drátku vyrábí zákmity, o kterých se vám nezdá v nejčernějších snech a přesto enkodér spolehlivě funguje. Po stisku některé klávesy je nastaven příznak nové klávesy a zároveň je do registru zachycen kód klávesy. Na základě nastaveného příznaku procesor vyčte kód z registru, čímž příznak shodí. Opětovné nastavení příznaku a zachycení kódu nové klávesy je ale možné až poté, co je několikrát (v konkrétním zapojení 3x) proskenována celá matice bez zaznamenaného stisku.


Enkodér klávesnice 74xx TTL
Pokusné zapojení enkodéru
Enkodér klávesnice 74xx TTL
Enkodér s klávesnicí


Veškerá činnost hostitelského procesoru je tak omezena na hlídání příznaku a čtení kódu klávesnice. Z popsaného chování enkodéru je zřejmé, že neumožňuje autorepeat a také nelze vyhodnocovat stisk více kláves najednou. Proto je nutné v případě potřeby předřadníku (SHIFT, CTRL, apod) pověsit tento na samostatný bit. Při matici 8x8 (64 kláves = 6 bitů) tak lze využít další dva bity na předřadníky. Při matici 8x16 (128 kláves = 7 bitů) zbývá místo na jeden předřadník (SHIFT). To je pro jednoduché počítače plně vyhovující. Stav předřadníku se latchuje do registru společně s kódem klávesy. Vyzkoušeno, funguje:-)

Nakonec mi to přeci jen nedalo a nechtěl jsem zapojení bourat bez odzkoušení s opravdovou klávesnicí. Při hledání nějaké vhodné mne napadlo použít tu od Juťáka. Má sice jen 48 kláves, ale to nevadí. Důležité je, že jde snadno napojit k nepájivému poli. A tak se také stalo. Jelikož má klavka již osazený dekodér typu 74154, přepojil jsem matici z 8x8 na 4x16. Ve výsledku je to ale stejné a stále se jedná o 6-bitový kód znaku. Fungovalo to parádně:-)


Teď to jenom všechno zkreslit...


RET



Odladěno na MS IE 8.0 a Firefoxu při rozlišení min. 1024 x 768 pixelů
www.NOSTALCOMP.cz    2010  -  2017