EPROM - programator równoległy
Programator szeregowy to taki, w którym kolejne adresy komórek EPROM podaje się
jeden za drugim. Aby wybrać jakąś komórkę, należy "przelecieć" przez wszystkie adresy od 0 do n-1. Trwa to wieki. Nie ma
możliwości wybrania dowolnej komórki w sposób szybki i prosty.
Wady tej pozbawiony jest programator równoległy. Podajesz adres komórki i już masz
do niej dostęp. Do odczytu, programowania, sprawdzenia (weryfikacji) itd.
Marzeniem moim (zawsze) było, by mieć programator mały, minimalnie nieskomplikowany
i prosty w obsłudze. Pierwszy programator który wykonałem ma gabaryty: 280x150x120 (mm). Potęga! Ledwo mieści się na
stole. To programator szeregowy. Teraz mam całkiem maciupeńki. To jest po prostu najzwyklejszy kartridż. Tak!, Tak!
Programator wielkości kartridża, na dodatek wkłada się go w gniazdo kartridża. Jak to możliwe? Posłuchajcie. Chyba
poczytajcie ;)
Potrzebne scalaki to:
- 74574 - 3szt (LS)
- 74245 - 1szt (LS)
- 74138 - 1szt (LS)
- 74157 - 1szt (LS)
- 7474 - 1szt (LS)
drobnica...
- BC557 1szt
- BC547 1szt
- 2kohm 3szt
- 3kohm 1szt
- 560ohm 1szt
- 4k7 3szt
- 10uF 1szt elektrolit
- 100uF 1szt elektrolit
- 100nF 4szt blokujące zasilanie
- przycisk Reset
- podstawki pod US
- goldpiny
- zasilacz (+12.5V, +21V, +26V)
Programator programuje wszystkie typy pamięci EPROM (2732-27512). Aby działał,
posiada kilka rejestrów sprzętowych w przestrzeni $D5...
$D500 - LSB adresu komórki EPROM
$D501 - MSB adresu komórki EPROM
$D502 - rejestr danej do zaprogramownia (zapis do EPROM)
$D503 - rejestr danej zaprogramowanej (odczyt z EPROM)
$D505 - rejestr impulsu programującego
$D506 - rejestr sterujący
By całość była uniwersalna, sam programator nie posiada podstawki pod pamieć EPROM ??? (Dziwne?) Bo jak każdy wie, różne
EPROM'ki muszą mieć różne okablowanie. Więc z programatora wyprowadzone jest gniazdo do którego dołącza się coś w
rodzaju dodatkowego kartridża. Tenże kartridż ma na swoim pokładzie odpowiednią podstawkę do konkretnej EPROM'ki. Np.
SPARTA DOS X wymaga by linie adresowe i danych były pokrzyżowane. Ale TTP nie. Więc montujesz szybko kartridż z
podstawką jaki chcesz, wkładasz do gniazda i gotowe. Zniknął problem przełaczników itp... O tym jeszcze będzie.
Temat główny c.d.
Rejestr sterujący jak wskazuje nazwa steruje całością. Jego adres $D506 i jest to rejestr tylko do zapisu. Po włączeniu
zasilania jest automatycznie ustawiany (1) i blokuje rejestr impulsu programującego $D505. Ważny tylko bit D0, pozostałe
bez znaczenia.
$D506 = 00000001
Programator jest w stanie ODCZYT - blokada rejestru $D505. Dostęp do pozostałych rejestrów.
$D506 = 00000000
Programator w stanie PROGRAMOWANIE - dostęp do rejestru $D505 Dostęp do pozostałych rejestrów.
Rejestr impulsu programującego $D505 Ważny tylko bit D0, pozostałe bez znaczenia. Po włączeniu zasilania, ten rejestr
jest zerowany (0) i jednocześnie blokowany jest do niego dostęp.
Ogólnie: gdy programator jest w stanie ODCZYT, blokowany jest dostęp do rejestru $D505
$D505 = 00000001
Generuje impusl programujący
$D505 = 00000000
Koniec impulsu programującego
Rejestr danej do zaprogramowania $D502. Gdy programator jest w stanie ODCZYT,
dostęp do tego rejestru jest blokowany, tzn. możliwy jest do niego wpis danej, ale nie oddziaływuje ona na dalsze
układy, bo wyjścia tego rejestru są w stanie wysokiej impendancji. Gdy programator jest w stanie PROGRAMOWANIE,
wpisanie danej do tego rejestru spowoduje, po pojawieniu się impulsu programującego, zaprogramowanie jej w EPROM.
Rejestr $D502 jest rejestrem tylko do zapisu. Choć możliwy jest też jego odczyt, to jest to efekt uboczny. Na upartego
kto chce może odczytu dokonywać, np, dla sprawdzenia co zostanie zaprogramowane.
Drugi rejestr $D503 jest rejestrem odczytu danej z EPROM. Mówiąc po ludzku. Do
rejestru $D502 wpisujemy daną do zaprogramowania, a z rejestru $D503 można odczytać daną zaprogamowaną. To na pozór
dziwaczne rozwiązanie ma swoje uzasadnienie. Po prostu, na przemian, należy uaktywniać rejestr danej do zaprogramowania
i EPROM z której można odczytać zaprogramowaną daną. Aby na szynie danych nie dochodziło do zwarć, stąd to rozwiązanie
(choć, można to inaczej robić, ale nie będę tu więcej truć). Rejestr $D503 jest tylko do odczytu.
Być może ktoś zauważył błąd w opisie, lub coś się nie zgadza. To złudzenie. Proszę popatrzeć na schemat. Sygnały
pobierane są z wyjść Q i Q (zanegowane) więc gdy piszę że rejestr jest wyzerowany to znaczy JEST WYZEROWANY, ale
sygnałem aktywnym jest "1" bo w działaniu jest wyjście Q (zanegowane). Proszę o tym pamiętać!!!
Rejestry adresowe $D500 i $D501 pozwalają zaadresować dowolną komórkę EPROM Są to
rejestry tylko do zapisu. Co wpisać do tych rejestrów. Adres komórki EPROM do której ma być dostęp to np. $01FA. Więc do
rejestru $D500 należy wpisać $FA, a do rejestru $D501 - $01. Proste? Kto chce oprogramować programator z poziomu BASIC'a
posłuży się znanym wzorem np. adres komórki = 1000
MSB = INT(1000/256)
LSB = 1000-MSB*256
POKE 54528,LSB ($D500)
POKE 54529,MSB ($D501)
Jasne?
Jak programować.
* ustaw programator w stan PROGRAMOWANIE
lda #0
sta $d506
* wpisz adres komórki EPROM
lda <adres
sta $D500
lda >adres
sta $D501
* wpisz daną do zaprogramowania
lda #dana
sta $d502
* wygeneruj impuls programujący
lda #1
sta $d505
(...) pusta pętla
(...) pusta pętla
lda #0
sta $d505
(...) tu wstawić należy pętlę która spowoduje, że impuls programujący TPW będzie trwał wymagany czas. Ważne!
* ustaw programator w stan ODCZYT
lda #1
sta $d506
* odczytaj daną z EPROM, np. celem weryfikacji
lda $d503
cmp .... porównaj z daną programowaną.
Gdy równe, programowanie OK. Gdy różne, programowanie komórki należy powtórzyć, ale tylko w przypadku gdy dana do
zaprogramowania jest mniejsza od danej odczytanej z EPROM. Jeżeli jest odwrotnie, nastąpiło przeprogramowanie (bit który
miał być jedynką, jest już zerem). W takim wypadku pamięć należy wykasować i ponownie programować.
Jeszcze...
Z uwagi na minimalne wymiary programatora, zasilacz dostarczający napięć: 12V, 21, 26V jest podłączany dodatkowym
kabelkiem. Takie rozwiązanie wydaje mi się praktyczne, bo istnieje przez to mniejsze prawdopodobieństwo pomylenia napięć
Vpp co praktycznie zawsze prowadzi do uszkodzenia EPROM. Tak więc zasilacz ma trzy gniazda na których dostępne jest
jedno z wymienionych napięć. Sam programator jest zasilany napięciem +5V wprost z komputera poprzez gniazdo kartridża.
Na wszelki wypadek przycisk RESET w programatorze powoduje ustawienie programatora w stan ODCZYT, co automatycznie
blokuje generację impulsu programującego. To dla lubiących eksperymenty. Łatwiej nacisnąć przycisk niż wpisać sekwencję
programową odłączającą zasialnie Vpp.
BASIC pokazuje pazury.
10 REM Odczyt 64kB EPROM 27512
15 POKE 54534,1
20 OPEN #1,4,0,"D:DANE.EPR"
25 FOR J=0 TO 255
30 POKE 54529,J
35 FOR I=0 TO 255
40 POKE 54528,I
45 PUT #1,PEEK(54531)
50 NEXT I
55 NEXT J
60 CLOSE #1
Jeszcze BASIC...
10 REM Programowanie 64kB EPROM 27512
15 POKE 54534,0
20 OPEN #1,8,0,"D:DANE.EPR"
25 FOR J=0 TO 255
30 POKE 54529,J
35 FOR I=0 TO 255
40 POKE 54528,I
45 GET #1,A:POKE 54530,A
50 POKE 54533,1
55 POKE 54533,0
60 NEXT I
65 NEXT J
70 POKE 54534,1
75 CLOSE #1
W/g potrzeb, pomiędzy linie 50,55 można wstawić pętlę opóźniającą która spowoduje wygenerowanie odpowiednio długiego
impulsu programującego. Czy to jest zrozumiałe?
Zasilacz
Wykonany jest jako osobna maszyneria. Dostarcza napięć: +12.5V +21V +26V. Dwa
ostatnie napięcia to ukłon w stronę starszych EPROM'ek wymagających tak wysokiego napięcia. Obciążenie prądowe zasilacza
jest minimalne (kilka miliamperów), więc trafo do niego to miniaturka. W roli zasilacza wystąpić może przetwornica.
Odpada zasilacz Rozumiem że użytkownik programatora wie co robi, i w zależności od programowanej EPROM doprowadza do
programatora odpowiednie napięcie!!! WAŻNE!!! Pieniądze nie swędzą!
Przebiegi w czasie programowania

