SEPROM - (relativně) jednoduchý programátor EPROM 27xx

Konstrukce i software je pro nekomerční využití k dispozici zdarma. Jakékoliv komerční využití není povoleno. Prodej nebo kopírování publikované konstrukce a software za úplatu není povoleno.

Konstrukce má amatérský charakter. Autor neposkytuje žádné záruky a nenese odpovědnost za žádné škody zařízením způsobené.


Návody se obvykle nečtou, ale pro úspěšný provoz doporučuju přečíst si alespoň to, co je na této stránce napsáno tučným písmem.


Úvod

Programátor EPROM nazvaný SEPROM vznikl zejména z potřeby programovat paměti EPROM 2708 a jejich ekvivalenty MHB 8708 (popř. OTP verze MHB8608), K573RF1, apod. Programování těchto pamětí je přitom ze všech pamětí řady 27xx nejsložitější. Zvolená koncepce už snadno umožnila pracovat i s dalšími pamětmi řady 27xx až do kapacity 64KB. Stávající verze software umožňuje všechny tyto paměti číst. Programovat je ve stávající verzi software možno paměti 2708, 2716, 2732 a ekvivalenty těchto pamětí. Principiálně není možno programovat paměti, které během programování vyžadují jiné napájení než 5V, což se týká řady 27Cxx. V testovací fázi je práce s EEPROM pamětmi 28C64 (čtení, zápis i mazání).

Hardware

Základní podklady ke stavbě

Schéma
Plošný spoj
Pokládačka - vrch
Pokládačka - spodek

Zjištěné chyby

Koncepce

Snažil jsem se o to, aby konstrukce byla co nejjednodušší. Odtud pochází označení SEPROM, znamená Simple EPROM programmer. V dnešní době to znamená k řízení celého programátoru použít mikrokontrolér. Programátor se připojuje k PC přes USB rozhraní nebo sériový port. Rozhraní se volí jumpery J8, J9.

I když zapojení může na první pohled vypadat složitě, jeho funkce je principiálně jednoduchá. Zapojení lze rozdělit do několika částí:

Mikrokontrolér a přilehlé prvky

V zapojení je použit mikrokontrolér U2 ATMega32-16PU. Jako zdroj taktovacího kmitočtu slouží krystal XT1 s kondenzátory C9 a C10. Jako taktovací kmitočet bylo zvoleno 14,7456MHz. Krystaly této hodnoty se standardně vyrábí a je běžně možné je zakoupit. Tento kmitočet umožňuje přesné nastavování standardních přenosových rychlostí obvodu USART v mikrokontroléru. Navíc je tato hodnota blízká maximálnímu možnému taktovacímu kmitočtu mikrokontroléru. Dále je k dispozici konektor ISP rozhraní CN6 s diodami D2 a D5 zajišťujícími sloučení signálu RESET z ISP a osatních rozhraní. Z PC je možné reset mikrokontroléru provést přes linku RTS. LED dioda D13 (žlutá) je spínána softwarově z mikrokontroléru a indikuje připravenost programátoru přijímat povely z PC. Stav je též přenášen linkou CTS do PC. Po zapnutí může tato dioda několikrát bliknout, s použitím programátoru je nutno vyčkat, než bude svítit setrvale. Poté bude zhasínat nebo blikat pouze při aktivní činnosti programátoru.

Obvody napájení

Základní napájecí napětí je +5V. Získává se z externího stabilizovaného zdroje připojeného na konektor CN3 nebo z USB sběrnice. Základní požadavek, aby bylo možno programovat i paměti typu 2708 a ekvivalenty si vyžádal, aby programátor obsahoval zdroje tří napětí: Pokud není požadováno programování pamětí 2708, je možno zdroje +12V a -5V vynechat.

