Aeronautica | Comunicatii | Constructii | Electronica | Navigatie | Pompieri | |
Tehnica mecanica |
Microcontrolere contra Microprocesoare
1.1 Unitatea de memorie
Memoria este o parte a
microcontrolerului a carei functie este de a inmagazina date.
Cel mai usor mod de a explica este de a-l descrie ca un dulap mare cu
multe sertare. Daca presupunem ca am marcat sertarele intr-un
asemenea fel incat sa nu fie confundate, oricare din continutul lor
va fi atunci usor accesibil. Este suficient sa se stie desemnarea
sertarului si astfel continutul lui ne va fi cunoscut in mod sigur.
Componentele de memorie sunt exact asa. Pentru o anumita intrare obtinem continutul unei anumite locatii de memorie adresate si aceasta este totul. Doua noi concepte ne sunt aduse: adresarea si locatia de memorie. Memoria consta din toate locatiile de memorie, si adresarea nu este altceva decat selectarea uneia din ele. Aceasta inseamna ca noi trebuie sa selectam locatia de memorie la un capat, si la celalalt capat trebuie sa asteptam continutul acelei locatii. In afara de citirea dintr-o locatie de memorie, memoria trebuie de asemenea sa permita scrierea in ea. Aceasta se face prin asigurarea unei linii aditionale numita linie de control. Vom desemna aceasta linie ca R/W (citeste scrie). Linia de control este folosita in urmatorul fel: daca r/w=1, se face citirea, si daca opusul este adevarat atunci se face scrierea in locatia de memorie. Memoria este primul element, dar avem nevoie si de altele pentru ca microcontrolerul nostru sa functioneze.
1.2 Unitatea de procesare centrala
Sa adaugam alte 3 locatii de memorie pentru un bloc specific ce va avea o capabilitate incorporata de inmultire, impartire, scadere si sa-i mutam continutul dintr-o locatie de memorie in alta. Partea pe care tocmai am adaugat-o este numita 'unitatea de procesare centrala' (CPU). Locatiile ei de memorie sunt numite registri.
Registrii sunt deci locatii de memorie al caror rol este de a ajuta prin executarea a variate operatii matematice sau a altor operatii cu date oriunde se vor fi gasit datele. Sa privim la situatia curenta. Avem doua entitati independente (memoria si CPU) ce sunt interconectate, si astfel orice schimb de informatii este ascuns, ca si functionalitatea sa. Daca, de exemplu, dorim sa adaugam continutul a doua locatii de memorie si intoarcem rezultatul inapoi in memorie, vom avea nevoie de o conexiune intre memorie si CPU. Mai simplu formulat, trebuie sa avem o anumita 'cale' prin care datele circula de la un bloc la altul.
1.3 Bus-ul
Calea este numita 'bus'- magistrala. Fizic, el reprezinta un grup de 8, 16, sau mai multe fire. Sunt doua tipuri de bus-uri: bus de adresa si bus de date. Primul consta din atatea linii cat este cantitatea de memorie ce dorim sa o adresam, iar celalalt este atat de lat cat sunt datele, in cazul nostru 8 biti sau linia de conectare. Primul serveste la transmiterea adreselor de la CPU la memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.
In ceea ce priveste functionalitatea, situatia s-a imbunatatit, dar o noua problema a aparut de asemenea: avem o unitate ce este capabila sa lucreze singura, dar ce nu are nici un contact cu lumea de afara, sau cu noi! Pentru a inlatura aceasta deficienta, sa adaugam un bloc ce contine cateva locatii de memorie al caror singur capat este conectat la bus-ul de date, iar celalalt are conexiune cu liniile de iesire la microcontroler ce pot fi vazute cu ochiul liber ca pini la componenta electronica.
1.4 Unitatea intrare-iesire
Aceste locatii ce tocmai le-am adaugat sunt numite 'porturi'. Sunt diferite tipuri de porturi: intrare, iesire sau porturi pe doua-cai. Cand se lucreaza cu porturi, mai intai de toate este necesar sa se aleaga cu ce port urmeaza sa se lucreze, si apoi sa se trimita date la, sau sa se ia date de la port.
Cand se lucreaza cu el portul se comporta ca o locatie de memorie. Ceva este pur si simplu scris in sau citit din el, si este posibil de a remarca usor aceasta la pinii microcontrolerului.
1.5 Comunicatia seriala
Cu aceasta am adaugat la unitatea deja existenta posibilitatea comunicarii cu lumea de afara. Totusi, acest mod de comunicare are neajunsurile lui. Unul din neajunsurile de baza este numarul de linii ce trebuie sa fie folosite pentru a transfera datele. Ce s-ar intampla daca acestea ar trebui transferate la distanta de cativa kilometri? Numarul de linii inmultit cu numarul de kilometri nu promite costuri eficiente pentru proiect. Nu ne ramane decat sa reducem numarul de linii intr-un asa fel incat sa nu scadem functionalitatea. Sa presupunem ca lucram doar cu 3 linii, si ca o linie este folosita pentru trimiterea de date, alta pentru receptie si a treia este folosita ca o linie de referinta atat pentru partea de intrare cat si pentru partea de iesire. Pentru ca aceasta sa functioneze, trebuie sa stabilim regulile de schimb ale datelor. Aceste reguli sunt numite protocol. Protocolul este de aceea definit in avans ca sa nu fie nici o neintelegere intre partile ce comunica una cu alta. De exemplu, daca un om vorbeste in franceza, si altul vorbeste in engleza, este putin probabil ca ei se vor intelege repede si eficient unul cu altul. Sa presupunem ca avem urmatorul protocol. Unitatea logica '1' este setata pe linia de transmisie pana ce incepe transferul. Odata ce incepe transferul, coboram linia de transmisie la '0' logic pentru o perioada de timp (pe care o vom desemna ca T), asa ca partea receptoare va sti ca sunt date de primit, asa ca va activa mecanismul ei de receptie. Sa ne intoarcem acum la partea de transmisie si sa incepem sa punem zero-uri si unu-uri pe linia de transmisie in ordinea de la un bit a celei mai de jos valori la un bit a celei mai de sus valori. Sa lasam ca fiecare bit sa ramana pe linie pentru o perioada de timp egala cu T, si la sfarsit, sau dupa al 8-lea bit, sa aducem unitatea logica '1' inapoi pe linie ce va marca sfarsitul transmisiei unei date. Protocolul ce tocmai l-am descris este numit in literatura profesionala NRZ (Non-Return to Zero).
Unitatea seriala folosita pentru a trimite date, dar numai prin trei linii
Pentru ca avem linii separate de receptie si de transmitere, este posibil sa receptionam si sa transmitem date (informatii) in acelasi timp. Blocul asa numit full-duplex mode ce permite acest mod de comunicare este numit blocul de comunicare seriala. Spre deosebire de transmisia paralela, datele sunt mutate aici bit cu bit, sau intr-o serie de biti, de unde vine si numele de comunicatie seriala. Dupa receptia de date trebuie sa le citim din locatia de transmisie si sa le inmagazinam in memorie in mod opus transmiterii unde procesul este invers. Datele circula din memorie prin bus catre locatia de trimitere, si de acolo catre unitatea de receptie conform protocolului.
1.6 Unitatea timer
Acum ca avem comunicatia seriala, putem receptiona, trimite si procesa date.
Totusi, pentru noi ca sa putem sa il folosim in industrie mai avem nevoie de cateva blocuri. Unul din acestea este blocul timer care este important pentru noi pentru ca ne da informatia de timp, durata, protocol etc. Unitatea de baza a timer-ului este un contor liber (free-run) care este de fapt un registru a carui valoare numerica creste cu unu la intervale egale, asa incat luandu-i valoarea dupa intervalele T1 si T2 si pe baza diferentei lor sa putem determina cat timp a trecut. Acesta este o parte foarte importanta a microcontrolerului al carui control cere cea mai mare parte a timpului nostru.
1.7 Watchdog-ul
Inca un lucru ce necesita atentia noastra este functionarea fara defecte a microcontrolerului in timpul functionarii. Sa presupunem ca urmare a unei anumite interferente (ce adesea se intampla in industrie) microcontrolerul nostru se opreste din executarea programului, sau si mai rau, incepe sa functioneze incorect.
Bineinteles, cand aceasta se intampla cu un calculator, il resetam pur si simplu si va continua sa lucreze. Totusi, nu exista buton de resetare pe care sa-l apasam in cazul microcontrolerului care sa rezolve astfel problema noastra. Pentru a depasi acest obstacol, avem nevoie de a introduce inca un bloc numit watchdog-cainele de paza. Acest bloc este de fapt un alt contor liber (free-run) unde programul nostru trebuie sa scrie un zero ori de cate ori se executa corect. In caz ca programul se 'intepeneste', nu se va mai scrie zero, iar contorul se va reseta singur la atingerea valorii sale maxime. Aceasta va duce la rularea programului din nou, si corect de aceasta data pe toata durata. Acesta este un element important al fiecarui program ce trebuie sa fie fiabil fara supravegherea omului.
1.8 Convertorul Analog-Digital
Pentru ca semnalele de la periferice sunt substantial diferite de cele pe care le poate intelege microcontrolerul (zero si unu), ele trebuie convertite intr-un mod care sa fie inteles de microcontroler. Aceasta sarcina este indeplinita de un bloc pentru conversia analog-digitala sau de un convertor AD. Acest bloc este responsabil pentru convertirea unei informatii despre o anumita valoare analogica intr-un numar binar si pentru a o urmari pe tot parcursul la un bloc CPU asa ca blocul CPU sa o poata procesa.
Astfel microcontrolerul este acum terminat, si tot ce mai ramane de facut este de a-l pune intr-o componenta electronica unde va accesa blocurile interioare prin pinii exteriori. Imaginea de mai jos arata cum arata un microcontroler in interior.
Configuratia fizica a interiorului unui microcontroler
Liniile subtiri ce merg din interior catre partile laterale ale microcontrolerului reprezinta fire conectand blocurile interioare cu pinii capsulei microcontrolerului. Schema urmatoare reprezinta sectiunea centrala a microcontrolerului.
Pentru o aplicatie reala, un microcontroler singur nu este de ajuns. In afara de microcontroler, avem nevoie de un program pe care sa-l execute, si alte cateva elemente ce constituie o interfata logica catre elementele de stabilizare (ce se va discuta in capitolele urmatoare).
1.9 Programul
Scrierea programului este un domeniu special de lucru al microcontolerului si este denumit 'programare'. Sa incercam sa scriem un mic program ce il vom crea singuri si pe care oricine va fi in stare sa-l inteleaga.
START
REGISTER1=MEMORY LOCATION_A
REGISTER2=MEMORY LOCATION_B
PORTA=REGISTER1 + REGISTER2
END
Programul aduna
continutul a doua locatii de memorie, si vede suma lor la
portul A. Prima linie a programului este pentru mutarea continutul
locatiei de memorie 'A' intr-unul din registri
unitatii de procesare centrale. Pentru ca avem nevoie si de
celelalte date de asemenea, le vom muta de asemenea in celalalt registru
al unitatii de procesare centrale. Urmatoarea instructiune
instruieste unitatea de procesare centrala sa adune
continutul celor doi registri sa trimita rezultatul
obtinut la portul A, incat suma acestei adunari sa fie
vizibila pentru toata lumea de afara. Pentru o problema mai
complexa, programul care sa lucreze la rezolvarea ei va fi mai mare.
Programarea poate fi facuta in cateva limbaje ca Assembler, C si
Basic care sunt cele mai folosite limbaje. Assembler apartine limbajelor
de nivel scazut ce sunt programate lent, dar folosesc cel mai mic
spatiu in memorie si da cele mai bune rezultate cand se are in
vedere viteza de executie a programului. Pentru ca este cel mai
folosit limbaj in programarea microcontrolerelor va fi discutat intr-un capitol
ulterior. Programele in limbajul C sunt mai usor de scris, mai usor
de inteles, dar sunt mai lente in executare decat programele in Assembler.
Basic este cel mai usor de invatat, si instructiunile
sale sunt cele mai aproape de modul de gandire a omului, dar ca si
limbajul de programare C este de asemenea mai lent decat Assembler-ul. In orice
caz, inainte de a va hotari in privinta unuia din aceste limbaje
trebuie sa studiati cu atentie cerintele privind viteza de
executie, marimea memoriei si timpul disponibil pentru
asamblarea sa.
Dupa ce este scris programul, trebuie sa instalam microcontrolerul intr-un aparat si sa-l lasam sa lucreze. Pentru a face aceasta trebuie sa adaugam cateva componente externe necesare pentru functionarea sa. Mai intai trebuie sa dam viata microcontrolerului prin conectarea sa la o sursa (tensiune necesara pentru operarea tuturor instrumentelor electronice) si oscilatorului al carui rol este similar inimii din corpul uman. Bazat pe ceasul sau microcontrolerul executa instructiunile programului. Indata ce este alimentat microcontrolerul va executa un scurt control asupra sa, se va uita la inceputul programului si va incepe sa-l execute. Cum va lucra aparatul depinde de multi parametri, cel mai important fiind priceperea dezvoltatorului de hardware, si de experienta programatorului in obtinerea maximului din aparat cu programul sau.
Copyright © 2024 - Toate drepturile rezervate