You are on page 1of 67

Arhitecturi de sisteme incorporate

Microcontrolere si sisteme integrate

Microcontrolere:
• Introducere, o prezentare generală subiectului
• Aplicații, caracteristici
• Familii representative de microcontrolere
• Limbaje de programare (din trecut si prezent..)
• Testarea si depanarea aplicațiilor
• Criterii de alegere a unui microcontroler
1
Controler?
• Controler ("controller" - un termen de origine anglo-saxonă, cu un
domeniu de cuprindere foarte larg) este, in ziua de azi, o structură
electronică numerică destinată controlului (destul de evident!)
unui proces sau, mai general, unei interacțiuni caracteristice cu
mediul exterior, fără să fie necesară intervenția operatorului
uman.
– Nu in ultimul rând astăzi un controler este aproape sinonim cu un sistem
incorporat si deci cu o aplicație a microcontrolerelor
• Microcontrolerele si microprocesoarele au permis realizarea
celor mai performante controlere, in tehnologie numerică, care stau
la baza civilizației tehnologice actuale
• Trebuie menționat că actualmente diferențele hardware intre
microprocesoare, microcontrolere si procesoarele numerice
de semnal devin din ce in ce mai vagi, astfel că putem vorbi (si
vom vorbi) mai mult sau mai puțin generic despre aceste categorii,
care nu mai sunt atât de specializate cum erau pe vremuri.
• Mai trebuie spus si că in afară de soluțiile COTS de care am amintit
anterior, există si alte soluții cvasi standardizate ca hardware si
software pentru a realiza un controler (de care nu ne ocupam aici),
cum ar controlerele logice programabile – PLC Programmable
Logic Controller
2
De ce am utiliza un microcontroler?
• Utilizarea unui microcontroler constituie o soluție prin care se pot reduce
dramatic:
– numărul componentelor electronice
– costurile de proiectare şi dezvoltare ale unui produs de natura unui sistem incorporat.

• Un efect secundar benefic este si creșterea fiabilității aplicației/sistemului


prin:
– reducerea numărului de componente si interconexiuni externe (conectori, cablaje, etc.)
– reducerea puterii consumate si aferent a disipației termice

• OBSERVAŢIE IMPORTANTA
Utilizarea unui microcontroler, oricât de evoluat, in industrie, NU elimină si NU va
elimina prea curând unele componente ale interfeței cu mediul exterior,
componente care nu pot fi integrate la costuri decente (atunci când ele sunt
chiar necesare):
- anumite subsisteme de prelucrare analogică de precizie (amplificare, redresare,
filtrare, protecție-limitare)
- elemente pentru realizarea izolării galvanice (optocuploare, transformatoare),
- elemente de comutație de putere (tranzistoare de putere, relee electromecanice
sau statice)
- anumite componente de radiofrecvență

3
Unde sunt utilizate microcontrolerele?

Zeci si zeci de microcontrolere interconectate!


4
Aplicatii critice!
Unde sunt utilizate microcontrolerele?

Cel puțin un microcontroler per entitate “domestica”! 5


Unde sunt utilizate microcontrolerele?

6
Zeci de microcontrolere! Aplicatii critice!
Unde sunt utilizate microcontrolerele?

Multe microcontrolere! Aplicatii critice!

7
Clasificări și variante constructive de
microcontrolere
• Există la ora actuală un număr extrem de mare de tipuri constructive de
microcontrolere.
• Un criteriu de clasificare este lungimea (dimensiunea) cuvântului de date.
• Funcție de puterea de calcul dorită şi de alte caracteristici se pot alege
variante având dimensiunea cuvântului de date de 4, 8,16 32 sau 64 de
biţi!
– Nu este obligatoriu ca dimensiunea cuvântului de date să fie egală cu dimensiunea unui
cuvânt mașină (cuvânt program).
• Mai există şi variante zise dedicate, neprogramabile de utilizator la nivel
de cod maşină, strict specializate pe o anumită aplicație, prin intermediul
codului preprogramat şi al resurselor hardware, utilizate pentru comunicații,
controlul tastaturilor, controlul aparaturii audio/video, prelucrarea numerică a
semnalului, etc.

8
Tehnologiile de fabricație utilizate:
procese tehnologice CMOS
• Practic, toate microcontrolerele se realizează la ora actuală în tehnologie CMOS (tehnologii
moderne, similare celor utilizate la seriile standard CMOS de circuite numerice: HC, AC, ALV, etc.).
• Se pot realiza astfel structuri cu o densitate mare de integrare, cu un consum redus (care va
depinde totuși de frecvența de lucru), permițând eventual alimentarea de la surse independente
(baterie).
– Logica internă este statică (total sau în cea mai mare parte) permițând astfel, în anumite condiții, micșorarea
frecvenței de ceas sau chiar oprirea ceasului în ideea optimizării consumului.
• Tehnologiile curente sunt caracterizate şi de o imunitate mai mare la perturbații, sensibilitate
mai mică la fenomenul de zăvorâre (latch-up) esențială într-un mare număr de aplicații specifice.
• Se realizează si variante cu tensiunea de alimentare nominală (sau extinsă) in plaja 0.9V … 6V
• Pe lângă variantele uzuale cu domeniu zis comercial al temperaturii de lucru de la 0 ..+70 oC, se
realizează variante pentru domenii specifice de utilizare, zise domeniu extins (extended range)
al temperaturii de funcționare, de exemplu: industrial - 40 ..+85 oC, automotive -40 ..+125 o C
• Există si microcontrolere din familii cunoscute care sunt special construite (cu procese CMOS
SOS sau SOI) si certificate pentru a funcționa corect in medii cu radiație ionizanta: atmosfera
superioară, spațiul cosmic, industria nucleară – circuite zise radHard (radiation hardened) –
rezistente la radiațiile ionizante (game, X, neutroni, alfa)

9
Tehnologiile de fabricație utilizate:
încapsularea (packaging)
• Există foarte multe variante de încapsulare (capsule –packages- de
plastic şi mai rar de ceramică), multe din ele destinate montării pe
suprafață (SMT/SMD): SOIC, PLCC, PQFP, TQFP, BGA (x100 ..x1000
pini), etc., dar şi variante clasice cu pini, tip DIP/DIL (tipic de la 6 la 68
pini).
– Capsulele clasice DIP/DIL destinate montării pin-through sunt din ce in ce mai puțin
disponibile pe piață!

10
Aspecte legate de implementarea
memoriei microcontrolerelor
• În afară de o memorie locală de date de tip eSRAM, de dimensiuni relativ
reduse (de la x10 octeţi la x1k), implementată ca atare sau existentă sub
forma unui set de registre şi destinată memorării datelor (variabilelor), mai
există o serie de aspecte specifice, marea majoritate a acestora fiind legată de
implementarea fizică a memoriei de program (şi eventual a unei părţi a
memoriei de date) cu ajutorul unor memorii nevolatile.
• In mod clasic, memoria de program era implementată într-o variantă de tip
ROM: EPROM pentru dezvoltare şi producție pe scară mică/medie sau mask-
ROM pentru producția de masă.
• Principalele concepte noi apărute de-a lungul timpului în legătură cu
implementarea memoriei de program si/sau date sunt legate in primul rând
dezvoltarea tehnologiilor NOR FLASH si EEPROM si sunt prezentate în
continuare

