Programátor PROM 74188

Úvod

Stalo se mi při opravování jednoho staršího obvodu, že jsem potřeboval vyměnit integrovaný obvod 74188. Jedná se o obvod, který se zřejmě už nějaký čas nevyrábí, ale stále je dostupný v některých prodejnách (Já ho koupil v Compu ve Václavské pasáži na Karlově Náměstí v Praze - Compo se orientuje na součástky Tesla ještě před pár lety hojně používané a tudíž potřebné právě při opravách.) Na internetu jsem o něm nenašel v podstatě vůbec nic, akorát stopy jeho existence, většinou v podobě dotazů lidí postižených podobným problémem.

Obvod 74188 je PROM s organizací 32 x 8 bitů. Kapacita extrémně malá, ale rozměry DIL16 taky nejsou největší a ve své době byla velmi praktická coby generátor funkcí a pod. (viz. elektronická kostka). Zároveň byla levná, především v době kdy se na ceně projevil každý bit. Datové výstupy mají otevřené kolektory, adresuje se pěti adresovými vstupy a lze zablokovat log. 1 přivedenou na vstup select. Programuje se přivedením 10,5V na napájení a log. 0 na právě programovaný bit, samozřejmě musí být v ten okamžik nastavena adresa. Délka programovacího pulzu se určuje přivedením log. 0 na vstup select. Další podrobnosti najdete v katalogovém listu, celý postup je tam docela rozumně popsán, i když terminologie může být mírně matoucí.

Připojení k PC

Mnou postavený programátor vznikl jako znouze ctnost, nic lepšího jsem k dispozici neměl a nechtěl jsem tím trávit mnoho času, takže jsem nevytvářel plošný spoj a celé jsem to zapojil jen na univerzální desce. Použil jsem součástky získané z kdejakého šrotu a připojil jsem to k počítači.

K propojení počítače a programátoru jsem použil ISA kartu FPC-024, kterou (zcela novou) jsem získal z vyřazeného šrotu jedné firmy. Karta má na sobě dva obvody NEC8255C tak hojně rozšířené mezi československými uživateli ZX Spectra a časovač, ale k zapojení mi postačila jen jedna 8255. Čímž je zapojení mimochodem použitelné i u ZX Spectra s rozhraním UR-4, ale není k němu dostupný software, ten byste si museli napsat sami (podle mé zkušenosti práce tak na 1 den včetně vymyšlení, odladění i použití). Pokud napíšete, velmi rád ho uveřejním. Obvod 8255 má tři osmibitové porty a umí pracovat ve třech režimech. Port A jsem použil pro čtení dat a po celou dobu provozu je nastaven jako vstup, port B je po celou dobu nastaven jako výstup, je použit k adresování. Významných je tedy jen pět bitů a mohl bych další tři použít pro jiné signály, ale nechtěl jsem je zbytečně míchat, software by se tím zesložitil, tedy nejvyšší tři bity jsou nevyužité. Port C jsem použil jako řídící, přičemž bit 0 je signál select a bit 1 spíná programovací relé. Z karty FPC-024 je vyvedeno i napájení +12V, což byste si v případě UR-4 museli připojit z externího zdroje, to je taky jediná odlišnost, +5V je vyvedeno i na UR-4.

Připojení k portům samozřejmě není tak zcela bez problémů. Paměť 74188 má při programování dle katalogu odběr až 450mA a z programovaného bitu může téct proud až 150mA. Obě hodnoty jsou sice mezní, jenže je třeba s nimi počítat. Naproti tomu obvod MHB8255 snese proudy 1,7mA v log. 0 dle dokumentace k UR-4, nebo 2,5mA dle datasheetu k I8255. Obojí je málo a ani posilovače sběrnic nestačí, proudy jejich vstupy se mohou pohybovat nejvýše v řádu desítek mA. Řešit problém pomocí tranzistorů se mi nechtělo a nakupovat jiné IO taky ne. Vyřešil jsem tedy problém pomocí DIP switche a druhého kontaktu relé (první je použit ke spínání Ucc). Nevýhodou řešení je možnost omylu ze strany obsluhy, výhodou jednoduchost a snadná realizovatelnost. Tedy jakmile je nastaven programovací bit, relé sepne, a jedním kontaktem je přivedeno na napájení přibližně 11V a druhým je uzemněn DIP switch na němž musí být nastaven programovaný bit. Veškerý programovací proud protéhá skrz kontakty relé a obvod 8255 nastavený v režimu velké impedance jako vstup není nijak ohrožen i kdyby kontakt relé selhal, nebo sepnul později. Při testování jsem ještě pro jistotu měl datové výstupy připojené přes osum hradel AND obvodu 74LS08, který snese na vstupu až 7V (jen LS ne jiná verze), ale nejspíš to nebylo nutné.

