Mikrokomputer CA80

interfejs RS-232
z układem Z80-SIO/0



charakterystyka i informacje ogólne
książki / dokumentacja (literatura)
ulotki i broszurki MIK (literatura)
skany artykułów z prasy (literatura)
programator EPROM (aplikacje)
dwupunktowy termometr (aplikacje)
licznik-timer Z80-CTC i dioda RGB (aplikacje)
Direct Memory Loader - ładowarka do pamięci (akcesoria)
próbnik stanów logicznych MIK03C (akcesoria)
zdalnie sterowana klawiatura (akcesoria)
przegląd procedur systemowych (programowanie)
interfejs RS-232 z układem Z80-SIO/0
hex2wav - ładowanie programów do CA80 z plików audio

☘☘☘☘☘☘☘☘☘☘☘☘

Zaczątek historyjki o interfejsie szeregowym do systemu CA80 datowany jest na koniec maja 2019, na forum Microgeek taka wtenczas pisanka powstała Interfejs RS232 do komputerka CA80 (tymczasowy a'la blog). Po przebojach różnorakich i wakacyjnym lenistwie projekt ten przybrał docelową formę i taką w tym miejscu pragnę utrwalić. W sieci opisów sprzęgu RS232 do systemu CA80 praktycznie nie ma, a jedyna 'oficjalna przystawka' omawiana w Radioelektronik 1/94 nie do końca (wcale) integruje się z systemem przerwań Z80. Niżej podane rozwiązanie też ma swoje przywary i kilka niedoróbek, ale jak dalej zobaczymy całkiem ładnie wpasowuje się w klimat starego wielopłytowego CA80, tak wizualnie jak i elektrycznie. A więc...
-- ♠ --


założenia i koncept ogólny (decyzje kierunkowe)

Krótki przegląd układów UART wyszukanych po pudełkach wszelakich zakończył się wyborem kostki Z80-SIO/0. Powody następujące:
* dwa niezależne kanały szeregowe
* pełna integracja z priorytetowym systemem przerwań procesora Z80
* wymagane tylko dwie linie adresowe i jeden /CS - a tyle mam dostępne
* układ dedykowany procesorom Zilog-a, czyli zachowujemy klimat

Dla ustalenia uwagi garstka linków o rzeczonym układzie:

Z80 Family CPU Peripherals
Zilog Z80-SIO Technical Manual
How To Program The Z80 Serial I/O (SIO) and CTC

Wynikiem działań miało być powstanie płytki-przystawki do starego CA80, analogicznej do MIK-89 (8255+CTC), tylko uplasowanej po drugiej stronie płyty głównej komputera. Świadomie zrezygnowałam z konwersji napięciowej (V.28) jak i pełnej obsady sygnałów transmisyjnych (V.24) standardu RS-232. Po prostu w mojej dłubaninie nie mają one praktycznego zastosowania. Dostępne sygnały są na poziomie TTL, co pozwala na bezpośrednie podłączenie większości mikrokontrolerów (legacy, tych na 5V), a sygnały te to minimum komunikacyjne czyli RxD oraz TxD. Dodatkowo wyprowadzony został sygnał DTR, to na okazję gdyby zaistniała potrzeba sterowania kierunkiem transmisji RS-485. Może być też wykorzystany jako jednobitowy port wyjsciowy do jakiegokolwiek innego zastosowania. Obowiązowa sygnalizacja aktywności linii nadawczych i odbiorczych UART-a, to na dwóch parach kolorowych LED. Co do szybkości transmisji - w wersji minimalnej układ pozwala na pracę z 19200, 9600 lub 4800 bodów. Możliwe jest przekonfigurowanie sprzętu dające dodatkowo 38.4k oraz 2400,1200 i 600 bodów. Taka większa szybkość nadawania dobrze sprawdza się gdy CA80 musi logować do PC jakieś informacje, szybkości zupełnie niewielkie są na okazję współpracy z zupełnie staroświeckimi urządzeniami komunikacyjnymi, a zdarzają się antyczne rarytasy (np. historyczna telemetria na koleii czy w hutnictwie) rozmawiające przez RS-485 zupełnie powoli.

Układowo w przystawce szeregowej nie należy spodziewać się żadnych czarów, ot Z80-SIO w minimalistycznym otoczeniku kliku popularnych układów TTL serii 74xx. Nie ma tam żadnych nowobogackich wtrącin, zachowujemy retro najbardziej jak tylko się da.

Z funkcjonalnego punktu widzenia - lampki do Tx oraz Rx mamy na przodzie CA80, zdublowane kątowe złącza igłowe widnieją na zadku komputerka. Jest to według mnie dość wygodne w użytkowaniu, a symetryczne uplasowanie płytki drukowanej (btw wymiarami bliźniaczej do MIK-89) tworzy z resztą CA80 akceptowalną wizualnie kompozycję. Pewną wątpliwość może budzić konieczność wyprowadzenia magistrali CPU na wiązce przewodów długości około 25 cm, ale tu strachu nie ma i CA80 uparcie pracuje stabilnie.





projekt

Papier wszystko przyjmie, zatem wymagania z akapitu powyżej w formie schematu ideowego. Całość jest dramatycznie wręcz prosta, ale dla formalności krótki opis co idzie do czego. Móżdżkiem przystawki jest oczywiście kostka U1 Z80-SIO/0 zapięta bezpośrednio do magistrali CA80, jako sygnał aktywujący układ wybrałam strob /EME8, pierwotnie służący do obsługi emulatora MikSID. To automatycznie określa adres bazowy SIO w przetrzeni I/O procesora Z80, wynosi on 0xE8. Sygnały zegarowe taktujące układy nadawcze i odbiorcze kostki SIO wypracowywane są w obwodzie składającym się z generatora kwarcowego i zestawu dzielników. Generator na bazie U2 7400 i rezonatora Q1 o wartości 3.072MHz podaje sygnał na pierwszy dzielnik U3 7490, co skutkuje zegarem o wartości 307.2kHz. Taką wartość możemy z powodzeniem podać na wejścia RxC/TxC układu SIO, wewnetrzne podzielniki o wartościach 16/32/64 dadzą typowe prędkości transmisji 19200,9600 lub 4800 bitów na sekundę. Dodatkowo sygnał 307.2kHz podawany jest na dzielnik :8, to górny fragment kostki U4 7493, daje to możliwość uzyskania prędkości 38.4 kbaud przy podziale 1:1 w SIO lub kolejno 2400,1200,600 przy podziałach 16/32/64. Dystrybucją sygnału zegarowego do kanałów A i B ukladu SIO zajmują się zestawy zworek J11-J22, opis ustawień widzimy w tabelce na schemacie ideowym. Sygnalizacja aktywności linii RxD,TxD składa się z czterech identycznych kompozycji tranzystora PNP z diodą LED, a to z uwagi na fakt, że stanem aktywnym linii transmisyjnych jest logiczne zero. Linie DTR nie sa monitorowane, a komplety sygnałów roboczych lądują na grzebykach Z10,Z20 gdzie wespół z GND zapewniają prosty ale skuteczny interfejs komunikacyjny. Piny numer 5 złączek Z10,Z20 są warunkowo (via zworki J10,J20) zasilane z pokładowych +5V systemu CA80, to daje możliwość zasilania zaczepionych na złączach np. transmiterów RS-485. Gdy korzystamy z kabelko-konwerterów USB/RS232/TTL oczywiście rozłączamy zworki, aby nie było kolizji zasilań z USB i CA80. Wszystkie układy przystawki mają zasilanie zablokowane kondensatorami o pojemności kilkadziesiąt nF, to C3..C6.


prototyp

Schemat powyżej to wersja finalna, całość ewoluowała przez dłuższą chwilę, kolejne iteracje owocowały coraz to innymi druciakami na płytce stykowej. Garstka zdjęć z piaskownicy, przy okazji widzimy jakie mozliwości daje otwarta konstrukcja starego CA80. Swobodny dostęp do wszelkich sygnałów systemowych jest wręcz bezcenny, a tego zauważmy nie ma nowa wersja CA80. Na pajakach jak powyżej wykonałam wiele testów także w kontekście oprogramowania, gdy problem niestabilności połączeń zaczął już naprawdę doskwierać - zapadła ostateczna decyzja o zamrożeniu coraz to nowych fantazji i przeniesieniu układu na laminat.







dygresja o daisy-chain

Wzpominałam, że stary CA80 ma `wszystko na wierzchu` i to jest w sumie super. Niestety z układowego punktu widzenia jest tam kilka niedogodności, w tym projekcie objawił się brak dostępu do sygnału stabilizującego łańcuch układów uczestniczących w obsłudze przerwania maskowalnego w trybie IM2. Kostka Z80-CTC na płytce MIK-89 jest pierwsza w daisy-chain, jej wejscie IEI jest zapięte do VCC, no super. Ale wyjście IEO... sobie wisi w powietrzu i nie jest w ogóle dołączone do systemowego złącza ZS. No nie i już! Szczęściem złacze ZS systemu ma wolny pin - numer 38, którego pole lutownicze posłużyło do udostępnienia wzmiankowanego sygnału. Wejście IEI układu Z80-SIO/0 dostaje sygnał z Z80-CTC, automatycznie plasując SIO jako drugi w kolejności na liscie urządzeń do obsługi.



budowa docelowego interfejsu

Mozajkę ścieżek do żelazkowego termotransferu znajdziemy w pliku ca80_serial-B.Cu.pdf, a poniżej rysunki odnośnie krosowania i lokalizacji elementów. Płytka jest jednostronna, stąd krosy, tu na szczęście niczym nie różni się ona od pozostałych laminatów starego CA80.












Całość lutujemy w typowej kolejności - krosy, podstawki, elementy bierne, czynne. Warto przez lutowaniem sprawdzić płytkę na okazję mikrozwarć czy przerw w ścieżkach. Pod kwarcem dałam maleńką poduszkę z dwustronnej taśmy klejącej, jakoś nie mam przekonania do lutowanych do obudowy klamerek z drutu, a kwarc musi być na leżąco, aby go nie zawadzić podczas przenoszenia komputerka.

doraźne poprawki

No cóż, skleroza nie boli, tylko potem sztukować po wierzchu trzeba i tak kondensatorek C6 blokujacy zasilanie Z80-SIO został przylutowany bezpośrednio na zasilaniu tegoż. Po prostu zapomniałam o nim podczas projektowania mozaiki, no zdarza się.

Drugi suchar wynikł zupełnie przypadkiem i możliwe, że innym się nie przytrafi. A mianowicie - diodka sygnalizacyjna od odbierania nie wiedzieć czamu cały czas świeciła, mimo że z PC nie było nic nadawane i linia TxD kabelka z Chinowa była w wysokim stanie logicznym. A owszem, było tam H, tylko że takie dość cherlawe, na poziomie jakieś 3.3V. Dla układu SIO to było ok, ale tranzystor w układzie sygnalizacji już taki poziom traktował jako wystarczający do wysterowania. I stąd - w moim egzemplarzu - konieczność prowizorycznego dodania rezystorów 2k2 pomiędzy bazami i emiterami tranzystorów T21 i T11. Wygląda to nieco szpetnie, ale posiadam niestety całą wiąchę chińskich kabelków USB/TTL, wszystkie mają takie dziwne poziomy sygnałów.

Jedna sprawa dodatkowa, która też może podnieść ciśnienie - układ generatora z kwarcem. Niby to typowy obwód, ale naprawdę polecam zweryfikować czy oscylator pracuje na podstawowej częstotliwości, tej narzuconej przez kwarc czy na którejś jego harmonicznej. Wtedy manipulujemy wartościami rezystorów R1,R2 (linearyzujące bramki) - można zejść nawet do kilkuset ohm, ewentualnie zmieniamy technologię 7400, np. wkładając LS-a. A tak po mojemu, to najlepiej układzik generatora obćwiczyć na płytce stykowej i mieć już na pewniaka naszykowane elementy do wylutowania, o!



finalny montaż

Wpasowanie interfejsu w konstrukcję CA80 jest banalne, o ile oczywiście nie przykwasimy z wymiarowaniem otworów montażowych płytki drukowanej. Modułek jest symetryczny do płytki I/O, podpięcie do magistrali systemowej zapewnia dwadzieścia kolorowych przewodów o indywidualnie dobieranej długości, tak aby je potem trytkami spiąć w pakowne wiązki.









No i po raz kolejny gderam o tym, aby nie lutować na zawsze połączeń kablowych pomiędzy płytkami, ale robić je na goldpiny i wiązki kabelków. Prosze, całość jest rozłaczalna , mamy możliwość zarówno łatwego serwisowania jak i ewentualnych modyfikacji, ponieważ większość sygnałów systemowych jest w tym wypadku redundantna i zawsze się gdzieś da radę zapiąć.



zworkologia

Konfiguracja sprzętowa w obrazkach:



Podłączenie chińskiego kabelka:



testy

Zacznijmy od archiwum na GitHub: programik testowy testsio

Programik jest zaiste banalny i ma na celu jakby przestrzelenie interfejsu. Po zainicjowaniu wybranego kanału SIO zależnie od komentarza - albo wyświetla literki na terminalu (test nadawania), ewentualnie wykonuje programowe echo, to test odbioru i nadawania. Oczywiście w trybie blokujacym, bez wykorzystania przerwań. Gdy ta prosta aplikacja zadziała na obu kanałach - interfejs jest gotowy do dalszej pracy (czyli zabawy).



cALo - CA80 serial loader

Nooo, od powstania posta cALo - szeregowe ładowanie Intel HEX do systemu CA80 chwila pewna minęła i calo też uległ drobnym metamorfozom. Po pierwsze, przerobiłam go na kanał A i ma na stałe zafiksowaną szybkość ładowania 19200. Celem skrócenia całości wszelkie skoki (gdzie się dało) są relatywne, zerowanie A nie rozkazem LD,n ale xor. No i sumarycznie cały programik ma 292 bajty i można go wpisać z palca nie dostając przy tym cholery. Kod źródłowy oczywiście na GitHub, jest w klimatach SDCC, podobnie jak program testowy. Kolejno:
calo, linux, 19200
cALo, CA80 @4000,kanał A,19200

W archiwum dla CA80 jest też plik calo.txt - to przerobiony edytorem hex aby dał się łatwiej wklepywać do komputera poleceniem *D.

cALo w naturze wygląda mniej więcej tak: ekranik powitalny i oczekiwanie na tramsmisję; podczas ładowania wyświetla adres bazowy rekordu intel hex; a na linuksowej konsoli jak zwykle - neonowo.



przemyślenia poimprezowe

Nie wyszło chyba najgorzej i ten niewielki interfejsik wraz z oprogramowaniem ładującym spokojnie zastąpi `Ładowarkę Do Pamięci` minimalizując ilość obcej, współczesnej elektroniki w okolicach mojego antycznego CA80. Oczywiście eksperymenty z RS-485 sprawią, że zaraz pojawi się tam jakiś konwerterek z Chinowa, ale to się jeszcze okaże. Tak czy inaczej, mój CA80 zyskał prawdziwą dwukanałową komunikację szeregową, awansował więc znacznie w hierarchii społecznej.
Kilka spraw mogłam rozwiązać inaczej - ot choćby sygnalizacja aktywności Rx,Tx. Możliwe, że mniej kłopotu sprawiłoby wstawienie czterech zwykłych inwerterów, choćby na bramkach NAND.
Tak się nagadałam, że IEO niewyprowadzone z płytki I/O, a w tym interfejsie zrobiłam w sumie ten sam błąd i wyjście IEO z mojego Z80-SIO kończy się na pinie układu, nie ma go na grzebyku. Póki co to nie przeszkadza, ale jak bedę podłączać kolejny CTC czy PIO do systemu przerwań - trzeba będzie rozpiąć łańcuch (kabelki) i wpasować nowe kostki pomiędzy systemowe Z80-CTC a Z80-SIO. Czyli priorytet obsługi zdarzeń od SIO jeszcze bardziej spadnie, bez możliwości poprawy, trochę lipa.
Przygody też były, owszem. Uważne oko wypatrzy, że w wersjach eksperymentalnych występuje SIO firmy SGS, a w gotowym interfejsie nagle pojawia się jakiś cudak opisany MME. No cóż rzec, wypadki się zdarzają i przełączenia okablowania przy działającym CA80 zabiły mi jeden UART, tak zupełnie na śmierć. Bożkom celtyckim dziękuje, że tylko SIO brzdęknęło, a nie inne układy w CA80. Ale refleksja taka, że linie sygnałowe SIO wyprowadzone na goldpin powinnam raczej jakoś zabezpieczyć, choćby takimi malcami jak MAX3208. Ten temat jest do podjęcia jak najszybciej, bo jeszcze trochę i UART-y mi się skończą.
Zaskoczył mnie komentarz jednej z osób, która kibicowała poczynaniom mym - kolor laminatu nie pasuje. No w sumie jakoś nie pomyślałam, a można było wykonać płytkę na mleczno-białawym szklano-epoksydowym podłożu, byłaby identyczna jak reszta zestawu. Ot, drobiazg taki.

#slowanawiatr, maj-październik 2019

Natasza Biecek 2004-2019/~, e-mail