<<< Zpět


PandaProg - univerzální programátor a tester procesorů, pamětí a logických obvodů

Projekt je nedokončený, funkční jen zčásti, nečtěte dál hledáte-li hotový stavební návod.

PandaProg vznikl, když mě přestalo bavit neustálé přizpůsobování programátorů různému rozložení vývodů či různému interface programovaných obvodů. Některé operace vyžadovaly paralelní programování, které běžné programátory neumí. Základní myšlenka byla mít možnost definice pinů (vstup, výstup, napájení atd.) a možnost nejen programovat procesory, ale i paměti a také testovat logické obvody. Patice univerzální DIL 40 pinů s možností vkládání adaptérů, napětí 3.3V, 5V, 12V. Postupně vznikly 3 varianty. PandaProg0 byl první pokus, kdy jsem přepínání pinů řešil pomocí tranzistorů. Skončil jsem v polovině letování, kdy mi došlo, že vytvářím zbytečně složité monstrum. Druhá (už funkční) verze, PandaProg1, si vystačila pouze s procesorem ATmega169, který má dostatečně výkonné výstupy, aby uživil i napájení součástek. Jednoduchost za drobnou daň, že u 12V signálů musí uživatel přepojit ručně DIL propojku. Zprovoznil jsem programování mnoha procesorů Atmel (které jsem měl v šuplíku), sériový i paralelní interface (5V a 12V). Pak mi došla paměť procesoru, ale místo přechodu na ATmega32 mě napadlo přepracovat firmware procesoru na interpreter uživatelsky definovatelných skriptů, které se budou nahrávat do RAM až v případě potřeby - PandaProg2. Interpreter je vytvořen v assembleru a myslím že funguje velmi dobře a efektivně - 1 instrukce asi 1 us. Začal jsem definovat skripty pro SPI, ale bohužel jsem pak už s projektem skončil z časových důvodů - nestíhám vše co bych chtěl a musím proto dát přednost projektům, které považuji za důležitější. Je mi líto že takový nadějný projekt odkládám a budu proto velmi rád, pokud někdo něco z něj využije nebo dokonce bude pokračovat.

PandaProg0: S touto verzí jsem skončil uprostřed letování, kdy jsem si uvědomil že je zbytečně složitá, ale možná by někoho mohla inspirovat, proto alespoň stručně. K přepínání funkce pinů se používá dvojice tranzistorů, které přivádějí na pin napětí 5V nebo 12V, podle výstupu z posuvného registru. Posuvný registr má výstupy s otevřeným kolektorem, třetím výstupem spíná pin k zemi. Signál z pinu je přiveden na vstup procesoru přes odpor a diodu, která chrání procesor při aktivací napětí 12V. Řízením stabilizátorů je možné měnit napětí na obvodu. Programátor byl 3-patrový kvůli snadnějšímu propojení signálů a kvůli omezení desky v Eagle freeware na 10x15 cm.

PandaProg1: Napadlo mě použít přímo vývody procesoru ATmega169, který je proudem 40 mA schopen uživit i napájení programovaných obvodů. Uživatel musí při 12V programování přepojit propojku, ale to je malá daň za jednoduchost a nízkou cenu (náklady vycházejí na asi 500 Kč, oproti mnoha tisícům za profesionální programátory využívající speciální zákaznické obvody). Propojkou lze připojit pin obvodu buď přímo na pin procesoru nebo na řízené napětí 0V/5V/12V. Případně kablíkem připojit pin do napájecího konektoru 0V, 5V nebo 12V (např. pokud by nestačil proud z řídicího procesoru) nebo na externí zdroj hodin (zdroj hodin se jinak vytváří softwarově). 3.3V nebylo zatím řešené. SPI konektor se používá obousměrně - lze přes něj naprogramovat firmware do procesoru (pozice jumperu Slave) nebo jím lze programovat jiné procesory (pozice Master). Programátor je napájen z 5V USB konektoru (nevyžaduje tedy externí zdroj), napětí 12V se vytváří spínaným měničem. Tato verze se ukázala již být životaschopná a dobře použitelná. Software byl zprovozněn a odladěn s procesory: AT89C51, AT89C52, AT89C55WD, AT89C2051, AT89S51, AT89S52, AT90S4414, ATmega8, ATmega162, ATtiny2313 a dále několik logických obvodů (TPIC6B595, 74HC04 atd.). Procesory Microchip jsem začal zprovozňovat, ale už došla paměť procesoru a tak jsem pak přešel na verzi 2.