Použitý software

Abych mohl ovládat porty karty přímo, potřeboval jsem operační systém, který to povoluje. Jakákoliv verze M$ Windows nepřicházela v úvahu kvůli licenci, náročnosti na hardware a nepotřebným zbytečnostem pro daný případ. Verze od Windows NT , 2000, XP stejně nedovolují přistupovat na porty přímo, takže i kdybych chtěl tak by to tak snadno nešlo. Z podobného důvodu jsem zavrhl Linux, sice mám k dispozici instalací celou řadu, ale musel bych si napsat modul pro jádro a hlavně je taky dost náročný na hardware (opět vzhledem k použitému PC s CPU 486DX2@66 a 12MB RAM). I tak trvala kompilace výsledného programu několik sekund (3s - 8s). M$DOS bych použít mohl, ale licenci jsem dávno někde ztratil ;-) a instalačky nemám. Nakonec jsem zvolil Free DOS v kombinaci s Free Pascalem. Instalaci popisovat nebudu, jednak se to mírně mění podle zrovna aktuální verze a druhak si mnohem lepší popis můžete přečíst přímo na stránkách projektů. Prostě jsem to nainstaloval a výsledkem byl spolehlivě funkční DOS s kompilerem 32 bitového Pascalu s vývojářským prostředím ne zcela nepodobným borlandímu BP (v podstatě skoro stejným).

Pro šťouraly k tomu PC. Mám jich k dispozici několik a bez výjimky mnohonásobně výkonnějších (druhé stále s velkým odstupem nejpomalejší K6/2 550MHz, Pentium III 800MHz ...), jenže nechci experimentováním riskovat to co je ještě užitečné k jiným věcem než samotnému experimentování. Pro upřesnění konfigurace PC byla 486DX2 66MHz, 12MB EDO RAM, 89MB HDD, 3 1/2" a 5 1/4" FDD, zmíněná karta portů FPC-024, VGA ISA karta Trident 1MB a ethernet karta NE2000 PCI s čipem 8029A.

Zapojení programátoru

Následující schéma berte s rezervou. Je funkční a to mi postačuje, nicméně jsem si vědom několika nedostatků oproti doporučení v katalogu. Předně není možné odpojit napájení PROM, takže je úplně vynechána možnost "zotavení" PROM po naprogramování bitu (typicky 3x délka programovacího pulzu) a není přesně definováno napájecí napětí. Napájecí napětí by mělo být v intervalu od 10V do 11V. Já jsem PROM připojil přes malý odpor a spoléhám na úbytek napětí na tomto odporu, který bude mít za následek přiblížení k ideálnímu stavu. Praxe ukazuje, že to až tak kritické není a v pohodě to funguje i takto. Ani absence zotavovací doby není na závadu. Pravda, PROM se mírně zahřívá, ale opravdu mírně, odhaduji tak na 30°C. Což není o mnoho víc než běžná provozní teplota, alespoň po hmatu téměř neznatelně. Doplnění této funkce by bylo nejlepší použitím dalšího relé a využitím dalšího bitu portu C, změna vcelku nepatrná, jenže zrovna jsem neměl to další relé.

schéma programátoru

