duminică, 12 februarie 2012

Microntrollere PIC Microchip pentru incepatori - intro

Suntem inconjurati de electronica intr-o masura foarte mare. Operatiile simple din viata noastra sunt ajutate de electronica: suntem treziti dimineata de dispozitive electronice, comunicam intre noi cu ajutorul unor dispozitive electronice, sanatatea ne este verificata tot cu ajutorul unor dispozitive electronice, conducerea automobilului este mai placuta datorita acestor dispozitive electronice, timpul il aflam de la dispozitive electronice, ne orientam cu dispozitive electronice, daca ai un caine il poti convinge sa nu mai latre aiurea cu un dispozitiv electronic :) samd.

Electronica a revolutionat lumea de azi, insa la inceput electronica era simpla, era analogica. S-a pus problema ca anumite operatii simple, repetitive sa fie automatizate si realizate de masini in locul oamenilor. La inceput s-a facut cu sisteme analogice, care erau masive si inflexibile, astfel ca o schimbare minora trebuia implementata cu schimbarea majora a sistemului. Intre timp s-a ajuns ca electronica sa fie si digitala, adica acei 0 si 1, biti. Simplu: trimiti siruri de 0 si de 1, masina ii interpreteaza si face o actiune. Asa a aparut necesitatea de a programa o masina sa faca ceva, nu se putea scrie un sir de 0 si 1 de catre om, era necesar ca programarea sa se faca intr-o forma accesibila si inteleasa mai usor de om. Asa au aparut limbajele de programare. Cand a aparut si computerul intr-o forma apropiata de cea de azi (adica un dispozitiv ce putea fi carat de maxim 2 oameni), atunci lucrurile au prins avant si au devenit accesibile pt toata lumea.

La ceea la ce s-a ajuns azi suntem cu totii martori, termeni ca si programare, program, software, hardware, Java, C, C++, asamblare etc sunt termeni comuni, chiar daca nu esti din domeniu si nu stii exact despre ce e vorba, ai cel putin o vaga ideea ca acesti termeni au o legatura cu ITul, electronica, computerele.

Astazi sunt programatori si scoli de programare, sunt diverse limbaje de programare, sunt teorii intregi. In general programarea este asociata cu realizarea unui program de calculator, software, care va fi folosit pe un computer. De aceea in general programatorii nu sunt buni prieteni cu partea de hardware (poate si viceversa e valabila, nu stiu), insa e ca si cum faci prajitura, dar nu te intereseaza cum functioneaza cuptorul in care o coci, nu vrei sa afli cum se produce energia care ajuta la coacere, cum functioneaza praful de copt samd.

Anumite operatii / aplicatii simple se pot automatiza usor folosind programarea si calculatorul. Totusi, nu cred ca e util sa avem un filtru de cafea automatizat cu un calculator langa el: arata ridicol si costa mult. Totusi cum se face?

Se poate face cu un dispozitiv mic numit microcontroler. Acest microcontroler este un circuit integrat electronic digital. Poate fi aproximat ca fiind un calculator in miniatura, insa la o scara mult mai redusa si cu limitarile de rigoare. Aceste microcontrolere sunt programabile, se poate scrie software pentru ele, softul pentru microcontrolere se cheama firmware (unii vor spune: aha, atunci cand am facut upgrade la ruterul WiFi de acasa sau la nu stiu ce dispozitiv electronic digital, tot firmware se chema).

Limbajul de programare pt microcontroler este un limbaj relativ simplist, insa asta il face si greu de inteles din punct de vedere uman, comunicarea umana are o sintaxa, foloseste cuvinte, nu comunicam la nivel de litera. Din fericire suntem in postura de a avea la dispozitie medii de programare asemanatoare celor pt calculatoare, spre exemplu programam in C, Basic, Pascal diverse microcontrolere. Asta face acest domeniul mult mai abordabil de catre novici.