11
Implementarea memoriei –
memoria de program
• OTP – mai există încă producători care oferă variante de
microcontrolere la care memoria locală de program este de tip OTP
(One Time Programmable), practic o memorie PROM identică intern cu
una EPROM, dar fără fereastra de cuarț pentru ștergere (deci şi mai
ieftine); memoria se poate programa o singura data ca o memorie
EPROM, dar nu mai poate fi ștearsă/reprogramata ne mai putând fi
expusa la radiație UV
– aceste variante au fost utilizate ca o alternativă pentru o producție limitată,
până în momentul testării și validării finale a codului, moment în care pot fi
comandate variantele (mask) ROM propriu-zise, cele mai economice
pentru o producție de masă
– conceptul OTP este utilizat, mai recent, si pentru a asigura
securizarea aplicației
• (NOR) FLASH EPROM – este practic soluția care a înlocuit EPROM-
ul propriu-zis care poate asigura azi un volum foarte mare de memorie
de program (nevolatilă) interna;
– Mai rapidă şi cu un număr garantat suficient de mare ( cca. 10000) de
cicluri de programare (de ștergere/scriere), este caracterizată şi prin
modalități mai flexibile de (auto)programare ;
– La ora actuală NOR FLASH este soluția standard pentru
implementarea memoriei de program.
12
Implementarea memoriei –
memoria de program
• EEPROM - multe microcontrolere au și o memorie de acest tip,
de dimensiune limitată (de la x10 octeți la x K octeți), destinată
memorării unui număr limitat de parametrii (ca memorie de
date constante/nevolatile) care eventual trebuie modificați din
timp în timp;
– Este o memorie mai scumpă, relativ lentă (la scriere), dar cu un număr
de cicluri de ștergere/scriere mai mare ca FLASH-ul (de la 100 000 la
1000 000).
– Actualmente este soluția standard pentru implementarea unei memorii
nevolatile de date
• FRAM (RAM feroelectric)- există la ora actuală putine familii
care utilizează acest tip de memorie nevolatila, relativ scumpă,
dar cu un număr practic nelimitat de cicluri de scriere
• NOVRAM (RAM nevolatil) - realizat prin alimentarea locală
(baterie sau acumulator cu Li) a unui masiv RAM CMOS atunci
când este necesar un volum mare de memorie de program și
date nevolatilă;
– Mult mai scumpă, dar mult mai rapidă decât toate celelalte tipuri și fără
limitări ca număr de cicluri.
13
Implementarea memoriei de program
- ISP
• Programarea "In Sistem" (ISP- In System Programming)
– folosirea unor memorii nevolatile de tip FLASH face posibilă şi
"programarea" unui astfel de microcontroler fără a-l scoate din sistemul în
care este încorporat (programare on-line, In System Programming);
– programarea ISP se face de regulă prin intermediul unei interfețe seriale
dedicate de tip ISP (poate avea nume diferite functie de fabricant) sau a unei
interfețe standard JTAG.
– Există microcontrolere la care această programare ISP se poate face prin
intermediul portului serial asincron sau al unei interfețe seriale CAN
(Controller Area Network) dar cu ajutorul unui program bootloader (vezi
paragraful următor).
– Este posibilă astfel modificarea/actualizarea cu relativă cu ușurință a codului
programului sau a unor constante de lucru (local sau de la distanță - remote
update).
• Un lucru foarte important este că la anumite familii interfaţa prin intermediul
căreia se face o programare ISP poate fi utilizată şi la testarea şi
depanarea aplicației (soft), permiţând realizarea simplă, cu un preţ de cost
minim, a unor mijloace de testare şi depanare(emulatoare).
– De exemplu, în acest caz interfața JTAG este specificată ca fiind JTAG/ICE (In Circuit
Emulation) pentru a arăta că poate fi folosită şi pentru emularea în circuit.

14
Programarea in sistem ( In – Circuit)
Utilizată pentru memoria internă de tip FLASH a
microcontrolerelor
- circuitul rămâne conectat in sistem, programarea se face printr-o
modalitate/conexiune serială, cu ajutorul unui număr minim de interconexiuni/fire
Programatorul (aici el este de fapt este un emulator ICE-JTAG)
in-circuit (conectat la PC-ul gazdă)
Cablu/conector
Circuitul de programat programare

15
Programarea in afara sistemului (Off-System), cu utilizarea
programatoarelor (universale) pentru programarea memoriei
microcontrolerelor: EPROM (si OTP), NOR FLASH, EEPROM
- tipic doar pentru circuite cu capsula DIL
- interfața cu sistemul gazdă -Host (tipic un PC): de tip USB
- utilizează un soclu ZIF (Zero Insertion Force) de 40 de pini
- pentru alte tipuri de capsule (SMT, SMD) se utilizează
adaptoare DIL -> …. (f. scumpe in general!)

Programarea este făcută prin intermediul unei interfețe


paralele (programare zis uneori High -Voltage)

Pentru microcontrolere reprezintă deja o metodă învechită, 16


care este (va fi) total înlocuită de programarea ISP!
Implementarea memoriei -bootloader
• Programul de încărcare rezident:
Bootloader
– Multe din microcontrolerele recente la care
memoria de program este de tip NOR FLASH
au şi facilitatea (au de fapt au instrucțiuni
dedicate acestui scop) de a putea şi scrie în
această memorie de program fără a utiliza
un circuit de programare extern.
– Aceasta se întâmpla însă in secțiuni/ blocuri
diferite (cu proprietăți diferite) ale acestei
memorii, secțiuni denumite de bootloader (o
secțiune de mici dimensiuni) si de aplicații
(restul memoriei)!
– Codul care se execută in secțiunea de
bootloader va scrie in secțiunea de aplicații!
– Altcumva nu se poate scrie in aceiași secțiune
(bloc) de memorie din care se citește si se
execută cod!
– Astfel în microcontroler poate exista permanent
(rezident) un program/cod de mici dimensiuni
(denumit şi bootloader), la reset, poate încărca
prin intermediul portului serial standard (de
exemplu) codul utilizator si/sau constantele pe
care acesta vrea eventual să le actualizeze.
– Bootloader-ul este şi cel care lansează în
execuție programul utilizator după
încărcarea/programarea acestuia.
17
Implementarea memoriei – considerente
legate de securitatea aplicației
• Protejarea codului program (care este o formă a proprietății intelectuale
– IP!)
• Protejarea codului program dintr-o memorie locală nevolatilă
împotriva accesului neautorizat este oferită ca o opțiune (ea mai
trebuie şi folosită!) la toate variantele de memorii interne de tip FLASH,
EPROM sau OTP.
– Codul poate protejat atât la citire cât şi la scriere (practic circuitul va trebui
şters, înainte de a se mai putea scrie ceva în el).
– Este eliminată astfel si posibilitatea de a se realiza, în acest caz, de patch-uri
(alterări cu un anumit scop) ale codului original.
– La variantele mask-ROM propriu-zis protecția este de cele mai multe ori
implicită (nu mai exista mecanism de acces extern la secțiunile respective de
memorie); din păcate exista căi (dificile) pentru a accesa intr-un fel sau altul si
o astfel de memorie!
• Integritatea codului program – este tipic verificată cu ajutorul unei sume
de control (checksum) calculată pentru întreg codul si programată într-o
locație prestabilită; verificarea se face prin recalcularea sumei cu același
algoritm (de exemplu CRC 16 sau CRC32) si compararea cu valoarea
programată, odată cu programarea codului in memoria de program si
eventual înainte de lansarea in execuție
• Aceasta modalitate simplă de verificare a integrității nu garantează însă si18
autenticitatea codului care trebuie programat!
Implementarea memoriei de
program si date – memoria externa
• Utilizarea de memorie externă de program sau date
– Marea majoritate a familiilor de microcontrolere permit principial si
utilizarea de memorie externă de program (tipic ROM) sau date (tipic
RAM).
– Fizic aceasta presupune existenta si utilizarea unor magistrale
externe de adrese, date si control.
– Conexiunile externe necesare pentru aceste magistrale sunt
disponibile ca funcţii alternative ale pinilor de intrare/iesire.
– Din păcate, dacă utilizăm magistrale externe, numărul de conexiuni
exterioare disponibile pentru interfața cu exteriorul se reduce
dramatic, reducând mult din versatilitatea si utilitatea
microcontrolerului.
– La variantele constructive cu un număr mic de pini (de conexiuni
externe) nu este posibilă utilizarea de memorie externă, decât,
eventual, într-o variantă cu interfață serială (memorii SRAM,
FLASH sau EEPROM cu interfață I2C, SPI, etc.) si numai ca
memorie de date.
– Utilizarea de memorie externa pune si probleme legate de
securizarea aplicației!

19
Implementarea memoriei de program – alte
considerente legate de securitate
Cum știe microcontrolerul daca un cod care trebuie programat
in memoria lui de program (firmware-ul) este unul autentic si
nemodificat (de un tert neutorizat)?
– Este o întrebare autentica si importanta in contextul actual al
cibersecurității care a devenit din ce in ce mai important si in domeniul
sistemelor incorporate
– Vezi: https://en.wikipedia.org/wiki/Automotive_hacking,
https://en.wikipedia.org/wiki/Stuxnet
– Actualmente se folosește un sistem de chei criptografice publice si
private care permite autentificarea
– Dezvoltatorul are acces la o cheie privată cu ajutorul căreia “semnează”
codul criptat
– Microcontrolerul are acces la o cheie publică care este programată intr-
un circuit dedicat si care nu poate fi modificată (există mai mulți
producători de astfel de circuite, de exemplu Dallas sau Microchip,
circuite care sunt conectate la microcontroler printr-o interfață seriala
I2C sau SPI) si folosește aceasta cheie la decriptare
– Hash-ul criptografic (o funcție specifica folosita pentru autentificarea
informației) realizat de un circuit dedicat- un accelerator criptografic- cu
o încărcare suplimentară minimă pentru unitatea centrală a
microcontrolerului, este cel va detecta orice eventuală modificare a
codului ce se vrea programat, intenționată sau nu
Vezi prezentarea Securitate & IoT. 20
21
Controlul puterii consumate şi
alimentarea la tensiuni reduse
• Tensiunea de alimentare standard pentru microcontrolere a fost mult timp, din
considerente şi istorice (vezi circuitele TTL clasice/moderne), de Vcc = 5V (cu o
anumită toleranță).
• La fel ca si in cazul circuitelor integrate numerice standardizate si aici avem de
face cu o migrație către tensiuni de alimentare mai mici de 5V
– Circuite cu Vcc =5 V mai exista datorita unui (singur) avantaj al acestei tensiuni de
alimentare: o margine de zgomot mai mare si (potențial) o imunitate la zgomot mai mare
• La ora actuală se oferă, pentru majoritatea familiilor reprezentative de
microcontrolere, variante cu tensiune de alimentare redusă (LV- Low Voltage)
cu Vcc = 0.9 .. 1.2 ..1.8 .. 2.5 .. 3.3V, destinate eventual si unor aplicații unde
consumul este un parametru critic.
• Există variante care folosesc 2 tensiuni (si 2 borne) de alimentare: una redusă
pentru unitatea centrală si perifericele interne (un VCC core) si una mai mare,
tipic 5V pentru interfețele numerice cu exteriorul (un Vcc IO)
• Există si variante cu plajă mare a tensiunii de alimentare, de exemplu Vcc =
2..6V
• Pentru că avem totuși de a face cu circuite CMOS, funcționarea la limita
inferioară a tensiunii de alimentare implica însă o micșorare a frecvenței
maxime de ceas sistem.