Vstupy PROM jsou pověšené na +5V přes 10k odpory, protože mají otevřené kolektory. Odpor 22Ω zajišťuje mírné omezení proudu při programování a DIP switchem je potřeba postupně zvolit všech osum bitů (zbytek zajistí program). Použité relé by mělo být dost rychlé, aby jím bylo možno spínat pulzy 4ms dlouhé (čím rychlejší tím lépe). V mém zapojení jsem použil 5V relé Meisei M4-5H získané z vadného modemu Askey 56kBit, řízeno je přes tranzistor KSY21. Parametry tranzistoru neznám, h21 zesílení neměl nijak vysoké, ale funguje to s ním, pravděpodobně to bude fungovat skoro s jakýmkoliv NPN tranzistorem, akorát hodnoty odporů si možná budete muset upravit. Dioda v bázi tranzistoru je tam pro jistotu, nemusí být.

Ovládací program

Umí v podstatě jen to nejzákladnější, tj. načíst a uložit obsah proměnné o velikosti 32x8 bytů ze/do souboru output.rom, zobrazit obsah téže proměnné v hexu, nebo binárně, načíst obsah PROM do proměnné, porovnat obsah PROM s proměnnou a vypsat přehledně nalezené odlišnosti a naprogramovat obsah proměnné do PROM. Na vytvoření dialogu pro zadávání jmen souborů nebyl čas, snad později.

Z výše uvedeného vyplývá i postup programování. Nejprve je vhodné zkontrolovat PROM, prázdná by měla obsahovat jenom nuly. Log. 1 znamená naprogramovaný bit a nelze ji už nikdy změnit. Pak je potřeba načíst ze souboru předem definovaný obsah PROM. K vytvoření souboru použijte svůj oblíbený nejlépe hexadecimální editor. Po načtení si ho můžete zobrazit a ještě jednou zkontrolovat, jestli je správný, což doporučuju. No a pak už programovat. Při programování se vždy zobrazí číslo bitu a program počká na stisk klávesy, to je okamžik, kdy byste měli přepnout správný spínač na DIP switchi (POZOR! Bit 0 odpovídá většinou spínači s číslem 1, DIP switch číslovaný od 0 jsem ještě neviděl), pak stiskněte klávesu. Program projde všech 32 adres od 0 do 31 a zkontroluje jestli je bit v PROM už naprogramován nebo ne. Pokud není a má být, tak ho naprogramuje. Poprvé se pokusí programovat pulzem 4ms dlouhým a není-li úspěšný prodlužuje pulz po 4ms až do 20ms trvání pulzu. Neuspěje-li ani tak, zobrazí místo 1 vykřičník což značí chybný bit. Log. 0 programovat nemusí a přeskakuje je. Když je dokončeno programování bitu program zobrazí číslo následujícího bitu a znovu čeká atd... dokud není naprogramováno všech osum bitů. Pak znovu čeká na klávesu abyste si mohli prohlédnout výsledek programování. Nakonec doporučuji PROM verifikovat.

  • Pokud se nepovede naprogramovat PROM napoprvé (tj. některé bity zůstaly nulové), zkuste to znovu úplně stejným postupem.
  • Při čtení paměti nesmí být žádný spínač sepnutý, tím byste zkratovali výstup a program by načetl log. 0 pro všechny adresy a zkratovaný bit.
  • Při programování smí být programován vždy jen jeden bit, nikdy ne dva a více zároveň.

Závěr

Jak jsem psal výše, celý programátor vznikl z nouze, protože jsem ho potřeboval a neměl možnost rozumněji získat. Výsledek je funkční a pokud přijdete na nějaké zajímavé detaily, rád je zveřejním, ale pravděpodobně se tím více zabývat nebudu. Materiál zde získaný můžete volně šířit dál pokud uvedete zdroj. Zdrojové kódy programu můžete šířit pod GPL 2 licencí. Vše co podle tohoto popisu učiníte, činíte jen na své vlastní riziko a já za Vaše činy nemohu nést zodpovědnost.

Download

[ Zpět na hlavní stránku ]

Tento web je převážně o ZX Spectru, kompatibilních počítačích a jiném zajímavém hardwaru. Naleznete-li chybu, nebo byste rádi cokoliv co s tímto souvisí, můžete mi napsat email. Stručně o mém webu zde.