Alta problema era pretul ridicat al microcontrolerui si al uneltelor de programare. Astazi exista kituri, exista placi de dezvoltare gata facute, exista programatoare, toate la un pret accesibil unui constructor amator. Pe de alta parte, cine se incumeta, poate realiza singur o placa de dezvoltare, poate sa isi faca singur programatorul.

Pe piata sunt numeroase medii de programare gratuite, sunt aplicatii oferite cu tot cu sursele lor. Cu alte cuvinte sunt baze pentru a incepe studiul acestui domeniu interesant chiar la tine acasa.

Mai ai nevoie de un calculator (PC), cu Windows (ca e mai simplu, Linux e ceva mai complicat, dar nu foarte) si cateva unelte: o unealta de lipit (gen letcon, pistolul de lipit are putere prea mare si poate distruge componentele electronice), clesti mici, surubelnite mici, un aparat de masurat marimi electrice etc. Dar pt inceput PCul, placa si programatorul sunt necesare, se pot cumpara si in secunda 2 se poate incepe lucrul.

Pasii necesari pentru a realiza o aplicatie cu microcontroler sunt enumerati mai jos:


1. Definirea cerintelor aplicatiei
Pentru a avea succes in ceea ce facem, trebuie sa avem un scop, o motivatie. In cazul microcontrolerului motivatia se cheama aplicatie. Asadar trebuie sa alegem o aplicatie pe care sa incercam sa o rezolvam cu un microcontroler (de exemplu un aparat care sa aibe grija de un acvariu, un aparat care sa iti trimita un SMS daca ai inundatie sau s-a deschis o usa etc). Asadar aplicatia trebuie sa fie clar definita: avem nevoie de 3 butoane, avem nevoie de un ecran de afisare, avem nevoie de un LED samd. Toate acestea vor trebui conectate la microcontroler cumva.

2. Dezvoltarea algoritmului care rezolva aplicatia
Microcontrolerul executa instructiuni una cate una si are puncte in care ia decizii: daca este apasat butonul 2, atunci aprinde LEDul 1, altfel treci mai departe. Aceste instructiuni si deciziile trebuie puse intr-o schema logica, un flow. Este bine sa facem acest flow pe hartie, sa il parcurgem, sa vedem ca e functional.

3. Scrierea codului pentru implementarea algoritmului
Codul se scrie intr-un asa-numit mediu de programare. Mediul de programare depinde de ce microcontroler vei folosi. Pentru ca internetul abunda de informatii despre Atmel si Microchip, pentru ca acesti 2 producatori ofera medii de programare pentru microcontrolerele lor, e bine sa optezi la inceput pentru asa ceva. Eu am optat pt Microchip, am avut sprijin la inceput de la cineva care stia sa programeze microcontrolere de la Microchip.

Microcontrolerul Microchip PIC16F84
Microcontrolerul Microchip PIC18F4550
Cam cat de mari sunt microcontrolerele - in raport cu o moneda de 50 de bani

Revenind la cod si la mediul de programare, am optat pentru mikroC creeat de Mikroelektronika - o firma din Serbia care face lucruri foarte faine - au de vanzare si placi de dezvoltare, au multe optiuni, au documentatie si exemple care ajuta mult sa dezvolti aplicati in timp scurt, te ajuta sa inveti repede cu alte cuvinte. mikroC este limitat la 2kb de cod, daca vrei mai mult trebuie sa cumperi licenta pentru mikroC.
E foarte fain ca in timp ce inveti sa programezi microcontrolere, inveti si programare in C.

4. Simularea functionarii codului in debugger (simulare software)
Mediul de programare ofera posibilitatea urmaririi functionarii codului, ce se petrece cu variabilele, cum se comporta registrii. Adica poti depana codul (to debug = a depana), depanarea se face in acest depanator (debugger). Pentru a putea depana codul, trebuie executata operatia de compilare, adica mediul de dezvoltare verifica sintaxa, ca ai definit toate variabilele, ca ai virgulele si punctele puse unde trebuie. In urma compialrii obtii un fiier cu extensia hex. Cand consideri ca ai scris cod care face ceea ce cere aplicatia, poti trece la pasul urmator.