22
Controlul puterii consumate şi
alimentarea la tensiuni reduse
• Majoritatea microcontrolerelor pot fi trecute sub control soft în stări speciale
cum ar fi: în aşteptare (STAND-BY), inactiv ("IDLE") sau oprit ("HALT",
"POWER DOWN"), denumirile acestor stări diferind şi funcție de fabricant.
• În aceste moduri starea CPU, conținutul RAM-ului intern, starea I/O-urilor
poate fi conservată în condițiile unei tensiuni de alimentare reduse (faţă de
cea nominală) şi deci al unui consum mult redus.
• Fiind vorba de circuite CMOS flexibilitatea acestui sistem este strâns legată
de facilitățile si programabilitatea sistemului de generare a ceasului de
lucru (sistem si periferice)
• Se mai oferă uneori ca facilitate o protecție la scăderea accidentală (în
anumite limite) a tensiunii de alimentare ("brownout protection").
– La scăderea tensiunii de alimentare sub o anumită limită ("brownout voltage")
microcontrolerul este inițializat (resetat) şi ținut în această stare atâta timp cât
condiția respectivă persistă.

23
Sistemul de generare a ceasului
• Orice microcontroler este caracterizat cel puțin de existenta circuitelor electronice
aferente oscilatorului care generează ceasul de sistem.
– Astfel este posibilă implementarea simplă a oscilatorului doar prin adăugarea, în exterior, a unui rezonator
extern (cuarț sau piezoceramic) pentru stabilizarea frecvenței si eventual a unor capacitori.
• Dacă stabilitatea si precizia frecvenței nu este o cerință importantă, la anumite
microcontrolere se poate utiliza doar un circuit RC extern sau există un circuit RC
intern, care determină frecvența de oscilație.
• Există microcontrolere la care configurația oscilatorului este programabilă prin
intermediul unor „fuzibile”-fuses FLASH (se programează similar memoriei de
program): rezonator extern şi tipul acestuia, varianta RC intern sau extern, gama de
frecvenţă, etc.
• La familiile evoluate/moderne de microcontrolere există si circuite de tip PLL (Phase
Locked Loop)-bucle cu calare de faza si/sau FLL (Frequency Locked Loop) – bucle
cu calare de frecvență care permit multiplicarea cu ușurință a frecvenței de bază (cea
a rezonatorului extern).
– Astfel plecând, de exemplu de la o frecvenţă de 32.768KHz se pot obține frecvenţe de lucru
până la ordinul MHz sau zecilor de MHz.
• La astfel de microcontrolere sistemul de ceas este programabil prin intermediul unor
registre speciale oferind un maxim de flexibilitate în sensul putinței de a controla
compromisul între puterea consumată şi viteza maximă de lucru.

24
Interfața externă (sistemul de intrări şi
ieșiri- porturi I/O)
• Toate microcontrolerele au cel puțin un număr oarecare de intrări - Inputs (I)
si/sau ieșiri numerice - Outputs (O)
• De la x1 la x10 (depind de încapsulare), sunt organizate sub forma unor
porturi I/O (I/O ports);
• Sunt bidirecționale (intrare sau ieșire) sau, mai rar, unidirecționale
• Pot fi multifuncționale (se oferă mai multe funcții alternative, exclusive
insa, pe același pin),
• Pot avea o capacitate sporită de a absorbi si/sau debita curent (de exemplu
pentru comanda directă a unui LED sau optocuplor, cu IOL max. = 20mA,
IOH max. = - 20mA)
• În afară de acest set de intrări/ieşiri de uz general, pentru interfața cu mediul
exterior se oferă o serie de alte facilități importante de intrare/ieșire

25
Sistemul de intrări şi ieşiri -
comunicatii seriale asincrone
Așa zisele porturi seriale, destinate vehicularii informației in forma seriala (bit cu bit) sunt tot
o forma de intrări-ieșiri numerice

Porturi seriale asincrone (denumiri generice) - nu folosesc un semnal de ceas explicit


• UART (Universal Asynchronous Receiver Transmitter) este un port serial bidirecțional
destinat implementării unui protocol asincron( fără utilizarea unui semnal de ceas explicit)
de comunicație seriala;
• USART (Universal Synchronous Asynchronous Receiver Transmitter) este un port similar,
dar care in plus permite implementarea şi a unui protocol sincron de comunicație seriala,
cu obținerea eventual a unor viteze mai mari de comunicație
• SCI (Serial Communications Interface) este un circuit de tip UART îmbunătățit, definit
inițial şi utilizat de firma NXP (ex Freescale, ex Motorola).
OBS. Pentru familiile moderne de microcontrolere, UART-ul poate implementa si o condiție
de Break (utilizând un caracter special de 13 timpi de bit), făcând astfel posibila utilizarea lui
pentru o magistrala LIN (larg utilizata in industria auto)

26
Sistemul de intrări şi ieşiri - comunicatii
seriale sincrone
• Porturi seriale sincrone dedicate - sunt destinate transferului serial de
date de mare viteză cu unele periferice specializate (sisteme de afișare,
convertoare analog-numerice, etc.) sau care permit conectarea într-o rețea
de comunicație
– Presupun existenta, împreuna cu datele de intrare si iesire, a unui semnal de ceas
explicit pentru sincronizarea acestora.
• Implică şi implementarea unor protocoale mai mult sau mai puțin complexe
de transfer al informației, fiind de fapt vorba de magistrale seriale.
• Există câteva implementări răspândite:
– SPI (Serial Peripheral Interface) este un port serial sincron definit de firma
Freescale (ex Motorola)
– I2C (Inter Integrated Circuits bus) este o interfață si o magistrală serială
sincrona bidirecțională (pe numai 2 fire), dezvoltată de NXP (ex Philips
Semiconductors), destinată aplicațiilor de 8 biţi; există şi multe circuite
"periferice" care sunt prevăzute cu o astfel de interfață; mai este cunoscută şi
sub denumirea TWI (Two Wire Interface) la Atmel/Microchip
– Microwire / Microwire Plus este o interfață serială bidirecțională sincronă
definită şi utilizată de firma National Semiconductors (ulterior cumpărată de
Texas instruments..); este oarecum similara SPI (a fost predecesoarea lui)
– I2S (Inter -IC Sound bus) o interfață serială sincronă cu 3 fire, dezvoltată tot de
NXP (ex Philips), optimizata pentru transmisia informației audio stereofonice in
formă digitală; in ciuda similitudinii numelui, este diferită de I2C

27
Sistemul de intrări şi ieșiri -comunicatii seriale
sincrone in industria automobilului
• CAN si LIN sunt standarde (care definesc o magistrală/ o interfata
electrica şi un protocol de acces) de comunicație serială sincronă
sau asincrona utilizate în industria de automobile, permițând
interconectarea într-o rețea a diverselor componente inteligente (senzori,
elemente de execuție, indicatoare, etc.) omniprezente într-un automobil
modern.
• CAN (Controller Area Network) este proprietate intelectuală a firmei
Bosch, e foarte utilizat în Europa şi Japonia, si este oarecum similar ca
funcționalitate lui SAE J1850 care este utilizat în America de Nord (SAE -
Society of Automotive Engineers),
– In ultimul timp magistrala CAN (CAN bus) a început să fie utilizată şi în alte domenii
decât industria de automobile (automatizări industriale, robotică, acționări electrice).
• LIN (Local Interconnect Network) reprezintă o implementare particulară a
unui protocol de comunicație asincron (care presupune disponibilitatea
caracterului Break – un caracter cu toți biții = 0, dar cu o lungime mai
mare decât a celorlalte caractere, 13 biti actualmente), utilizată în
industria de automobile ca o alternativă de mică viteză dar si cu un preț
de cost mai scăzut față de magistrala şi protocolul CAN..

