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)

základní zapojení mikrokontroléru PIC16F84 s jednou ledkou

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?



obrázek/schéma ve formátu gif
program 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č

(c) Martin Olejár, 1999 ÷ 2017 :: www.elweb.cz :: kontakt TOPlist