JDM PIC programátor
JDM PIC programmer

!!! Update 4. 1. 2008 !!!

V článku najdete popis univerzálního programátoru PIC, jehož zapojení navrhl Jens Dyekjar Madsen [http://www.jdm.homepage.dk/newpic.htm]. Umožňuje programovat obvody PIC12C5XX, 12C67X, 16C55X, 16C61, 16C62X, 16C71, 16C71X, 16C8X, 16F8X, sériové paměti EEPROM 24CXX. Dále umožňuje programovat mikrokontroléry přímo v zapojení (ICSP) a s adaptérem i další sériově programovatelné součástky, např. karty ISO.

Když jsem potřeboval před časem naprogramovat mikrokontrolér PIC, rozhodl jsem se postavit si programátor. Toto řešení mi přišlo operativnější, než abych opakovaně o programování prosil někoho ze svých známých. Programátorů PIC lze na Internetu najít velké množství, jsou to však varianty několika málo zapojení. Jednoduchostí vynikají zejména programátory připojované k sériovému portu COM. Při hledání padla moje volba na programátor JDM.


Obr. 1. Programátor Easy-PIC
Fig. 1. Easy PIC programmer

Nejjednodušší programátor PIC je opravdu velmi jednoduchý. Jak je patrné z obr. 1, k jeho sestavení postačí kabel, objímka pro IO, rezistor 100 ohmů a zdroj napětí přibližně 5 V [http://www.jdm.homepage.dk/easypic.htm]. Programátor není k programovanému obvodu příliš šetrný. K omezení napětí se používají vnitřní záchytné diody a napájecí zdroj. Podle poznámek v diskuzích je také jeho funkce dosti nespolehlivá. O něco složitější programátor podle obr. 2 již nepotřebuje externí napájecí zdroj [ftp://ftp.ai.uga.edu/pub/microcontrollers/pic/ludipipo.zip]. Společným neduhem obou uvedených zapojení je nedostatečné napětí Vpp, které je získáno přímo ze sériového portu COM. Obvody portu se napájejí napětím ±12 V ze zdroje PC, u notebooků jen zdvojeným napětím 5 V. Signály portu proto mohou mít napětí maximálně ±11,5; resp. ±9,5 V. To je o dost méně, než je potřebných 13 V.


Obr. 2. Programátor LUDIPIPO
Fig. 2. LUDIPIPO programmer

Uvedený problém je elegantně vyřešen v programátoru JDM. Programovaný IO je i zde napájen přímo ze sériového portu, avšak jeho kladné napájecí napětí Vdd je spojeno se zemí PC. Napájecí napětí Vss je nyní -5 V a je i zde získáno se signálů portu. Programovací napětí Vpp teď už není vztaženo k zemi (GND), ale k napájecímu napětí Vss. Pro správnou funkci programátoru nyní stačí výstupní napětí portu ±8 V.


Obr. 3. Programátor JDM
Fig. 3. JDM PIC programmer

Zapojení programátoru JDM je na obr. 3, číslování součástek je shodné s originálním zapojením. Programátor se mírně zkomplikoval, protože signál RTS slouží jako zdroj taktovacích impulsů pro programovaný IO a současně jako zdroj napájecího napětí –5 V. Napětí z tohoto vodiče je omezeno a stabilizováno diodami D2 až D4. Kondenzátor C3 slouží jako zdroj napájecího napětí v době impulsu na vývodu RTS. Programovací napětí je omezeno diodou D6 na asi 8 V (tj. 13 V proti Vss). Některé varianty tohoto programátoru používají Zenerovu diodu D6 s napětím jen 6,2 V v sérii s LED, která při programování svítí. Jako zdroj napájecího napětí je využit i signál TxD. Tranzistor Q1 pracuje jako spínač, tranzistor Q2 jako obousměrný převodník napěťových úrovní.

Pro naprogramování IO je důležitých pouze pět vodičů: napájecí napětí Vdd a Vss, programovací napětí Vpp přivedené na vývod MCLR, signál clock, přivedený na vývod RB6 a signál data přivedený na vývod RB7. Tyto signály jsou vyvedeny na konektor ICSP a umožňují naprogramovat obvod přímo v zapojení (In Circuit Serial Programmining) nebo s adaptérem programovat další typy sériově programovatelných obvodů. Signály na ostatních vývodech mikrokontroléru jsou ignorovány. To umožnilo zapojit objímku pro IO tak, aby do ní bylo možno zasunout i procesory s osmi vývody a sériové paměti EEPROM.


Obr. 4. Deska s plošnými spoji programátoru. Kliknutím získáte obrázek v rozlišení 600 dpi (33 kB)
Rozměr desky včetně černého rámečku je 40,9 x 53,6 mm.
Fig. 4. JDM PIC programmer PCB layout. Click to get 600 dpi resolution image (33 kB).
Board size is 1.61" x 2.11"


Obr. 5. Rozmístění součástek programátoru
Fig. 5. Locations of components on the programmer board

Originální deska s plošnými spoji je navržena na konektor CANNON s 25 vývody. Protože na nových počítačích je už jen konektor z devíti vývody, navrhl jsem desku pro tento konektor. Desku programátoru můžete zasunout přímo do konektoru portu (nepraktické) nebo použít prodlužovací kabel. Ani toto řešení není šťastné, protože prodlužovací kabel je tuhý. Nakonec jsem konektor z desky vypájel a k propojení s PC použil tenký kablík, na jednom konci připájený přímo do desky programátoru, na druhém opatřený konektorem. Kablík jsem získal ze staré myši. Myš musí být opravdu stará, všechny novější mají přívod jen čtyřžilový. Kablík je nutné zkontrolovat, myš mohla být nefunkční pro přelámané žíly v kabelu. Pro občasné programování vyhoví obyčejná objímka, objímka s nulovou zasouvací silou by byla dražší než několik programátorů. Podle mých zkušeností vydrží obyčejná objímka často více zasunutí IO než objímka precizní.


Obr. 6. Programátor s konektorem
Fig. 6. Programmer with CANNON


Obr. 7. Programátor s kabelem

Fig. 7. Programmer with cable

Ovládací program

Ovládací program IC-Prog je volně dostupný na Internetu [http://www.ic-prog.com]. Umožňuje načíst data k programování ze souborů v několika formátech, číst, mazat a zapisovat program do mikrokontroléru, editovat data a nastavit typ oscilátoru a příslušné „pojistky“. Při prvním spuštění je nutno zvolit typ programátoru (JDM, hned první položka). V operačním systému Windows XP nebude program fungovat bez dalšího nastavení. V půzkumníku vyhledejte soubor icprog.exe. Použijte pravé tlačítko myši a zvolte Vlastnosti a dále v menu Kompatibilita „Spustit v režimu kompatibility s“ Windows 2000 nebo 98/Me. Stiskněte Ok. Do stejného adresáře s programem icprog.exe nahrajte soubor icprog.sys. Po spuštění icprog.exe zvolte menu Settings, Option, Misc a zaškrtněte volbu „Enable NT/2000/XP driver“. Soubor icprog.sys si stáhnete stejně jako program ze stránek [4] pod názvem NT/2000 driver. Mně programátor funguje pod Windows XP i bez driveru a nastavení kompatibity. Po spuštění ovládacího programu jsem v menu Settings, Hardware zvolil místo „Direct I/O“ položku „Windows API“.

Update - poznámky ke konstrukci

Předem bych chtěl uvést, že mé zkušenosti s PIC jsou mizivé. Potřeboval jsem jen naprogramovat PIC, tak jsem si postavil programátor podle JDM a PIC (16F84A) úspěšně naprogramoval. Dále uvedené poznatky získal z korespondence s lidmi, kterým programátor nefungoval. Především bych chtěl poděkovat panu Ondřeji Spilkovi, z jehož e-mailů vychází následující text, a který mne upozornil na problém s blokovacím kondenzátorem.

Občas mi přijde e-mail, že programátor někomu nefunguje. Příčin může být několik. Nejčastější bude asi chyba v zapojení přívodního kabelu. Na oživení je výhodné použít IC-Prog, který má v menu položku HardwareCheck, kde je možné jednotlivé piny nahazovat a shazovat a měřit na výstupu napětí. Tak se dá programátor pěkně oživit. Použijete-li variantu s konektorem na desce, je nutné použít konektor s dutinkami ("samici"), konektor s kolíky ("samec") má vývody zrcadlově a programátor nefunguje.

Další problém se asi projeví jen někdy. Pak je třeba vývod RB6/CLOCK zablokovat proti VSS kondenzátorem s kapacitou alespoň 1 nF. Pokud se použije dostatečně dlouhý kabel s mezizemními vodiči, asi nebude potřeba. Zapojíte-li kondenzátor rovnou, rozhodně nic nezkazíte. Blokovací kondenzátor by měl být co nejblíž CPU, v případě ICSP přímo na desce. Na schéma zapojení jsem kondenzátor doplnil, na desce s plošnými spoji připájejte keramický kondenzátor na vývody objímky ze strany spojů.

V ovládacím programu IC-prog lze použít volbu "Direct I/O" s Delay 2 ms, pak to opravdu programuje velmi rychle.

Seznam součástek

R1 10 kOhm
R2 1,5 kOhm
C1 1 nF, keramický
C2 100 uF/16 V, submini.
C3 22 uF/16 V, submini.
D2 Zenerova dioda 5,1 V
D6 Zenerova dioda 8,2 V
D3, D4, D5, D7 1N4148
Q1, Q2 BC547B
objímka pro IO DIL18
konektor CANNON9F do desky s pl. spoji
nebo konektor na kabel + kabel
deska s plošnými spoji bcs50

Odkazy

[1] http://www.jdm.homepage.dk/newpic.htm
[2] http://www.jdm.homepage.dk/easypic.htm
[3] např.: ftp://ftp.ai.uga.edu/pub/microcontrollers/pic/ludipipo.zip
[4] http://www.ic-prog.com/

Jaroslav Belza

Programátor byl otištěn v PE 8/04 na s. 23

3. 10. 2004
4. 1. 2008 upd.