28
CAN & LIN si nu numai..
MOST (Media Oriented Systems
Transport) - reţea bazată pe fibra
optică pentru vehicularea
informaţiei multimedia

Magistrala IDB-1394
este o variantă pentru
industria
automobilului a lui
IEEE 1394 - Firewire

Flex-Ray este o varianta de mare viteză de magistrală serială


mai rapidă (x10) si mai sigură decât CAN 29
Sistemul de intrări şi ieșiri -
conectivitate Ethernet
• Conectivitatea Ethernet/Web – implică existența unor resurse care
să permită integrarea cu ușurință într-o rețea de tip Ethernet, pentru
a face posibilă, în final, implementarea unui protocol TCP/IP (a unei
stive TCP/IP- TCP/IP stack).
• Resursele respective pot fi de natură software (stivă soft, un pachet
de biblioteci dedicate) care presupun o viteză de prelucrare (putere
de calcul) a CPU suficient de mare pentru a nu afecta vizibil
operarea propriu-zisă a controlerului, sau hardware (stivă
hardware).
– Conectivitatea WiFi este realizata cu ajutorul unor module/interfete
suplimentare
• Pe baza acestei stive se poate realiza o conectivitate tip HTTP, FTP,
STMP, POP3, etc.

30
Sistemul de intrări şi ieșiri - USB
• Conectivitate USB - magistrala serială USB (Universal Serial Bus) a fost
creată pentru conectarea cu uşurinţă a diverselor periferice la un calculator
PC (cu rolul de gazdă - host).
• Conexiunea permite si furnizarea tensiunii de alimentare.
• Varianta USB 1.1 permite atingerea unei rate de transfer maxime a datelor
de 12Mbytes/sec, varianta USB 2.0 a unei rate maxime teoretice de cca.
60MBytes/sec, iar varianta USB 3.0 625 60MBytes/sec;
• La ora actuală există pe piaţă multe firme care oferă o gamă largă de
microcontrolere cu conectivitate USB (majoritatea compatibile USB 1.1), cu
un preţ de cost minim pentru componentele hardware şi software:
Microchip, Intel, Cypress, ST, Infineon, s.a.
• Majoritatea sunt destinate realizării unor periferice USB si mai puține
realizării unui USB host.

31
Sistemul de intrări și ieșiri-
conectivitate wireless
• Conectivitate Wireless- se referă la existența unor
resurse hardware si/sau software care să permită
integrarea cu ușurință şi la un preț de cost avantajos
într-o rețea de tip wireless (comunicație radio, fără fir),
pentru a face posibilă, în final, implementarea unui
protocol wireless(a stivei aferente protocolului).
– Este astfel posibilă inserarea cu ușurință a microcontrolerului
ca un nod într-o rețea locală wireless de tip “personal” PAN
(Personal Area Network)
• Exemplele cele mai cunoscute de astfel de rețele,
protocoale şi stive sunt Bluetooth (IEEE 802.15.1),
Zigbee, MiWi sau Z-Wave
• Ultimele 3 tipuri menționate implementează standardul
IEEE 802.15.4

32
Sistemul de intrări și ieșiri – conversia analog-
numerică, intrări analogice
• Intrări analogice: Convertoarele analog - numerice (CAN, ADC –
Analog to Digital Converters)
– Permit interfața cu semnale analogice, continue
– Convertoarele utilizate fac parte de regulă dintr-un sistem de achiziție de
date, existând şi un multiplexor analogic cu mai multe canale de
intrare.
– Rezoluția (exprimata ca număr de biți) disponibilă este tipic de 8, 10 sau
12, 14 sau, mai rar, 16 biţi, uneori cu precizia (rezoluția adevărată) tipic
corespunzătoare unui număr mai mic de biți.
– In marea majoritate a cazurilor ele sunt realizate pentru mărime de
intrare unipolară (intrare asimetrică)
– Intrarea poate fi asimetrică si/sau diferențială (da)
– Sursa de referință utilizată este internă si/sau externă.
– Timpul minim de conversie este în plaja x usec la x10 msec.
– Există microcontrolere care utilizează tehnici de recalibrare (auto-zero,
corecție de câștig/amplificare, etc.) pentru mărirea şi/sau menținerea
preciziei.

33
Sistemul de intrări şi ieșiri –ieșiri analogice
• Ieșiri analogice: Convertoarele numeric - analogice (CNA, DAC-
Digital to Analog Converters)
– Permit generarea de către sistemul numeric de semnale analogice, cu alte
cuvinte realizarea unui sistem de ieșiri analogice, continue
– Mai puțin întâlnite ca periferice standard
– In cazul MCU cea mai răspândită tehnică de conversie numeric analogică
folosită este una bazată pe modulația în factor de umplere (PWM- Pulse Width
Modulation)
• La un microcontroler fără un sistem PWM dedicat, în acest scop se poate
utiliza, cu o flexibilitate mai scăzută, sistemul de temporizare/numărătoare
și orice ieșire numerică.
– La foarte multe microcontrolere există unul sau mai multe canale pe care se
poate genera un tren de impulsuri cu factor de umplere programabil (de la 0 la
100%).
– Factorul de umplere este controlat cu o rezoluție de la 8 biţi sau 16 biţi.
– Frecvența trenului de impulsuri este şi ea programabilă, în limite largi.
– Printr-o filtrare exterioară relativ simplă, de tip trece jos (FTJ, LPF- Low Pass
Filter), se poate obține o tensiune continua de ieșire proporțională cu factorul
de umplere.

34
Sistemul de intrări și ieșiri- ieșiri PWM
• Sisteme dedicate de modulare în durată a impulsurilor (PWM- Pulse
Width Modulation)
– In mod obișnuit o formă de undă PWM poate fi obținută de orice microcontroler
cu ajutorul sistemului de temporizare/numărare si al unei ieșiri numerice,
existând însă restricții asupra frecvenței maxime şi a vitezei de actualizare
datorită codului care trebuie executat în acest scop.
– Există însă microcontrolere cu sub sisteme dedicate generării automate a
formelor de undă PWM cu rezoluții de 8, 16 sau chiar 32 de biți și frecvențe de
ordinul sutelor de kHz.
– Acest sub sistem dedicat este uneori denumit generator de formă de undă
(„waveform generator”) datorită şi altor facilități pe care le are legate de sinteza
formelor de undă.
– Ieșirile PWM pot fi utilizate ca atare pentru comanda unor (micro) motoare de cc

35
Sistemul de intrări și ieșiri- intrări /
ieșiri de mare viteză
• Sisteme de intrări - ieşiri numerice de mare viteză
– Există microcontrolere care utilizează un subsistem (numit uneori
HSIO –High Speed Input Output) care permite eșantionarea
intrărilor si actualizarea ieșirilor numerice cu o viteză mult
mai mare comparativ cu viteza obținută dacă aceleași operații ar
fi fost efectuate prin program sau prin utilizarea întreruperilor.
– Este posibilă astfel obținerea pentru funcționalitatea de controler
a unui timp de reacție (de la modificarea intrării la
actualizarea ieșirii) foarte scurt (xusec .. x100nsec).
– Ele se bazează pe utilizarea unor memorii dedicate (de tip FIFO)
si/sau pe existența unui co-procesor specializat care tratează
aceste evenimente (numit uneori „event processor”, procesor de
evenimente).

36
Sistemul de intrări şi ieșiri- panouri LCD
• Interfața directa pentru sisteme de afișare tip LCD
(panou LCD - LCD panel)
– În ultimul timp în familiile de microcontrolere deja consacrate sau în
familiile noi au apărut variante care posedă un subsistem destinat
conectării directe, cu utilizarea unui număr minim de componente
exterioare, unui sistem de afişare (un panou) de tip LCD (cu cristale
lichide).
– Interfața respectivă generează toate semnalele si tensiunile
necesare pentru comanda panoului LCD.
– Panourile pot fi de tip alfanumeric si/sau grafic
– Complexitatea sa este descrisă prin numărul maxim de segmente
LCD care pot fi controlate, fiind limitată în primul rând de numărul
de conexiuni externe necesare (pentru un număr mare de
segmente oricum se folosesc tehnici de multiplexare).

37
Câteva familii reprezentative de microcontrolere
(most of the past..)
• 8051 (Intel MCS-51 şi mulţi alţii: Intel, NXP, Dallas-Maxim , Atmel, etc.)
– Arhitectura sa are spații de memorie separate pentru program şi date
– Deși există încă sub forma unor variante de 8 biti mult mai rapide (x10 ori) si eficiente, este o
familie de microcontrolere aflată totusi pe calea demodării/perimării!

