!!! 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.
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 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“.
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.
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
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 |
[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