Pri stavbe replík 8-bitových počítačov sa veľmi často stretneme s potrebou naprogramovať pamäte typu PROM, ktoré sa používali ako rôzne špecializované adresné dekodéry alebo ako špeciálne logické členy. V našich zemepisných šírkach boli PROM-ky veľmi obľúbené, nájdeme ich v takmer každom mikropočítači domácej proveniencie z tej doby. Vo svete boli veľmi rýchlo nahradené PAL/GAL obvodmi, ktoré však v tej dobe u nás neboli dostupné a tak sa PROM pamäte na tieto účely veselo používali aj naďalej. A keďže sa u nás vyrábali tri základné typy – MH74188 (32×8 bitov), MH74S287 (256×4 bity) a MH74S571 (512×4 bity), rozhodol som sa postaviť programátor práve pre tieto tri typy pamätí.
Prešiel som si dobovú literatúru, ako aj zdoje na internete a nenašiel som nič, čo by ma nejako zásadne oslovilo – staré konštrukcie vyžadovali častokrát ručné nastavovanie dát a moderné Arduinoidné bastle som nepovažoval za dosť dobré, nakoľko im chýbala hlavne finálna podoba. A tak som sa rozhodol niečo vymyslieť sám. Inšpiroval som sa jedným celkom pekne urobenym programátorom z Amatérskeho Rádia, ale už sa nepamätám, v ktorom čísle a ročníku to bolo. Nastavovanie adresy a dát bolo ručné, programovacia sekvencia sa aktivovala tlačidlom a časovanie pulzov bolo riešené cez monostabilné klopné obvody. Proste ideálny kandidát.
A tak som prehrabal šuflíky, čo by sa tak asi dalo použiť a nakreslil schému:
V podstate žiadny zázrak, ako riadiaci mozog som použil prvé, čo malo dosť vývodov na ovládanie všetkého, čo je zapotreby – vyšla mi z toho ATmega16, snažil som sa minimalizovať potrebný počet pinov aj za cenu ďalších obvodov, občas to proste inak nejde. Takže pribudol jeden sériovo-paralelný prevodník na nastavenie adresy, jeden paralelno-sériový prevodník na čítanie dát a jeden dekodér pre výber programovaného bitu (keďže podľa pokynov výrobcu sa programuje vždy iba jeden bit). Na komunikáciu slúži štandardný 2-riadkový 16-znakový alfanumerický displej, na ovládanie slúži šestica tlačítiek.
Troška takou špecialitkou je použitie hotového step-down modulu, ktorých som pár kusov už dávnejšie kúpil a priebežne ich používam keď sa naskytne potreba, teraz sa mi tam celkom hodil a tak je tam.
Ale poďme po poriadku. programátor je napájaný z klasického adaptéra 15V/1A, dióda D1 slúži ako ochrana proti prepólovaniu. Menič nastavíme na výstupné napätie 5,5V, za diódou D2 by sme mali mať 5V, ktorými sa napája mikroprocesor a zvyšné obvody, U2 nastavíme (ak to bude treba tak zmenou R11) tak, aby na jeho výstupe bolo 11.7-11.8V, spolu s úbytkami na D4 a spínacích tranzistoroch Q2-Q10 získame pri programovaní na vetve Vcc-datovy bit potrebných 10,5V, ktoré sú predpísané pre úspešné naprogramovanie obvodu. Zmena Vcc pre programovaný obvod sa realizuje signálom BURN, ktorý otvorí Q3/Q1, čo je aj signalizované LED diódou D5 (a teda indikuje prebiehajúci programový cyklus).
Obvod U4 slúži pre nastavenie adresy pre čítanie/zápis PROM, U10 prevedie dáta z PROM do sériovej podoby a odošle do mikroprocesora (takto namiesto 8 pinov procesora potrebujeme len 3). U7 sa používa iba v dobe programovania, slúži na otvorenie príslušného spínacieho tranzistora, ktorý “uzemní” práve programovaný bit v dobe, keď je obvod napájaný zvýšenym napätím a tak dôjde k trvalému prepáleniu prepojky v obvode a tým teda aj k naprogramovaniu príslušného bitu na log.1 (nenaprogramované pamäte obsahujú samé nuly).
Ako prevodník USB-UART (slúži pre pripojenie programátora k PC za účelom presunu dát) som použil čínsky obvod CH340G (dá sa kúpiť cez e-bay/Aliexpress za skutočne dobrú cenu), mám ich celkom slušnú zásobu a mám ich rád – sú lacné, spoľahlivé a nezáludné, zatiaľ mi vždy spoľahlivo fungovali. A hlavne nie sú problémy s ovládačmi.
Displej je pripojený v štandardnom 4-bitovom komunikačnom režime (opäť úspora pinov procesora), klávesy majú každá svoj vlastný pin na procesor, keďže ich tam bolo ešte dosť a tak nebolo nutné riešiť maticové pripojenie.
Doska plošného spoja je relatívne jednoduchá (schéma, DPS aj gerbery sú v repozitári), bola navrhnutá pre SMD súčiastky, ale pre pasívne súčiastky som zámerne použil veľkosť 1206, ktoré vidím dobre ešte aj ja. Takže ak ste aj nikdy SMD neosadzovali, netreba sa toho báť, je to taká dobrá cvičná doska na nácvik pájkovania SMD komponentov. Klávesnička je riešená ako “subboard” , osadí sa cez dvojicu kolíková/dutinková lišta do takej výšky, aby hmatníky trčali von z krabičky asi 1mm. Displej je umiestnený na štyroch dištančných stĺpikoch dlhých 12mm. Mechanické usporiadanie je hádam dosť zrejmé z fotiek. V repozitári je samozrejme aj rozpiska materiálu aj s linkami pre troch najbežnejších dodávateľov (SOS, TME a Mouser), nájdete tam aj pekný interaktívny iBOM, treba vyskúšať, ja ho používam veľmi rád.
Najväčšou piplačkou je príprava ZIF pätíc (teda ak chcete prgramátor dať do krabičky, v opačnom prípade ich môžete napájkovať priamo do dosky). Na ZIF pätice sú pripájkované najprv štandardné kolíkové lišty, k nim ešte precízne kolíkové lištý, ktoré sa potom zasunú do precíznych pätíc zapájkovaných do dosky. Viem, je to troška komplikované, ale v tej dobe ma nenapadlo nič lepšie, ak máte lepší nápad, treba ho použiť.
Program pre mikroprocesor je napísaný v BASCOM-e, hex súbor pre napálanie do procesora ako aj zdrojový kód sú v repozitári, ak by si tam niekto chcel niečo ešte dorobiť, miesta v pamäti je ešte dosť. Ovládanie zariadenia je jednoduché – na displeji je vždy nápoveda na funkciu klávesy pod ňou. Programátor umožňuje zvoliť typ pamäti, ktorú chceme programovať (ako som už spomínal 74188, 74S287 alebo 74S571), načítať jej obsah do programátora (popr. ho odoslať do PC vo formáte Intel HEX alebo ho z PC poslať do programátora), k dispozícii je aj jednoduchý editor (šípkami hore a dole sa mení adresa, šípkami vľavo a vpravo sa presúvame medzi bitmi, aktuálne aktívny bit sa klávesou Enter zneguje). Po stlačení klávesy PRG a potvrdení akcie dôjde k naprogromavaniu obvodu umiestneného v ZIF pätici (len pre istotu, tá vľavo je len pre 74188, tá vpravo je pre 74S287/74S571).
Oživenie by nemalo robiť žiadne problémy, základ je dobré pájkovanie a správne nastavené napätia v zdrojovej časti.
Samotný algoritmus programovania je prevzatý z dokumentácie výrobcu, programátor sa pokúša naprogramovať daný bit najprv štandardným pulzom (2 pokusy), ak ani tak nedôjde k jeho naprogramovaniu, skúsi ešte pulz maximálnej povolenej dĺžky, ak aj ten zlyhá, zvýši počítadlo chýb (ktoré sa na záver zobrazí) a pokračuje v programovaní. Vo valnej väčšine prípadov je programovanie úspešné už po prvom pokuse, niektoré kusy pamätí však tvrdohlavo odolávajú, netreba si s tým robiť tažkú hlavu, proste treba celý cyklus pustiť znova, ono sa to poddá. Mal som tu jednu 74S287, ktorá sa celá naprogramovala hneď pri prvom pokuse, až na jeden bit, ktorý sa chytil až pri pokuse č.7.
Programátor som umiestnil do krabičky nakreslenej na mieru v programe FreeCad a vytlačenú na 3D tlačiarni z PLA. Doska je ku krabičke prichytená štyrmi vrutmi 1.6x4mm, vrchný diel držia štyri skrutky M3x10 so zápustnou hlavou. Aj súbory (fcstd a STL) nájdete v repozitári. Odporúčam si tam doplniť nejaké popisky, ja som na to príliš lenivý.
Programátor používam už asi 3 roky, slúži spoľahlivo, už som s ním naprogramoval niekoľko desiatok obvodov, zatiaľ vždy úspešne, naštastie sa mi ešte žiadnu pamäť nepodarilo zničiť.
Ak by mal niekto záujem, ešte mi tu pár plošných spojov zostalo, tak keď tak sa ozvite.
Ha, skoro som zabudol, repozitár je tu.
dobry den
bylo by mozne zakoupit PCB?
popripade predat na bytefest2021?
dekuji
vrba
Zdravim,
ozvite sa mi na lazarus@www.8bit-replicas.com, dohodneme sa.
Skvele ze ste dal kompletne podklady k dispozicii. Nieco podobne som uz dlho zhanal. Velka vdaka !