dino-85 płytka procesora |
![]() |
Płyta procesora to główny element komputerka dino-85, jej schemat ideowy przedstawia rysunek poniżej. ![]() Centralnym elementem jest oczywiście procesor Intel 8085 (U1) taktowany sygnałem zegarowym generowanym przez kwarc o częstotliwości 6.144MHz (Q1). Separację szyny danych i młodszej częsci szyny adresowej zapewnia ośmiobitowy rejestr latch typu 74LS573 (U2) sterowany doprowadzonym z procesora sygnałem ALE (Address Latch Enable). Mapą pamięci oraz przestrzenią I/O procesora zarządza dekoder adresowy (U5) zbudowany na programowalnym układzie GAL16V8. Dekoder nie jest jakoś szczególnie wyrafinowany - ot, dzieli przestrzeń adresową pamięci na pół i generuje sześć sygnałów wyboru dla portów I/O. Niemniej jednak zbudowanie tego z użyciem układów małej skali integracji to niepotrzebna komplikacja i tak już pokręconej płytki drukowanej i dlatego jest GAL. W dino-85 pracują dwa rodzaje pamięci: (E)EPROM o pojemności 8kB /27C64 lub 28C64/ (U3) z oprogramowaniem systemowym oraz statyczna pamięć RAM (U4) o pojemno ci 32kB (62256) na aplikacje i dane użytkowe. Zamiast zwykłej pamięci statycznej można włożyć w podstawkę pamięć typu NV-RAM (Non Volatile RAM, z bateryjką na plecach), to zapewni odporność wgranego oprogramowania na zaniki zasilania. Sprzętowa mapa pamięci komputerka dino-85 wygląda następująco:
Sprzętowa mapa przestrzeni I/O wygląda tak:
Dekoder adresowy generuje sygnały /CSx tylko na podstawie linii IO/M oraz trzech najstarszych bitów adresowych A15...A13. Sygnały /WR i /RD pomimo że fizycznie dostępne na wejściach dekodera nie są brane pod uwagę, stąd tak duża dowolność w gospodarowaniu przestrzenią I/O. Czy dany port ma być wejściem czy wyjściem - decydujemy podczas budowy modułu rozszerzającego (karty) odpowiednio projektując lokalny dla naszego modułu dekoder adresowy. Pewnego wyjaśnienia wymaga wykorzystanie linii A15...A13 w dekodowaniu I/O. Adres I/O jest przecież ośmiobitowy, skąd więc nagle starsze bity adresowe? Ano stąd, że podczas wykonywania rozkazów out port_addr oraz in port_addr procesor 8085 wystawia na starszej części szyny adresowej (A15...A8) dokładnie to samo co na młodszej (A7...A0) [*]. Więc z punktu widzenia dekodera adresowego nie ma znaczenia czy do wyliczeń weżmiemy przykładowo sygnał A14 czy A6. Wartość tego bitu w cyklu maszynonym IOW lub IOR będzie dla danego ośmiobitowego adresu taka sama, to taka sztuczka, ale jakże przydatna. Druga sprawa to obecność zworek J1 i J2 w okolicach dekodera...No cóż, zostały mi wolne wejścia i troszkę szkoda było tak je na stałe zewrzeć do masy czy VCC. Postanowiłam więc wstawić tam zworki umożliwiające łatwe wymuszenie stanu H luub L na dwóch wejściach GAL-a. Teraz te sygnały (nazwane na cześć jumperków J1 i J2) nie są wykorzystywane, ale łatwo można sobie wyobrazić taki sprzetowo rekonfigurowalny dekoder, który zmieni mapę I/O zależnie od ustawień jumperków. Ot, bajer taki na przyszłość...
Budowa komputerka Opisany powyżej i w sumie dość spory układ został zrealizowany na jednostronnej płytce drukowanej. Małe wymiary modułu oznaczają, że mozajka ścieżek jest dość mocno upakowana (rysunek niżej), nie zmiania to faktu że wykonanie takiej płytki metodą termotransferu jest w amatorkich warunkach możliwe... ![]() A oto zdjęcie gotowej p ytki - wytrawiona mozajka ścieżek widziana pod światło. Oczywiście, nie obyło się bez dodatkowych atrakcji w postaci wyskrzybywania igłą resztek miedzi oraz sztukowania dwóch bodajże ścieżek - fotografie niżej pokazują fragment mozajki z przykładowo zaznaczonymi miejscami wymagaj cymi interwencji zaraz po wytrawieniu p ytki.
Po wytrawieniu, zwracam szczególną uwagę na dokładne sprawdzenie płytki pod kątem minizwarć oraz przerw przed rozpoczęciem montażu. Ewentualna naprawa (szczególnie usunięcie zwarć) gdy pola lutownicze będą już pokryte cyną będzie bardzo trudna, a niezauważone błędy w druku zemszczą się okrutnie podczas uruchamiania czy nawet użytkowania komputerka. Sprawdzenia płytki dokonujemy testerem ciągłości obwodu (typowa funkcja współczesnych multimetrów) lub podręczynym zestawem typu płaska bateria + żarówka. Sprawdzamy ciągłość wszystkich linii danych, adresowych i sterujących pomiedzy poszczególnymi układami do których te sygna y są doprowadzone - pracowicie pin po pinie, nie ma zlituj. Następnie sprawdzamy czy pomiędzy pinami (szczególnie tam gdzie przeplatają się ścieżki magistral adresowych i danych) nie ma zwarć. Ze szczególną uwagą sprawdzamy czy jakaś ścieżka nie zwarła się z linią prowadzącą napięcie zasilania. Zwarcie jakiejkolwiek linii sygnałowej do VCC może być kończące dla pracujących w systemie kostek. Zwarcie sygnałów do masy spowoduje co najwyżej błędne działanie i zbyt duży pobór prądu - ale w takiej sytuacji o uruchomieniu jakiejkolwiek aplikacji na dino należy zapomnieć... Montaż i uruchomienie Montaż komputerka nie jest jakąś specjalną filozofią, najpierw zakładamy krosy po stronie elementów, następnie lutujemy resztę elementów biernych, potem podstawki i złącza, na koniec diodę impulsową D2 i LED-a D1. Następne rysunki pokazuja miejsca, gdzie należy założyć krosy oraz rozmieszczenie elementów na płytce. ![]() ![]() Dla odmiany, uruchomienie komputerka może już stać się głębszą filozofią, szczególnie jeżeli na płytce pozostało zwarcie lub któraś ze ścieżek jest przerwana...Dlatego też uruchamiamy komputerek etapami, na spokojnie ale z głową pracującą na dość wysokich obrotach. Przyda się też jakiś dobry (wiarygodny) próbnik stanów logicznych (lub dostęp do oscyloskpu), multimetr wszystkiego nam nie pokaże. A postępujemy tak: 1. wszystkie układy scalone mają być wyjęte z podstawek; 2. omomierzem sprawdzamy czy nie ma zwarcia pomiedzy GND i VCC (złącze Z1); 3. podłączamy zasilanie p ytki i sprawdzamy woltomierzem, czy napięcie +5V jest obecne na wszytkich pinach zasilających układy scalone, dioda LED - D1 ma się optymistycznie świecić; 4. naciskamy przycisk "reset" (SW1) - wyprowadzenie 36 układu U1 powinno przyjąć niski stan logiczny, zwolnienie przycisku spowoduje że w/w pin wróci do stanu H 5. zapinamy wszystkie zworki J1...J7; 6. do podstawki wkładamy mikroprocesor i włączamy zasilanie - układ scalony może być co najwyżej letni, dla wersji CMOS procesora ma być zupełnie zimny! 7. próbnikiem stanów logicznych sprawdzamy obecność sygnału zegarowego na wyprowadzeniu 37 układu U1 (CLK_OUT), obecność przebiegu świadczy i tym, że zewnętrzne elementy generatora zegarowego (C1,C2,Q1) są w porządku, na CLK_OUT ma być przebieg prostokątny o częstotliwości o połowę mniejszej niż ma kwarc Q1 - u mnie: 3.072MHz; 8. sprawdzamy stan logiczny na wyprowadzeniu 3 układu U1 (RESET_OUT) - ma być L, gdy naciśniemy przycisk "reset" końcówka ta wejdzie w stan H na czas naciśnięcia przycisku; 9. sprawdzmay obecność impulsów sterujących latchem adresowym czyli badamy co jest na wyprowadzniu 11 układu U2, obecność imulsów oznacza, że układ demultipleksujący dane i adresy z procesora pracuje poprawnie; 10. do podstawek wkładamy układy U4 (pamięć RAM), U5 (GAL) oraz U3 - E/EPROM z programem testowym. 11. po podłączeniu zasilania i zresetowania komputerka sprawdzamy obecność impulsów na liniach: a) IO/M (pin 34 uk adu U1) b) /RD (pin 32 uk adu U1) c) /WR (pin 31 uk adu U1) d) /ROM (pin 19 uk adu U5) e) /RAM (pin 18 uk adu U5) f) /CS1.../CS6 (piny 12...17 układu U5) Program testowy jest napisanmy tak, aby "dotykać" wymienionych wyżej sygnałów poprzez generowanie cykli zapisu/odczytu pamięci oraz portów I/O. Obecność impulsów na wspomnianych wyjściach świadczy o tym, że komputerek dino-85 jest w miarę uruchomiony i raczej nie wywynie nam żadnego psikusa w dalszym użytkowaniu. Opcjonalnie: 12. Jeżeli mamy chęć potestować dalej - budujemy układ jak opisałam w Programy testowe - to prosty port wyjściowy sterujący ośmioma diodami LED. Jeżeli wejście /CS_IN będziemy przyłączać kolejno do wyjść /CS1.../CS6 dekodera U5 to na diodkach będzie zapalać się coraz to inny wzorek. A jeżeli coś dalej nie działa... No cóż, etatową wróżką nie jestem, a przyczyn wadliwego działania systemu może być bardzo dużo. Obecność impulsów zegarowych na CLK_OUT, poprawne propagowanie syygnału zerującego (RESET_OUT) świadczy o tym, że procesor działa. Jeżeli tak nie jest - proszę oscyloskopem sprawdzić co dzieje się na pinach 1,2 U1 czyli X1, X2. Czasem zdarza się, że mamy wadliwy kwarc lub jest problem z doborem pojemności C1,C2. Wartość 22pF jest w miarę ok, ale można też spróbować nieco innych wartości gdy oscylator uparcie nie chce wystartować. Inna sprawa to sama częstotliwość kwarca. Mój procesor to wersja "A", teoretycznie dostosowana do max. 5MHz, ale przy kwarcu 6.144MHz jeszcze pracuje stabilnie. Jeżeli mamy zwykły, klasyczny Intel 8085 to jest duże prawdopodobieństwo, że procesor nie daje rady z tak szybkim zegarem i należy zastosować inny kwarc, o mniejszej częstotliwości. A tak w ogóle, to dobrze mieć drugi, zapasowy procesor podobnie jak GAL-a czy kości pamięci. Szanse, że wstawimy felerny układ są małe - ale jednak są... Sprawny i poprawnie zaprogramowany dekoder U5 powinien przy pomocy programu testowego generować wszystkie oczekiwane impulsy. Jeżeli obecne są tylko niektóre z nich - sprawdzamy jeszcze raz płytkę na okazję zwarć/przerw w ścieżkach, w ostateczności wymieniamy GAL-a. Parametry czasowe GAL-a są do pominięcia, można wstawić nawet powolną kostkę, łatwo natomiast nabrać się na "brak impulsów" na jego wyjściach. Sygnały /CS1.../CS6 to bardzo krótkie ujemne impulsy na tle wysokiego stałego stanu logicznego i nie każda sonda logiczna jest w stanie to wyłapać, jeżeli mamy wątpliwości - testujemy oscyloskopem. Odnośnie kostek pamięci - jeżeli korzystamy z nowych, kupnych układów - problemu z ich parametrami czasowymi pradwopodobnie nie będzie. Współczesne kości są dość szybkie, a w dino-85 będzie pracowała każda pamięć o czasie dostępu poniżej 250ns. Jeżeli jednak mamy układy z odzysku, zupełnie staroświeckie - proszę upewnić się w ich notach katalogowych jaki jest czas dost pu (parametr Tacc /access time/). Kostki z Tacc w okolicach 300...350ns mają prawo nie działać w ogóle lub działać nieprzewidywalnie. Na koniec - pinologia wykorzystanych w dino-85 kostek. Dobrze mieć taki rysunek pod ręką, szczególnie gdy tropimy jakiś szczególny sygnał w gąszczu innych... ![]() |
![]() |
![]() |
![]() |