5. Programarea microcontrolerului cu codul scris la pasul anterior
Intre microcontroler si cod trebuie sa existe ceva, acel ceva se numeste programator. Este vorba de un dispozitiv care ia codul compilat (fisierul hex) si il scrie in memoria nevolatila a microcontrolerului. Atunci cand alimentam cu energie electrica microcontrolerul, acesta va citi codul din memorie si va face ceva, ideal sa faca ceea ce vrem noi, sa ne rezolve aplicatia. Programarea microcontrolerului ne lasa cu o componenta cu un program in memoria ei. Totusi programarea se poate realiza si cand avem componenta pusa pe o placa electronica.

Programator de microcontrolere Microchip pentru portul paralel - AN586 - construit acasa

6. Realizarea prototipului hardware pentru testarea codului in mod real
Acum despre partea de hardware, de obicei asta e partea care sperie sau indeparteaza potentialii amatori de microcontrolere. Exista placi electronice cu butoane, LEDuri, conectori samd astfel incat sa inveti sau sa dezvolti aplicatii cu microcontrolere - se numesc placi de dezvoltare. Pe asa ceva poti testa aplicatia si codul inainte de a face o placa electronica dedicata aplicatiei. Aici ai doua optiuni: fie investesti intr-o placa gata facuta (cum spuneam Mikroelektronika are oferta buna in acest sens) sau investesti in scule de lipit si materiale / componente si faci singur placa (asa investesti de fapt in educatia ta, caci la sfarsit vei invata sa faci ceva nou). Eu am facut singur placa respectiva pentru dezvoltare / invatare, am pus pe ea butoane, LEDuri, un rotary encoder (nu stiu daca termenul de comutator rotativ explica bine acest dispozitiv), un ecran LCD 2 rinduri x 16 caractere, am pus conectori pt USB, RS232 (interfata seriala), partea de alimentare de 5Vcc, partea de conectare la programator si componente auxiliare ce fac microcontrolerul sa functioneze corect.
Cand faceti propria placa de dezvoltare (placa de invatare), tineti cont de cum legati pinii microcontrolerului, caci anumiti pini au mai multe functii. Asta se afla din documentatia microcontrolerului, se poate afla din schemele altora. Schema "placii de dezvoltare" (la cum arata, poate e prea mult spus) este urmatoarea:

Schema placii de dezvoltare - intr-o continua schimbare si ea :)

Placa in realitate

Dupa ce avem partea hardware si microcontrolerul programat cu codul pe placa, trecem la urmatorul pas

7. Testarea codului in mod real
Daca la apasarea unui buton nu se aprinde un LED, atunci revizuim codul, reprogramam microcontrolerul si verificam din nou ce se petrece. Cand se intampla ceea ce trebuie, trecem la pasul urmator.

8. Realizarea partii de hardware finale care rezolva aplicatia
Aici vorbim de o placa de circuit imprimat, de o cutie in care sa punem placa electronica, cu butoane, conectori samd. Acest lucru se poate realiza cu diverse programe: Eagle PCB pt realizarea de scheme electronice si placi electronice, Google sketch pt patea de modelare mecanica samd. Tot aici este bine sa avem si o minima documentatie legata de aplicatie si de ceea ce am facut.

