Programátor ATF22V10C
Nastal čas rozkoukat se i v oblasti programovatelných logických prvků. Kdysi tolik používaným GALům jsem se vyhýbal, protože se nedají koupit nové (nepočítám-li čínské kousky pochybné kvality) a jejich programování je komplikované a oficiálně nezdokumentované. Programátory jsou moc drahé a GALBLAST se připojuje k mizícím LPT portům. Když jsem ale zjistil, že se pořád vyrábějí jejich kompatibilní náhrady ATF, trochu jsem tomu začal věnovat čas a nechal se zlákat k sestrojení primitivního USB programátoru pro ATF22V10C (opravdu programuje jen tento čip, ATF22V10B ne).
Ke stavbě jsem využil dva zdroje:
Ve zdroji [1] je i zdrojový kód programátoru, ve kterém se postup programování mírně liší od toho uvedeném v [2]. Navíc v [2] autor popisuje nějaké problémy se čtením některých pojistek, ale dodržením algoritmu z [1] jsem na tyto chyby nenarazil. Přesto přečtení [2] stojí za to, informace se tak ucelí, např. z něj plyne, že se nemusí do prvku táhnou 6 bitová adresa, ale pouze 2 bitová.
Od samého začátku jsem se chtěl vyhnout používání LPT portu, proto je jádrem programátoru Arduino Nano, se kterým se komunikuje po USB sběrnici (sériovou linkou). Dále jsou zapotřebí dva spínače napětí +5V a +12V. Čipy ATF mají právě jednu velkou výhodu v tom, že pro editační režim i programování postačuje jedno napětí 12V a nemusí se tak (jako u GALů) vyčítat, jakou hodnotu má mít a tu potom nastavovat. Firmware pro Arduino počítá s oběma spínači, ale např. v [1] je mini varianta, kdy se spíná pouze 12V (a navíc tlačítkem). Vyzkoušel jsem a můžu říct, že to funguje. Popíšu zde tedy tuto variantu:
Varianta MINI
K realizaci potřebujete:
Arduino Nano | Usměrňovací diodu (1N4148) | Kondenzátor 100 nf | Tlačítko | Stabilizovaný zdroj 12V |
Schéma zapojení:
Čip ATF je napájen z arduinového výstupu +5V. Pokud je Arduino napájeno z USB portu, může toto napětí být menší než 5V – programátor i tak funguje. V katalogovém listu jsem nalezl, že odběr ATF čipu může být až 160 mA (při frekvenci 15MHz). Měřil jsem odběrový proud a pohyboval se kolem 20 mA (a pokud se s čipem zrovna nepracuje tak 0mA). Tady je to kryté. Nemám zde nikde žádné pull-up/pull-down rezistory. Tento čip má na všech pinech pin-keeper (viz katalog), který zabraňuje plovoucím vstupům a výstupům. Pokud někdo zná princip programování GALů, asi ho zarazí propojení pinů 4,5,6,7 a 9. Číslo řádku se totiž souká sériově a jen je zapotřebí rozlišit, zda je na všech těchto pinech 1 nebo ne pro určení, zda se programuje řádek s pojistkami, či konfigurace výstupních makrobuněk.
Tlačítko na 12V se musí stisknout vždy, když se má provést nějaká akce (čtení/zápis/mazání) a držet dokud tato operace neskončí. Je to taková bezpečnostní pojistka, aby obsluha to napětí uvolnila, když začne s čipem manipulovat. Nevhodné připojení 12V může zničit čip.
Arduino má firmware, jehož příkazy pro práci s čipem jsou ryze textového charakteru (viz přiložený zdrojový kód). Je to jednodušší pro vývoj, kdy elementární operace zkouším v konzoli. Pro samotnou práci pak nabízím v c# vytvořenou aplikaci. Není to sice žádný programátorský skvost, ale umožňuje načíst JEDEC soubor a vypálit jej do čipu. Před stiskem spodních tlačítek je právě nutné zapnout 12V – pak zvolit akci – počkat až operace skončí (tlačítka budou opět aktivní) a pak zase vypnout 12V. Před zápisem je nutné čip vymazat.
Power down
Ačkoliv jsem to podrobně nezkoumal a neověřoval, měl by stejný JEDEC generovaný původně pro GAL22V10 fungovat i pro tento čip. Podmínkou je ale vypnutí režimu powerdown, kterým je čip ATF22V10C vybaven. Po vymazání čipu je tento režim aktivní a pin č. 4 funguje jako aktivátor tohoto režimu a nelze použít jako běžný logický vstup. Proto je zde navíc funkce – vypnutí powerdown módu. Vypnutí módu lze zařídit i v JEDEC souboru – pokud pojistka číslo 5892 má hodnotu 0, powerdown se vypne. Např. ve WinCUPL (free nástroj pro vytvoření JEDEC souboru) lze vybrat mezi dvěmi čipy: ATF22V10C/ATF22V10C-PD. Určení rozdílu mezi nimi ponechám na inteligenci čtenáře 😉
Varianta DELUXE
Varianta „DELUXE“ má hardware doplněný o spínač 5V, spínač 12V a měnič 5V/12V. Díky měniči lze celé zařízení provozovat jen na připojeném USB portu. Indikační LED oznamuje práci s čipem a ZIF patice je nezbytná pro pohodlné zakládání čipu do programátoru. Pokud by byl zájem o schéma i této varianty, najdu si čas i na překreslení a opětovného ověření tohoto zapojení.