Jako zdroj programovacího napětí slouží IO U5 MC34063A. Programovací napětí se volí jumperem J5 na jednu ze čtyř přednastavených hodnot. K přednastavení slouží trimry R22 až R24 a R33. Předpokládá se přednastavení hodnot: 26V pro paměti 2708, 25V pro 2716, 21V pro 2732 a 12,5V pro další typy pamětí. Pro tyto hodnoty napětí byly optimalizovány hodnoty trimrů R22 až R24 a R33. S ohledem na úbytek napětí na tranzistorech je nutné nastavit na výstupu U5 napětí o cca. 0,7V vyšší, než je požadované. V případě napětí pro programování obvodu 2708 je nutno přihlédnout ještě k úbytku napětí na rezistoru R17 a nastavit napětí na výstupu U5 o cca. 1V větší. Pokud je jumper J5 vytažen, měnič vysazuje a na výstupu je napětí +5V snížené o úbytky na součástkách. Vytažením jumperu J5 je tedy možno blokovat programovaní pamětí 27xx.

Zdroj napětí +12V je téměř identický se zdrojem programovacího napětí. Základem je IO U3 MC34063A. Hodnota 12V se nastavuje trimrem R5. Při programování obvodu 2708 je toto napětí též přiváděno na pin 20 tohoto obvodu, čímž se povoluje programování. Je nutno počítat s úbytkem napětí na tranzistoru T2 a nastavit o cca. 0,7V více, než je minimum, což je 11,5V. Na druhou stranu je napětí z výstupu U3 přímo přivedeno na pin 19, kde je maximální hodnota 12,5V. Je tedy nutno na výstupu U3 nastavit napětí mezi 12,2V a 12,5V.

Zdroj napětí -5V je jednoduchý. Zde je použit IO U4 ICL7660 v katalogovém zapojení

Pro eventuální připojení adaptérů pro jiné typy pamětí je na konektoru CN5 stále k dispozici napětí +5V. Ostatní napětí jsou k dispozici na konektoru CN4, ale pouze pokud je sepnuto napájení programované paměti.

Spínače napětí

Tranzistor T6 je spínán obvodem U7 a po úspěšném USB připojení přivede napětí +5V na mikrokontrolér a tranzistor T7 Přítomnost napájení na mikrokontroléru indikuje LED D11 (zelená). Při použití USB rozhraní tedy tato LED indikuje úspěšné připojení. Je-li použit externí napájecí zdroj (což je nutné v případě užití sériového rozhraní), pak D11 prostě indikuje přítomnost napájecího napětí.

Tranzistor T7 přivádí napájecí napětí na EPROM a zdroje dalších napětí. Spíná při úrovni L na výstupu PD6 mikrokontroléru. Jde o P-kanálový MOSFET a úbytek napětí v sepnutém stavu je zanedbatelný. Přítomnost napájení na patici pro EPROM indikuje LED D12 (červená). Svítí-li tato LED, neměl by do patice být vkládán ani z ní vyjímán paměťový čip.

Tranzistory T3-T5 spínají programovací napětí pro paměti 2708. Při programování jiných pamětí tyto tranzistory nejsou využity. K sepnutí T3 a přivedení programovacího napětí na paměť dojde při úrovni L na výstupu PD5 mikrokontroléru. Při úrovni H sepne tranzistor T5 a výstup této soustavy uzemňuje. Tím se tvoří programovací pulz. Na výstupu je RC člen R17, C8 snižující strmost pulsu. Zapojení bylo převzato z [1] a byly upraveny hodnoty některých součástek na základě návrhu Jirky provozujícího server www.nostalcomp.cz, kterému děkuji. Strmost pulsu nesmí být ani příliš velká ani příliš malá. Náchylnost pamětí vůči strmosti pulsu se dle mých zkušeností značně liší. S pamětmi TMS2708 jsem nezaznamenal problémy ani když byl RC člen R17, C8 zcela vypuštěn. Naopak paměti MHB8708 na to jsou velmi citlivé a při příliš strmém pulzu dochází k nežádoucímu přeprogramování některých buněk do stavu 0.

Tranzistory T1-T2 jsou při programování pamětí 2708 použity k připojení napájení 12V na vstup WE (pin 20). U ostatních napětí se tyto tranzistory užívají k sepnutí programovacího napětí. K sepnutí dojde při úrovni L na výstupu PD7 mikrokontroléru.

Na pozicích T1 až T5 jsou použity tranzistory 2N4401, které mají méně obvyklé pořadí vývodů. Pokud použijete jiné tranzistory, je na to potřeba dát pozor.

Obvody komunikace s PC

