Mikrokontroléry PIC 1.díl: začánáme
Co jsou mikrokontroléry PIC a k čemu vlastně slouží?
Mikrokontroléry PIC jsou přeprogramovatelné obvody, které mají několik vstupně/výstupních vývodů (portů), řídící procesor běžící na taktovací frekvenci dané oscilátorem, který je tvořen buď RC členem nebo krystalem a řadu dalších vestavěných "vymožeností". Těmi vymoženostmi myslím v podstatě periferie, které jsou obsaženy přímo v čipu. Jsou to různé časovače, a/d a d/a převodníky, komparátory, paměť RAM, EEPROM a podobně. Mikrokontrolér sám o sobě je vlastně k ničemu, dokud do něj nenaprogramujete pomocí programátoru a pc program (firmware). Ten se píše v jazyku symbolických adres (assembleru) - v jazyku, kterému přímo "rozumí" procesor uvnitř čipu. Procesor toho zas tak moc neumí, takže zapomeňte na příkazy Visual Basicu, Javascriptu a podobných programovacích jazyků. Tady pracujete s čísly od 0 do 255, ať už ve dvojkové (binární), desítkové (decimální) nebo šestnáctkové (hexadecimální) soustavě a nejvyšší operace, kterou procesor dokáže je sečtení nebo odečtení dvou takovýchto čísel. Programem se nastavují a obsluhují i různé části hardware (výše zmíněných vnitřních periferií) a vystupně výstupní porty. K dispozici máte několik desítek byte (8bitových) RAM registrů, několik registrů sloužících pro nastavení vnitřních periferií a hardware a jeden pracovní registr W. Pod pojmem registr si můžete představit malou část paměti RAM obsažené v čipu, konkrétně 1Byte. Do těchto registrů můžete zapisovat nebo z nich číst data. Dále lze jednotlivé registry sčítat, odčítat a provádět logické operace (AND,OR,XOR) s nějakou konstantou nebo s pracovním registrem W nebo testovat zda je daný bit v logické jedničce nebo nule a podle toho třeba větvit program. Jednotlivé instrukce se provádějí s čtvrtinovou frekvencí než je frekvence oscilátoru postupně jedna za druhou. V programu se dá přeskakovat z jednoho místa na druhé pomocí příkazů GOTO nebo CALL. (Programování popíši podrobněji v druhém dílu)
Kromě toho, že nějaký ten mikrokontrolér byste našli všude okolo sebe, třeba v digihrách, inteligentních pračkách, televizích, autech, hračkách, mobilech atd... tak se dají použít i v amatérských výrobcích všeho druhu. Většinou podstatně zjednoduší aplikaci a navíc narozdíl od pevné logiky (desítky čipů CMOS4000 / TTL74 a podobně) jde funkce celé aplikace upravovat během několika desítek vteřin přeprogramováním čipu. Představte si, že byste si chtěli postavit třeba digitální hodiny s logickými TTL čipy. Jenom na obsluhu led displeje byste potřebovali minimálně 8 čipů (4 kusy 7447, 4 kusy 7490) Navíc by bylo téměř nemožné takové hodiny ovládat například čtyřmi tlačítky, které by měli různou funkci, podle toho, zda by se na displeji zrovna zobrazovalo datum nebo nastavoval budík atd. To všechno lze ale udělat jedním jediným integrovaným obvodem - mikrokontrolérem PIC. Snad jedinou nevýhodou mikrokontrolérů je omezení rychlosti provádění instrukcí na 5MHz (20MHz frekvence oscilátoru). Ale ani to není většinou žádnou překážkou. Kdybyste stavěli třeba měřák frekvence a chtěli měřit kmitočty v řádu desítek MHz, tak stačí na vstup mikrokontroléru zapojit nějaký externí dělič frekvence (klidně zmíněný 7490 a pod.) a problém je vyřešený. Mikrokontroléry jsou co se týče logických úrovní na vstupech/výstupech a i napájení kompatibilní s logickými čipy TTL74 a CMOS4000. Pokud "TTL74, CMOS4000" slyšíte (čtete) prvně, tak doporučuji kouknout se na článek
024 a jeho pokračování. Alespoň okrajové základy digitální techniky budete určitě potřebovat.
Jako příklad (abych zastrašil ty, kteří zvažují, že by začali programovat ;o) uvedu jednoduchý prográmek, který po naprogramování do mikrokontroléru PIC16F84 a připojení 4MHz krystalu, 2 15pF kondenzátorů, napájení 5V a ledky na vstupně/výstupní pin B0 rozbliká led diodu s nějakou rozumnou (viditelnou) frekvencí. prostě blik-blik-blik...
(to za středníkem jsou poznámky, které na program nemají žádný vliv)
INCLUDE "P16F84.INC" ; udává soubor s informacemi o čipu, který má načíst assembler
LIST P=16F84, R=DEC ; typ mikrokontroléru a soustava, ve které budou čísla "DEC" = desítková
; pojmenování portů (vstupně výstupních pinů)
PORTA EQU h'05' ; porty A
PORTB EQU h'06' ; porty B
; pojmenování jednotlivých byte v ram
c1 EQU h'20' ; proměnná pro čekání
c2 EQU h'21' ; proměnná pro čekání
c3 EQU h'22' ; proměnná pro čekání
; pojmenování konkrétního vstupu/výstupu
ledka EQU 0 ; ledka je připojená k portu B0, proto 0
ORG 00h ; definuje, kde v paměti flash fyzicky začíná program
; definice toho, co budou vstupy a co výstupy
BSF STATUS,RP0
MOVLW b'11111111' ; 1 znamená vstup, 0 výstup
MOVWF TRISA
MOVLW b'00000000'
MOVWF TRISB
BCF STATUS,RP0
; ------------------------------------- vlastní program blikání
blikej
BSF PORTB,ledka
CALL cekani
BCF PORTB,ledka
CALL cekani
GOTO blikej
; ------------------------------------- podprogram čekání (zacyklení programu na určitou dobu)
cekani
MOVLW 10 ; čísla udávají periodu blikání, respektive čas zacyklení
MOVWF c3
cek3 MOVLW 100
MOVWF c2
cek2 MOVLW 100
MOVWF c1
CLRWDT
cek1 DECFSZ c1,1
GOTO cek1
DECFSZ c2,1
GOTO cek2
DECFSZ c3,1
GOTO cek3
RETURN
END ; konec programu
Ale nebojte, není to tak složité, jak to vypadá na první pohled.
Co budete potřebovat a na kolik to přijde?
- Programátor PIC
Programátor zprostředkovává komunikaci mezi mikrokontrolérem a počítačem. K PC se připojuje většinou přes paralelní nebo sériový port, vyjímečně přes USB. Mikrokontrolér se zastrčí buď přímo do patice programátoru nebo se připojí pomocí programovacího kablíku ICSP a programování pak probíhá po dvou datových drátech (a samozřejmě jsou potřeba ještě další kablíky pro napájení). Druhá možnost je podle mě pro vývoj (tedy neustálé přeprogramovávání jednoho čipu) daleko lepší a efektivnější, protože nemusíte čip stále vyndavat a zandavat do patic. Paradoxně ICSP podporují ty nejlevnější programátory a naopak chybí u některých dražších. Programátor seženete na www.asix.cz, www.elnec.sk, www.xeltek.cz nebo v některých prodejnách se součástkami. Osobně doporučuji PICCOLO od Asixu, protože ho pořídíte za cca 550 Kč a pomocí ICSP kablíku umí programovat většinu mikrokontrolérů PIC od Microchipu. Je pravda, že se dá programátor vyrobit i po domácku, ale pak k němu nemáte tak komfortní obslužný program pro PC jako poskytují výše zmíněné firmy, tedy pokud si ho sami nenaprogramujete... Jenom dodám, že software pro PC je při koupi programátoru pochopitelně v ceně.
- Mikrokontrolér PIC
Mikrokontroléry PIC se prodávají v prodejnách s elektronickými součástkami za cenu přibližně od 100 do 250 Kč podle typu. Velmi populární je mezi amatéry PIC16F84, ale má poměrně omezené možnosti, hlavně co se týče "vnitřního vybavení". Časem stejně budete potřebovat interní a/d převodníky, časovače, eeprom a podobné věci a hlavně vám nejspíš nebude stačit počet vstupně-výstupních pinů. Těch má 84ka "jenom" 13. Pro začátek bych doporučoval koupit buď tento PIC16F84 nebo kterýkoli jiný z řady PIC16. Například takový PIC16F877 toho "umí" daleko víc.
- Dokumentace od výrobce
I kdybyste si koupili několik knih o PIC, tak bez dokumentace (data sheet) k danému čipu se rozhodně neobejdete. Stáhnout se dá (pochopitelně zdarma) na stránkách výrobce www.microchip.com a je psána jak jinak než v angličtině. Neděste se toho, že mívá přes 100 stran, protože časem zjistíte, že je hodně zestručněná a je potřeba postahovat ještě hodně dalších textů ;o) (například o různých standardech sériové komunikace s externími zařízeními a podobně).
- Assembler
Assembler je program, který převádí soubory *.asm do *.hex. Tedy soubory, které napíšete v textovém editoru pomocí příkazů (MOVLW,BSF...) do souboru obsahujícího ty samé instrukce, ale v hexadecimální soustavě a bez vašich poznámek za středníkem tak, aby tomu rozuměl mikrokontrolér, ale ne vy. Assembler si můžete stáhnout (také zdarma) na stránkách Microchipu www.microchip.com/1010/pline/tools/archive/other/index.htm
- počítač
O tom asi není potřeba nic moc psát. Stačí i stará 486, ale musí mít paralelní port (nebo jiný port pro připojení programátoru), nějaký textový editor (poznámkový blok a pod.) a musí podporovat software dodávaný s programátorem.
- Zdroj a další...
Na odzkoušení mikrokontroléru budete pochopitelně ještě potřebovat stabilizovaný napájecí zdroj 5V (konstrukce stabilizátorů s 7805 už byla na elweb.cz popsána), krystal (např. 4MHz), 2 kondenzátory 15pF (případně jiné hodbnoty pro jiné krystaly) a další součástky podle konkrétní aplikace (led, rezistory, displeje...), ale věřím, že většinu z toho už najdete doma v šuplíku nebo třeba (v mém případě) i na stole, pod skříní a podobně. Doporučoval bych taky zakoupit nepájivé kontaktní pole (teda jestli nejste již dávno jeho vlastníky). To se skládá ze stovek různě popropojovaných direk s roztečí 0,1 inch (rozteč pinů čipů a většiny součástek) a slouží jako zkušební deska. Nic na něm nemusíte pájet, součástky do něj pouze zastrkáte a propojíte je mezi sebou krátkými drátky, které také strkáte do direk vedle nich. Prodávají ho například v GM za cenu od 100 do 600 Kč podle velikosti. .
obrázek/schéma ve formátu gifprogram pro mikrokontrolér ve formátu hex (stažení: pravé tlačítko > uložit cíl jako)
V některých prodejnách s elektro součástkami vám podle tohoto souboru doneseného na disketě mikrokontrolér naprogramují (např. GM el.
www.gme.cz)
program pro mikrokontrolér ve formátu asm (stažení: pravé tlačítko > uložit cíl jako)
Asm je formát, ve kterém lze program upravovat. Před naprogramováním do mikrokontroléru se musí převést pomocí
assembleru do formátu hex
<< předchozí článek 0403Digitální měřič kapacity s alfanumerickým displejem řízený PIC16F74 | další článek >> 0599Návrh stejnosměrného zdroje napětí: transformátor, dvojcestný usměrňovač |