Ako som si začal s PIC32
...alebo 80 MIPS v jednom MIPS
Jaromir, 22.10.2010-00:00
1, Prečo
Vždy sa dobre bavím pri pohľade na ARM megahnutie v posledných rokoch, na všetkých horlivých zastupiteľov jedinej správnej platformy, na firmy, ktoré sa snažia odtrhnút si
z koláča čo najväčší kus a nakoniec mi je trochu ľúto tých, ktorí sa z tej motanice a záplavy totálne nepoužiteľných devkitov (niekto zabudol, že to „dev“ znamená development) snažia vymotať. Motanica spočíva predovšetkým v tom, že výrobcovia sa spoliehajú na to, že ARM je natoľko bežná a jasná platforma, že netreba robiť nijaké špeciálne vývojové nástroje, pretože „všetko je dostupné“. Existujú aj rôzne oklieštené verzie komerčných a nie veľmi lacných IDE, ponúkajúcich takmer všetko – a na prvý pohľad sa zdá, že to „na nejakú dobu musí stačiť“. Nakoniec sa ukáže, že to nie je až také veselé a ľudia sa snažia donútiť molochov ako Eclipse spolupracovať s nejakým derivátom GCC, k tomu treba dolepiť debugger alebo simulátor, ak nejaký existuje. Samozrejme, verzií je veľa, treba zvoliť tú správnu, už len zistiť na diskusnom fóre akú verziu... a tak sa môže vývojár namiesto práce s jednočipom, na dlhú dobu utopiť vo vyvíjaní vývoja na vývoj. Ku všetkému na pozadí hrá rozprávka o tom, že ARMy sú „multi-sourced“, čo znamená, že sú dostupné z viacerých zdrojov a keď jeden výrobca prestane dodávať (preto lebo zbankrotuje, alebo mu vyhorí fab, alebo všetci zamestnanci dostanú strašnú úplavicu z majonézového šalátu, ktorý bol na obed), tak sa dá „nejaký ARM“ kúpiť inde. No, tak toto platilo kedysi, keď napríklad 6502 vyrábala materská firma MOS Technology a ten istý kremík vyrábala napríklad aj firma Rockwell alebo Synertek
(zdroj) a teda stačilo vytiahnuť z pätice jeden procesor, strčiť tam iný a všetko fungovalo ako predtým. Sazmorejme, s ARM MCU je situácia iná. Každý ma iné periférie, iné usporiadanie v pamäťovom priestore, iné rozloženie vývodov, takže ilúzia o zmene ARM->ARM nadobúda viac na svojej éterickosti. Z toho vyplýva, že akýkoľvek problém s jedným výrobcom ARMov znamená obrovský problém pre jeho zákazníkov a migrácia na iný ARM bude tak isto bolestivá ako migrácia na akýkoľvek iný typ MCU.
Našťastie nie všetci výrobcovia mikrokontrolérov podľahli davovej psychóze na tri písmená – jedným z nich je Microchip (vlastne, koľko je ďalších?). Microchip pred zhruba tromi rokmi prišiel s rodinou PIC32, čo je
MIPS jadro obalené perifériami a pamäťou tak, aby z toho bol jednočip. V ponuke sú kúsky s 512kB FLASH a 128kB RAM a množstvom periférií
(napríklad), kusovka stojí pri naj high-endovejších typoch cca 8EUR. Porovnávať výkon s bežnými ARM MCU je problematické a nikdy som ho nemal veľmi rád, ale dá sa o tom niečo dočítať napríklad
tu , ale zdá sa, že
nové ARM MCU pomaličky začínajú doťahovať na PIC32, ktoré sú 3 roky staré. Dá sa predpokladať, že počas tejto doby v Microchipe nespali, tak uvidíme čo navaria.
2, Ako
Pre mňa bol na začiatku hrania sa (a neskoršej komerčnej práce) s PIC32 v roku 2008 bol záujem o platformu, ktorá poskytuje viac možností, než tie, na ktoré som bol zvyknutý. A bolo to pomerne triviálne. Vzal som existujúci plošný spoj, na ktorom som mal PIC24 MCU, ten som odfúkol preč a na jeho miesto som prispájkoval PIC32. Tým bolo hranie sa s HW skončené. HW vývojové nástroje som použil presne tie isté ako pre PIC18 alebo PIC24 – teda PicKit3 a ICD3. SW vývojové nástroje sú opäť tie isté – MPLAB, ako doteraz a samozrejme bolo treba stiahnuť a nainštalovať si prekladač MCC32 od Microchipu. Týmto úkonom, ktorý trval 15 minút vrátane konzumácie polovice feferónovej pizze, som ukončil všetky potrebné úkony, už zostalo len duševne sa naladiť na 32-bitovú platformu. Bolo to pomerne jednoduché. To sa vezme MPLAB s nainštalovaným MCC32 kompilátorom a založí sa nový projekt (Project->Project Wizard).
Zvolíme trebárs s PIC32MX440F512H alebo čo už máme na doske.
Zvolíme Microchip PIC32 Compiler.
Zvolíme si cestu kde bude projekt
A po pár kliknutiach máme prázdny projekt.
Vytvoríme si nový súbor a uložíme ho ako trebárs main.c do aktuálneho projektu.
A vložíme ho medzi zdrojové súbory.
Tak a teraz je to pripravené na programovanie.
Zadáme program napríklad takýto:
int main (void);
unsigned int a;
int main (void)
{
while (1)
{
a++;
}
}
v položke „Debugger->Select tool“ zvolíme MPLAB Simulator a potom F10 – Build. Malo by to vyzerať asi takto:
No, a sme doma.
Na to, aby človek mohol hýbať perifériami MCU, tak potrebuje includovať súbor „plib.h“ (nebudem rozoberať jeho štruktúru, ale podľa toho, aký MCU je zvolený, vloží ďalšie hlavičkové súbory s názvami registrov pre konkrétny MCU, okrem iného) a potom sa dá manipulovať s perifériami, asi takto:
#include "plib.h"
int main (void);
unsigned int a;
int main (void)
{
TRISD = 0;
while (1)
{
LATD++ ;
a++ ;
}
}
A vo watch window (View -> Watch) je možné sledovať ako sa ten port hýbe (na PORTD++ je breakpoint).
Takýto program skutočne hýbe pinmi portu D, ale pomerne rýchlo – na blikanie LEDkou to treba spomaliť. Na to sa hodí napríklad časovač, tak ho použime:
#include "plib.h"
int main (void);
unsigned int a;
int main (void)
{
TRISD = 0;
T1CONbits.ON = 1;
T1CONbits.TCKPS = 0b10;
PR1 = 50000;
while (1)
{
if (IFS0bits.T1IF==1)
{
IFS0bits.T1IF=0;
LATD++;
a++;
}
}
}
Časovač sa zapne, zvolí sa mu vhodná preddelička a čaká sa v nekonečnej slučke na jeho pretečenie (na interrupt flag, ale pretože prerušenie pre tento časovač nie je povolené, tak nenastane). Ak nastane toto pretečenie (interrupt flag), vynuluje sa príznak a inkrementuje port D. Časovač je nastavený na pretečenie po 50000 inkrementáciach, tieto sú odvodene od frekvencie hodín vydelené číslom 64. Pokiaľ je frekvencia hodín 8MHz, tak inkrementácia portu D nastane 2,5x za sekundu. Dá sa to overiť v simulátore (Debugger->Stopwatch, po nastavení taktu 8MHz v Debugger->Settings).
Teraz je program pripravený na napálenie do MCU. Treba si vhodne zvoliť konfiguračné bity (Configure->Configuration Bits), zvoliť PicKit3 (alebo čo už máme) ako programátor (Programmer->Select Programmer) a napáliť (tlačidlo Program). LEDka pripojená na pin PORTD0 (pin 36) by mala blikať.
Takže blikanie LEDkou, čo je elementárna vec pri novom MCU, máme zvládnuté, spolu so základnou orientáciou v MPLABe. Zdroják má cca 20 riadkov aj s chlpami, nepoužívajú sa žiadne „HW knižnice“ (grrr), je prehľadný a jasný.
3, Čo k tomu treba
Sám som to zbastlil na doske, ktorú som používal pre prácu s PIC24 (16-bitová platforma). Pozostáva z univerzálneho plošného spoja s rastrom 2,54mm a breakoutu, na ktorom je samotné PIC32 (resp. iné PIC s totožným pinoutom) a blokovacie kondenzátory. Vyzeralo to asi takto:
Je to jednoducho vyrobiteľné doma, s bežným postupom fotocestou, prípadne u nejakého
lacného výrobcu DPS:
Samozrejme, dá sa použiť aj hotové DPS s PIC32, ale to už stráca kúzlo samodomo uchopenia problému.
K tomu som použil
PicKit3 ako programátor/debugger, ktorý sa dá kúpiť napríklad v TME za cca 40EUR. PicKit3 poslúži pre rovnaký účel aj pre takmer všetky PIC MCU, od osembitových až po PIC32.
Ako vývojové prostredie som použil
MPLAB v najnovšej verzii k tomu kompilátor
MPLAB C32 Lite Mode , ktorý sa od plnej, platenej verzie líši tým, že neumožňuje zvoliť optimalizácie vyššie ako O2, inak veľkosť generovanej binárky nie je obmedzená. Toto obmedzenie pre hobby projekty nehrá nijakú úlohu a sám som s týmto nastavením už čo-to porobil. Pre komerčné použitie sa kompilátor zaplatí sám - výhodou je, že sa netreba učiť nič nové. A každý, kto sa elektronikou živí, si vie spočítať koľko času a peňazí ho môže stáť zápasenie s kompilátorom, ktorý bol inak "zadarmo".
4, Záver a tak
Samozrejme, možnosti PIC32 nekončia pri blikaní LEDkou. K dispozícii je toho viac, či už vnútorých periférií (6 USART-ov napríklad) alebo aj bohatej dokumentácie a zdrojových kódov (USB host/device/OTG stack, TCP/IP stack, ZigBee stack a iné), ale týmto príkladom s jednou LED som chcel poukázať na triviálny začiatok. K dispozícii sú kompletné vývojové nástroje, dostupný a lacný kremík ako aj množstvo podpory od výrobcu. Preniknúť do hĺbky PIC32, tak ako aj inej 32-bitovej platformy je ale zložitejšie, ak má byť využitá optimálne.
tento článok je z mikroZONE
( https://mikrozone.sk/pluginy/content/content.php?content.84 )