Mikrokomputer CA80 interfejs RS-232 z układem Z80-SIO/0 |
![]() |
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 |
![]() |
![]() |
![]() |