vineri, 17 februarie 2012

Microntrollere PIC Microchip pentru incepatori - programarea microcontrollerului

Pana acum am scris cateva linii de cod si am simulat un program pentru microcontrollerul Microchip PIC18F4550 care se presupune ca va aprinde si stinge un LED conectat la microcontroller. Oare chiar asa sa fie? Pentru a sterge orice urma de nesiguranta, trebuie sa programam microcontrollerul si sa avem legat LEDul la el.

Pentru programarea microcontrolerelor Microchip, am avut la inceput un programator pe portul serial (JDM programmer), apoi unul pe portul paralel (AN589), ambele realizate de mine personal, acestea insa nu se mai pot folosi la laptop caci nu am port serial ori paralel. Asa ca am o clona de Microchip ICD2 (In Circuit Debugger - Sivava este firma) care este recunoscut de catre mediul de dezvoltare oferit gratuit de Microchip (MPLAB IDE); de aceea voi utiliza la programare mediul de dezvoltare MPLAB IDE de la Microchip (se gaseste pe site la Microchip aici).

Practic voi lua fisierul HelloWorld.hex generat in mikroC si il voi scrie in microcontroler folosind clona de ICD2 si MPLAB IDE.

Conectez ICD2 prin USB la PC (am instalat driverele de USB inainte), deschid MPLAB. Pasii urmatori din capturile de ecran descriu modul de programare:

Selectia tipului de dispozitiv cu care dorim sa lucram (target device) - fara aceasta selectie, MPLAB IDE nu stie unde sa scrie datele in microcontroler -  meniul "Configure -> Select device":


Selectam PIC18F4550 din lista de dispozitive cu care vrem sa lucram


Selectarea tipului programatorului - MPLAB ICD2


In meniul "Programmer -> Settings" mergem in tab-ul Power si bifam "Power target circuit from MPLAB ICD2" daca dorim sa programam un microcontroler intr-un soclu. In acest caz avem nevoie de un alimentator de 12 Vdc sa fie conectat la ICD2 (chiar daca acolo scrie 9Vdc - mai jos este rezultatul experimentelor mele)



Conectarea MPLAB la programator - Connect

Mesajul ca suntem conectati

Incarcarea fisierului .hex in programator - Import

Selectie fisier HelloWorld.hex

Fisierul este pregatit pt scriere

Selectie optiunea de programare - Program

Mesaj ca programarea a decurs fara incidente


Dupa ce am programat microcontrollerul PIC18F4550, realimentam placa si LEDul se stinge si se aprinde cate o secunda:

Legat de realizarea partii de hardware - a placii electronice, exista o metoda care nu necesita lipituri, se pot cumpara direct fire si o placa de incercari (breadboard - la Vitacom e ceva de la Pro's Kit la vreo 30 de lei), aici gasiti cateva sugestii:

fire pt breadboard
fire mama pt breadboard
fire mama pt breadboard - panglica

Breadboard sau placa electronica fara lipituri - toate gaurile de pe coloane sunt conectate electric intre ele, pe mijloc este un canal care separa electric coloanele pentru a putea utiliza circuite integrate, vezi imaginea urmatoare

Componente electronice si fire de legatura - de observat ca pentru a utiliza o astfel de placa avem nevoie de componente cu picioruse

Inserarea unui circuit integrat in breadboard

Inserarea unui fir in breadboard

Cum arata circuitul la sfarsit - putin cam dezordonat, insa e un mod rapid si facil de a incerca ceva


Cum am mai spus placa mea de dezvoltare e facuta acasa, cu unelte normale, este o placa de incercari cu multe optiuni legata la o clona de ICD2:

Placa de dezvoltare conectata cu ICD2

Detaliu ICD2

Detaliu placa de dezvoltare. Dupa cum se vede, ICD2 se conecteaza la placa printr-un cablu. si un conector aflat pe placa.

Din experienta avuta cu aceasta clona de ICD2, am invatat ca e obligatoriu ca /MCLR sa fie direct conectat la ICD2 in timpul programarii, chiar daca in indicatiile lor arata ca e ok daca e un pull-up acolo, pur si simplu nu functioneaza corect, nu se poate programa. Asadar conectati /MCLR direct, apoi cand vreti sa vedeti cum functioneaza ceea ce ati programat, conectati /MCLR la pull-up si apoi alimentati microcontrollerul.

Alta observatie este legata de alimentarea externa a clonei de ICD2: pe cutie scrie 9Vdc, daca alimentam cu 9Vdc, microcontrolerul va fi alimentat cu 2Vdc, deci nu se poate programa, daca in loc de 9Vdc aplicam 12Vdc la ICD2, microcontrolerul primeste 5Vdc si este programabil.

Portul serial (interfata RS232) realizat cu MAX232 si portul USB

Butoane, rotary encoder si LEDuri

Partea de alimentare cu 5Vcc - realizata clasic cu un 7805. Are si o dioda anti prost :). Asadar placa accepta tensiuni de intrare de la 6-7Vcc in sus, 7805 va avea grija sa alimenteze corect microcontrollerul Microchip PIC18F4550