• 80C196 (Intel MCS-96)


- A fost un microcontroler de 16 biţi făcând parte din generaţia treia de microcontrolere a firmei
Intel (destinată iniţial controlului injecţiei la un motor cu ardere internă)
- A existat si un 80C296, dar toate sunt demodate
• 68HC05 (NXP, fost Freescale, fost Motorola Semiconductor )
- Un microcontroler de 8 biți derivat din vechiul microprocesor 6800 şi care prezintă multe
asemănări cu un alt microprocesor răspândit, la timpul său, 6502 (utilizat la primul calculator
Apple II).
- A fost unul din cele mai răspândite microcontrolere (comparabil cu 8051), demodat.

• 68HC11, 68HC12, 68HC16 (NXP)


- 68HC11 a fost unul din cele mai puternice microcontrolere pe 8 biţi, foarte răspândit în ciuda
faptului că Motorola/Freescale a fost un timp singurul producător.
- A fost unul din primele microcontrolere cu program de încărcare rezident (bootstrap loader în
ROM-ul intern), demodat
• TMS370 (Texas Instruments)
- A fost microcontrolerul standard pe 8 biţi al firmei TI realizat în multe variante (de ordinul zecilor),
prezintă unele asemănări cu 8051
- Perimat, demodat (obsolete)

38
Familii reprezentative de microcontrolere
– NXP (fost Freescale, fost Motorola)
• 68HCS08
– Este singurul microcontroler de 8 biți al firmei, denumit generic 68HC08,
bazat pe o nouă unitate centrală de 8 biți numită CPU08, dezvoltată sub
forma seriei 68HCS08 destinată în mod special unor aplicații din industria
automobilului
• 68HC12, 68HC16
– Variantele care mai exista actualmente sunt de fapt microcontrolere de 16
biți:
– un "super 68HC11", numit 68HC12 si apoi HCS12 (9S12) bazat pe o nouă
unitate centrală numită CPU12, care reprezintă extensia la 16 biţi a
arhitecturii HC11; utilizat in aplicații critice
– un 68HC16, mai puțin răspândit, bazat pe o unitate centrală numită
CPU16
• 683xxx
– Microcontrolere mai vechi de 32 de biți construite în jurul unui CPU analog
vechiului microprocesor M68020, numit CPU32, denumite acum de NXP şi
"procesoare integrate“- integrated processors.
– Putere de calcul comparabilă sau mai mare ca a unui Intel 80386.

39
Familii reprezentative de microcontrolere
– NXP/IBM/Apple
• Exista o mare diversitate de microprocesoare si
microcontrolere bazate pe o unitate centrală denumită
PowerPC, un RISC de 32/64 de biți, cu arhitectura Von
Neumann, creată de fapt de o alianță Apple-IBM- Motorola
la începutul anilor ‘90.
– Din PowerPC deriva si arhitectura Power dezvoltata ulterior numai
de IBM
• MPC5XX, MPC5xxx (PowerPC e200, e300, e500, e5500
core), s.a
– Pe lângă o gamă foarte largă de periferice performante includ și o
unitate de prelucrare în virgulă mobilă.
– Foarte răspândite in industria aplicațiilor critice (automobile,
aeronautică, spațiu)
– Vezi si prezentarea arhitecturii de calcul PowerPC:
https://en.wikipedia.org/wiki/PowerPC

40
Familii reprezentative de microcontrolere
– Intel
• Intel realizează la ora actuala o familie de microcontrolere
de 32 biți bazata pe arhitectura de calcul x86, familie
numită Quark
• Quark este realizat pe baza unjei tehnologii SoC, de
32nm, si a fost lansat in 2013
• Setul de instrucțiuni si arhitectura de calcul a unității
centrale este similară microprocesoarelor Pentium –i586
(P54C)
• Oferă suport doar pentru sisteme de operare de tip
incorporat (embedded)
• Există mai multe modele/generații Quark : X1000, X1020,
D1000, C1000, etc. , cu o gamă largă de resurse periferice
si diverse configurații de memorie (Flash, eSRAM, SDRAM
extern)
– Arduino 101 este realizat cu un Intel Quark
– Vezi si prezentarea Intel Quark:
https://en.wikipedia.org/wiki/Intel_Quark

41
Familii reprezentative de microcontrolere -
Microchip
PIC (Microchip- www.microchip.com )
• Este o familie de microcontrolere care, după lansarea de la începutul anilor ‘90 , a
cunoscut o dezvoltare explozivă.
• Familii (serii) de 8 biți : PIC10, PIC12, PIC16 și PIC18.
• Familii (serii) de 16 biți : PIC24 si dsPIC30(33).
• Familia de 32 biți: PIC32 are unitate centrala bazata pe o arhitectura de calcul
MIPS32 (fără vreo legătură cu celelalte PIC-uri)
• Exista si variante funcție de aplicații: CAN, Ethernet, USB, LCD, Motor control,
eXtreme Low power
• In seriile respective există variante cu memorie de program de tip
EPROM/OTP(HV) sau FLASH(F).
– Au fost primele microcontrolere de 8 biţi cu arhitectură RISC: PIC16C5x avea un set de doar 33
instrucțiuni (la vremea respectiva microcontrolerul CISC Intel 8048 avea 90).
• Arhitectura este de tip Harvard şi, ca o particularitate, dimensiunea cuvântului
pentru program pentru seriile de 8 biți este variabila, funcție de varianta (de 10,
12, 14, 16 biţi, etc.)
• Nota Microchip si Atmel au fost practic singurele firme care au mai
investit in ultimii 10 ani (la nivel 2016) in dezvoltarea de microcontrolere
de 8 biti

42
Familii reprezentative de
microcontrolere
• AVR 8 biți ( fost Atmel , acum www. Microchip.com )
– Un concurent puternic al seriei PIC a fost familia numită AVR 8biti, a
firmei ATMEL, care oferă variante de microcontrolere oarecum
asemănătoare ca resurse cu familia PIC, la performanțe similare sau mai
bune.
– Sunt bazate pe o arhitectură diferită, dar unitatea centrală este tot de tip
Harvard si RISC, cu cuvântul de date de 8 biți si cu cuvântul de program
de 16 biţi.
– Au existat si mai există multe sub-familii si/sau variante dedicate unor
aplicații specifice: AT90 (matur si perimat-obsolete), AT Tiny, ATMega,
XMEGA (cea mai noua), AVR Automotive, AVR Lighting, AVR Battery
Management, CAN AVR, USB AVR, AVR Z-Link (aplicații Zigbee)

AVR32 (32biți) exista ca o serie de microprocesoare (AP7) si


Microcontrolere (UC3) bazate pe o unitate centrală originală RISC de 32 de
biți, care nu are nici o legătură cu AVR 8 biți; are multe din caracteristicile
unui procesor numeric de semnal, la o putere consumata foarte mică; din
păcate probabil se află pe calea perimării si dispariției..

Firma Atmel a fost cumpărată de Microchip in 2016, iar AVR 8 biți sau 32 biți
nu este chiar singurul motiv acestei achiziții..
43
Familii reprezentative de
microcontrolere - TI
• MSP430 (Texas Instruments)
– Este familie de microcontrolere de 16 biți cu arhitectura RISC, cu posibilitatea
controlului foarte bun al compromisului viteză de calcul/consum propriu, destinată
in principal unor aplicații portabile cu alimentare de la baterie (și nu numai)
– Are un spațiu de adresare de 64KBytes sau mai mare, diverse variante de realizare
a memoriei interne de program (OTP, FLASH), resurse diverse (printre care şi o
interfață pentru un sistem de afișare LCD).
– Este printre puținele microcontrolere (variantele MSP430F) care au memorie interna
de tip FRAM (RAM feroelectric)
Nota
Tot la Texas Instruments există si seria MSP432 care nu are de fapt nici o legătură cu
familia MSP430, fiind un microcontroler de 32 de biți cu o unitate centrală ARM Cortex-
M4F (cu unitate de prelucrare in virgulă mobilă si unitate de protecție a memoriei)

44
Familii reprezentative de
microcontrolere- Spansion, Renesas
Spansion Inc. (www.spansion.com, parte a grupului Cypress
Semiconductor); Spansion Inc. care a cumpărat portofoliul de
microcontrolere de la Fujitsu Semiconductor oferă familii deosebit
de puternice si diverse de microcontrolere pe 8 biţi (FMC-8), 16 biţi
(FMC-16) sau 32 de biţi (FR).
– În fiecare familie există zeci de variante.
– Multe dintre ele sunt orientate pe aplicațiile din industria de
automobile sau din electronica de consum (audio, video,
electrocasnice).
Renesas (www.renesas.com) – oferă de asemenea o gamă largă de
microcontrolere organizate în familii de 8, 16 şi 32 de biți.
– Produce familii de 32/64 de biți bazate pe unitatea centrala ARM:
familiile RA si RZ
– Exista si două mari familii proprietate a firmei: una de 32 de biți
CISC/RISC numită RX si una de 16 biți numită RL78
• Există un număr foarte mare de variante constructive în fiecare familie.

