joi, 16 februarie 2012

Microntrollere PIC Microchip pentru incepatori - debugger

In episoadele trecute am avut o introducere la microncontrolere si am scris primul program in mikroC pentru un microcontroler Microchip PIC18F4550. Acest program a fost compilat corect, adica l-am scris corect. Urmeaza sa simulam functionarea sa.


Codul si schema logica pentru aprinderea unui LED conectat la pinul RD0

In viata reala, programarea presupune erori, probleme. Acestea se numesc bug-uri (de la gandaci). Procesul prin care se corecteaza erorile de numeste "debug" (depanare). Pentru a putea depana programele in mikroC, avem la dispozitie un debugger in mikroC. Acesta se dechide din meniul Run -> Start Debugger (tasta F9).


Deschiderea "Debugger"-ului din meniul principal

In program sunt variabile ce pot lua diferite valori, spre exemplu RD0_bit; aceste variabile pot fi urmarite in debugger, le adaugam din lista din dreapta. In meniul Run, sunt mai multe optiuni, alegem "Step Over" (sau tasta F8) - adica executam fiecare linie de cod una dupa alta. Astfel incepem sa executam fiecare linie din program pas cu pas. In dreapta vedem cum valoarea RD0_bit se schimba, devine 1, devine 0. Tot acolo, mai jos in dreapta apare valoarea in timp in micro secunde, astfel putem estima cat timp dureaza calculele pe care le face microcontrolerul.


Posibilitatile de executare a codului: pas cu pas, sa execute functiile dar sa nu intre in ele (step over), sa intre in functii etc


Fereastra "Watch" - aici poti urmari evolutia diverselor variabile, le poti chiar modifica valoarea

Programul intra in bucla do while, reseteaza pe RD0 (pune 0 logic), apoi asteapta 1000 de milisecunde (adica 1 secunda), apoi seteaza pe RD0 (il pune pe 1 logic), apoi asteapta 1s, ajunge in while si verifica daca conditia este 1; cum conditia va fi 1 intotdeauna, va fi o bucla infinita. Pentru ca avem conditia 1, se ajunge din nou la linia unde RD0 devine 0 si o ia de la capat. Din cauza ca la o parcurgere s-a asteptat 1000 + 1000 milisecunde, durata totala este de 2000 milisecunde, ceea ce indica si debuggerul in dreapta jos.

Asadar debuggerul este simulatorul care ne scapa de bataile de cap generate de o logica nepotrivita la programare ori poate de o paranteza pusa aiurea prin cod. Insa un debugger nu poate inlocui functionarea reala, asadar avem nevoie de o placa electronica cu microcontroler.

Legat de mikroC, acesta are si un convertor zecimal - hexazecimal - binar, foarte util:


Convertorul zecimal - binar - hexazecimal din mikroC

Pe langa acest convertor si debugger, mikroC mai are o gramada de unelte (tools) care sunt de mare ajutor cand dezvoltam aplicatii: un tabel cu caracterele ASCII, un editor pentru EEPROM, un creator de caractere pt LCD, terminal USART (pt conexiuni pe portul serial), mikroBootloader si altele, acestea se pot gasi in meniul Tools.


Meniul Tools ofera o multime de unelte utile, surprize placute

In incheiere cateva cuvinte despre mikroBootloader: un bootloader e o unealta extrem de utila; se programeaza microcontrolerul cu un firmware mai special, adica cu acest bootloader. Apoi microcontrolerul se conecteaza la PC prin interfata seriala sau pe USB (exista booloadere pt serial sau pt USB). Cand avem cod nou creat, cu tool-ul mikroBootloader putem sa il trimitem catre microcontroler. Dam un reset la microcontroler si trimitem imediat acel cod catre microcontroler. Dupa reset, microcontrolerul asteapta 5 secunde si daca nu primeste nimic pe serial / USB, incepe sa execute codul cu care a fost programat ultima data. Daca primeste ceva pe serial/USB in mai putin de 5 secunde, intra intr-un mod special si receptioneaza noul cod, il rescrie si apoi il executa.

Practic nu mai trebuie programat microcontrolerul utilizand un programator. Asadar daca aveti un cunoscut si acesta are programator, il puteti ruga sa va programeze microcontrolerul cu un bootloader de la Mikroelektronika si apoi nu mai aveti nevoie de un programator.

Asadar acum suntem in punctul in care avem cod compilat si simulat si care pare ca face ceea ce dorim, anume aprinde si stinge un LED. Nu mai trebuie decat sa vedem daca si pe placa reala va face acelasi lucru. Cu alte cuvinte urmeaza sa programam in microcontrollerul Microchip PIC18F4550 fisierul HelloWorld.hex

Pentru mai multe detalii despre programarea in mikroC a diverselor aplicatii, aici e o documentatie cu exemple foarte buna de la Mikroelektronika: exemple programare in mikroC. Daca vei parcurge aceasta documentatie, vei intelege si cate ceva despre partea de hardware, dar vei descoperi cat este de usor sa automatizezi tot felul de lucruri, sa faci diverse aplicatii, pentru ca mikroC are definite multe functii care faciliteaza programarea unui microcontroler.

Daca cineva doreste sa lase comentarii de genul "limbajul de asamblare e de baza, compilatorul nu e transparent si nu vei sti ce se petrece de fapt acolo, nu poti optimiza prea mult etc etc" - vreau sa reamintesc ca aici este vorba de a convinge cat mai multi oameni ca e fain sa programezi microcontrolere, e relativ usor, fineturile le las celor avansati (cu trecerea timpului, inveti sa lucrezi optimizat).

Si e bine ca te ajuta sa gandesti, caci ceea ce nu utilizam din corpul nostru, se atrofiaza! Te-ai gandit azi?!

Pasul urmator: programarea microcontrollerului PIC18F4550

2 comentarii:

  1. va salut

    Am si eu o intrebare daca se poate sama ajutati si anume

    Am un cod care as frea sa il trimiti prin emisie (in aer) si as vrea sa il pun pe un PIC...
    Folosesc arduino si merge perfect prin transmisie dar as vrea sa il emit si cu arduino nu pot sa alimentez mai mult de 9 v placa...
    Am inteles ca cu un pic cu sursa si un irf la iesire obtin si pot sa alimentez cu mai mult curent sa pot obtine cv semnal mai puternic in emitatorul care il folosesc ....

    Deci am un cod si vreau sa il trimiti de pe un pic atasat la un emitator ....vreau sa stiu daca se poate

    Va multumesc ,,,

    RăspundețiȘtergere
    Răspunsuri
    1. Nu mi-e clara problema, daca imi puteti trimite o schema si inca niste explicatii sa ma lamuresc. Lasati-mi o adresa de email (nu o public) si comunicam pe respectiva. Numa' bine!

      Ștergere