Partea de oscilator - cristal de cuart de 20MHz si condensatorii de 22 pF


Astfel, primii pasi in programarea unui microcontroler Microchip au fost parcursi. Ca si strategie, orice aplicatie necesita o schema logica - este ghidul dupa care scrii codul. Apoi trebuie consultata documentatia microcontrolerului pentru a intelege cum trebuie sa setam microcontrolerul. Dupa aceasta urmeaza sa vedem cum au procedat altii pentru a rezolva aplicatii asemanatoare :), caci nu exista problema pe lumea asta care sa fie noua pt un individ, sa nu intre nimeni in panica, nu va inventa roata si nu il va coplesi actul creational.

Dupa ce toate aceste etape au fost parcurse (e un fel de documentare), urmeaza partea de hardware, conexiuni, lipituri etc. Abia dupa aceasta vine partea in care se scrie codul propriu zis, se verifica aplicatia reala. Si in tot acest timp se invata lucruri noi, creierul gandeste, ceea ce e mare lucru in ziua de azi.

Succes!

PS: urmeaza cateva aplicatii simple care vor utiliza butoane, LEDuri, rotary encoder, LCD 2 x 16, PWM, motor pas cu pas (stepper motor), ADC, apoi urmeaza aplicatii ceva mai complicate cu SPI, I2C, port serial, USB, Ethernet. Asa ca tineti aproape, va astept sa veniti cu idei, sa veniti cu imbunatatiri!