45
Familii reprezentative de microcontrolere
- ARM
• Este vorba de microcontrolere care au o unitate centrala cu o
arhitectura de calcul ARM
• ARM (Advanced RISC Machine, www.arm.com ) - este de fapt o unitate
centrală de 16/32 sau 64/32 de biţi care face parte din categoria
structurilor IP (“Intelectual Property”), sintetizabile.
• Extrem de răspândit, si nu numai in aplicații mobile!
• Consorțiul ARM a oferit licențe ale acestei micro arhitecturi (nucleu ARM)
pentru numeroși producători de circuite (Microchip, NXP, TI, OKI –
www.okisemi.com , ST, Renesas, s.a.).
• Pe baza acestor licențe se realizează și microcontrolere de mare
performanță.
• Arhitectura este suportata si de foarte multe sisteme de operare
• Cele mai cunoscute şi răspândite variante de nuclee sunt ARM7 şi
ARM9, cu implementările lor simplificate numite ARM7T, ARM9T (T-
“Thumb”) sau ARM Cortex M.
• Vezi si prezentarea arhitecturii de calcul ARM (ARM_RO.ppt)

46
Limbaje de programare pentru
microcontrolere - limbajul de asamblare
• Limbajul mașină şi de cel de asamblare
– Limbajul mașină (cod mașină, instrucțiunile mașină – machine code)
este singura formă de reprezentare a informației pe care un CPU/un
microcontroler o "înțelege“: ca orice alt sistem de calcul sau CPU,
el nu înțelege decât un șir de cifre binare, de “1” si de “0” !
– Din păcate această formă de reprezentare a informației este total
nepractică pentru un programator, care va utiliza cel puțin un limbaj
de asamblare (assembly language), mai aproape de limbajul natural
– Limbajul de asamblare este un limbaj de nivel scăzut (low level
language) dar care nu este penalizat de abstractizarea arhitecturii de
calcul
– In limbajul de asamblare o instrucțiune (adica o mnemonică cu
operanzi si moduri de adresare) are drept corespondent o instrucțiune
în limbaj mașină
• excepție fac macroinstrucțiunile disponibile la unele asambloare
– Unealta software care realizează “traducerea” limbajului de asamblare
in limbaj mașină se numește asamblor (“assembler”)
– Un program scris numai în limbaj de asamblare poate fi foarte rapid
şi foarte compact.
• Aceasta nu înseamnă că un astfel de program, prost scris, nu poate fi lent şi de mari
dimensiuni, programatorul având controlul total (şi responsabilitatea !) pentru execuția
programului şi gestiunea resurselor. 47
Limbaje de programare - limbajul de
asamblare
– Limbajul de asamblare, datorita faptului ca el
practic nu abstractizează componentele arhitecturii
de calcul, ar trebui sa fie primul învățat, chiar
sumar, atunci când dorim să proiectăm o aplicație
hard/soft cu un anume microcontroler (familie), el
permițând înțelegerea arhitecturii de calcul şi
utilizarea ei eficientă
– Utilizarea (numai) a limbajului de asamblare
pentru dezvoltarea unei aplicații complexe este
actualmente neproductivă de cele mai multe ori,
printre cauze fiind si faptul ca există şi familii de
microcontrolere cu CPU de tip CISC cu un număr
foarte mare de instrucțiuni (x100) combinate cu
moduri de adresare numeroase şi complicate,
foarte greu de învățat de folosit eficient !
– Limbajul de asamblare este încă folosit partial
acolo unde exista constrângeri dure de timp
real (hard real time), adică multa funcționalitate
care trebuie realizată intr-un timp scurt si foarte
scurt
• Nu trebuie uitat că la ora actuală mulți din producătorii
mari de microcontrolere oferă medii de dezvoltare
software gratuite care includ programe asambloare
gratuite (cum este asamblorul AVR 8 biti, AVR 32 biti
sau ARM din mediul AVR Studio 4/5/6/7 sau
asambloarele Microchip din mediul MPLAB X).
– De asemenea, comunitatea utilizatorilor diverselor
familii de microcontrolere a dezvoltat şi ea, în timp,
multe astfel de asambloare, care sunt disponibile
ca software freeware/open source.
48
Limbaje de programare pentru
microcontrolere – limbaje de nivel înalt:
interpretoare
- Un limbaj de nivel înalt (high level language) nu este numai un limbaj mai apropiat de
limbajul natural (el poate include elemente ale acestuia) dar este caracterizat printr-un
grad mare de abstractizare a componentelor unei arhitecturi de calcul
- Interpretoarele
– Un interpretor (interpreter) este o modalitate de implementare a unui limbaj de nivel înalt, limbaj
mai apropiat de limbajul natural.
– Un interpretor este de fapt un program rezident care, în acest caz, rulează pe o platformă de
calcul de tip microcontroler, aceiași pe care se executa aplicația scrisa in limbajul respectiv.
– Caracteristic pentru execuția unui program interpretat, este citirea și executarea secvențială a
instrucțiunilor de nivel înalt (instrucțiune cu instrucțiune) de către interpretor (programul
rezident).
– De fapt fiecare instrucțiune de nivel înalt este interpretată/tradusă într-o secvență de
instrucțiuni mașină, care se execută imediat.
• In lumea microcontrolerelor cele mai răspândite interpretoare sunt cele pentru limbajele Basic
(antic dar inca utilizat) şi, mai recent, Java Bytecode sau Python.
• Limbajul BASIC a fost remarcabil prin simplitatea şi accesibilitatea codului, dar în varianta
interpretată (pentru că există si variante compilate: vezi compilatoarele Basic pentru AVR 8 biți
si PIC) și prin viteza mai mică de execuție a aplicației, acesta fiind de altfel prețul plătit
pentru utilizarea oricărui interpretor.

49
Limbaje de programare – limbaje de nivel
înalt: compilatoare
• Compilatoarele
– Un compilator combină ușurința în programare oferită de un interpreter (de fapt de limbajul de
nivel înalt) cu o viteză mai mare de execuție a codului.
– Pentru aceasta programul în limbaj de nivel înalt, ca un întreg ansamblu (ca un tot, NU
instrucțiune cu instrucțiune), este translatat (tradus) în limbaj de asamblare, urmând a fi
apoi asamblat, adică tradus în cod mașină de un asamblor
– Codul mașină rezultat in urma acestui proces (care tipic mai include si alte operații in afara de
translatare) va fi cel executat, tot ca un întreg
– Codul mașină rezultat are dimensiuni relativ mari (mai mari decât cel rezultat dintr-un
program scris in limbaj de asamblare, dar mai mici decât cel interpretat) şi este executat
direct, ca un tot, de CPU.
– Spre deosebire de interpretor unde codul sursă este “interpretat” de fiecare dată când se
execută programul, in cazul compilatorului compilarea (generarea codului mașină) se face o
singură dată
– Codul mașină generat de un compilator poate fi optimizat fie ca dimensiune (dimensiune
cat mai mică, timpul de execuție nefiind foarte important), fie ca timp de execuție (timp cat
mai mic, dimensiunea nefiind foarte importanta), fie, in mod tipic, ca un compromis intre cele
două criterii
• Se pot enumera compilatoare pentru limbajele: C/C++, Pascal, Fortran, BASIC, Ada,
PL/M (Intel) si altele…

50
Limbaje de programare – compilatoare C
• Cele mai populare şi utilizate compilatoare sunt cele pentru limbajul C, un limbaj
universal folosit atât pentru supercalculatoarele cum ar fi Cray sau Blue Gene, cât şi
de microcontrolerele de 4 biţi (care încă mai există..).
• C este un limbaj procedural, puternic şi flexibil care, deși de nivel înalt, poate
permite şi accesul direct la resursele sistemului de calcul fiind astfel preferat
pentru programatorii de sisteme incorporate (si de microcontrolere…)
• Un program bine scris in C, utilizând un compilator de calitate, poate genera un cod
rapid şi compact.
• Totuși, in anumite situații, porțiuni critice din punct de vedere al vitezei de execuție si
al utilizării anumitor resurse (mai ales a inițializării acestora), sunt încă scrise în
limbaj de asamblare, sub forma unei funcții (start-up code) dedicate care se executa
înainte de funcția main () si o lansează pe aceasta in execuție
• Există numeroase implementări ale acestor compilatoare, pentru toate familiile de
microcontrolere, de la 4 biți la 64 de biți.
• Cu anumite limitări legate de arhitectură şi mai ales legata de resursele
microcontrolerului, asigură portabilitatea cu relativă ușurință a unei aplicații scrisă
pentru un anumit tip (familie) de microcontroler la un alt tip (familie).