PandaProg1 konstrukce a oživení: První chyby v návrhu se ukázaly při letování - pájecí plošky některých SMD jsou příliš malé a tak např. přiletování kondenzátoru u krystalu dalo hodně zabrat. Ale měl jsem i nekvalitní výrobu plošňáku (špatná přilnavost), zkušenějším se konstrukce povede jistě líp. Při oživování doporučuji vyzkoušet nejdříve jednoduché blikání s LED (lze strčit do testovací patice) k ověření že procesor žije. Poté oživit USB interface - připojit kabel, obvod FT232RL by se měl detekovat pomocí FTDI driveru (k detekci FT232RL není potřebná funkčnost procesoru). Aby software pro PandaProg našel programátor, je nutné použít utilitu "FT Prog" (od výrobce FTDI - viz též balík s drivery) a v nastavení "Product Description" změnit jméno zařízení z "FT232R USB UART" na "PandaProg" (mění se to v EEPROM obvodu FT232RL, bude to tedy součást desky). Je možné také vypnout volbu "Load D2XX Driver", protože se emulace COM portu nepoužívá (přistupuje se k zařízení přes DLL interface). Nedoporučuji "správně" měnit ID zařízení - vyžadovalo by to distribuovat drivery s vlastní definicí INF, což znamená řešit problémy uživatelů se zprovozňováním FTDI driveru, zajišťovat neustále poslední verzi driverů a možnost kolize různých verzí driverů FTDI u uživatele (s tím se často potýkám, přináší to mnoho problémů). Využije-li se detekce pouze pomocí jména zařízení, lze vystačit se standardními FTDI drivery a mnoho problémů odpadá. Na závěr nahrajte firmware do procesoru, po spuštění software a připojení USB kabelu by se měl programátor správně detekovat.

PandaProg1 software: Ovládací software programátoru je pro Windows, překladač MS Visual Studio 2005. Využívá Windows API s vlastními knihovnami. Program má 3 ovládací stránky: "Obvod" (zobrazení vývodů obvodu a ovládání jednotlivých pinů ručně), "Program" (programování obvodu) a "Diagnostika" (spouštění diagnostických programů v testovaném procesoru, diagnostika logických obvodů - tato stránka je zatím zcela nefunkční). Tlačítkem "Připojit" se detekuje programátor přes USB rozhraní, zobrazí se hw a sw verze. V levém sloupci lze vybrat programovaný obvod (tlačítka Detekce a Test jsou nefunkční, z rozhraní funguje jen DIP textool). Tlačítkem ZAP se zapne napájení obvodu. Definice jednotlivých obvodů se načítají z adresáře "devlib" ze souborů *.ini.

PandaProg2: U software mi nevyhovovala nutnost vytvářet programovací rozhraní obvodů jednak v ovládacím software a jednak ve firmware programátoru (kromě toho že byl problém s nedostatkem paměti). Uživatel si tak nemá možnost nadefinovat vlastní neznámé obvody. Proto jsem přepracoval software na skripty. V programátoru je interpreter skriptovacího jazyku (podobajícího se assembleru). Skript se nahraje do paměti RAM vždy v případě potřeby. Při použití ATmega169 má prováděcí buffer skriptů velikost asi 350 instrukcí, k dispozici je 18 osmibitových registrů (AL, AH,...), které lze používat i jako šestnáctibitové registrové páry. V programu lze provádět veškeré běžné operace s registry, podmínky, skoky, podprogramy. Jedna instrukce se provede zhruba za 1 us. Tímto způsobem lze nadefinovat jakýkoliv programovací nebo testovací protokol. Podobně mělo být možné definovat pomocí skriptů i uživatelské rozhraní ovládacího software. Bohužel vývoj jsem z časových důvodů přerušil ve stadiu, kdy jsem nadefinoval jen něco z SPI skriptu. Ale skriptového interpreteru je mi docela líto, zdá se být dobře funkční (samozřejmě tam mohou být chyby, nebyl tak moc testovaný), proto budu rád když najde ještě někde využití. Skripty si ovládací software načítá z adresáře "script". Pokud by nestačila kapacita prováděcího bufferu, předpokládal jsem možnost načítání jen procedur potřebných pro danou operaci - např. při čtení nejsou potřeba funkce pro zápis. Zdroj hodin pro obvod se používá softwarově generovaný s volitelnou rychlostí 100/200/500 kHz nebo 1 MHz.

Nedostatky a vylepšení PandaProg:

Downloady:


Vstup do diskuze Bastlírny

<<< Zpět