19 comentarii:

  1. O prezentare foarte buna ,cine te citeste intelege mai mult decat din alte carti si cand intelegi ceva incepi sa devii interesat si incepe sa-ti placa.
    Lasa te rog si o adresa de email,vreau sa corespondam pe aceasta tema.
    PS:Spune-mi te rog de la ce magazin din Romaia ai cumparat clona de Microchip ICD2 (In Circuit Debugger) si cat a costat.
    Astept raspunsul tau aici pe site.
    Multumesc.

    RăspundețiȘtergere
  2. Ma bucur ca ai gasit utila prezentarea! Aceasta clona este de la Sivava, am cumparat-o de pe e-bay (acum vreo 5 ani). Cauta pe ebay Sivava ICD2, aici poti gasi detalii: http://www.sivava.com/MPLAB_ICD2.html. De asemenea poti sa iti faci propriul programator, doar cauta pe internet realizari concrete, dar pt inceput cred ca merita investitia in asa ceva. Ma poti contacta pe simion.catalin at gmail punct com

    RăspundețiȘtergere
  3. interesant blog daca nu te deranjeaza as vrea sa am alatur si eu grupului tau de prieteni, apropo daca vrei "Anonim" iti timit eu schema electrica ,fisierul hex si pcb-ul de la ICD2-USB.

    RăspundețiȘtergere
  4. nuku, esti invitatul meu :) Ma gasesti pe FB, nume prenume ca la blog. Problema majora la microcontrolere este partea hardware. Lumea nu mai stie ce inseamna rabdarea si ca in timp se construiesc bazele, altfel totul se naruie. Vezi generatiile de azi, toti sunt mari maestri in utilizarea computerului, insa daca le dai sa formateze un amarat de document in word, nu stiu sa o faca :(

    RăspundețiȘtergere
  5. Felicitari Catalin !!! Ai facut o prezentare foarte buna pt. un incepator ca mine. Am inteles si invatat foarte multe. Multumesc !!
    Dragos

    RăspundețiȘtergere
  6. Salut caut un programator bun pentru a vorbo despre programare in domeniu micro si eventual saimi programeze ceva (platesc)

    RăspundețiȘtergere
  7. Lasa-mi un e-mail si vedem exact despre ceea ce vrei sa programezi. (nu voi publica adresa de e-mail pe blog)

    RăspundețiȘtergere
  8. Salut...sunt incepator..:Dsi am o intrebare:vad in schema aia desenata de tine alimentarea si masa conectate la pinii 11 si 12 dar in proteus nu apar pinii 11 si 12.Ma poti lamuri putin?

    RăspundețiȘtergere
    Răspunsuri
    1. Anumite medii de proiectare de placi de circuit imprimat (gen Eagle PCB, Protel, Cadence, KiCAD) incearca sa usureze munca proiectantului. Astfel ca daca ai de desenat o schema in care folosesti un circuit integrat, iei simbolul circuitului integrat si il pui in schema. Acel simbol are pini ascunsi (hidden pins) care nu sunt vizibili direct insa se conecteaza automat la net-ul GND, VCC, VDD samd. Posibil ca tu sa nu vezi pinii 11 si 12 tocmai din acest motiv - sunt ascunsi. Pe de alta parte PIC18F4550 are dublati pinii de alimentare, are si pe partea stinga si pe dreapta pini de alimentare, deci daca deja ai conectata o pereche, poate 11 si 12 sunt considerati redundanti si nu mai sunt utilizati. Nu am lucrat in Proteus, deci nu pot decat sa presupun motivele. Sper ca te ajuta un pic :)

      Ștergere
  9. esti bun dupa cum ai explicat. am fugit de microcontrolere toata viata , dar acum sunt obligat sa ma conformez ( am 45 de ani sunt electronist) si iti multumesc pentru acest " curs de programare " cu respect """usb2"""

    RăspundețiȘtergere
    Răspunsuri
    1. In 2013 nu e bine sa fugi de asa ceva, sunt peste tot si te ajung din urma cadn ti-e lumea mai draga :) Pe de alta parte programarea acum este accesibila, programele sunt gratuite, exista tone de documentatie pe internet, exista chiar si in limba romana. Aici gasesti ceva extrem de interesant: http://freejalduino.wordpress.com/

      Ștergere
  10. Multam pentru link , am bagat in Eagle freejalduino am vazut am placut si cind am timp construiesc si eu acesta placa de dezvoltare mai ales ca-i facuta de romani ---bafta si sanatate--si apropo ai dreptate pe net sunt tone dar sa fiu cinstit nu se stie sa lucreze cu ele

    RăspundețiȘtergere
  11. Sunt la prima incercare de programare si nu ma descur cu... componenta hardware :(
    O intrebare ( prosteasca ? ). Unde conectez programabilul la microcontroler. Am un sh64p42 si nu stiu la ce pini sa-l conectez astfel incat sa introduc compilatia din PC prin programabil in microcontroler.

    RăspundețiȘtergere
    Răspunsuri
    1. Nu stiu exact ce inseamna sh64p42.
      Cand spui programabil te referi la programator?
      Ideea e simpla: microcontrolerul trebuie sa aibe definiti pini speciali care sunt folositi la programare.
      Ai nevoie sa alimentezi microcontrolerul, deci 2 pini (5Vcc, masa (GND)).
      Ai nevoie de un semnal de sincronizare a datelor, al "programului" (clock, data clock).
      Ai nevoie de un pin pe care transmiti "programul" (data).
      Mai este necesar un pin prin care spui microcontrolerului ca vrei sa il programezi, de exemplu la seria PIC de la Microchip este vorba de pinul de reset (/MCLR), acestui pin i se aplica o tensiune de ~13Vcc (Vpp) si atunci PICul stie ca urmeaza sa fie programat.
      Aceste lucruri sunt specificate in manualul microcontrolerului (datasheet).

      Ștergere
    2. Multumesc frumos ! Asta este ce vroiam sa stiu :) . Nu stiam de pinul de reset ( MCLR ). Banuiam ca-mi trebuie doar un Tx, un Rx si Clock.
      SH64P42 este un microprocesor de 4 biti ( parca ). Am reusit Vineri sa fac rost de documentatia despre el ( tot de pe un forum ), dar nu am avut timp sa continui si sper sa o fac in weekend-ul viitor.
      Multumesc frumos incaodata, Catalin :)

      Ștergere
    3. Cu placere! Sa imi trimiti te rog si mie link la SH64 ala, nu am gasit nimic pe Google.

      Ștergere
  12. Pfffuuuaaa ! Am gresit :) Scuze, te rog. Este SH 69 P42. Am link-ul aici:

    http://www.datasheetarchive.com/SH69P42-datasheet.html

    Am gasit procesorul pe un termometru cu afisare doua temperaturi dintr-un dozator de apa.

    RăspundețiȘtergere
    Răspunsuri
    1. Daca scrie OTP, eu cred ca iti pierzi vremea cu componenta respectiva. One Time Programmable - programabil o singura data, deci daca l-ai gasit undeva intr-o aplicatie, sigur e programat. Si daca vrei sa dezvolti aplicatii, daca nu ai un emulator (simulator), ce vei face? Ai prima varianta de soft, iei o componenta, o programezi, vezi ca nu merge, arunci componenta samd?! Daca vrei sa te joci cu asa ceva, fa rost de un microcontroler cu memorie flash, pe care o poti programa de mai multe ori.

      Ștergere
    2. De o saptamana tot ma apuc de el dar nu gasesc timp. Speram weekend-ul ce vine sa o fac, dar multam de sfat. Am vre-o 4 placute deastea cu acest procesor si ma gandeam, poate sa fac un contor de impulsuri, o specie de masuratoare de frecventa cu converterul A/D incorporat. Multumesc frumos de sfat ! :)

      Ștergere