51
Limbaje de programare- compilatoare C
• Pentru familiile puternice de microcontrolere, mai ales in cazul unor CPU
CISC, datorită complexității setului de instrucțiuni şi al numeroaselor
moduri de adresare, este descurajată în mod explicit utilizarea
exclusivă a limbajului de asamblare în momentul în care se
programează aplicații performante.
• Unitatea centrală a noilor generații de microcontrolere RISC, apărute
după 1990, a fost proiectată şi optimizată pentru utilizarea unor
limbaje de nivel înalt cum ar fi C-ul (vezi AVR sau PIC)
• Funcție şi de familia de microcontrolere în cauză, prețul unor astfel de
compilatoare de C poate fi destul de ridicat, începând cu x100USD şi
ajungând la x1000USD.
• Există însă şi variante freeware sau open source de compilatoare de
C, cum ar fi gc (gnu c), care este o portare open source a
compilatorului omonim din Linux în lumea microcontrolerelor.
– Există implementări diferite ale acestui compilator care generează cod pentru familii
diferite de microcontrolere de 8, 16 sau 32 de biti (de exemplu AVR 8 biti, MSP430, 9S12,
MPC 55xx, ARM, AVR 32, etc.).

52
Limbaje de programare – medii IDE
CE NE MAI TREBUIE IN AFARA DE UN LIMBAJ DE PROGRAMARE?
• Codul mașină este obținut cu ajutorul unui set de aplicații (unelte) numit
mediu integrat de dezvoltare a programelor (IDE - Integrated
Development Environment) care conține în mod tipic, pe lângă un
asamblor si/sau un compilator, următoarele componente software/aplicaţii
accesibile, pentru ușurință, prin intermediul unei interfețe grafice utilizator
(GUI- Graphical user Interface):
– un editor specializat (orientat pe codul sursă), un asamblor/compilator,
– un editor de legături/locator ("link-editor/locator"),
– programe de gestiune a unor biblioteci de cod ("librarians"),
– programe de conversie a formatelor de reprezentare a codului (de
exemplu din binar în format Intel HEX sau Motorola S) şi,
– nu în ultimul rând, un simulator şi/sau depanator ("debugger").
• Codul astfel obținut cu ajutorul acestui lanț de unelte software (software
toolchain) trebuie încărcat/programat în memoria de program a
mașinii țintă unde va rula, fiind de fapt programat într-o memorie de
program de tip (EP)ROM/FLASH sau încărcat direct (up-loaded) într-o
memorie de program de tip RAM.
– Deoarece lanțul de unelte, inclusiv compilatorul si asamblorul, se execută pe un
calculator gazdă (host) a cărui unitate centrală, de cele mai multe ori, este diferită de
unitatea centrala țintă (target) pe care se va executa acesta, avem de a face cu o
compilare încrucișată (cross compilation) 53
Testarea si depanarea aplicațiilor –
simulatoarele de unități centrale
• Simulatoare de microcontrolere
– Un simulator (simulator) este un program care rulează programul
microcontrolerului - implementează un microcontroler virtual - folosind un alt
sistem de calcul- de fapt o alta unitate centrala - drept gazdă - host (tipic un PC).
– Programul se poate executa pas cu pas, conținutul variabilelor şi registrelor poate
fi vizualizat și modificat.
– Reprezintă si un punct de plecare atunci când se abordează un microcontroler,
pentru familiarizarea cu arhitectura si resursele lui precum si, daca se dorește, cu
limbajul de asamblare.
– Nu permite simularea în timp real a întreruperilor și, de regulă, programul rulează
mai încet decât pe mașina reală.
– Întotdeauna există însă mijloace pentru evaluarea vitezei de execuție a codului
simulat (ca număr de cicluri mașină sau de stări).
– Ideal, un simulator ar trebui să permită și simularea completă a interacțiunii cu
lumea externa si nu numai, cel puțin din punct de vedere logic, cu toate perifericele
disponibile la nivelul microcircuitului (lucru care nu se întâmplă, mai ales pentru
variantele freeware)

54
Testarea si depanarea aplicațiilor-
resident debuggers
• Programele de depanare ("debbugers") rezidente
– Sunt programe (denumite uneori în română şi programe "monitor") care rulează pe maşina
ţintă -target (microcontrolerul) oferind facilități de depanare similare simulatorului.
– Ele trebuie să fie tot timpul rezidente, adică memorate/prezente in memoria acesteia!
– Interfața cu utilizatorul este realizată prin intermediul unui sistem gazdă (PC) şi/sau a unui
terminal alfanumeric, conectate prin intermediul unui port serial.
– Utilizează o parte din resursele microcontrolerului: memorie de program pentru el însuși (de
tip ROM) şi memorie de date (RAM) pentru variabile proprii, memorie de program (de multe ori
memorie externa de tip RAM, pentru a se putea încărca și modifica cu ușurință codul!) pentru
programul ce se depanează, un port serial pentru comunicația cu sistemul gazdă, eventual
întreruperi, etc.
– Se utilizează de regulă împreună cu un sistem de dezvoltare - development system, starter
kit, evaluation system - care este un sistem minimal realizat în jurul microcontrolerului pe
care rulează depanatorul, dar având resurse suficiente pentru a permite testarea şi depanarea
aplicațiilor uzuale.

55
Sisteme de dezvoltare si depanatoare
(debugger) rezidente

Si acesta este tot un sistem de dezvoltare


(desi arata ca o cheie –dongle- USB)!

56
Testarea si depanarea aplicațiilor
• Emulatoarele In Circuit (ICE - In Circuit Emulators)
– Sunt cele mai eficiente mijloace de testare şi dezvoltare şi au fost, mult timp, cele
mai complexe şi mai costisitoare.
– Varianta integrală (full ICE) presupune existența unui hardware dedicat (scump şi
complicat!) care înlocuiește practic microcontrolerul (se conectează în locul
acestuia) în sistemul pentru care se dezvoltă aplicația, în același timp fiind
disponibile toate facilitățile descrise anterior şi altele suplimentare.
– Permit un control total al mașinii țintă, în timp real, fără a folosi nimic din
resursele acesteia (la variantele cele mai costisitoare).
– Ele sunt realizate de cele mai multe ori ca un mijloc de testare şi depanare de sine
stătător, conectat la un PC prin intermediul unui port paralel, serial USB sau
dedicat.
– Emulatoarele full ICE sunt si cele mai scumpe ICE: x1000$.
– Variantele noi de emulatoare folosesc interfețele specializate de programare şi
depanare integrate la nivelul microcontrolerelor moderne (JTAG, BDM, etc. atunci
când ele există), înlocuind variantele full ICE.
– Nu mai este necesară înlocuirea microcontrolerului de pe sistemul țintă, conectarea
cu acesta făcându-se serial, printr-un număr minim de interconexiuni (fire).
– Exemple de astfel de interfețe ar fi: JTAG/ICE – In Circuit Emulation - la multe familii
de microcontrolere, BDM (Background Debug Monitor) - pentru
NXP/Freescale/Motorola.
– Existența acestui tip de interfețe face posibilă realizarea de emulatoare cu un preț
de cost mult mai mic decât cele clasice: < x100$
Nota Pentru sistemele moderne de dezvoltare un astfel de emulator JTAG
sau BDM (cu performante mai reduse ce e drept) este inclus pe placa
sistemului, având o conectivitate USB directă cu sistemul gazdă (PC).

57
Emulatoare ICE
Emulator cu interfață BDM (NXP/Freescale)

Emulator full ICE (DIP 40)


Emulatoare ICE JTAG

58
Testarea si depanarea aplicațiilor -
simulatoarele de sistem
• Simulatoarele de sistem
– Reprezintă o categorie aparte de simulatoare destinate simulării cat mai complete a
sistemului și a aplicației în ansamblu, cu alte cuvinte a microcontrolerului împreuna cu
o dispozitivele hardware externe.
– Ele integrează şi un simulator SPICE.
– Cele mai cunoscute sunt Proteus VSM (Virtual System Modelling) al firmei Labcenter
Electronics (http://www.labcenter.co.uk/) şi UMPS (Universal Microprocessor Program
Simulator) al firmei Virtual Microdesign (www.vmdesign.com).
– Un astfel de simulator permite rularea aplicației (codului), în mod continuu sau pas cu
pas și evaluarea în detaliu a modului cum aceasta (si microcontrolerul) interacționează
cu hardware-ul extern.
– El permite ceea ce se numește co-simularea (Co-simulation): interacțiunea dintre
software-ul microcontrolerului și dispozitivele electronice analogice sau numerice
conectate cu acesta.
• Sunt bazate pe utilizarea unor modele avansate ale unor familii de microcontrolere precum și pe
modelele SPICE ale dispozitivelor electronice.
– De exemplu, medii de simulare SPICE, cum ar fi Multisim (National Instruments )
integrează acum plug-in uri pentru simularea unor aplicații cu microcontrolere PIC cu
mediul de dezvoltare MPLAB

