Programátor PIC12C5xx.
Zkuste se nejprve podívat, zda se nevyplatí slušný programátor koupit hotový.

Pokud nebudete očekávat absolutní novinku a spoustu vymožeností, pak při práci s chipy PIC 12C508, 12C508A, 12C509, 12C509A, 12CE518, 12CE519 firmy Microchip, můžete vystačit i s takto levným a jednoduše realizovatelným zapojením.

Uvedené jednochipy oplývají velmi nízkou pořizovací cenou (v závislosti na typu okolo 50Kč v lednu 2001), slušným výkonem a navíc umí pracovat i bez krystalu. Mají RISC architekturu. Bohužel jsou OTP, tedy jen jednou programovatelné navždy, což je dle mne asi jediný důvod, proč se nepoužívají mezi amatéry více. Pokud jste začátečník, pak je výhodou malý počet instrukcí, které se potřebujete naučit, nevýhodou ovšem je, jaksi lépe přemýšlet, jak nejefektivněji vyjádřit něco několika instrukcemi, co se u jednochipů s CISC architekturou dá vyjádřit jedinou instrukcí. Zkrátka pro různé aplikace jsou vhodné různé typy jednochipů a vůbec neuděláte chybu, naučíte-li se pracovat alespoň s řadou 8051 a PIC (samozřejmě jen pokud to ještě neumíte).

Při programování tímto programátorem v podstatě nejde o nic víc, než o sepnutí +5V na Vdd chipu, +13V na Vpp chipu, nastavování logických úrovní na pin GP1, zápis a čtení logických úrovní z pinu GP0. Konstrukce tohoto typu jsou známy relativně dlouho a velice často bývají označovány jako "TAIT STYLE", dle konstruktéra tohoto typu programátorů. Na Internetu najdete těchto konstrukcí spoustu a netvrdím, že tato je nejlepší. U některých je stabilizátor 7812 podepřen dvěmi diodami a pak napájí 7805, u některých se využívají budiče sběrnice s neinvertujícími nebo invertujícími výstupy s otevřeným kolektorem apod. Protože je tento programátor jaksi kompatibilní s tímto nepsaným standartem (zapojení s 74xx07 + 4066, existují totiž různé verze s různě invertovanými a neinvertovanými výstupy), můžete použít i jiný software, pokud by Vám zde uvedený nevyhovoval, nebo v případě nutnosti programovat zde nepodporovaný chip. Např. 16C84 nebo 16F84 lze takto programovat dobře, ale díky jejich ceně na našem trhu si raději koupím AVR, takže jsem se s jejich podporou ani neobtěžoval. Pokud se budete zabývat i PIC16C84, pak není od věci si patici zapojit dle schématu pod vlastním schématem programátoru a do stejné patice pak vkládat do naznačených poloh různé chipy. Pokud se rozhodnete napsat si vlastní software, pak stačí mít *.pdf dokumentaci k chipu a pak už je to legrace, pomineme-li ladění programu, při kterém může vzít pár OTP chipů za své. Konstrukce je celá odladěna poslupným vyprogramováváním různých bitů PIC 12C508A a jejich čtením, tedy v podstatě postupným zničením tohoto chipu. Pro úplnost jen uvádím, že tak jak je programátor zapojen, dává na výstupech vysoké úrovně a spíná napětí ve vysokých úrovních na paralelním portu. Tedy výstupy jsou neinvertující.

Důležitým zjištěním je, že ne zdaleka každý software, pracuje dobře s časy. Např. starší program s novým PC nemusí nic naprogramovat, protože to zkrátka chip nestíhá. A ještě si neodpustím jednu poznámku. Pokud se Vám zdá, že tato konstrukce na rozdíl od konstrukcí pro sériový port potřebuje zbytečně napájení, pak věřte, že je to nutná daň za to, aby programátor pracoval s každým PC i když dává na sériovém portu jen +/-5V. Tím jsem chtěl říci, že i když je toto zapojení pro paralel, napájení by jste neušetřili ani u sériáku, pokud má být programátor trochu slušný.

