Notiuni introductive de utilizare a microcontrolelor

Desi pare dificila la prima vedere, crearea unei "jucarii" cu un microcontroler este perfect realizabila de catre orice tanar avand varsta cuprinsa intre 12 (licean) si 70 de ani (depanator radio TV iesit la pensie). Scopul acesor pagini este de a familiariza tanarul electronist roman cu modul de abordare a electronicii secolului XXI. Daca sunteti un bun cunoscator al limbii engleze, veti descoperi cel putin alte 1000 de site-uri avand acelasi subiect. Din acestea probabil ca 50 va vor oferi informatie in mod gratuit la fel ca si cel pe care tocmai navigati.

Microcontrolerul este un circuit integrat "inteligent". Utilizatorul lui isi transfera o parte din propria inteligenta, in memoria acestuia in procesul de programare a microcontrolerului. Pentru a-l putea utiliza, electronistul are nevoie de scule de dezvoltare. Acestea sunt: editorul, compilatorul, simulatorul si programatorul. Primul pas este alegerea tipului de microcontroler. Este poate cel mai dificil deoarece gama de microprocesoare existente pe piata este extrem de variata.  Tipurile cele mai raspindite sunt reprezentate de Atmel (AVR si clone 8051), Motorola (seria 68HC11), Philips (seria 8051), Microchip (PIC), Scenix (SX = clone PIC de mare viteza), Maxim (clone 8051 de mare viteza), Rabbit (microcontrolere pe 16 si 32 biti) si o sumedenie de alte microcontrolere japoneze (de exempluToshiba). In acest hatis esentiale sunt cateva aspecte:

Cred ca este evident ca utilizatorul trebuie sa aiba cel putin un nivel mediu in manevrarea calculatorului ( chiar daca nu are o adeverinta de conducere a calculatorului ) si sa dispuna de un calculator de performante medii a carui distrugere partiala in procesul de invatare sa nu-i produca lacrimi. Un 486 sau Pentium1 este mai mult decat suficient. Daca este laptop e si mai bine. Trebuie sa remarcati ca un utilizator de microcontrolere nu este un soft-ist. El ramane un electronist. Trebuie sa-si realizeze  modulele electronice care corespondeaza cu calculatorul in mod fizic pe interfata seriala sau paralela sau sa si le procure. Alimentarea gresita sau conectarea "harababurista" a acestora la calculator poate distruge ireversibil calculatorul sau numai interfetele respective. De aceea un dram suplimentar de atentie este intotdeauna necesar cand ne apropiem de calculator.

Microcontrolerul care se potriveste ca o manusa electronistului incepator este PIC16F628. Pretul este sub 100.000 lei, capsula PDIP cu 18 pini ( poate fi introdus in soclu standard ) frecventa de lucru de max. 20MHz ( durata unei instructiuni este de 0.2uS ), arhitectura de tip Reduced Instruction Set Computer cu doar 36 de instructiuni si resurse interne suficient de puternice :