59
Testarea si depanarea aplicațiilor -
simulatoarele de sistem
• Pentru fiecare model de microcontroler există un asamblor şi un editor de legături integrat
astfel că se poate face, în anumite limite, şi dezvoltarea codului în asamblare.
• Pe lângă aceasta ele au asigurate şi interfeţe corespunzătoare pentru a se putea dezvolta
codul cu medii de programare consacrate pentru familia respectivă de microcontrolere,
folosind de exemplu un compilator C.
• Facilitățile de simulare a codului sunt similare celor întâlnite la simulatoarele deja
menționate.
• Pe lângă numeroasele dispozitive electronice discrete, circuite integrate analogice sau
numerice (la Proteus VSM există peste 6000 de modele), circuite de memorie sau
periferice, în categoria dispozitivelor externe se mai pot menţiona şi sisteme de afişare
(LED, LCD), tastaturi matriciale sau butoane, relee, etc.

60
Simulatoarele de sistem: Proteus VSM

61
Sisteme de operare de tip incorporat
• Există implementări diferite funcţie de familia de microprocesoare / microcontrolere:
x86, ARM, PowerPC, etc.
• Întâlnite/utilizate pentru MPU/MCU de 16/32 biţi, dar există si pentru cele de 8 biţi!
• Sisteme de operare de tip “embedded” variante : ROM-DOS, Windows CE, Palm OS,
Windows Embedded, Window IoT sau Linux Embedded (exista foarte multe distribuții)
– De tip “embedded” nu înseamnă neapărat si de timp real!
• Nucleele sau sistemele de operare de timp real (Real Time kernel, Real Time
Operating System-RTOS) sunt cele asigură o comportare perfect deterministă, cu un
timp maxim de răspuns la un eveniment intern/extern previzibil si garantat
– Pe piaţa de software pentru microcontrolere exista şi componente numite nuclee de timp real (real
time kernels) sau sisteme de operare în timp real (RTOS).
– Un astfel program de sistem de nivel profesional este o componenta software scumpă sau foarte
scumpă, funcție de complexitatea lui, de accesibilitatea surselor programului, de familia de
microprocesoare căreia ii este adresat, de modul in care va fi distribuit împreuna cu aplicația.
– Există însă și variante de RTOS, de mai mică complexitate, din categoria freeware sau shareware,
care pot fi utilizate cu performanțe mulțumitoare.

62
Sisteme de operare: RTOS
• Sistemele de operare (nuclee) de timp real (Real Time Operating System-
RTOS, RT kernels)
– Un sistem de operare în timp real facilitează crearea aplicaţiilor aşa zise de timp
real, dar nu garantează şi faptul ca ele chiar se vor executa în timp real, aceasta
depinzând de modul în care este utilizat acest software la nivel de sistem.
– Spre deosebire de un calculator cum este PC-ul, un sistem integrat (embedded
system) este proiectat întotdeauna într-un anumit scop şi are un cod care se
execută aproape întotdeauna dintr-o memorie ROM, fiind de presupus că nu se
modifică pe parcursul execuției aplicației.
– Astfel lucrurile sunt ușurate deoarece comportarea sistemului poate specificată
complet încă din faza de proiectare.
– Din aceasta cauză, în cazul multora din aplicații, multe probleme se pot rezolva în
timp real şi fără să se utilizeze un RTOS.
• Nucleele sunt variante minimale (ca resurse necesare) de system de operare
– Esențială este până la urmă si calitatea şi competența celui care programează
aplicația!

63
Criterii de alegere a unui
microcontroler (de fapt a unei
familii de microcontrolere) pentru
o anumită aplicație
• Costurile permise pentru aplicaţie
– Care va fi scara de producție: prototip, producție
mică/medie sau de masă?
– Care sunt costurile permise pentru
microcontroler?
?
– Care sunt costurile permise pentru mediul de
programare şi dezvoltare?
• Timpul de dezvoltare al aplicației (legat si
el de costuri!)
– Ce limbaj de programare să aleg?
– Ce limbaje de programare cunosc mai bine şi ce
medii de dezvoltare am utilizat?
– Ce modalitate de testare şi depanare folosesc:
simulator, sisteme de dezvoltare, emulator?
64
Criterii de alegere a unui microcontroler
-2
Caracteristicile fizice (si arhitecturale), doar o enumerare doar a celor mai
importante:
– Care este gama temperaturilor de lucru necesare?
– Ce fel de alimentare (rețea, baterie), ce gama de tensiuni este disponibilă şi care
sunt limitările acesteia?
– Aplicația va funcționa într-un mediu cu caracteristici speciale, de exemplu în care
există perturbații electromagnetice puternice sau radiații ionizante (gamma, neutroni)?
– Ce tip de capsulă (ce variante de incapsulare) este disponibil, ce dimensiuni fizice și
număr de pini ar trebui să aibă?

– Care este viteza de prelucrare (de calcul) necesară?


– De câtă memorie am nevoie pentru program şi respectiv date?
– Va fi necesară şi o memorie externă?
– De câte intrări şi/sau ieşiri am nevoie?
– Ce fel de intrări şi/sau ieșiri sunt necesare: intrări/ieşiri analogice, ieşiri numerice de
curent mai mare?
– Care sunt resursele necesare în materie de temporizare/numărare şi care ar fi
caracteristicile lor cele mai importante (de exemplu rezoluție, frecvență maximă de
numărare) ?

65
Criterii de alegere a unui microcontroler
-3
• Conectivitatea
– Care sunt resursele de comunicație necesare: câte porturi seriale
asincrone şi cu ce caracteristici, ce tipuri de magistrale seriale
sincrone (SPI, I2C) sunt disponibile?
– Este necesara si o conectivitate automotive gen CAN sau LIN ?
– Este necesară o conectivitate Ethernet (o stivă TCP/IP), USB sau
wireless (stive Bluetooth, Zigbee sau similare, etc.)?
• Compatibilitate, scalabilitate şi dezvoltarea ulterioară
– Cu ce tipuri de circuite se poate interfața cât mai simplu (si mai ieftin):
sisteme de afișare, senzori, elemente de comandă şi execuție (relee,
motoare de curent continuu, motoare pas cu pas, etc.)?
– Există mai multe variante în familia respectivă de microcontrolere,
care să acopere eventualele cerințe suplimentare în materie de viteză
de lucru, resurse periferice sau de memorie?
– Diversitatea variantelor constructive pentru o anumită familie
constituie întotdeauna un argument puternic pentru alegerea ei.
– Cum se poate realiza o extindere ulterioară (resurse periferice si
meorie), atunci când ar fi necesară?

66
Criterii de alegere a unui microcontroler
• Alte aspecte
- 4
– Care sunt informațiile relevante despre fiabilitatea familiei respective de
microcontrolere? Informație esențială pentru aplicațiile critice!
– Noile familii precum şi variantele noi ale unor familii consacrate pot avea la început
diverse „probleme de creștere” (bugs!), care țin mai mult de hardware decât de
software; o familie consacrată de mulți ani de utilizare prezintă mult mai puține
riscuri din acest punct de vedere, lucru esențial pentru utilizarea in aplicații critice
(aviație, spațiu, nuclear, feroviar, automobil).
– Care este suportul oferit de fabricant sau distribuitor şi care este baza de
cunoştinţe existentă: site-uri web, documentație on-line sau pe CD-uri, note de
aplicaţii, exemple de proiectare complete (reference designs), software din
categoria freeware / shareware / OPEN SOURCE si, nu în ultimul rând, forumuri
de discuţii pentru utilizatori?
• Din păcate răspunsurile la multe din aceste întrebări nu sunt simple, mai
trebuie si corelate între ele, experiența si calitatea proiectantului fiind
decisive.
– Un exemplu este legătura care există între criteriile de cost şi cele de timp de
dezvoltare, cam invers proportionale ….
– Principial, utilizarea unui limbaj de nivel înalt împreună cu un emulator pentru
testare şi depanare poate duce la scurtarea consistentă a timpului de dezvoltare.
– Dar prețul unui compilator commercial performant este întotdeauna mai mare decât
cel al unui compilator open-source sau freeware (nimic nu e mai ieftin decât ceva ce
poate fi gratis!), iar prețul unui emulator ICE (sau JTAG performant) este şi el mai
mare decât cel al unor mijloace mai simple de testare şi depanare.
67

You might also like