www.belza.cz - homepage

JDM PIC programátor
JDM PIC programmer

!!! Jen pro informaci !!!
Nedoporučuji ke stavbě - nepodařilo se mi ho spolehlivě rozchodit. Nakonec jsem odpálil port v PC, takže další zkoumání programátoru zde nebude.

!!! Only for your consideration !!!
I can't recommend to build - it not work properly under Windows XP

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 RB7/DATA 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.

19. 1. 2009: Pro mikrokontroléry 16F627, 16F628, 16F628A, 16F648A, 16F870, 16F871, 16F872, 16F873, 16F874, 16F876, 16F877, 16F873A, 16F874A, 16F876A, 16F877A, 18F242, 18F248, 18F252, 18F258, 18F442, 18F448, 18F452, 18F458, 18F1320, 18F2330, 18F4320, 18F6620, 18F6720, 18F8620, 18F8720 je třeba propojit vývod PGM na GND! Např. pro obvody 16F62x v pouzdře s 18 piny je třeba propojit vývod 10 (ve schématu označený RB4) s vývodem 5 (ve schématu Vss), tj. odpojit jej od Vdd a připojit k Vss.

Úprava pro PIC16F628A
Modification for PIC16F628A

28. 1. 2009

For modification JDM programmer for PIC16F628A and other 18-pin low voltage programed PIC see picture 8, 9 and 10. Really works - tested.

Mikrokontroléry PIC umožňující programování při malém napětí (low voltage programming) lze také programovat v programátoru JDM, jen je třeba vývod PGM připojit ke GND (Vss). Úprava programátoru je zřejmá z obrázků. Nejdříve je třeba 2x přeškrábnout spoj v okolí pinu 10 objímky IO, a pak připájet rezistor a propojku. Pak lze PIC16F628A (a zřejmě i další PIC v 18pinovém pouzdru) naprogramovat. Opravdu to funguje - vyzkoušeno.

Další update 1. 2. 2009

Při pokusech jsem několikrát přeprogramoval PIC16F628A a programátor najednou přestal fungovat. Podle rady p. Spilky jsem přidal kondenzátor C1 1 nF, omylem (bylo už dost po půlnoci) na vývod RB7 místo na RB6. Programátor pak začal opět fungovat. Jaké bylo ráno mé překvapení, když jsem zjistil, že to mám jinak. Přepojil jsem C1 na RB6 a programátor byl opět mrtvý. Vrátil jsem ho na RB7 začal opět fungovat, jak s PIC16F628A, tak s PIC16F84A . Umíte to někdo vysvětlit??? Obrázky 8 a 9 jsou již opraveny.

Další update 10. 2. 2009

Učím se programovat PICy a přeprogramovávám je pořád dokola. Fakt je, že programátor se chová různě a ani úprava z 1. 2. nepomohla nadlouho, za dva dny programátor opět nefungoval. Začínám mít dojem, že za to může API Windows, že posílá data na port jak se mu zlíbí, přeci jenom to není standardní využití portu. Momentálně se mi osvědčilo zablokovat RB7
kondem 1n a RB6 kondem 4n7 proti zemi. Pak mi programátor funguje už několik dní vždy. Úprava je opět zanesena do obr. 8 a 9, fotka zatím vyměněna není.

Programování PIC12F509

S ICProg verze 1.06B jsem naprogramoval i PIC12F509 (a asi i PIC12F508). Protože tyto PIC v nabídce programátoru nejsou, zvolil jsem PIC12C509A. Naprogramovat to šlo, přečíst také, ale ne vymazat. Pro vymazání je třeba nastavit jiný typ, mně se osvědčilo mazat pod 16F628A. Jaký vliv má toto divoké programování na OSCCAL, nevím.
 


Obr. 8. Upravený programátor JDM
Fig. 8. Modified JDM PIC programmer

Obr. 9. Úpravy na desce s plošnými spoji
Fig. 9. PCB modification

Seznam součástek

R1 10 kOhm
R2 1,5 kOhm
pro úpravu
for modification
10 kOhm SMD 1206
C1 (úprava) 1 nF, keramický (1206)
C2 100 uF/16 V, submini.
C3 22 uF/16 V, submini.
C4 (úprava) 4,7 nF, keramický (1206)
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 (mrtvý/dead link)
[4] http://www.ic-prog.com/
    New link(s):
[5] http://www.talkingelectronics.com/FreeProjects/MultiChipPgmr/MultiChipPgmr-P1.html (podrobný popis v angličtině / detailed description in english)

Jaroslav Belza

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

3. 10. 2004
4. 1. 2008 update
19. 1. 2009 update
28. 1. 2009 update
1. 2. 2009 update
10. 2. 2009 update