TPW=0.1us - 10us (patrz katalog EPROM)
Dobre rady
Czy wszyscy pamiętają że BASIC jest wolny! Może się zdarzyć że pomimo różnych
zabiegów impuls programujący będzie i tak za długi, co nieuchronnie prowadzić może do przeprogramowania EPROM lub jej
uszkodzenia. Dlatego doradzam użycie TURBO BASIC'a. Jest wystarczająco szybki. Zawsze można dodatkowo wyłączyć ekran
(POKE 559,0).
Warto pomyśleć o zasilaczu który ma regulowane napięcie w zakresie 10-14V.
Nowoczesne EPROM'ki wymagają by napięcie programujące wynosiło 12.75V Jednak egzemplarze stare z demobilu czasami
wymagają nieco większego napięcia. Regulowany zasilacz doskonale załatwia sprawę.
Niektóre EPROM'ki wymagają by w czasie programowania zasilać je napięciem +6V lub
nieco wyższym. Prezentowany tu programator jest zasilany wprost z komputera napięciem +5V W razie potrzeby elektronicy
mający głowę na karku potrafią to rozwiązać. Napięcie +6V doprowadzić należy TYLKO do EPROM'ki a nie do całego
programatora bo całość eksploduje!!!
SCHEMATY "Kliknij" aby powiększyć
Zenon/DIAL
PS. Namiastka ukazała się w ATARYNCE 2 (5)
PREPROM.TBA - przykładowy program w Turbo Basic'u
READ64KB.TBA - procedura odczytu 64kB EPROM z zapisem danych na dysk
|