Programování PICů

Toto není učebnice programování, pouze velmi stručný úvod do programování mikrokontrolérů skupiny PIC od firmy Microchip pro ty, kteří neví, o co jde. (Já jsem se zavedl na PICy, s Atmely je práce obdobná.)

Pro všechna má zapojení stačil zatím jediný typ 16F84, občas jsem užil 12C509 a podobné. V současnosti je optimální 16F88, protože mimo spousty vylepšeného hardwaru nepotřebuje vnější oscilátor.

Jednotlivé typy obvodů se liší pouze "hardwarowými komponentami." Mezi ně u 16F88 patří: RAM paměť, paměť programu, EEPROM, modul CCP (Capture/Compare/PulseWidthModulation), modul SSP (Synchronous Serial Port), modul USART, šest A/D převodníků, jeden D/A převodník, modul komparátoru, vnitřní a vnější interrupty atd. Tento výčet ukazuje, že u tohoto moderního obvodu není nutné spoustu věcí programovat v kódu, stačí jen využít široké možnosti tohoto obvodu..

Napsat a odladit program pro PIC anebo ho pouze naprogramovat hotovým programem jsou dvě naprosto odlišné věci.

Psaní programu

Program se píše v libovolném textovém editoru, který ukládá ve formátu txt, např. Notepad. Jazyk všech PICů je stejný, má asi 30 instrukcí.

Překlad programu

Překlad hotového programu se provádí assemblerem, který překládá soubor z formátu asm do formátu hex. Obsahem souboru hex jsou definitivní číselná data (číselná reprezentace instrukcí, adres a konstant), které se naprogramují do obvodu.

Pro získání assembleru je optimální stáhnout si balík utilit od Microchipu a vybrat si z něj assembler.

Odladění programu

Odladění propgramu je možné provést v simulátoru, ale zatím jsem nenašel žádnou volnou verzi, která by mne plně uspokojovala. Microchip poskytuje volně dosovskou verzi simulátoru, která je sice trochu rigidní, ale simuluje. Simulátor je dobrý na odladění algoritmů, ne celého programu. Ten je nutné odladit v reálu. Protože do obvodu po zapnutí napájecího napětí není vidět, je vhodné vyrobit si pro ladění LED display, případně číslicový 6ti místný display, případně lze připojit LCD display, který je ale pro velmi rychlé aplikace pomalý. Navíc je vhodné k němu připojit několik tlačítek.

Programování

Samotné naprogramování obvodu, pokud máme odladěný hex soubor, je triviální. 16F88 se programuje pěti linkami (nájecí napětí, zem, datová linka a clock a nakonec jeden pin pro přivedení programovacího napětí). Obvod se programuje programátorem, který upravuje signály, ale hlavně vytváří programovací napětí, které je asi 13,0 V. Programátory se připojují k seriovému nebo paralelnímu portu.

Já užívám seriový JDM programátor,

který umí používat téměř každý programovací software. (Detaily a mnoho poznámek jsou na http://www.jdm.homepage.dk/newpic.htm, zde je i novější verze a troubleshooting, i když já jsem s jednoduchou verzí měl zanedbatelně problémů.) Obdobný programátor je http://feng3.cool.ne.jp/en/rcd.html

16F88 lze programovat "in-circuit", to znamená v definitivním zapojení na desce bez nutnosti vyjímání PICu ze zapojení (Já ho pro jistotu dávám na desku do patice, nepájím ho). Programátor mám upravený tak, že na něm není patice pro PIC, ale 5ti pinový konektor, na který jsou přivedeny piny Vss, Vdd, MCLR, RB6 a RB7. Na tišťáku zapojení mám vyvedeny piny pro programování do odpovídajícího protikusu konektoru, takže při programování pouze nasadím konektor programátoru a před zapnutím napájení při ladění ho odpojím. Je to rychlejší než vyndavat obvod z patice. Při programování "in-circuit" je však nutné doplnit zapojení o tři odpory a jednu diodu.

 

 

Jako programovací software užívám WinPic. Ten lze stáhnout z webu. Link na download je :http://people.freenet.de/dl4yhf/winpicpr.html Existuje mnoho dalších programů, některé jsou rychlejší, ale tento umí všechny nové obvody.

 

Problémy při programování - programátor nefunguje

Naprostá většina těchto stížností je způsobena nekompatibilitou mezi PC a programátorem. Toto ale potřebuje vysvětlení:

Pro naprogramování PICu musíme přivést na jeden z jeho pinů programovací napětí asi 13,0 V. (16F88 lze programovat v modu Low Voltage Programming, ovšem tím ztrácíme jeden pin, proto tento mod nepoužívám.) Výstupy paralelního portu mají napětí 5,0 V, což je úroveň datových vstupů PICu. Programátory, které se připojují k paralelnímu portu, mají proto jako zdroj programovacího napětí externí napájení.

Při připojení k seriovému portu ale můžeme využít toho, že seriové porty mají signál v rozsahu +- 12 V, takže vhodným návrhem hardware programátoru a buď driverem programátoru nebo softwarem programu pro programování vytvoříme přepínáním pinů programovací napětí. V tom případě nepotřebujeme externí napájení programátoru (takto funguje JDM programátor).

Pokud má výstupní napětí signálu seriového portu v rozsahu +- 5,0 V, což je norma používaná moderními laptopy (pokud vůbec mají seriový port), pak takovýto programátor nefunguje. Mezi tím je celá škála případů, kdy seriový port má malý výstupní proud nebo má malý rozkmit napětí (např. +- 10 V) a zde pak záleží na konkrétní konstrukci programátoru, zda bude fungovat. (Seriový port je na na rozdíl od paralelního, který je řízen napětím, řízen proudem, takže je v zásadě zkratuvzdorný - to je další důvod, proč ho používám.)

Chce to prostě vyzkoušet, s kterými PC programátor chodí nebo nechodí (doma mám několik laptopů, někde to chodí, jinde ne). Obecně platí, že se současnými laptopy to spíš chodit nebude, se staršími PC spíš bude. Obvykle se to ale dá upravit přivedením programovacího napětí do desky z externího zdroje (všechny webové stránky autorů seriových programátorů obvykle obsahují tyto rady).

Smyslem těchto řádek není odradit někoho od vlastního naprogramování obvodu. Jde pouze o to, vyladit si vlastní postup pro konkrétní PC.

Pokud nechci stavět programátor

Pokud nechcete ztrácet čas stavbou programátoru, sežeňte si někoho, kdo ho má a má odladěný postup programování. Mikrokontroléry od firmy Microchip jsou poměrně dosti rozšířené.

 

Main Page