Sériový port je integrovaný v mikrokontroléru a pro připojení k PC stačí provést konverzi napěťových úrovní, což zajišťuje převodník U6 MAX232 s přilehlými součástkami. I když asi dnes nebude příliš mnoho uživatelů sériový port používat, je prakticky "zadarmo" a komu by vadil, ten nemusí U6 a přilehlé součástky osazovat.

V USB rozhraní je použit populární IO U7 FT232, který se však dodává pouze v provedení SMD. U7 pracuje v režimu převodníku USB/RS232. Rozteč vývodů U7 je poměrně malá. K osazení je nejlépe použít horkovzdušnou páječku. V případě kontaktního pájení je potřeba použít velmi tenký hrot.

Kdo chce použít USB rozhraní a není v jeho možnostech kvalitně připájet obvod U7, ten může SEPROM provozovat i tak, že osadí pouze sériové rozhraní a použije kabelový převodník USB/RS232. Toto řešení je funkčně téměř ekvivalentní použití obvodu U7 FT232. Nevýhodou použití kabelového převodníku je, že pak není možné SEPROM napájet z USB sběrnice a je nutno použít externí zdroj. Dále je menší maximální přenosová rychlost.

Pokud je SEPROM napájen z USB sběrnice, je vhodné pro propojení z PC použít kratší kabel s tlustšími vodiči pro minimalizaci úbytku napájecího napětí. Proudová spotřeba je největší při programování paměti 2708 a je až cca. 350mA, úbytek napětí na vodičích může být významný a při použití nevhodného kabelu může napětí pro programátor klesnout pod kritických 4,5V a programátor vysadí. V případě obtíží je možné i v případě použití USB rozhraní použít k napájení externí zdroj připojený do konektoru CN3. Pak je z USB sběrnice napájen pouze obvod U7.

Pokud jsou osazeny součástky pro USB i pro sériové rozhraní, přepínají se jumpery J8, J9. Pokud je osazeno jen jedno rozhraní, je možno tyto jumpery nahradit drátovými propojkami.

Sestavení a oživení

Při návrhu plošného spoje jsem se snažil o to, aby deska byla snadno zhotovitelná v amatérských podmínkách. Proto jsem se rozhodl pro jednovrstvou desku, i když počet drátových propojek je celkem vysoký. Deska neobsahuje průvlaky mezi vývody integrovaných obvodů, to zjednodušuje nároky na výrobu, bylo tak možné používat větší pájecí body a širší spoje, nicméně počet nutných drátových propojek to zvyšuje. Zapojení neskrývá žádné záludnosti. Při oživení doporučuji následující postup.

Osadíme všechny součástky kromě mikrokontroléru nebo pro mikrokontrolér použijeme patici a mikrokontrolér zatím do patice nevložíme. Rozhodně doporučuji "zainvestovat" a pro programovanou EPROM použít patici s nulovou silou (ZIF patici).

Provedeme pečlivou kontrolu všech spojů. Připájení FTDI chipu (pokud ho provedeme) je vhodné zkontrolovat pod lupou nebo ještě lépe pod mikroskopem. Programátor nejprve připojíme na externí zdroj. Zkontrolujeme činnost všech tří napěťových měničů a nastavíme požadovaná napětí s přihlédnutím k úbytkům na spínačích a dalších součástkách

Programátor propojíme USB kabelem s PC. Instalaci FTDI driverů proveďte dle postupu popsaného na http://www.ftdichip.com/. V konfiguraci FTDI ve správci zařízení ve windows nastavte co nejmenší délku bufferu a krátké timeouty. Nastavení délky bufferu a timeoutů značně ovlivňuje rychlost komunikace s mikrokontrolérem, v případě, že by komunikace byla pomalá, změňte toto nastavení. Komunikace probíhá po krátkých blocích dat a tomu je nutno nastavení přizpůsobit (změny se chystají v dalších verzích software). Programem FTProg (volně ke stažení na http://www.ftdichip.com/) nakonfigurujeme chip FT232BM. Je nutné nastavit maximální proud na 500mA a jako "description" nastavit SEPROM3 (jde o třetí verzi konstrukce).