Daca prezentarea de mai sus vi se pare neinteligibila, nu disperati. Deoarece conversia din sistemul zecimal in cel binar se invata deja in clasa a-V-a, sunteti familiarizati cu notiunea de bit. Acesta este "oul lui Columb", unitatea de baza a informatiei ce poate lua doua valori: 1 logic (on, high) si 0 logic (off, low). Nu exista stari intermediare pentru bit. Mai multi biti insiruiti formeaza cuvinte, fiecare cuvant are o denumire proprie: 4 biti poarta denumirea de nibble, 8 biti poarta denumirea de octet sau byte, 16 biti poarta denumirea de cuvant sau "doi octeti". Microcontrolerul nostru fiind din punctul de vedere al utilizatorului de 8 biti, opereaza cu octeti desi la nivel intern el este structurat pe 14 biti (midrange PIC) . Acest lucru inseamna ca cea mai mare valoare pe care un octet o poate lua este 0b_11111111 (reprezentare in sistemul binar) sau 0xff (reprezentare in sistemul hexazecimal) sau 255 (reprezentare in sistemul zecimal).  Bineinteles ca este permisa prezenta numerelor cu lungime mai mare de un octet insa acestea sunt "fragmentate" in octeti: cele mai frecvente formate au 16, 24 sau 32 de biti, insa un utilizator profesionist poate opera cu orice fel de formate numerice (de exemplu complement fata de doi pe 11 biti reprezentand rezultatul cu semn al unei conversii AD de 10 biti sau orice alt format cu virgula fixa)
Daca aveti un calculator atunci ar trebui sa stiti ca inima lui este microprocesorul. Microcontrolerul este tot un microprocesor specializat ce contine in interiorul lui atat memoria cat si elemente de electronica analogica, in timp ce microprocesorul nu opereaza decat cu elemente discrete specifice electronicii digitale si in general nu are memorie (exceptie face memoria cashe la unele microprocesoare). Datorita similaritatilor se accepta utilizarea denumirii de  "microprocesor" si pentru "microcontroler" asa cum ati putut observa mai sus. Memoria RAM este destinata utilizatorului si este volatila (datele nu raman memorate dupa ce alimentarea microcontrolerului este deconectata). Memoria EEprom retine datele memorate si dupa deconectare alimentarii avand o durata de retentie de ordinul anilor. Deoarece elementul memorator este un condensator (in realitate este capacitatea substratului unui tranzistor MOS) situat la intersectia  fiecarei linii cu coloana ce defineste matricea de memorie, incarcarea acestuia dureaza destul de mult (milisecunde) motiv pentru care memoria eeprom este mult mai lenta decat memoria RAM. Memoria program este de tip flash, functionarea acesteia este foarte asemanatoare cu cea a memoriei EEprom, diferenta consta in valoare capacitatii de memorare care este ceva mai mica decat in cazul memoriei EEprom.
O memorie flash poate fi inscrisa-stearsa de mai bine de 10.000 de ori in timp ce o memorie eeprom ajunge la un ciclu de scriere de 50.000 de ori. Datele sunt doar orientative, ultimele microcontrolere PIC au acesti parametrii mult imbunatatiti. Intuitiv observam ca memoria program (de tip flash) nu este destinata memorarii datelor (care se pot schimba rapid) ci doar memorarii programului propriuzis a carui continut ramane neschimbat pe parcursul operarii. Cu toate acestea exista PIC-uri (PIC16F87x) a caror memorie program poate fi modificata in timpul rularii programului ! Dezavantajul esential al PIC16F628 este lipsa unui convertor Analogic-Digital simplu si cu rezolutie buna. Cu toate acestea, existenta celor patru comparatoare interne reconfigurabile si a referintei de tensiune programabile permite unui utilizator avizat sa-si construiasca propriul convertor AD cu aproximatii succesive prin metode software. Daca acest lucru devine neplacut (trebuie invatata teoria functionarii arhitecturii Succesive Approximation Register) putem sa migram cu usurinta spre un microcontroler care are convertorul AD incorporat, ca de exemplu PIC16F87x daca suntem avansati sau PIC12F675 daca suntem incepatori.  Convertorul analogic-digital este necesar din simplul motiv ca microcontrolerul opereaza numai la nivel de bit sau octet, acesti termeni definind marimi digitale in timp ce semnalul analogic trebuie "discretizat" adica transformat dintr-o marime cu variatie continua ( amplitudine si frecventa ) intr-o marime reprezentata binar pe unul sau mai multi octeti. Exista mai multe tipuri de convertoare AD: tensiune-frecventa, tensiune-timp, simpla panta, dubla panta, multipla panta, cu esantionare-memorare, cu aproximatii succesive etc. Daca doriti sa aprofundati cateva din aceste tipuri, prin exemple de interfatare la microcontroler, va va sta in curand la dispozitie cartea "Microcontrolere pentru toti" avand autor pe subsemnatul.

Microcontrolerul PIC12F675 este un "pici" extrem de atractiv, are doar 8 pini in capsula minidip din care 6 pot fi utilizati ca pini de uz general (intrari - iesiri digitale sau intrari analogice) lucreaza la aceeasi frecventa maxima de 20MHz, are acelasi set de 36 de instructiuni ca toate celelalte microcontrolere PIC midrange, este flash iar resursele interne contin:

Se observa ca acest microcontroler se potriveste in aplicatiile reduse (timere, comunicatii, masurare de semnale analogice, noduri analogice in RS485 etc) dar cu smecherii (expandarea iesirilor digitale cu registrii cu incarcare seriala si iesire paralela sau multiplexarea intrarilor analogice) se poate utiliza la fel de bine in aplicatii complexe.
    Un microcontroler mult mai performant este PIC16F87x. Este disponibil in mai multe variante: PIC16F873/874 respectiv PIC16F876/877, diferentele dintre acestea fiind doar capacitatea de memorie (4kocteti sau 8kocteti) respectiv numarul de pini al capsulei (28 sau 44).
Exista doua familii PIC17F87x si PIC16F87xA, cea de-a doua avand suplimentar modulul comparator si referinta de tensiune existente si in PIC16F628 cat si un algoritm de programare rapid care nu este compatibil cu familia PIC16F87x.