Ale teď již konec úvah a přejděme k vlastní konstrukci. D0, tedy pin2 paralelního portu, obhospodařuje výstup na GP0 přes dva invertory a zpět do ACK, což je pin10 paralelu, zase přes dva invertory. Dostaneme tím otevřený kolektorový výstup, který může pin GP0 stáhnout k nule a vracet tak do ACK paralelu informace. D1, tedy pin3 paralelu, zase přes dva invertory generuje synchronizační hodinový signál pro GP1. Toto zařídí jeden chip 74HCT05. Pokud se ptáte proč HCT, pak zase jen proto, aby to opravdu pracovalo na všech PC, tedy i se vstupními úrovněmi TTL, i když dnešní paralely pracují na výstupech spíše s úrovněmi CMOS. Myšleno tím, že 0 (LOW) je opravdu 0V a 1 (HIGH) je plných +5V. D2 spíná přes dva tranzistory +5V pro napájení chipu a D3 +13V pro programovací napětí. Zem je vyvedena na pinech 18 až 25 paralelního portu. Piny 18 až 25 spojíme na konektoru a propojíme je se zemí programátoru. Pro úplnost uvádím, že konektory Canon s pájecím žlábkem jsou velice často vybaveny nevýrazným číslováním vývodů na plastu u pinů. Napětí +13V je vytvořeno podepřením 78L08 pěti volty z 78L05. Pro dobrou stabilizaci tedy budeme potřebovat minimálně +16,5V, protože 0,7V nám vezme ochranná dioda, zůstane 2,8V pro stabilizaci, což je pro tyto stabilizátory opravdu minimum. Lze samozřejmě použít i jiné nízkoúbytkové a dražší stabilizátory. Pokud je úbytek napětí na diodě pro Váš adaptérek kritický, pak diodu na vstupu nahraďte spojem, ovšem pak riskujete přepólování, protože kde má JACK na adaptérku + není nikde určeno a také se vyskytuje v obou možných variantách. Také se dá použít schottky dioda např.1N5818 nebo 1N5819, která Vám ubere jen 0,2V. Vím, že se adaptérek 17V špatně schání, ale když proměříte některé 12V adaptérky, zjistíte, že i při programování dávají dostatečné napětí, tedy podstatně více než oněch deklarovaných 12V. Zkrátka jsou to měkké zdroje napětí a na oněch 12V jejich napětí klesá, až při určité zátěži. Jinak odběr celého programátoru za provozu by neměl překročit 200mA (s jistotou bude menší). Kdysi jsem jiný, zřídka používaný, programátor napájel čtyřmi plochými bateriemi 4,5V spojenými sériově a baterie jsem vyhodil až po 2 letech. On totiž takový programátor prožije, na rozdíl od jiné elektroniky, většinu života bez napájení.

Výrobce doporučuje naprogramované chipy ještě verifikovat při změně napájecího napětí po 0,25V, pokud mne paměť neklame, což jak jistě vidíte ze schématu tento programátor nedělá. Dle mých dosavadních zkušeností (19 bezchybně doposud pracujících chipů), je to příliš zbytečná opatrnost výrobce i když moje chipy téměř bez vyjímky pracují napájeny stabilizátorem.

Pokud se Vám rezistory 4k7 mezi paralelem a vstupy hradel zdají zbytečné, pak si představte stav, kdy piny paralelu jsou nahozeny do H a programátor není napájen, ale je připojen k paralelu. Při +5V přivedených na vstup vypnutého programátoru bez těchto rezistorů, teče těmito vstupy až 10mA, což paralelu ještě neublíží, ale hezké to není. Vstupní kapacita hradla není tak hrozná, aby se tyto rezistory stihly nepříznivě projevit, takže proč si svůj hardware trochu nechránit. Myslím tím paralel v módu SPP, v jiných módech jsou výstupy s otevřeným kolektorem s PULL-UP rezistory 4k7. Programátor pracuje ve všech módech paralelu.

Schéma zapojení:

Zapojení modifikace pro programování více typů v jedné patici:

Toto zapojení nahrazuje zapojení patice DIL8, uvedené u schématu.

Pohled do konektoru CANON 25 FEMALE, jako při pohledu na zadní stranu počítače:

Pro tuto konstrukci potřebujeme piny D0(2), D1(3), D2(4), D3(5), ACK(10) a GND(18-25). Při pájení konektoru MALE si můžete představit jeho zasunutí do tohoto trčícího z obrazovky, orientace je hned snažší a číslování jasné.

Plošný spoj

Osazení

Rozměry desky jsou 74 x 38 mm.