Až po kofiuraci FTDI chipu vložíme mikrokontrolér! Pokud není naprogramovaný a nastavený, můžeme ho naprogramovat a nastavit přes ISP rozhraní CN6. O nastavení pojednává kapitola Nastavení mikrokontroléru. Napětí +5V na pinu 6 lze použít k napájení ISP programátoru, pokud nebude překročen celkový odběr 500mA z USB sběrnice. Toto napětí lze též využít u přípravku AVR Dragon a dalších, které vyžadují připojení napětí +5V z programované aplikace z důvodu kalibrace napěťových úrovní. Pin 6 není určen k napájení SEPROM z ISP programátoru.

Nastavení mikrokontroléru

Firmware je ke stažení k dispozici v kapitole software.

Nastavení fuses: hFuse=D9 iFuse=FF

Pokud není naprogramovaná EEPROM, je možno pro komunikaci mezi programátorem a PC používat pouze základní přenosovou rychlost 9600Bd, k tomu je potřeba zvolit rychlost "slow" v ovládacím software. Tato rychlost musí být dostupná i na prehistorických sériových portech.

Zvolenou vyšší komunikační rychlost "fast" je možno použít, pokud je definován odpovídající dělící koeficient na adrese 0E hexa v EEPROM dle následující tabulky:
Koeficient hex 5F 3F 2F 17 0F 07 03 01 00
Koeficient dec. 95 63 47 23 15 7 3 1 0
Rychlost Bd 9 600 14 400 19 200 38 400 57 600 115 200 230 400 460 800 921 600

Dnešní sériové porty obvykle podporují až 115 200Bd. Ještě vyšší rychlosti je možno použít přes USB rozhraní.

Poznámka k tomu, proč je jediný využívaný byte v EEPROM na adrese 0E, a ne třeba na začátku :-) Důvodem je to, že původně jsem chtěl v EEPROM mít definované výchozí hodnoty pro všechny parametry, např. typ programované EPROM, délka programovacího impulsu, atd. a ty právě měly ležet na předchozích pozicích v EEPROM, není to však zatím dokončeno.

Indikace - souhrn

LED D11 zelená indikuje přítomnost napájecího napětí na mikrokontroléru. Při použití externího zdroje svítí vždy. Při napájení z USB se rozsvěcí po navázání USB komunikace s hostitelským PC.
LED D12 červená indikuje přítomnost napájecího napětí na EPROM. Svítí-li, nedoporučuji vkládat a vyjímat EPROM z patice.
LED D13 žlutá indikuje připravenost programátoru k přijetí a vykonání povelu z PC. Signál je též po lince CTS přenášen do PC.

Konektory

CN1 - USB rozhraní
CN2 - sériové rozhraní
CN3 - externí napájení

CN4 - napájení pro další doplňky, pouze při sepnutém napájení paměti
1 2 3 4 5
-5V GND +5V +12V Vpp

CN5 - stálé napětí +5V pro další doplňky

CN6 - programovací ISP rozhraní
1 2 3 4 5 6
/RESET MOSI MISO SCK GND +5V

Konfigurační přepínače (jumpery)


Software

Software je ve vývojové fázi. Upozorňuji, že paralelně upravuji jak software pro PC, tak firmware pro mikrokontrolér. Vždy je potřeba mít oboje v aktuální verzi, ale není to žádným způsobem kontrolováno. Prostě si vždy stáhněte a instalujte oboje.

Program nabízí dvě rychlosti propojení - základní 9600Bd (slow), která by měla fungovat vždy a všude včetně prehistorických sériových portů. Vyšší rychlost (fast) je nutno nejprve definovat v EEPROM (viz kapitola nastavení mikrokontroléru), a to s ohledem na používaný hardware.

Program pro PC pro Windows XP a výše. Na starších verzích Windows funkčnost neznámá.

Firmware pro mikrokontrolér.


Reference

[1] Frank W. Summers, A Simple 2708 EPROM Programmer for the Motorola D2 Kit, Microcomputing, February (1980), pp. 138-143


Kontakt

Máte-li ke konstrukci dotazy/komentáře/připomínky, atd., neváhejte mi poslat E-mail na sdq(at)post.cz
Neváhejte komentář poslat, pomůže s dalším vývojem.
Vladimír Tichý alias SDQ



Zpět