9. Testarea combinatiei hardware / cod
Dupa ce avem partea hardware finalizata, urmeaza sa testam codul si sa vedem daca rezolva aplicatia, aici mai facem ajustari, detalii etc. Acum niste ani am aflat despre microcontrolerul PIC16F84 (Microhip a denumit microcontrolerele PIC, de aici vine numele de PICuri - "Programmable Intelligent Computer" sau "Peripheral Interface Controller"). Un simplu circuit integrat digital, dar care programat cum trebuie, facea lucruri minunate. A fost un microcontroler care oferea multe la un pret decent, un microcontroler pe care il puteai programa folosind programatoare facute in casa in regim de constructor amator cu componente uzuale (ICSP - in circuit serial programmer), avea memorie flash, adica putea fi reprogramat de nenumarate ori. A fost un adevarat hit in lumea microcontrolerelor si pe aceasta directie s-au dezvoltat lucrurile pana azi.
Astazi se poate cumpara cu 20 de dolari un microcontroler Microchip ce are interfata USB, ce are 3-4 porturi, poate genera diverse semnale (de exemplu PWM), are interfete de comunicare SPI, I2C, are memorie pentru aplicatii complexe si cel mai important - este in capsula cu picioruse, caci astazi componentele electronice sunt pe cale sa devina tot mai mici si fara picioruse. Eu am optat pentru microcontrolerul de la Microchip numit PIC18F4550 - varianta cu picioruse, capsula cu 40 de pini.

Initial programatorul l-am realizat dupa o schema de la Microchip - documentul AN589 descrie acest programator, vezi aici: an589. Pt acest programator am folosit un soft gratuit numit ICProg. Mai sus este o imagine cu programatorul AN589 realizat de mine acum niste ani, e functional, insa nu am unde sa il folosesc la laptop, nu am port paralel (si solutia cu unul emulat pe USB nu are suport in ICProg, oricum USBul este peste tot).

Problema este ca programatorul AN589 este pe portul paralel, din pacate acest port nu mai este prezent la laptop, asa ca am fost nevoit sa renunt la el si sa caut ceva mai potrivit. Acum folosesc un programator tip ICD2 (e o copie / clona a originalului de la Microchip). Deci cautati un programator care sa fie pe USB (Mikroelektronika sau ebay sunt o sursa buna de asa ceva, cautati "microchip PIC programmer USB").

Pentru ca intentia mea nu este sa fac un ghid foarte detaliat despre microcontrolele, ci doar sa fac un ghid spre punctele importante de la inceput si sa ofer un start usor in programarea microcontrolerelor, recomand un material foarte bun de la MikroElektronika: despre microcontrolere in general. Este in engleza, dar cred ca fara engleza azi nu poti face mare lucru, e ca si cum ai fi un mut international. In materialul indicat vei afla ce sunt registrii, vei afla ce contine un microcontroler, ce poate sa faca el samd, este util si interesant, are grafica buna, citeste-l!

Asadar avem un PC cu Windows, cu port USB, am instalat mikroC si Microchip IDE, avem un programator pe USB si o placa de dezvoltare. Ne mai lipseste prima aplicatie. Aici este pasul urmator: scrierea primului program

Pasul urmator: scrierea codului pentru un microcontroller Microchip PIC18F4550

3 comentarii:

  1. Foarte tare articolul!
    Explică în termeni simpli și eleganți o grămadă de concepte "ezoterice" care altfel ar fi fost de neînțeles.
    Good job!

    RăspundețiȘtergere
  2. Am descărcat de pe link-ul dat de tine datasheet-ul lui 4550, pare un "utilaj" puternic... :-)
    Am o observație:
    Ai scris mai sus că uC-ul tău are 44 de pini - i-am numărat în poza plăcii tale de dezvoltare şi sunt doar 40.
    Doar capsulele alea pătrate şi ciudate au 44 de pini (TQFP şi QFN).
    Sper să nu te superi dar azi dimineață, citind blogul tău, am hotărât să intru şi eu în lumea microcontrolerelor... aşa că am căutat pe la prieteni un soclu DIL de 44 de pini cum am citit aici, dar nu am găsit, apoi am aflat că ca la nu există... :-)
    Dar asta nu-i taie "stelele" articolului tău. bun articol, voi citi și continuările și mă apuc de treabă. :-)

    RăspundețiȘtergere
    Răspunsuri
    1. Am corectat, multumesc, sigur mai sunt si altele, chiar m-am bucurat ca cineva citeste si gaseste utila informatia postata de mine :) Daca ai nevoie de componente, da-mi un mail si vorbim simion punct catalin at gmail punct com, caci am un mic surplus de componente pe care nu mai am vreme sa le utilizez.

      Ștergere