Ke stabilizátorům 78L05 a 78L08 jen malou poznámku. Pokud je budete kupovat, kupte si každý alespň 2x. Mají totiž toleranci a pokud se zrovna ty Vaše dostanou oba na stejnou stranu povolené odchylky, nemusíte mít na výstupu 13V. Tyto stabilizátory sice pracují většinou i nezatížené, ale nikdo to neslibuje. Pokud jste tedy měl(a) smůlu a Váš stabilizátor si dělá co chce on, zkuste jej dodatečně zatížit třeba 1k odporem. Jeden kousek 78L05, který bez zátěže nepracuje vlastním, se zátěží 1k pracuje bezvadně. V každém případě si napětí na výstupu stabilizátorů změřte. LED diody, ani proud omezující odpory k nim nejsou na desce plošných spojů, ale mimo ni. LED POWER je připojena k vývodu desky 5V přes omezovací odpor k zemi GND, LED indikující programování je připojena na vývod Vdd(0/5V) a přes omezovací odpor k zemi GND. Pokud použijete LED 2mA, pak jsou vhodné omezovací odpory 1k5 až 1k8, pro běžné 10mA LED jsou odpory 330R. LED také nemusíte připojovat vůbec, ale nezdá se mi to příliš vhodné, není pak žádná kontrola o stavu programátoru. Připojení konektoru, DIL patice a JACK konektoru napájení jsem řešil kablíky, což se může zdát pracnější, než všechno připájet na desku, nicméně lze pak lépe pracovat s rozmístěním konektorů a LED diod různě po krabičce, kterou každý jistě použije dle svého vkusu a možností jinou.

UPOZORNĚNÍ: Programovaný chip zasouvejte do patice až po spuštění programu. Program po spuštění vypne případná napětí přítomná na patici (pokud tedy máte nastaven v programu port ke kterému je programátor připojen).

Program pro Win95/98 si stáhněte zde: DOWNLOAD

Nic za to nedáte, je to FREEWARE. Na Váš případný e-mail se budu těšit.

Pár poznámek k programu.

Program a dll rozbalte a umístěte do stejného adresáře. Pak stačí program spustit. Možná by se někomu lépe zamlouvala instalačka, ale já osobně nevidím důvod zbytečně nafukovat objem nutně přenesených dat, kvůli nakopírování dvou souborů. Některé nastavení, jako například použitý port a ID chipu si program zapisuje na disk, takže není potřeba pokaždé nastavovat port a nemusíte si pamatovat ID naposledy vypáleného chipu, tedy pokud ID vypalujete. Já obvykle ID nevypaluji a nechávám tam FFFF. Program nikam do chipu nevypaluje kontrolní součet. Dále program nikdy nevypaluje kalibrační konstantu interního oscilátoru, nikdy jsem ji nepotřeboval měnit a pokud potřebujete přesný kmitočet, pak je jistě použití krystalu na místě (interní oscilátory bývají teplotně a napěťově závislé, ale musím přiznat, že jsem tuto závislost u PIC12C5xx nikdy neměřil). Konfigurační bity, tedy jejich odfajfkování ve čtverečku (checkbox), neodpovídá logickému stavu vypalovaného bitu, ale rozhodnutí, jestli ano nebo ne. Záhadné tlačítko SET, slouží k nastavení série adres na stejnou hodnotu, čímž lze již jednou naprogramovaný chip přepsat v naprogramované části na 0h, což je instrukce NOP, a program pak přehodit o kousek výše (ve zdrojáku). Při zkoušení krátkých programů tak můžete chip programovat několikrát, než dojde nepopsané místo. Další věcí, na kterou je třeba pamatovat je, že ochrana proti čtení u PIC12C5xx, chrání pouze adresy od 40H výše, takže kraťoučký prográmek hned na začátku paměti by byl viditelný celý a ochrana zbytečná. Používá se proto jako první instrukce odskok na adresu např. 40H, kde program začíná. Tyto a další informace najdete u výrobce v pdf souborech. Blank check je zaškrtnuto, pokud si přejete do chipu zapisovat, jen je-li čistý. Zapisovat do již naprogramovaného chipu lze zrušením odfajfkování, pak se před programováním stav chipu nezkoumá, takže klidně může dojít k chybě v důsledku toho, že se snažíme vrátit bit ze stavu 0 do 1, což u OTP pochopitelně nelze. Chyba při vypalování chipu se vypíše již při jeho programování, takže není nutné chip dodatečně verifikovat. Pokud chip vypalujete s ochranou proti čtení, pak již další dodatečná verifikace není možná - chip již nelze přečíst.

A ještě malý závěr na konec. Samozřejmě, že s tímto typem zapojení lze programovat ledacos, třeba ovládat kmitočtovou syntézu po I2C, nebo programovat EEPROM paměti a podobně. O to jsem se ale nesnažil. Moje snaha měla podpořit ty, kteří by si rádi naprogramovali jednochip a nějak nevědí jak na to. Programovat se ovšem budou muset naučit sami. Pokud jste profík, pak se za příliš podrobností omlouvám, třeba někomu pomohou.

Autor neručí za jakékoli škody, způsobené použitím těchto materiálů, včetně chorobné závislosti na jednochipech jíž sám propadl.

Autorův e-mail: jiri@bezstarosti.cz