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:
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.