PINTOOL
: poniedziałek 20 maja 2019, 02:30
PINTOOL
koncepcja i geneza
Kiedyś układy mikroprocesorowe były „bardziej zdefragmentowane”, dzisiaj wszystko znajduje się w jednym układzie scalonym. Uruchamiając cokolwiek, zawsze zachodziła potrzeba jakiegoś wysterowania sygnałów. Ot choćby by sprawdzić, czy działa poprawnie dekoder adresowy, czy coś podobnego. Sprowadzało się to do tego, że było dużo „drutów glebowych” (przyłączonych do masy), które były wtykane w podstawkę, z której został wyjęty procesor. Realizując logikę na układach cyfrowych w technologii TTL LS można założyć, że wejścia nie wysterowane mają domyślnie stan logicznej jedynki, które można było „drutem glebowym” zmienić na logiczne zero. Takie „udawanie” procka pozwalało w jakiś elementarny sposób sprawdzić poprawność konstrukcji, montażu itp. Ta dość prosta metoda ma jedną zasadniczą wadę, nie ma możliwości powtórzenia jakiejś sekwencji sygnałów sterujących, tzn ma, trzeba wszystko wytknąć i powtykać w określonej kolejności ponownie. Dodatkowo występuje tu odwieczne niekorzystne zjawisko „dzwonienia styków”. No więc może trzeba coś na to zaradzić. Ileś przemyśleń w końcu doprowadziło do urodzenia się w głowie koncepcji urządzenia wspomagającego tego typu prace.
Całość w sumie pochodzi z ubiegłego wieku, na dokumentacji technologicznej jest data: marzec 2000 roku. Wstępnie zmontowana z jakichś powodów (już nie pamiętam jakich) całość powędrowała do pudełka i odleżała prawie 20 lat. Teraz ponownie pudełko wypłynęło na wierzch i sądzę, że może warto dokończyć budowy. Z racji pewnego stopnia „starożytności” zastosowane rozwiązania są jakie są. Cóż w tamtych czasach nie bardzo były dostępne inne rozwiązania. Czasy Z80 przeszły do historii, poza tym coś takiego na Z80 zajęło by kilka razy większą powierzchnię PCB. Wybór padł na procek z rodziny C51. Wybór... jak wybór mógł być lepszy, mógł być gorszy.
Schemat to:W tym wszystkim mamy jednostkę centralną, czyli proca w przyległościami pamięciowymi:Jest tu klasyczne rozwiązanie środowiska procka C51 z zewnętrzna pamięcią EPROM na program oraz pamięcią RAM jako pamięć operacyjna. W przestrzeni adresowej procka C51 znajduje się jeszcze dodatkowo kilka rejestrów (na kolejnych stronach schematu). Do obsługi tego wszystkiego, w sensie generowania sygnałów typu chip select, zastosowany został układ GAL. W jakimś stopniu rozwiązanie z drugim prockiem (U108, AT89C2051) jest obecnie pewną zagadką, bo nie pamiętam do czego to miało służyć. Ten mały procek komunikuje się z dużym w taki sposób, że wystawia na porcie 8-bitowe dane (równolegle) i generuje na swoim P3.7 sygnał przerwania dla dużego procka, który odczytuje dane jako lokację w pamięci operacyjnej (łącznik trójstanowy U109 z sygnałem wyboru generowanym przez GAL a „druga strona” łącznika jest wpięta w szynę danych dużego procka). To pozwala utworzyć kanał komunikacyjny w jedną stronę. Do czegoś to miało służyć, tylko do czego: dużo zagadek. Duży procek miał jeszcze złącze do typowego wyświetlacza LCD na bazie HD44780 (złącze P104 z obsługą modułu LCD na magistrali 4-bitowej), tylko co miało być wyświetlane? Kolejna zagadka. Pamięć EEPROM na I2C (U106) zapewne miała przechowywać jakieś nastawy i dane konfiguracyjne. Mały DIPSWITCH jest w przestrzeni małego procka. Też zapewne miał jakieś sensowne zastosowanie.
Układ wejściowy to możliwość manipulowania ośmioma pinami.Każdy pin może zostać skonfigurowany do roli wejścia lub wyjścia. Powielony osiem razy zespół może być wejściem (wtedy łącznik trójstanowy 74LS125 jest w trzecim stanie) lub wyjściem (wtedy łącznik trójstanowy 74LS125 jest wysterowany do transmisji sygnałów). Bramka wejściowa (74LS08) może być odcięta do wejścia (sygnałem ENx).Sposób wysterowania elementów wejściowych (tych z poprzedniego kawałka schematu) jest uzależniony od stanu rejestrów U701 .. U703, które są określonymi komórkami w przestrzeni adresowej dużego proca. Sygnały strobu zapisu pochodzą z układu GAL (czyli rejesty są w przestrzeni adresowej pamięci RAM dużego procka)..
Sygnały z bloku wejściowego trafiają na poniższy zespół (dwa przetwarzacze po 4 bity):Jest to hawrdwarowy układ „różniczkujący”: wykrywający jakiekolwiek zmiany stanów. Dwa przerzutniki typu D zapamiętują aktualny stan sygnału wejściowego oraz poprzedni (ostatni) stan. Wyjścia przerzutników są komparowane przez bramkę EXOR i finalnie przy jakiejkolwiek zmianie stanu zerują rejestr przesuwający (74LS165). Rejestr ten, taktowany powolnym sygnałem zegarowym po wyzerowaniu będzie „wsuwał” sobie jedynki. Finalnie wygeneruje impuls w logice ujemnej, który finalnie dalej wysteruje diodą LED. Taki sygnalizator dowolnej zmiany stanu na określonym wejściu.
Układ wykrywający zmiany stanów jest taktowany odpowiednim sygnałem zegarowym.Jest klasyczny generator fali prostokątnej o częstotliwości 20MHz (U502), który steruje zejściami zegarowymi w całem bandzie przerzutników typu D. 20MHz to wystarczająca częstotliwość do „obserwacji” sygnałów cyfrowych generowanych lub monitorowanych przez PINTOOL. Szybsze przebiegi niż 50ns mogą być niezauważone. Na układzie U501 (NE555) zrealizowany jest generator do sterowania rejestrami 74LS165 do sygnalizacji o akceptowalnym czasie świecenia diodą LED.
Diody LED są sterowane poprzez układ ULN2803. Nie ma tu żadnej wielkiej filozofii. Dochodzi jedynie sprzętowa sygnalizacja trwania transmisji szeregowej od dużego proca.Front panel to płytka z samymi diodami LED.PCB pokazują następujące rysunki: strona TOPstrona BOTTOM:Rozmieszczenie elementów:Zmontowałem (w jakimś stopniu, żaden ezgemplarz nie jest w pełni kompletny) 3 sztuki i jeden front panel.Tak się zastanawiam nad funkcją małego procka. Do głowy mi przychodzi zdalna klawiatura. To ma sens. Generalnie całość miała być przyłączona do PC-ta, gdzie za pomocą nieistniejącego programu (jeszcze), generowane byłyby sekwencje sterujące, czyli co ma być wystawione jako 8-bitowe dane na zewnątrz. Można by to puścić z określonymi parametrami czasowymi lub „puszczać krokowo”. Do tego potrzebne są jakieś klawisze sterujące. Takich nie ma na front panelu. Zapewne via RS232 do małego procka byłby przyłączany jakiś inny mały procek z obsługą lokalnej klawiatury. Duży procek zaś jest przyłączony do kompa, skąd zaciąga sekwencje sterujące. Dlatego transmisja jest w jedną stronę: z małego C51 do dużego C51. Dlatego są dwa kanały szeregowe RS232. To ma sens.
Swoją drogą jak zmienia się świadomość. Dzisiaj zrobiłbym to całkowicie inaczej. 20 lat temu zrobiłem to jak na powyższych obrazkach. Cóż inne czasy → inne możliwości. Dziś mam większą praktykę i wprawę. No cóż, świat się zmienia.
Obecnie są wszystkie niezbędne elementy by dokończyć budowy: jest hardware, jest SDCC, które potrafi tworzyć soft w C na procki C51 (między innymi), jest emulator EPROM, który pozwoli na ćwiczenie softu. No to zabawę czas zacząć...
koncepcja i geneza
Kiedyś układy mikroprocesorowe były „bardziej zdefragmentowane”, dzisiaj wszystko znajduje się w jednym układzie scalonym. Uruchamiając cokolwiek, zawsze zachodziła potrzeba jakiegoś wysterowania sygnałów. Ot choćby by sprawdzić, czy działa poprawnie dekoder adresowy, czy coś podobnego. Sprowadzało się to do tego, że było dużo „drutów glebowych” (przyłączonych do masy), które były wtykane w podstawkę, z której został wyjęty procesor. Realizując logikę na układach cyfrowych w technologii TTL LS można założyć, że wejścia nie wysterowane mają domyślnie stan logicznej jedynki, które można było „drutem glebowym” zmienić na logiczne zero. Takie „udawanie” procka pozwalało w jakiś elementarny sposób sprawdzić poprawność konstrukcji, montażu itp. Ta dość prosta metoda ma jedną zasadniczą wadę, nie ma możliwości powtórzenia jakiejś sekwencji sygnałów sterujących, tzn ma, trzeba wszystko wytknąć i powtykać w określonej kolejności ponownie. Dodatkowo występuje tu odwieczne niekorzystne zjawisko „dzwonienia styków”. No więc może trzeba coś na to zaradzić. Ileś przemyśleń w końcu doprowadziło do urodzenia się w głowie koncepcji urządzenia wspomagającego tego typu prace.
Całość w sumie pochodzi z ubiegłego wieku, na dokumentacji technologicznej jest data: marzec 2000 roku. Wstępnie zmontowana z jakichś powodów (już nie pamiętam jakich) całość powędrowała do pudełka i odleżała prawie 20 lat. Teraz ponownie pudełko wypłynęło na wierzch i sądzę, że może warto dokończyć budowy. Z racji pewnego stopnia „starożytności” zastosowane rozwiązania są jakie są. Cóż w tamtych czasach nie bardzo były dostępne inne rozwiązania. Czasy Z80 przeszły do historii, poza tym coś takiego na Z80 zajęło by kilka razy większą powierzchnię PCB. Wybór padł na procek z rodziny C51. Wybór... jak wybór mógł być lepszy, mógł być gorszy.
Schemat to:W tym wszystkim mamy jednostkę centralną, czyli proca w przyległościami pamięciowymi:Jest tu klasyczne rozwiązanie środowiska procka C51 z zewnętrzna pamięcią EPROM na program oraz pamięcią RAM jako pamięć operacyjna. W przestrzeni adresowej procka C51 znajduje się jeszcze dodatkowo kilka rejestrów (na kolejnych stronach schematu). Do obsługi tego wszystkiego, w sensie generowania sygnałów typu chip select, zastosowany został układ GAL. W jakimś stopniu rozwiązanie z drugim prockiem (U108, AT89C2051) jest obecnie pewną zagadką, bo nie pamiętam do czego to miało służyć. Ten mały procek komunikuje się z dużym w taki sposób, że wystawia na porcie 8-bitowe dane (równolegle) i generuje na swoim P3.7 sygnał przerwania dla dużego procka, który odczytuje dane jako lokację w pamięci operacyjnej (łącznik trójstanowy U109 z sygnałem wyboru generowanym przez GAL a „druga strona” łącznika jest wpięta w szynę danych dużego procka). To pozwala utworzyć kanał komunikacyjny w jedną stronę. Do czegoś to miało służyć, tylko do czego: dużo zagadek. Duży procek miał jeszcze złącze do typowego wyświetlacza LCD na bazie HD44780 (złącze P104 z obsługą modułu LCD na magistrali 4-bitowej), tylko co miało być wyświetlane? Kolejna zagadka. Pamięć EEPROM na I2C (U106) zapewne miała przechowywać jakieś nastawy i dane konfiguracyjne. Mały DIPSWITCH jest w przestrzeni małego procka. Też zapewne miał jakieś sensowne zastosowanie.
Układ wejściowy to możliwość manipulowania ośmioma pinami.Każdy pin może zostać skonfigurowany do roli wejścia lub wyjścia. Powielony osiem razy zespół może być wejściem (wtedy łącznik trójstanowy 74LS125 jest w trzecim stanie) lub wyjściem (wtedy łącznik trójstanowy 74LS125 jest wysterowany do transmisji sygnałów). Bramka wejściowa (74LS08) może być odcięta do wejścia (sygnałem ENx).Sposób wysterowania elementów wejściowych (tych z poprzedniego kawałka schematu) jest uzależniony od stanu rejestrów U701 .. U703, które są określonymi komórkami w przestrzeni adresowej dużego proca. Sygnały strobu zapisu pochodzą z układu GAL (czyli rejesty są w przestrzeni adresowej pamięci RAM dużego procka)..
Sygnały z bloku wejściowego trafiają na poniższy zespół (dwa przetwarzacze po 4 bity):Jest to hawrdwarowy układ „różniczkujący”: wykrywający jakiekolwiek zmiany stanów. Dwa przerzutniki typu D zapamiętują aktualny stan sygnału wejściowego oraz poprzedni (ostatni) stan. Wyjścia przerzutników są komparowane przez bramkę EXOR i finalnie przy jakiejkolwiek zmianie stanu zerują rejestr przesuwający (74LS165). Rejestr ten, taktowany powolnym sygnałem zegarowym po wyzerowaniu będzie „wsuwał” sobie jedynki. Finalnie wygeneruje impuls w logice ujemnej, który finalnie dalej wysteruje diodą LED. Taki sygnalizator dowolnej zmiany stanu na określonym wejściu.
Układ wykrywający zmiany stanów jest taktowany odpowiednim sygnałem zegarowym.Jest klasyczny generator fali prostokątnej o częstotliwości 20MHz (U502), który steruje zejściami zegarowymi w całem bandzie przerzutników typu D. 20MHz to wystarczająca częstotliwość do „obserwacji” sygnałów cyfrowych generowanych lub monitorowanych przez PINTOOL. Szybsze przebiegi niż 50ns mogą być niezauważone. Na układzie U501 (NE555) zrealizowany jest generator do sterowania rejestrami 74LS165 do sygnalizacji o akceptowalnym czasie świecenia diodą LED.
Diody LED są sterowane poprzez układ ULN2803. Nie ma tu żadnej wielkiej filozofii. Dochodzi jedynie sprzętowa sygnalizacja trwania transmisji szeregowej od dużego proca.Front panel to płytka z samymi diodami LED.PCB pokazują następujące rysunki: strona TOPstrona BOTTOM:Rozmieszczenie elementów:Zmontowałem (w jakimś stopniu, żaden ezgemplarz nie jest w pełni kompletny) 3 sztuki i jeden front panel.Tak się zastanawiam nad funkcją małego procka. Do głowy mi przychodzi zdalna klawiatura. To ma sens. Generalnie całość miała być przyłączona do PC-ta, gdzie za pomocą nieistniejącego programu (jeszcze), generowane byłyby sekwencje sterujące, czyli co ma być wystawione jako 8-bitowe dane na zewnątrz. Można by to puścić z określonymi parametrami czasowymi lub „puszczać krokowo”. Do tego potrzebne są jakieś klawisze sterujące. Takich nie ma na front panelu. Zapewne via RS232 do małego procka byłby przyłączany jakiś inny mały procek z obsługą lokalnej klawiatury. Duży procek zaś jest przyłączony do kompa, skąd zaciąga sekwencje sterujące. Dlatego transmisja jest w jedną stronę: z małego C51 do dużego C51. Dlatego są dwa kanały szeregowe RS232. To ma sens.
Swoją drogą jak zmienia się świadomość. Dzisiaj zrobiłbym to całkowicie inaczej. 20 lat temu zrobiłem to jak na powyższych obrazkach. Cóż inne czasy → inne możliwości. Dziś mam większą praktykę i wprawę. No cóż, świat się zmienia.
Obecnie są wszystkie niezbędne elementy by dokończyć budowy: jest hardware, jest SDCC, które potrafi tworzyć soft w C na procki C51 (między innymi), jest emulator EPROM, który pozwoli na ćwiczenie softu. No to zabawę czas zacząć...