Sunteți pe pagina 1din 95

Introducere

Vom încerca să definim în continuare noţiunea de sistem incorporat.


Definiţie: Orice dispozitiv care include un computer, dar care nu este el însuşi un computer de uz
general. Poate fi considerat un ansamblu hardware şi software care va funcţiona autonom, fără
intervenţia omului.
Alte posibile definiţii/caracteristici ale sistemelor incorporate sunt:
Sistemele incorporate sunt sisteme la care calculatorul/microprocesorul sunt doar simple
componente. Principalul scop al utilizării microprocesorului este să simplifice construcţia
sistemului şi să ofere flexibilitate în proiectare şi construcţie.
Un sistem incorporat este un sistem pe bază de microprocesor construit pentru a controla
o funcţie sau un domeniu de funcţii particulare şi care nu este proiectat pentru a fi programat de
către utilizatorul final. Singura interacţiune cu utilizatorul se face în scopul realizării funcţiilor
impuse sistemului – aplicaţiei.
Un sistem incorporat foloseşte o combinaţie de hardware şi software (o maşină
computaţională) pentru a realiza o funcţie specifică lucrând într-un mediu reactiv şi care impune
restricţii de timp.
Sistemele incorporate sunt sisteme de prelucrare a informaţiei înglobate în produse mai
mari şi care nu sunt de obicei vizibile utilizatorului.
În mod normal un sistem incorporat se obţine prin incorporarea(includerea) unui
calculator într-un sistem orientat pe o aplicaţie.
Cel mai simplu model de incorporare a unui calculator într-un sistem este prezentat în
figura 1.1.

Fig. 1.1. Model simplu de incorporare a calculatorului

După cum se observă, este necesară prezenţa interfeţelor analogice pentru interacţiunea
cu mediul.
Vom prezenta în continuare câteva exemple pe baza cărora putem pune în evidenţă
principalele caracteristici ale sistemelor incorporate (fig. 1.2).
- agenda electronică PDA (Personal Digital Assitant)
- Videocamera digitală
- Telefon celular
- Televizor celular sau chiar analogic

Fig. 1.2. Exemple de sisteme incorporate


În cazul PDA se observă prezenţa unei interfeţe operator (touch-screen) dar aceasta este
mai restrânsă decât în cazul sistemelor de uz general tocmai datorită faptului că trebuie să
asigure realizarea unui număr restrâns de funcţii predefinite.
Videocamera digitală are mai multe microprocesoare. Televizorul analog benefiaciză de
un procesor cel puţin pentru controlul canalelor.
Un alt exemplu este reprezentat de sistemele de control ale unui automobil. Un
automobil modern este dotat cu un mare număr de microprocesoare care asigură controlul
motorului, controlul sistemului de frânare (ABS), controlul sistemului de siguranţă (airbag-uri),
etc. În figura 1.3. sunt prezentate principalele sisteme de control ale unui automobil.
Alte exemple de sisteme incorporate

Fig. 1.4. Mars Rover Fig. 1.5. GPS Fig. 1.6. ERS 100 ROBOTIC DOG

Primul vehicul de explorare a planetei Marte Mars Rover dotat cu 5 microprocesoare pe


8 biţi Intel 80C85 Prezentat în figura 1.4.
Un sistem GPS – are ca elemente de intrare ieşire caracteristic o antenă de emisie
recepţie semnale satelit, display-ul menit să asigure interfaţarea cu operatorul uman şi este dotat
cu microprocesor pe 16 biţi.
MP3 Player – dotat cu un microprocesor pe 32 de biţi, principala sarcină fiind
decompresia fişierelor audio
Sony Aibo ERS-100 ROBOTIC DOG – este dotat cu un microprocesar pe 64 de biţi –
complexitatea microprocesorului este impusă de complexitatea sarcinilor pe care trebuie să le
realizeze
Caracteristic pentru toate aceste sisteme este faptul că informaţia referitoare la modul de
funcţionare este prelucrată prin intermediul senzorilor (viteză, cuplu, acceleraţie, temperatură,
etc.) iar în urma procesării acestor informaţii microprocesorul acţionează asupra sistemelor de
control ale automobilului prin intermediul unor sisteme de execuţie (pompe, ventile, motoare,
etc.); atât pentru prelucrarea informaţiei cât şi pentru transmiterea comenzilor sunt necesare
interfeţe analogice (CNA şi CAN).

Fig. 1.3. Principalele sisteme de control ale unui automobil

Caracteristici ale sistemelor incorporate


- Funcţionalitate sofisticată, gradul de sofisticare fiind dependent de aplicaţie;
- Operarea în timp real – chiar dacă nu este obligatorie, este caracteristică pentru multe
din aplicaţiile incorporate.
- Costuri de fabricaţie scăzute
- Aplicaţii dependente de procesor – chiar dacă nu sunt obligatorii sunt frecvente
- Memorie restricţionată
- Consum mic – multe din aplicaţiile incorporate sunt destinate să funcţioneze pe
baterii.
Am specificat mai devreme că o caracteristică importantă o constituie costurile de
producţie scăzute. Acestea au două componente:
- costurile pentru proiectarea şi dezvoltarea produsului
- costurile de producţie şi vânzare pentru fiecare unitate de produs.
Costurile vor fi corelate cu numărul de unităţi realizate: spre exemplu o aplicaţie foarte
specifică (precum controlul comenzilor în cazul unui avion) va presupune costuri de proiectare
mari, fiind posibilă utilizarea unor elemente hardware şi software sofisticate şi scumpe. La
proiectarea unor telefoane celulare low cost însă se va avea în vedere în primul rând
minimizarea costurilor.

Sisteme de timp real

Am specificat anterior că una dintre caracteristicile posibile ale sistemelor incorporate


este operarea în timp real. În cele ce urmează vom încerca să definim caracteristicile operării de
timp real.
O definiţie simplă a operării de timp real este aceea că operaţiile trebuie finalizate în
intervale de timp predefinite; altfel spus, funcţionarea trebuie să respecte restricţiile de timp.
Se pot defini operaţii:
- Hard real time – la care depăşirea intervalului de timp determină defecte, catastrofe
(constrângeri RT critice la timp)
- Soft real time – la care depăşirea intervalului de timp determină scăderea
performanţelor (constrângeri RT sensibile la timp)
În cazul operării RT un răspuns garantat al sistemului trebuie să fie explicat fără a folosi
argumente statistice.
Multe sisteme sunt sisteme multirată – ele primesc informaţii din exterior la intervale de
timp diferite şi sunt prelucrate în intervale de timp diferite.

Alte caracteristici ale sistemelor incorporate

- Toleranţa la defect – unele aplicaţii trebuie să continue să funcţioneze chiar dacă


unele componente soft sau hard sunt scoase din funcţiune (controlul zborului unui
avion de exemplu)
- Siguranţă – nu trebuie să provoace daune persoanelor sau proprietăţilor
- Funcţionalitate predefinită – se pot realiza numai anumite funcţii iar hadware-ul şi
software-ul cu care este dotat sunt destinate realizării acestor funcţii predefinite
- Există posibilitatea ca anumite funcţii predefinite să fie folosite foarte rar de-a lungul
perioadei de utilizare altfel spus, foarte rar vor fi folosite toate funcţiile ce pot fi
programate
- Încrederea – descrisă de proprietatea de a funcţiona corect la un moment dat
- Mentenabilitatea – probabilitatea ca sistemul să lucreze corect o anumită perioadă,
după apariţia unor erori
- Disponibilitatea – probabilitatea ca sistemul să lucreze corect un timp dat
- Securitatea – asigurarea confidenţialităţii datelor prelucrate

Tipuri de sisteme incorporate


Există o mare diversitate de sisteme incorporate care realizează funcţii foarte diferite de
aceea sunt greu de găsit criterii clare de clasificare ale acestora. Un criteriu general acceptat este
cel bazat pe funcţiile principale pe care acestea le implementează. Astfel se pot distinge:
- Sisteme incorporate similare calculatoarelor de uz general – acestea au ca principală
sarcină răspunsul la comenzile operatorului;exemple agenda electronică, jocurile video, etc.
- Sisteme automate – ca răspuns la informaţiile preluate din exterior prin intermediul
senzorilor, sistemul reacţionează prin comanda elementelor de execuţie; exemple:
controlul în buclă închisă pentru sisteme de timp real, controlul motorului
autovehiculelor, controlului zborului, etc.
- Procesarea semnalelor: radar, sonar
- Comunicare şi reţele – telefoane celulare, aplicaţii INTERNET (ROUTER)

Tipuri de funcţii realizate de sistemele incorporate


- Legea de control
- Secvenţierea logică
- Procesare semnale – sunt necesare pentru procesarea semnalelor de intrare primite de
la senzori
- Interfaţare specifică aplicaţiei – depinde de tipurile de senzori şi elemente de
comandă cu care se interfaţează
- Răspunsuri greşite – determină modul în care va acţiona sistemul în caz de erori; este
necesar ca în caz de eroare să nu apară o avarie catastrofică (să cadă sistemul) ci să
aibă loc o deteriorare graduală (de exemplu în cazul descărcării bateriilor se emite un
semnal de avertizare care să comunice utilizatorului acest lucru.

Arhitectura sistemelor incorporate


Vom prezenta în continuare o arhitectură mai completă. În figura 1.7. este prezentată o
astfel de arhitectură. Se remarcă prezenţa blocului de bază care acum se extinde faţă de modelul
simplu prezentat anterior, la acest bloc de bază adăugându-se mai multe elemente exterioare. În
blocul de bază se remarcă CPU care comunică cu memoria, în care este depus software-ul ce
permite controlul sistemului incorporat. Se remarcă de asemenea CAN-ul prin intermediul
căruia sunt preluate semnalele analogice de la senzori, precum şi CNA prin intermediul căruia
CPU transmite semnalele de comandă spre elementele de execuţie.
Se remarcă de asemenea prezenţa în blocul de bază unei componente (special hardware)
necesară deoarece în unele cazuri, CPU-ul nu este capabil să execute instrucţiunile soft-ului
respectând condiţiile real time.
Componente externe
- Interfaţa operator – este menită să asigure atât primirea date (comenzi) de la
operatorul uman cât şi să-l informeze despre funcţionarea sistemului. Va fi constituită
din butoane, ecrann sau un simplu afişaj cu LED-uri
- Blocul de diagnoză – este destinat diagnosticării sistemului trebuie determinate erori
şi modului în care acestea pot fi remediate; acest bloc trebuie să lucreze chiar şi în
cazul în care sistemul nu este activ pentru a putea testa funcţionarea corectă a tuturor
componentelor sistemului
- Sisteme auxiliare – asigură alimentarea cu energie electrică a sistemului, răcirea şi
protecţia mecanică
- Protecţia electromagnetică externă – trebuie să asigure atât protecţia cât şi aspectul
exterior al sistemului, aspect ce devine foarte important.

Fig. 1.7. Arhitectura complexa a unui sistem incorporat

Implementarea sistemelor incorporate


Componentele hardware
Principalele componente hardware sunt:
- element de procesare (microprocesor, microcontroler)
- elemente periferice
o dispozitive de intrare – ieşire
o Interfaţare senzori şi elemente de execuţie
- Memorie
- Magistrală
Elementele sunt similare unui sistem de calcul de uz general
Deosebirile sunt determinate de natura şi numărul intrărilor ieşirilor. Acestea sunt mult
mai diverse şi mai numeroase în cazul sistemelor incorporate decât în cazul unui sistem de
calcul de uz general.
Există două componente software principale
- Software de sistem – care are funcţii similare sistemului de operare din sistemul de
calcul de uz general; trebuie remarcat că pe lângă cerinţele impuse sistemelor de operare de uz
general, în cazul sistemelor incorporate este necesar ca software de sistem să respecte şi
cerinţele specifice sistemelor de timp real. O cerinţă specială este legată de faptul că de obicei
programarea (în limbaj de nivel înalt) se face pe un calculator care emulează sistemul incorporat
şi de aceea sunt necesare cross asambloare şi cross compilatoare. Astfel un compilator pentru
PIC-uri va rula pe un PC; acesta va compila programul scris (în C de exemplu) şi va genera un
cod specific pentru PIC.
În unele cazuri există posibilitatea de a simula pe PC mediul (intrări, ieşiri) şi de a testa
complet funcţionarea sistemului incorporat. În acest fel, codul în assambler generat pe PC este
transferat şi utilizat în sistemul incorporat. De asemenea, pentru depanarea programului,
sistemul incorporat este cuplat cu un PC. Faptele preluate de la sistemul incorporat sunt preluate
şi interpretate pe PC.
- software de aplicaţie – este cel care individualizează sistemul incorporat respectiv.
Dacă acelaşi soft de operare poate lucra pe mai multe tipuri de sisteme incorporate, soft-ul de
aplicaţie este strict specific.
Spre exemplificare prezentăm soft-ul unui termostat programabil ce controlează
centrala
termică realizează cel puţin trei sarcini: (1) monitorizarea temperaturii, (2) monitorizarea orei
din zi, (3) supravegherea tastaturii. Fire de cod (thread) separate.

Caracteristici ale soft-ului utilizat în sistemele incorporate

- Programele trebuie să fie corecte din punct de vedere logic şi temporal. Dacă
corectitudinea logică este caracteristică tuturor programelor, corectitudinea temporală
este impusă de cerinţele de aplicaţie de timp real.
- Trebuie să asigure concurenţa fizică implicită deoarece un sistem incorporat poate
lucra multiuser şi multiproces.
- Siguranţa în funcţionare şi toleranţa la defect sunt obligatorii, soft-ul fiind cel care
trebuie să asigure aceste proprietăţi.
- Soft-ul de aplicaţie este specific şi are un scop unic.
- Funcţionarea multitasking şi concurentă este determinată de faptul că un sistem
incorporat trebuie să poată lucra cu mai multe intrări şi ieşiri şi cu evenimente
multiple în mod independent – multe sisteme incorporate sunt obligate să lucreze
multitasking. Separarea task-urilor simplifică programarea, dar cere comutarea într-
un anumit fel, înainte şi înapoi printre diferite task-uri (programare multitasking).
Concurenţa reprezintă aparenta execuţie simultană a mai multor task-uri

Cerinţe în proiectarea sistemelor incorporate

În proiectarea unui sistem incorporat trebuie urmărită rezolvarea unor probleme specifice
precum:
- Cât de mult hardware este necesar – care este lungimea cuvântului pentru CPU,
dimensiunea memoriei, etc.
- Care va fi dimensiunea intervalului de timp care să asigure finalizarea operaţiilor
(intervalul de timp pentru finalizarea operaţiilor în real-time) – un hard mai rapid sau
un soft mai inteligent – un hard mai rapid înseamnă costuri de producţie mai mari în
timp ce soft-ul mai inteligent presupune cheltuieli de dezvoltare mai mari. Trebuie
găsit un compromis care să asigure performanţe maxime cu costuri minime.
- Cum să se minimizeze consumul de energie – oprirea elementelor care nu sunt
necesare, reducerea accesării memoriei

Proiectarea sistemelor incorporate

Vom prezenta în continuare câteva principii şi cerinţe preliminare referitoare la


proiectarea unui sistem incorporat. Menţionăm că aceste principii vor fi dezvoltate ulterior.
În proiectare unui sistem incorporat trebuie luate în considerare diferite cerinţe şi
interacţiuni dintre performanţele impuse asupra sistemului. Dintre principalele obiective ale
proiectării amintim:
- performanţe (viteză, limite de timp in RT)
- funcţionabilitate şi interfaţă utilizator
- cost de producţie
- consum de energie
- dimensiune, formă, protecţie, etc.
- cerinţe funcţionale – ieşirea ca o funcţie de intrare
În proiectarea şi dezvoltarea sistemelor trebuie parcurse anumite etape, conform figurii 1.8

Fig. 1.8. Etape ale proiectării şi dezvoltării sistemelor incorporate

Există câteva modalităţi de proiectare:


Proiectarea de sus în jos – se porneşte de la descrierea cea mai abstractă se lucrează
pentru detaliere
Proiectarea de jos în sus – se porneşte de la mici componente la mari sisteme
În proiectarea reală cele două modalităţi sunt combinate

Concluzii

Sistemele incorporate se regăsesc peste tot în jurul nostru – multe dintre aceste includ un
hardware şi un software complex
Dezvoltarea unui sistem incorporat presupune rezolvarea unui mare număr de provocări
S-au dezvoltat metodologii de proiectare care să ajute la gestionarea procesului de
dezvoltare
CURS 2

INTRODUCERE ÎN PROCESUL DE PROIECTARE AL SISTEMELOR EMBEDDED

PRINCIPALE AVANTAJE
ALE METODOLOGIEI DE PROIECTARE
 ofera posibilitatea păstrarii unei istorii / înregistrari a rezultatelor etapelor proiectarii
- utila pentru documentare, testare functionala, depanare
 permite dezvoltarea sau folosirea unor unelte de proiectare asistata de calculator
- desfasurarea în paralel a proiectarii pentru diferite componente functionale
 simplifica comunicarea dintre membrii unei echipe de proiectare.

ELEMENTE SPECIFICE
PROIECTARII EmS
• Re-utilizarea unor componente deja proiectate în alte proiecte
• Strânsa interactiune dintre hardware si software
– Programatorii trebuie sa înteleaga partea hardware iar proiectantii de hardware trebuie
sa înteleaga partea software
• Utilizarea de blocuri functionale +fiecare proiectant este responsabil atât de hardware cât si de
software pentru o functiune, sau pentru un set de functiuni

ETAPE PROIECTARE
• Deciziile luate la un anumit pas al proiectarii sunt bazate pe estimarea a ce se va întâmpla mai
târziu
– Daca estimarile sunt inadecvate, trebuie sa ne întoarcem si sa îndreptam deciziile
noastre initiale, tinând cont de noile evenimente
• La fiecare etapa a proiectarii se adauga detalii:
-analiza proiectului la fiecare pas pentru a determina cum se îndeplinesc specificatiile
-rafinarea proiectului pentru a adauga elemente de detaliu
-verificarea proiectul pentru a fi siguri ca îndeplineste toate obiectivele sistemului

PRINCIPALELE ETAPE ÎN
PROCESUL DE PROIECTARE AL EmS

•Definirea cerintelor produsului


•Elaborare specificatii functionale
•Crearea proiectului arhitectural
•Furnizare versiune arhitecturala finalã

•Implementare module
•Verificare si punere la punct
•Implementarea si integrarea sistemului

•Verificare si testare sistem în diferite


faze de implementare
Etapa I - Crearea Arhitecturii

DEFINIREA PROBLEMEI SI A CERINTELOR PRODUSULUI


• Definirea produsului descrie ce va fi si ce va face acesta
• Definirea cerintelor constituie primul pas al procesului, fiind cheia succesului în proiectarea
sistemelor electronice
• Definirea cerintelor reprezinta baza documentatiei proiectului
• Documentatia descrie ce veti construi
– Spune oamenilor de marketing ce produs vor avea de vândut
– Spune proiectantilor cum sa implementeze produsul.
• Rezultatul acestei faze va fi o definire simpla a problemei, din punctul de vedere al
utilizatorului (beneficiarul)
– Se va descrie problema, dar nu se vor sugera solutii
• DA: Miscarea vorbitorului nu va fi stânjenita de cablul microfonului
• NU: Se va folosi un microfon wireless
CINE DEFINESTE CERINTELE ?
• Într-o companie foarte mare, definirea cerintelor va fi facuta de catre departamentul de
marketing, sau un client important
• Într-o companie mica schita de definire a cerintelor se poate face de catre inginerii software si
hardware
• Pentru proiecte mici, proiectantul defineste cerintele
CE TREBUIE DEFINIT CA CERINTE ?
• CERINTE FUNCTIONALE
– Intrari si iesiri (interfata cu utilizatorul si mediul)
– Functii si constrângeri de timp
• CERINTE NE-FUNCTIONALE
– Performanta.
– Costuri.
– Consumul de putere.
– Dimensiune fizica si greutatea.
– Fiabilitate, siguranta în functionare, mentenabilitate

EXEMPLU DE FORMULAR DE CERINTE TIPICE


• Nume
• Scop
• Intrari / Iesiri catre lumea externa
– Tipul datelor
– Caracteristicile generale ale datelor
– Tipuri de dispozitive de interfata cu utilizatorul
• Functii. Intrari →FUNCTII→Iesiri
• Performanta
• Costuri de fabricatie. Apreciere grosiera, sau limita maxima.
• Putere. Apreciere grosiera, sau limita maxima (baterii / retea ?)
• Dimensiune / greutate fizica

REZUMAT CERINTE

Faza Rezultate
Definirea problemei de proiectare si elaborare cerinte
 Cercetare, analiza piata →Definirea corecta a problemei
 Consultare utilizator. Culegere de →Propunere cerinte
informatii →Document (formular) de cerinte
generale de la clienti (utilizatori sau → Crearea unui plan de testare
beneficiari)
 Cerinte functionale si nefunctionale
 Cercetare

EXEMPLU: Harta GPS


• Este un dispozitiv portabil care afiseaza pentru utilizator o harta a terenului din jurul pozitiei
curente a utilizatorului
• Harta afiseaza modificarile corespunzatoare
schimbarii pozitiei utilizatorului, sau ale dispozitivului de afisare a hartii
• Harta mobila obtine pozitia sa de la GPS

Harta GPS: Cerinte initiale


Functionalitate: proiectat pentru utilizare în trafic auto si scopuri similare; nu pentru utilizare
nautica, sau aviatie, care necesita functiuni si baze de date mai specializate. Sistemul va afisa /
indica principalele drumuri si alte puncte de reper disponibile în bazele de date topografice
standard.
Interfata cu utilizatorul: Ecranul va avea cel putin rezolutia de 400 x 600 pixeli.
Dispozitivul va fi controlat prin maximum trei butoane. La apasarea butoanelor pe ecran se
deschide un meniu pentru a permite utilizatorului sa selecteze functiile de control ale sistemului.
Performanta: Harta se va rula lent pe ecran. Dupa alimentare, afisarea cadrului initial pe ecran se
va face în cel mult o secunda, iar sistemul va fi capabil sa verifice si sa afiseze pozitia sa în cel
mult 15 secunde.
Cost: Costul de vânzare maxim 500$. (aproximativ de 5 ori costul componentelor).
Dimensiune / greutate: Dispozitivul se va potrivi confortabil în palma mâinii.
Consum de putere: Functionare pentru cel putin 8 ore cu 4 baterii AA.
Formular de cerinte
Name GPS moving map
Purpose Consumer-grade moving map for driving
Inputs Power button, two control buttons
Outputs Back-lit LCD display 400 X 600
Functions Uses 5-receiver GPS system; three userselectable resolutions; displays
current latitude and longitude
Performance Updates screen within 0.25 seconds upon movement
Manufacturing cost $100 cost-of-goods- sold
Power 100 mW
Physical size/weight no more than 2” X 6” (5cm x 15 cm), 12 ounces (340 g)

ELABORAREA SPECIFICATIILOR
• Specificatiile reprezinta o descriere functionala detaliata ce respecta cerintele. Nu indica modul
de implementare.
– Specificatiile usureaza întelegerea cerintelor
– Specificatiile permit urmarirea îndeplinirii cerintelor pe parcursul activitatilor de
proiectare
• Usureaza munca de proiectare
• Înlatura eventualele greseli, repetari sau omisiuni ale unor functii→reluari ale proiectarii
• Specificatiile sunt deosebit de importante pentru proiecte complexe, ce implica un colectiv de
cercetare →sarcinile de proiectare pentru fiecare persoana din grup.
• Presupun o analiza (interna) a conceptiilor de proiectare enuntate pentru a verifica daca
specificatiile cerute sunt posibil de implementat
– re-utilizarea unor parti din alte proiecte anterioare permite asigurarea succesului noului
proiect (functional si ca timp de terminare)
• Specificatiile pot fi privite ca un contract între beneficiar si proiectant
• Documentele cu cerinte si specificatii pot fi folosite pentru crearea unui plan de testare
– Documentul initial de cerinte defineste ce este nevoie este necesar a fi testata.
• Testarea este facuta, de obicei la proiectele mari, de un inginer de testare independent de
colectivul de proiectare, care elaboreaza un plan de testare pe baza cerintelor.
• Separarea analizei cerintelor si specificatiilor este necesara adesea:
– diferente mari între modul cum beneficiarii pot descrie sistemul si ceea ce au nevoie
specialistii pentru a proiecta sistemul.
– beneficiarii pot avea asteptari nerealiste cu privire la ceea ce se poate face cu bugetul
alocat de ei.

COMPLEXITATEA SPECIFICATIILOR
• Complexitatea si formalismul specificatiilor depind de tipul companiei proiectante si de
dimensiunea produsului final.
• Se poate realizeaza o modelare a specificatiilor în scopul proiectarii arhitecturii si ulterior a
proiectarii componentelor.
– Modelele sunt reprezentari conceptuale ale functionalitatii sistemului. Modelul este
constituit din obiecte functionale si reguli pentru compunerea acestor obiecte.
• Descrierea grafica a specificatiilor
– fie într-un limbaj de modelare,
– sau prin definirea si desenarea unor diagrame de analiza conceptuala a sistemului care
cuprind:
• componentele cheie ale sistemului,
• functiile de baza ale fiecarei componente,
• interactiunea – caile de comunicare între aceste componente si
• lista serviciilor oferite utilizatorului sistemului

Exemplu diagrama conceptuala pentru servicii bancare simple (Alistair Cockburn)


Servicii mica banca:
_ Verificare cont
_ Pastrare bani în cont
_ Verificare stocuri
_ Împrumuturi
Exemplu diagrama conceptual
REZUMAT SPECIFICATII
Faza Rezultate
Elaborare Specificatii
 Descriere de detaliu a comportarii  Document specificatii
sistemului.  Finalizarea descrierii modelul functional
 O descriere detaliata, precisa, clara si fara  Crearea unui plan de testare
ambiguitati a cerintelor
 Descriere functii si interactiune
component system
 Modelarea functionalitatii sistemului
 Analiza conceptiilor de proiectare -
revizie

EXEMPLU: Harta GPS


• Lista de specificatii pentru harta de navigare GPS va include
câteva componente:
– ce date se receptioneaza de la constelatia de sateliti GPS;
– datele hartii afisate;
– interfata cu utilizatorul;
– operatii ce trebuie realizate pentru a satisface cerintele utilizatorului;
– operatii în fundal (ne-evidente) cerute pentru a pastra sistemul în functiune, cum ar fi de
exemplu functionarea receptorului GPS.

PROIECTARE ARHITECTURALĂ
• Arhitectura este o reprezentare abstractă a implementării sistemului şi indică structura
sistemului în termenii componentelor mari şi interconexiunile dintre acestea
• La nivel arhitectural, componentele hardware şi software sunt reprezentate ca o compoziţie de
elemente ce interacţionează
– Detalii de implementare (HW & SW) sunt abstractizate, conţinând doar informaţia de
comportament şi de inter-relaţie între componente
• O arhitectura embedded include elemente interne ale sistemului, elemente externe ce
interacţionează cu sistemul, proprietăţile fiecărui element individual şi relaţiile de interacţiune
între elemente
• În aceasta etapa se face partiţionarea implementării funcţiilor între hardware şi software

IMPORTANTA ARHITECTURII
• Indică cum se vor implementa funcţiile sistemului, descrise în specificaţii.
• Arhitectura este documentul care:
– Defineşte infrastructura proiectului
– Evidenţiază opţiunile şi constrângerile de proiectare
– Comunică rapid şi corect, prin planul arhitectural, modul în care se va face
proiectarea / implementarea. (Comunicare către alte persoane cu / fără pregătire
tehnică)
– Este fundamentul activităţii de planificare a sarcinilor de proiectare
– Permite analiza şi testarea calităţii unui dispozitiv
– Permite definirea unor modalităţi de reducere a costurilor de proiectare construcţie
– Permite estimarea corectă a riscurilor implicate de varianta de implementare a
diverselor elemente
– Permite reutilizarea cunoaşteriiscăderea în viitor a costurilor
Proiectarea arhitecturala include:
Definirea componentelor sistemului. Este o estimare ce tine de experienţa şi de cunoaşterea
caracteristicilor componentelor hardware şi software propuse.
Specificaţii hardware / software (exista opţiunea între a cumpăra şi a construi prin forte
proprii)
 În cazul UML: modelare grafica a obiectelor componente. Obiectele corespund
pieselor reale HW si SW ale proiectului.
Alegerea procesorului
Alegerea limbajului de programare
Evaluarea sistemului
Proiectare hardware şi firmware
Integrare si testare funcţională

DE ŢINUT CONT
• Este important de ţinut minte că hardware reprezintă un cost recurent (repetat), ce se repeta
pentru fiecare sistem vândut.
• Software reprezintă un cost ne-recurent. Trebuie dezvoltat o singură dată, dar nu apare ca şi
cost pe unitatea de produs, decât dacă este o taxa de licenţă de plătit.
• Alegerea variantei de implementare hardware:
– Cu microprocesoare, microcontrollere discrete şi cablaj imprimat – în aceeaşi
carcasă, System in Package
– Sistem distribuit
– Un-sistem-pe-un-chip (System-on-chip = SOC). Proiecte SOC pe baza de nuclee
IP
– ASIC, bazat tot pe nuclee IP dar pentru aplicaţii specifice si în număr extrem de mare.
Sunt tot SoC, full custom design.

ALEGEREA PROCESORULUI
• Numărul de pini de IO necesari - Pini grupaţi în porturi de IO, restricţii, capabilităţi curenţi
mari
• Interfeţe necesare
• Cerinţe memorie RAM
– numărul de variabile plus suma tuturor bufferelor interne, structuri FIFO, şi
dimensiunea stivei
– intern / extern, restricţii de utilizare, SFR, moduri de adresare
– eficienta compiler.
• Cerinţe memorie ROM
– suma codului de program plus toate tabelele necesare a fi incluse într-o memorie
nevolatilă
– regula bazata pe experienţă: ocupare în proporţie de maxim 80%
– Testare compilator ales  porţiuni de cod pentru a determina dimensiunea
acestuia după compilare / asamblare
– dimensiunea codului depinde limbajul de programare ales pentru dezvoltare
– dacă se folosesc operaţii în virgulă mobilă, iar procesorul nu are inclus un
coprocesor matematiccod mare.
• Număr de întreruperi cerut
• Consideraţii real-time
• Mediul de dezvoltare. Funcţiuni principale ale unui mediu integrat de dezvoltare (IDE -
Integrated Development Environment), ce rulează pe un calculator desktop (de exemplu un
PC).:
– dezvoltarea programelor utilizator (de obicei în limbaj C şi / sau asamblare) într-o
fereastra de editare.
– compilator si editor de legături
– depanarea şi punerea la punct a programelor prin debugger
– asamblor pentru rutinele scrise în asamblare
– simulator pentru rularea programelor (inclusiv pas cu pas prin debugger) şi
urmărirea conţinutului registrelor interne, a memoriei, a porturilor de IO, a
circuitelor timer / counter, etc.
– transferul codului (program executabil) către memoria locala (flash, EEPROM) a
microcontrollerului
– Investiţii anterioare ale companiei (IDE), principii economice.
• Necesităţi de viteza de prelucrare.
– În cazul cel mai dezavantajos al mai multor întreruperi aflate în curs de servire
procesorul trebuie să funcţioneze respectând specificaţiile de proiectare.
– Lungimea buclelor de interogare suficient de scurtă ca să nu se piardă niciodată un
octet de la o intrare de date serială, sau de la oricare altă interfaţă.
– Frecvenţa de ceas a procesorului nu trebuie confundată cu frecvenţa oscilatorului
de ceas.
– Setul de instrucţiuni este de asemenea foarte important. În unele aplicaţii
arhitectura RISC poate fi o capcană.
• ROM-ability
– Flash
– EPROM
– OTP
– ROM.
• Costuri
• In Circuit programming
• Arhitectura memoriei
• Cerinţe de putere
• Cerinţe de mediu
– Unele aplicaţii impun ca MP să lucreze la game extreme de temperatura şi
radiaţie.

DEZVOLTAREA VERSIUNII ARHITECTURALE

• Proiectarea componentelor hardware şi software


• Integrarea sistemului prin conectarea componentelor proiectate.
• Verificare si obţinere de informaţii de feedback
• Inspecţia unui proiect se face de către o altă persoana decât proiectantul (detectarea
omisiunilor, erorilor). Inspecţia se face pe baza unor prezentări scrise sau orale
din partea proiectantului.
• Documentaţia:
– detectarea uşoară a componentelor care conduc la neconformităţi cu cerinţele
– comunicarea dintre membrii unei echipe
– elaborarea rapoartelor cu privire la proiect
– elaborarea documentaţiei finale a proiectului,
– reutilizarea componentelor proiectului pentru alte proiecte, modificare, upgrade.
• Elaborarea unui plan pentru integrarea şi testarea componentelor

PROIECTE LA NIVEL DE SISTEM. REZULTATE


Structura sistemului în termenii
componentelor mari şi
interconexiunile dintre acestea.
Modul de implementare a • Specificaţii pt. blocuri funcţionale
funcţiilor si modul de
implementare a componentelor
• Alegerea procesorului • Alegere MCU/CPU
• Alegerea limbajului • Alegere limbaj
• Definirea blocurilor majore • Revizie de proiectare a sistemului

hardware şi software
• Opţiune între cumpărare sau
construire prin forte proprii.
• Partiţionare: Blocuri
funcţionale, Hw / SW

EXEMPLU: Harta GPS


Diagrama bloc ce defineşte arhitectura pentru harta mobila

HARDWARE
SOFTWARE

IMPLEMENTAREA SISTEMULUI
• Implementarea hardware si software
• Proiectare de detaliu componente si construcţie
– Pentru software asta înseamnă proiectarea de detaliu, scriere şi depanare a
codului
– Pentru hardware înseamnă proiectarea de detaliu, realizarea proiectului prototipului si
testarea circuitelor.
• Implementare nucleu MCU
• Construcţie şi testare alte blocuri funcţionale ale arhitecturii. Daca la proiect lucrează o singura
persoana, atunci blocurile funcţionale sunt completate secvenţial. Dacă există mai mulţi
proiectanţi acestea se pot rezolva în paralel.
• Sarcinile presupuse pentru fiecare bloc funcţional includ proiectare hardware de detaliu si
construcţie, proiectare software de detaliu şi construcţie şi apoi integrarea hardware-software şi
testarea
• Pot exista interdependenţe între proiectarea hardware şi software. Partea hardware nu poate fi
testată până când o parte din software nu este gata, iar software nu poate fi testat până când
partea din proiectul hardware nu este gata
• În mod tipic se construieşte hardware şi se testează minimal mai întâi. Apoi majoritatea
efortului se concentrează pe scrierea de software şi testarea software pe hardware.
• Documentarea sistemului

VERIFICARE SI TESTARE
• Scop: verificare, testare, încorporare de informaţii de feedback pentru corectarea
neconformităţilor
• Revizii:
– Reviziile sunt demonstraţii, inspecţii ale schemelor si inspecţii ale
codului
– Revizia trebuie făcută de specialişti independenţi, familiari cu proiectul
(CERINŢE) şi tehnologiile, care să ajute la detectarea erorilor
– Se pot detecta omisiuni, erori
• Testarea produsului final este o continuare a activităţilor de testare din timpul proiectării,
acestea putând fi urmărite conform documentaţiei elaborate la proiectare arhitecturală
• Testare publică - un proiect preliminar este distribuit unor beneficiar de la care se aşteaptă
feedback (“beta testing”). Reacţia de la clienţi poate duce nu numai la detectarea unor erori,
schimbarea codului, dar şi la schimbarea unor specificaţii. Nu e recomandată întotdeauna în
domeniul EmS.

FURNIZARE PRODUS FINAL SI MENTENANŢA


• Prototipul final şi integrarea constituie ultima fază a proiectării.
• Este faza în care toate blocurile funcţionale sunt înglobate şi se construieşte prototipul
hardware final. De asemenea modulele software sunt combinate, iar codul este revizuit pentru a
rula ca o aplicaţie de sine stătătoare pe prototip. Unele din componentele hardware si software
au fost deja construite şi testate pe un sistem de dezvoltare, înainte de aceasta fază
• În funcţie de complexitatea sistemului de dezvoltare utilizat aceasta ultima faza poate fi un pas
uşor de realizat, sau poate fi o operaţie complexă.
• În mediul competitiv actual multe din deciziile luate la proiectare se bazează pe re-utilizarea
unor componente ale proiectelor deja existente. Astfel ca ciclul de viaţă al unui proiect continua
şi după producţie şi el poate include mentenanţa produsului, raportarea bugurilor şi arhivarea.

FURNIZARE PRODUS FINAL ŞI MENTENANŢA


• Documentare:
– Importanţa atât pentru componentele hardware, dar şi mai importantă pentru cele
software. Permite detectarea uşoară a componentelor care conduc la neconformităţi cu
cerinţele, permite comunicarea dintre membrii unei echipe, elaborarea rapoartelor cu privire la
proiect, elaborarea documentaţiei finale a proiectului, permite reutilizarea componentelor
proiectului pentru alte proiecte.
– Pentru software toate informaţiile referitoare la etapele anterioare, de la punerea
problemei, elaborarea algoritmului şi a schemei logice (eventual diversele versiuni
succesive indicând evoluţia programului)
– Sursa programului (cu comentarii suficiente pentru a se corela cu schema
logică), eventuale eşantioane de date de intrare / ieşire, dacă este cazul
Curs 3
Componentele sistemelor incorporate
Structura cu exemple
Obiective de instrucţie
După parcurgerea acestei lecţii studenţii vor
- cunoaşte structura
- specificaţiile componentelor principale a sistemelor incastrate
- Cunoştinţe speciale despre calculatoare “single board”
Cerinţe preliminare
Electronică digitală, Microprocesoare

Introducere

Diferitele componente ale sistemelor incorporate pot fi grupate ierarhic de la


Componente ale nivelelor sistemului la Componente ale nivelelor tranzistoarelor. O componentă
a unui sistem (sau a unui subsistem) diferă de ceea ce este considerată ca o componentă
electronică standard. Componentele standard sunt în mod normal dispozitive active cum ar fi
circuite integrate, memorii, diode, tranzistoare, etc. împreună cu componentele pasive precum
rezistenţe, condensatoare şi inductanţe. Acestea sunt elementele de bază de care este nevoie
pentru monta o placă de circuit pentru o aplicaţie oarecare conform unui proiect specific.
Pe de altă parte, are componente active şi componente pasive montate pe o placă de
circuit care este configurat pentru o sarcină specifică (fig. 3.1). Componentele sistem pot fi atât
module single funcţionale cât şi module multifuncţionale care servesc la realizarea blocurilor
înalt integrate a unui sistem. O componentă sistem poate fi una precum o simplă placă de

Fig. 3.1. Ierarhizarea componentelor


intrări/ieşiri digitale sau una complexă, ca un computer cu video, memorie, reţea şi intrări/ieşiri,
toate pe o singură placă. Componentele sistem sunt realizate conform standardelor industriale şi
sunt disponibile din multe surse pe plan mondial.

Structura unui sistem incorporat

Structura tipică a unui sistem incorporat este prezentată în figura 3.2. Aceasta poate fi
comparată cu aceea a unui computer desktop prezentată în figura 3.3. În mod normal într-un
sistem incorporat memoria primară, unitatea centrală de calcul şi multe componente periferice
incluzând convertoarele analog numeric sunt incluse într-un singur chip. Aceste chip-uri sunt
constituite ca microcontrolere. Acesta este indicat prin linia punctată în figura 3.2.
Pe de altă parte un computer desktop poate conţine toate aceste circuite într-o singură
placă PCB (Power Circuit Board) cunoscută în genere ca “placă de bază”. Deoarece aceste
computere manipulează cantităţi mari de date în comparaţie cu sistemele incorporate au fost
elaborate modalităţi de pentru stocarea şi transferul mai rapid între CPU şi memorie, CPU şi
dispozitivele I/O şi între memorie şi dispozitivele de intrare/ieşire. Stocarea este desăvârşită prin
ieftinirea memoriilor secundare precum hard disk-uri şi CDROM-uri. Procesul de transfer al
datelor este îmbunătăţit prin incorporarea metodelor de acces a memoriilor cache multinivel şi
metodelor DMA. În general pentru sistemele incorporate nu sunt necesare astfel de aranjamente.
Din cauza numărului componentelor eterogene într-un computer desktop sunt necesare surse de
tensiune cu nivele de tensiune diferite (tipic ±12V, ±%V, ±3,25V). Pe de altă parte chip-urile
pentru sistemele incorporate au nevoie de un singur nivel de tensiune (tipic +5V).

Fig. 3.2. Structura tipică a unui sistem incorporat

Schema structurală a unui calculator desktop


Exemplu tipic
Un computer single board (SBC)

Fig. 3.4. Calculator single board (SBC)


Vom prezenta caracteristicile acestui (SOC). Va fi o cale pentru înţelegerea tipurilor mai
complexe System on Chip (SOC).
Diferite elemente şi semnificaţiile lor sunt următoarele:

VIA 733MHz or 1 GHz low power C3 processor EBX-compliant board Acesta este
procesorul acestui SBC. VIA reprezintă compania care produce procesorul, 733MHz sau 1GHz
este frecvenţa ceasului procesorului. C3 este codul producătorului.

Fig. 3.5. Microprocesorul


32 to 512MB of system PC133 SDRAM supported in a 168-pin DIMM socket - Memorie
RAM- se montează pe socluri de 168 de pini standard pentru DIMM (dual in line memory
modules) care permit montarea şi demontarea comodă a acestora

Socket for up to 1Giga Byte bootable DiskOnChip or 512KB SRAM or 1MB EPROM - Soclu
pentru DiskOnChip butabil mai mare de 1Gb sau 512kB Ram sau 1Mb EPROM
Această memorie este RAM static sau EPROM care conţine sistemul de operare, având acelaşi
rol ca şi Hard disk+ul pentru calculatoarele desk top
Type I and II Compact Flash (CF) cards supported - Flash compact (CF) de tip I sau II
(card)
Are rolul unui hard-disk sau floppy semiconductor. Memoria flash reprezintă memorie de tip
EEPROM (Electricaly Easable and Programmable Read Only Memory). Tip I sau II reprezintă
format+uri diferite, tipul II fiind mai compact şi mai recent.

Fig. 3.7. Memorie flash


PC- compatible support Linux, Widows CE. NET XP, VISTA sau alte x86 copatible
RTOS- Indică diferite sisteme de operare suportate de platforma SBC.
High resolution video controller supports: Color panels supported with up to 36-bits/pixel
Supports resolutions up to 1920 x 1440 – Indică calitatea video suporatată de chip-ul video on-board
Simultaneous CRT and LCD operation: 4X AGP local bus for high speed operation: LVDS
supported – Indică posibilitatea operării simultane cu monitor cu tub catodic (CRT – Catodic Ray
Terminal) sau LCD; AGP(Accelerated Graphics Port)- un port graphic extreme de rapid destinat
plăcilor grafice performante; 4x reprezintă viteza portului graphic; LVDS (Low Voltage Differential
Signaling) – metodă cu zgomot, putere şi amplitudine redusă pentru transmisii de date de mare
viteză (Gb per secundă), cu cablu cu ecran de cupru.
Dual 10/100 Mbps Intel PCI Ethernet controllers – Controler de reţea dual 10/100Mbps
4 RS-232 serial ports with FIFO, COM1 & COM2 with RS-422/485 support – interfaţă serial
FIFO; RS-232/RS-422/RS-485 sunt standard de comunicaţie standard care vor fi studiate pe parcurs.
COM1 şi COM2 suporturi pentru acelaşi port RS-232
Bi-directional LPT port supports EPP/ECP – LPT (Line Printer Terminal);
EPP/ECP(Enhanced Parallel Port/Extended Capabities Port) -
48 bi-directional TTL digital I/O lines with 24 pins capable of event sense interrupt
generation- 48 de lini I/O digitale suplimentare. Pe unele dintre ele se pot sesiza întreruperi.
Four USB ports onboard – USB (Universal Serial Bus) – este un bus extern standard care
suporta rate de transfer de 12Mbps; se pot conecta mouse, modem, tastatura, etc.
Two, dual Ultra DMA 33/66/100 EIDE connectors
Ultra DMA – soclu pentru DMA. Este un mod de transfer a unui volum de date din memorie pe
hard-disk şi invers.
EIDE (Enhanced Integrated Drive Electronics) – o nouă versiune îmbunătăţită pentru interfaţa
dispozitivului IDE. Suportă rate de trei patru ori mai mari decât IDE standard. Mai mult, poate
suporta dispozitive de stocare mai mari de 8,4Gb în timp ce vechile IDE erau limitate la 512MB.
Numărul 33/66/100 reprezintă rata în Mbps.
Floppy disk controller supports 1 or 2 drives
AC97 Audio-Codec 97 - (audio codec)
PC/104 and PC/104-Plus expansion connectors – PC 104 este numele unui computer
personal foarte popular proiectat iniţial de IBM numit PC iar 104 reprezintă numărul de pini utilizaţi
pentru conectarea plăcilor împreună. Plăcile PC 104 sunt mult mai mici decât Plăcile pe ISA.
AT keyboard controller and PS/2 mouse support – iniţial tastaura avea 84 de taste, înlocuite
ulterior cu 101 Enhnaced Keyboard.
Two interrupt controllers and 7 DMA channels, Three, 16-bit counter/timers, Real Time
Clock, Watch Dog Timer and Power on Self Test – Două controlore pentru întreruperi, 7 canale
DMA, trei contoare/timere pe 16 biţi, Ceas de timp real

Exemplu de specificaţii
Specifications
+5 volt only operation
Mechanical
Dimensions: 5.75" x 8.0" (146mm x 203mm)
Jumpers: 0.025" square posts
Connectors
Serial, Parallel, Keyboard: 50-pin on 0.100" grid
COM3 & 4: 20-pin on 0.100" grid
Floppy Disk Interface: 34-pin on 0.100" grid
EIDE Interface: 40-pin on 0.100" grid (Primary)
44-pin on 2mm grid (Primary)
40-pin on 0.100" grid (Secondary)
50-pin 2mm Flash connector
Parallel I/O: Two, 50-pin on 0.100" grid
CRT: 14-pin on 2-mm. grid
FP-100 Panel: Two, 50-pin on 2-mm. grid
LVDS 20-pin on 0.100" grid
Ethernet: Two RJ-45
PC/104 bus: 64-pin 0.100" socket, 40-pin 0.100" socket
PC/104-Plus 120-pin (4 x 30; 2mm) stackthrough with shrouded header
USB Four, 4-pin 0.100”
Audio Three, 3.5mm stereo phone jacks
Power: 9-pin in-line Molex
Environmental
Operating Temperature:
-40° to +85°C (733MHz)
-40° to +60°C (1GHz)
Non-condensing relative humidity: 5% to 95%

Concluzii
Rezultă din exemplul anterior că un sistem incorporate tipic constă în mare din următoarele
component montate pe o singură placă sau un singur CIP:
1. Procesor
2. Memorie
3. Module de interfaţă intrări/ieşiri
4. CAN şi CNA
5. Software ca sistem de operare
6. Software de aplicaţie
Una sau mai multe componente din cele prezentate anterior pot fi plasate pe o singură placă
sau pe un singur CIP. Într-un system incorporate tipic, microprocesorul, o mare parte a memoriei şi
principalele dispozitivele I/O sunt realizate pe un singur CIP numit microcontroller. Sistemele
incorporate lucrează pentru realizarea unor scopuri specific şi suportă în general o programare
minimală din partea utilizatorului. Interacţiunea cu utilizatorul constă dintr-o serie de comenzi care
sunt executate de RTOS prin apelarea unor subroutine. RTOS este stocat în memoria flash sau în
memoria read only. Pentru stocarea datelor temporare se vor utilize memorii care pot fi şterse. Dacă
CPU este plasat pe acelaşi CIP cu memoria, atunci o parte din memorie poate fi utilizată ca memorie
tampon. Altfel, un număr din regiştrii CPU vor fi folosiţi ca memorie tampon. CPU comunică cu
memoria prin adrese şi bus-ul de date. Durata şi controlul acestor schimburi de date sunt realizate de
unitatea de control a CPU prin intermedioul liniilor de control. Memoriile plasate pe acelaşi CIP cu
procesorul au viteze de transfer mai mari Pe de altă parte, dispozitivele I/O au diverse grade de
viteze de lucru. Aceste viteze diferite de transfer sunt manipulate în moduri diferite de către
processor. Dispozitivele cele mai lente au nevoie de circuite de interfaţare. În general nu sunt
utilizate chip-uri mai rapide decât microprocesorul.
Arhitectura unui sistem icorporat tipic esate prezentată în figura 3.8. Unitatea hardware
constă din elementele prezentate anterior conectate cu un subsistem numeric precum şi cu un
subsitem analogic. Software-ul sub forma unui RTOS este resident în memorie.

Fig. 3.7. Arhitecura unui sistem incorporat


Procesoare

Unitatea de procesare centrală este cea mai importantă componentă a sistemelor incastrate.
Depinzând de tipul aplicaţiei procesoarele se pot clasifica în trei clase principale:
1. Microprocesoare de uz general
2. Microcontrolere
3. Procesoare digitale de semnal
Pentru mai multe aplicaţii specifice pot fi proiectate procesoare deosebite. În afară de cazul în
care cererea este mare costurile de proiectare şi producere a procesorului vor fi mari. Prin
urmare, în cele mai multe aplicaţii, proiectarea este finalizată utilizând procesoare disponibile pe
piaţă. Totuşi pot fi utilizate FPGA (Field Programmable Gate Array) pentru a implementa uşor
procese oarecare simple. Un FPGA etse un chip logic care poate fi programat. Acestea pot avea
sute de porţi care pot fi interconectate ca un EPROM (Erasable Programable Read Only
Memory). Sunt utilizate în special pentru proiectarea prototipurilor circuitelor integrate. Odată
proiectat, cipul cablat este produs pentru obţinerea vitezelor mai mari.

Destinaţii generale ale procesoarelor

Un procesor de uz general este destinat să rezolve probleme într-o largă gamă de aplicaţii
precum comunicaţii, automobile şi sisteme incorporate industriale. Aceste procesoare sunt în
general ieftine pentru că sunt produse într-un număr foarte mare. Fiind ieftine, producătorul
poate investi mai mult pentru creşterea proiectării VLSI cu caracteristici arhitecturale
îmbunătăţite. Astfel, performanţe precum consumul şi dimensiunile pot fi îmbunătăţite. În cele
mai multe cazuri, pentru astfel de procesoare uneltele de proiectare sunt furnizate de producător.
De asemenea hardware+ul suport este ieftin şi uşor disponibil. Totuşi, numai o parte a
capabilităţilor procesorului pot fi necesare pentru o proiectare specifică şi prin urmare sistemele
incastrate per ansamblu nu va fi optimizat aşa cum ar fi trebuit sa fie ,in ceea ce priveşte
dimensiunea, puterea şi siguranţa în funcţionare.
Structura unui procesor de uz general este prezentată în figura 4.1.
Calea de date (data path) constă dintr-un circuit pentru transformarea şi stocarea temporară a
datelor. Conţine o unitate aritmetică şi logică (ALU) capabilă să transofrme datele în cursul
operaţiilor precum adunare, scădere, Şi logic, SAU logic, inversare, deplasare, etc. Calea de date
conţine de asemenea regiştri capabili să stocheze temporar datele generate de ALU sau obţinute
în urma operaţiilor. Bus-ul (magistrala) intern de date susţin datele şi căile de date până când
bus-ul de date extern susţine datele spre şi de la memoria de date. Dimensiunea adresei de date
indică lungimea cuvântului CPU. O adresă de date de 8 biţi corespunde unui CPU pe 8 biţi
precum 8085.
Unitatea de control este alcătuită din circuite pentru extragerea instrucţiunilor program şi
pentru a deplasa datele spre, de la şi prin calea de date în concordanţă cu instrucţiunile extrase.
Există un contor de program (PC) care păstrează adresa următoarei instrucţiuni program ce
trebuie extrase şi un registru de instrucţiuni (IR) pentru păstrarea instrucţiunii extrase. Există de
asemenea o unitate de sincronizare a registrului de stare şi controlului logic. Controlerul
generează semnale de control necesare citirii instrucţiunilor din registru de instrucţiuni (IR) şi
controlului fluxului de date pe calea de date. În general dimensiunea adresei este specificată de
unitatea de control aceasta fiind responsabilă să comunice cu memoria. Pentru fiecare
instrucţiune, controlerul realizează în mod normal mai multe multe etape precum determinarea
locaţiei din memorie a instrucţiunii, decodificarea ei, determinarea operanzilor, executarea
instrucţiunilor pe calea de date şi stocaarea instrucţiunilor. Fiecare etapă durează câţiva cicli de
ceas.
Fig. 4..1. Arhitectura unui procesor de uz general

Microcontrolere

În mod similar modului în care elemnetele unui calculator desktop sunt montate pe o singură
placă, prin montarea pe un singur chip a elementelor principale din arhitectura unui computer se
obţine un microcontroler. Din cauza restricţiilor impuse de realizarea circuitelor VLSI cele mai
multe funcţii de intrare ieşire sunt prezente într-o formă simplificată. Arhitectura tipică a unui
microcontroler este preezentată în figura 4.2.
*Casuţele dublu haşurate reprezintă elemente ale microprocesorului.

În figura 4.2. sunt prezentate următoarele elemente:


The 500 Core conţine CPU care constă din deodificatorul de instrucţiuni, ALU, şi secţiunea de
control program.
The housekeeper (administratorul) generează semnalele interne pentru controlul
individual al funcţionării unităţilor din interiorul microcontrolerului.
Port 0 şi Port 2 sunt necesare pentru a acesa codul extern şi datele memoriei şi pentru
generări de coduri.
The external control block (blocul de control extern) manipulează semnalele de control
extern şi cele generate de ceas.
The acces control units este responsabilă pentru selecţia resurselor interne de memorie
IRAM – asigură RAM-ul intrern care include regiştri de uz general.
XRAM – reperezintă RAM-ul intern adiţional ce poate fi uneori inclus.
Intrerrupt Controler gestionează cererile de intrerupere de la unităţile periferice interne,
precum:
- Interfeţe seriale
- Timere
- Convertoare A/N
- Unitatea watchdog (WDU)
- Unitatea de multiplicare-divizare (MDU)

Fig. 4.2. Arhitecutura unui microcontroler tipic (C500 produs de Infineon


Technology, Germania)
Semnalele externe ale acestor unităţi periferice sunt disponibile pe portul I/O paralel sau
pe pini dedicaţi.

Procesoare de semnal numeric (DSP)

Aceste procesoare au fost proiectate pe baza arhitecurii Harvard modificate pentru a


prelucra seemnale de timp real. Caracteristicile acestor procesoare sunt potrivite implementării
algoritmilior de procesare a semnalelor. O operaţie foarte utilizată în acest caz este multiplicarea
tablorurilor. De exemplu, convoluţia şi corelaţia cer multiplicarea tablourilor. Aceasta este
realizată prin multiplicare urmată de acumulare şi adunare. Aceste operaţii sunt realizate de
unitatea MAC (Multiplier and Accumulator ). Uneori aceasta este implementată ca MACD unde
D are semnificaţie de Data move.În general instrucţiunile sunt realizate într-un singur ciclu.
Instrucţiunile tip MACD pot fi executate mai rapid prin implementare paralelă. Acest
fapt este posibil prin accesul separat în paralel la memorie al programului şi datelor. Aceasta
poate fi realizat prin modificarea arhitecturii ca în figura 4.3. Aceste unităţi DSP utilizează în
general unităţi de acces multiplu (Multiple Access) şi memorii multiport (Multi Ported
Memory). Memoriile cu acces multiplu permit mai mult de un acces la memorie într-o singură
perioadă de ceas. Memoriile multiport permit adrese multiple şi la porturile de date. Aceasta
vcreşte de asemenea numărul aceselor pe unitate de ciclu de ceas.
Arhitectura specifică pentru cuvinte de instrucţiuni foarte lungi (VLIW- Very Long
Instruction World) este de asemenea potrivită pentru aplicaţii de procesare a semnalelor digitale.

Fig. 4.3 Arhitectură Hardvard modificată


Acestea au un număr de unităţi funcţionale şi căi de date aşa cum se vede în figura 4.4.
Instrucţiunile sunt extrase din memorie; Operanzii şi operaţiile ce trebuie realizate de diferite
unităţi sunt specificate în corpul instrucţiunii.Unităţile funcţionale multiple împart un registru
multiport pentru extragerile de operanzi şi stocarea rezultatelor. Accesul aleatoriu paralel la
regiştri este posibil prin intermediul barei încrucişate de citire/scriere (Read/Writw Cross Bar).
Execuţia în unitatea funcţională este finalizată concutrent cu operaţiile de încărcare/salvare a
datelor între RAM şi regiştri.

Microprocesor versus microcontroler

Un microprocesor este unitatea centrală de prelucrare a unui computer de uz general.


Pentru a realiza un microcalculator complet este necesar să fie adăugate elemente precum
memorii (RAM şi ROM), decodificatoare de memorie, un oscilator şi un număr de dispozitive
de intrare ieşire. Utilizarea principală a procesorului este să citescă date, să realizeze calcule

Fig. 4.4. Memorie cu port dual

Fig. 4.5. Diagrama bloc pentru arhitectura VLSI


complicate cu aceste date, şi să stocheze rezultatele pe dispozitive de stocare corespunzătoare
sau să le afişeze pe display. Aceste procesoare au o arhitectură complexă, cu multiple etape de
prelucrare succesivă şi paralelă. Memoria este împărţită în trepte precum cahe, multinivel şi
RAM. Perioada necesară dezvoltării microprocesoarelor este mare datorită complexităţii foarte
mari a proiectării circuitelor complexe VLSI.
Proiectarea microcontrolerelor este condusă de dorinţa de a realiza o flexibilitate şi
expandare maximă. Microcontrolerele au în mod uzual RAM şi ROM sau (EPROM) on chip la
care se adaugă hardware I/O on chip petru a reduce numărul chip-urilor la unul singur. Ca
urmare a a utilizării hardware-ului on chip pentru I/O, RAM şi ROM rezultă CPU cu
performanţe destul de reduse. De asemenea, microcontrolerele au adesea incluse timere pentru
generarea întreruperilor şi care pot fi astfel utilizate cu CPU, şi A/D, D/A on chip sau porturile
paralele pentru a genera I/O strict controlate în timp. Principala utilizare a microcontrolerelor
este de a controla operaţiile unei maşini utilizând un program fixat care este stocat în ROM şi
care nu se modofică de-a lungul duratei de viaţă a sistemului. Microcontrolerul este conceput
pentru a avea datele dela şi la pinii proprii; arhitectura şi setul de instrucţiuni sunt optimizate să
manipuleze datele atăt pe bit cât şi pe octet.
Diferenţa dintre microprocesor şi microcontroler este foarte bine exemplificat prin faptul
că cele mai multe microprocesoare au multeoperaţii pentru a muta date din memoria externă la
CPU în timp ce microcontrolerele pot avea una sau două. Pe de altă parte, microprocesoarele au
una sau două tipuri de instrucţiuni pe bit în timp ce microcontrolerele vor avea multe astfel de
tipuri.

Fig. 4.6. Sistem cu microprocesor

Fig. 4.7. Microcontroler


Microprocesoare versus DSP

Principalele caracteristici ale DSP


- Sunt microprocesoare specializate pe aplicaţii de procesare a semnalelor
- Sunt bazate pe arhitectura Harvard
- Realizează de la două la patru accesări de memorie pe ciclu
- Hardware-ul specializat realizează operaţiile aritmetice de bază într-un singur
ciclu
- Au un set foarte limitat de instrucţiuni caracteristice SIMD (Single Instruction
Multiple Data) foarte complexe şi specializate
- Operaţii multiple per instrucţiune
- Adresare specializată(autoincrementare, circulară, prin inversarea biţilor)
- Întreruperile sunt dezafectate pentru durata unor operaţii
- Au un numar mic (sau de loc) de regiştri tampon
- Foarte rar au caracteristici dinamice
- Port serial sincron

Fig. 4.8. Organizarea memoriei DSP

Caracteristicile procesoarelor de uz general


- Sunt unităţi centraule pentru PC-uri Work-station etc.
- Se bazează pe arhitectura von Newmann
- În mod normal se realizează 1 acces per ciclu
- În cazul instrucţiunilor de uz general se realizează o operaţie per instrucţiune
- Mod de adresare de uz general
- Numai cicluri software
- Intreruperile nu pot fi dezafectate
- Registrii tampon sunt utilizaţi fercvent
- Se utilizează o arie largă de periferice şi dispozitive I/O atăt oc chip cat şi off
chip.
- Port serial asincron

Fig. 4.9. Organizarea memoriei în procesoarele de uz general


Memoria

Memoria asigură procesorului necesităţile de stocare pe durată scurtă şi lungă în timp ce


regiştrii asigură numai cerinţele de stocare pe termen scurt. În cazul arhitecturii Princeton pe
acelaşi suport poate fi stocat atăt programul cât şi datele în timp ce în cazul arhitecturii Harvard
programul şi datele ocupă blocuri de memorie separate. Primul mod conduce la o arhitectură
simplă în timp ce cel de-al doile impune două conexiuni separate şi de aici datele şi programul
pot conduce în paralel la procesare paralelă. Procesoarele de uz general au arhitectură de tip
Princenton.
Memoria poate fi Read-Only-Memory (ROM) sau Random Access Memory (RAM). Pot
fi încastrate în chip-ul procesorului sau pot fi externe. Memoria on chip este mai rapidă decât
memoria externă. Pentru a reduce timpul de acces poate fi realizată o compie locală a unei
porţiuni de memorie care poate fi păstrată într-o zonă de memorie mai mică dar mai rapidă,
numită memorie cash. Memoria poate fi clasificată în memorie dinamică şi memorie statică.
Memoria dinamică disipă mai puţină putere şi prin urmare potae fi realizată mai compact şi mai
ieftin, timpul de acces însă este mai mare în cazul memoriei dinamice decât în cazul memoriei
statice. În RAM-ul dinamic (DRAM) data este menţinută prin operaţii de regenerări periodice în
timp ce în memoria statică )SRAM) aceasta este reţinută continuu. SRAM este mai rapir decât
DRAM-ul dar consumă mai mult. Memoria intermediară cash este de tip SRAM.

Dispozitive de intrare ieşire şi chip-uri de interfaţă

Sistemele incorporate de timp real interacţionează cu mediul şi utilizatorii prin


intermediul unui hardwer încastrat. În mod ocazional sunt necesare circuite externe pentru
comunicţia cu utilizatorii, alte computere sau reţea.
În telefoanele mobile de exemplu, dispozitivele de intrare ieşire sunt tastataura, ecranul,
antena, microfonul, speaker-ul, LED-urile indicatoare, etc. Semnalele de la aceste unităţi pot fi
analogice sau numerice. Pentru a genera un semnal analogic de la microprocesor este nevoie de
un CNA iar pentru ca acesta să accepte un semnal analogic este necesar un CAN. Aceste
convertoare au în continuare anumite moduri de control. Ele pot lucra la viteze diferite de ale
procesorului. Pentru a sincroniza şi controla aceste interfeţe este nevoie de alte chip-uri de
interfaţă. În mod similar pot fi necesare chip-uri de interfaţă cu tastatura, antena,, ecranul, etc.
Dispozitivele de intrare ieşire sunt în general mai lente decât procesorul; prin urmare procesorul

Fig. 4.10. Bloc de interfaţă I/O tipic


poate aştepta până cînd acetea răspund la o cerere de transfer de date. Atunci când interfeţele I/O
sunt on chip aceste neajusuri sunt eliminate, nemaiexistănd cicluri de aştepare procesor.
Concluzii

Pe lângă circuitele prezentată sistemele incorporate real time pot avea şi alte circuite specifice
incluse în acealşi chip sau pe aceeaşi placă. Acestea sunt cunoscute ca ASIC (Application
Specific Integrated Circuit). Prezentăm în continuare câteva exemple:
1. MODEM uri (unităţi de modulare, demodulare)
Sunt utilizate pentru a modula un semnal digital într-un semnal analogic de înaltă frecvenţă
(pentru comunicaţii wire less). Există mai multe metode de modulare (amplitudine, frecvenţă,
fază, etc.). Acelaşi dispozitiv este utilizat şi pentru demodulare.
2. CODEC-uri –(Unităţi de compresie decompresie)
Sunt utilizate în general pentru procesarea semnalelor digitale video sau/şi audio. Un CODEC
reduce cantitatea de date ce trebuie transmise, eliminând informaţia redundant (la transmisie) şi
reconstituind semnalul (la recepţie)
3. Filtre
Filtrele sunt utilizate pentru condiţionarea semnalelor prin eliminarea zgomotelor şi a altor
component perturbatoare. O clasă specific de filtre numite Antialiassing sunt utilizate înaintea
conversiei analog numerice pentru a preveni asiasing-ul la achiziţia semnalelor de bandă largă.
4. Controlere
Acestea sunt circuite specific pentru controlul motoarelor, şi a altor tipuri de elemente de
execuţie.

5 Memorii

Obiective
După aprofundarea lecţiei studenţii vor cunoaşte
Diferite tipuri de memorii
- Memorie procesor
- Memorie primară
- Interfaţarea memoriei

Introducere

Cele mai multe calculatoare moderne au fost proiectate conform arhitecturii de bază
numită Von-Neumann prezentată în figura 5.1.

Fig. 5.1. Arhitectura Von Neumann


Memoria stochează atât instrucţiuni cât şi date. Nu se poate distinge între date şi
instrucţiuni. CPU trebuie să fie direcţionat către adresa codului instrucţiunii. Memoria este
conectată la CPU prin intermediul următoarele linii (figura 5.2):
1. Adrese
2. Date
3. Control

Fig. 5.2. Interfaţarea memoriei


Într-o operaţie de citire a memoriei CPU încarcă adresa memoriei în magistrala de
adrese. În cele mai multe cazuri aceste linii sunt încărcate într-un decodor care selectează locaţia
de memorie corespunzătoare. Apoi CPU trimite un semnal de control de citire (read). Data
stocată în această locaţie este transferat spre procesor via linii de date.
În operaţiile de scriere, după ce adresa este încărcată CPU trimite semnal de scriere
urmat de datele ce trebuie scrise în locaţia de memorie.
Memoria poate fi clasificată după mai multe criterii bazate pe localizare, putere
consumată, căi de date stocate., etc. Memoria poate fi clasificată la nivel de bază astfel:
1. Memorie procesor (registri)
2. Memorie internă on-chip
3. Memorie primară
4. Memorie cash
5. Memorie secundară

Memorie procesor (Registri)

Cele mai multe procesoare au mai mulţi regiştri asociaţi cu unitatea aritmetică şi logică
(ALU). Aceştia stochează operanzii şi rezultatele instrucţiunilor. Ratele de transfer de date sunt
foarte rapide fără să fie necesare cicluri adiţionale de ceas. Numărul regiştrilor variază de la
procesor la procesor. Cu cât sunt mai mulţi cu atât creşte viteza de execuţie a instrucţiunilor. Dar
complexitatea arhitecturii limitează cantitatea de memorie a procesorului.

Memorie internă on-chip

În unele procesoare poate exista un bloc de memorie. Acestea pot fi tratate în acelaşi
mod ca o memorie externă. Cu toate astea este foarte rapidă.

Memorie primară
Aceasta este una care este situată în afara CPU. Poate fi situată în acelaşi CHIP cu CPU.
Aceste memorii pot fi statice sau dinamice.

Memoria cache

Aceasta este situată între procesor şi memoria primară. Se comportă ca un tampon pentru
instrucţiunile sau datele pe care procesorul le anticipează. Pot fi mai multe niveluri de memorie
cahe.

Memorie secundară

Acestea sunt tratate ca dispozitive de intrare/ieşire. Sunt cele mai ieftine dar şi cele mai
lente dispozitive de stocare conectate prin intermediul unor circuite de interfaţă intrare/ieşire.
Sunt memorii optice sau magnetice precum Hard disk, CD Rom, etc. Aceste memorii pot fi
clasificate în memorii volatile şi memorii nevolatile.

Memorie volatilă - este memoria al cărei conţinut este şters cânt circuitul de alimentare
este întrerupt. SRAM (semiconductor random acess) fac parte din această categorie.
Memorie nevolatilă – memoriile nu sunt afectate chiar dacă alimentarea este întreruptă.
Memoriile magnetice (Hard Disk), Memoriile optice (CDROM), memoriile de tip ROM (read
only memory) fac parte din acest tip de memorii.

Stocarea datelor

O memorie de m cuvinte poate stoca mxn date: m cuvinte de n biţi. Un cuvânt este
localizat la o adresă, prin urmare pentru a adresa m cuvinte sunt necesare un număr de semnale
de intrare de adrese k=log2(m) sau k linii de adrese pot acesa m=2k cuvinte.
Fig. 5.3. Regiştri interni
De exemplu: o memorie de 4096x8
- poate stoca 32768 de biţi
- 12 semnale de intrare de adresă
- 8 semnale de intrare/ieşire de date

Fig. 5.4.Tablou de date

Accesarea memoriei

Locaţia memoriei poate fi accesată prin plasarea adresei pe liniile de adrese. Liniile de
control read/write selectează operaţia (citire scriere).Unele dispozitive de memorare sunt
dispozitive multiport astfel încât pot fi accesate simultan mai multe locaţii de memorie.

Caracteristicile memoriei

Caracteristicile unei memorii tipice sunt următoarele:


- Capacitatea de stocare: numărul de biţi/bytes sau cuvinte care pot fi stocate
- Timpul de acces la memorie (timp de citire sau timp de scriere): cât timp este
necesar pentru ca memoria să depună datele pe liniile de date după ce
memoria a fost adresată sau cât de rapid poate stoca datele depuse pe liniile ei
de date.
- Puterea consumată şi nivelul de tensiune: Puterea consumată este un factor
foarte important pentru sistemele incorporate. Este necesar ca puterea
consumată să fie cât mai mică iar capacitatea respectiv gradul de comprimare
cat mai mare. Din considerente de disipare a puterii dimensiunea memoriei şi
capacitatea de stocare sunt corelate cu puterea consumată.

Memoriile utilizate în sistemele incorporate au două caracteristici specifice:


- capacitate de scriere
- randamentul stocării
Capacitatea de scriere – este modul şi viteza cu care această memorie poate fi scrisă
Domeniul capacităţii scriere
- cea mai bună: procesorul scrie în memorie simplu şi rapid (ex. memoria
RAM)
- mediu: procesorul scrie în memorie dar lent (ex: FLASH, EEPROM –
ellectrically erasable and programmable read only memory)
- jos : sunt necesare echipamente speciale programabile pentru a scrie în
memorie (EPROM, OTP ROM – one time programmable read only memory)
- cea mai slabă: biţii sunt stocaţi numai la fabricare (ex. Mask-programmed
ROM)
Randamentul (permanenţa) stocării – reprezintă abilitatea de a păstra biţii stocaţi.
Domeniile de randament al stocării sunt:
- cel mai ridicat: nu se pierd niciodată biţi (ex. mask-programmed ROM)
- mediu: păstrează biţii zile, luni sau chiar ani după ce sursa de alimentare a
memoriei a fost întreruptă.
- jos: păstrează biţii cât timp este asigurată alimentarea memoriei (ex. ROM)
- cel mai jos: începe să piardă biţii imediat după ce a fost scris (DRAM)
Memoria nevolatilă este cea care menţine datele după ce alimentarea a fost întreruptă şi
este reprezentară de cele din domeniul cel mai ridicat şi mediu.

Tipuri de memorii comune

ROM (Read Only Memory)


Aceasta este o memorie nevolatilă. Pot fi numai citite nu şi scrise de către microprocesor
în cadrul unui sistem incorporat. În mod normal acestea sunt scrise (programate) înaunte de
inserarea în sistemul incorporat. Sunt utilizate pentru:
- stocarea programelor software pentru procesoarelor de uz general
- stocarea constantelor necesare sistemului
- implementarea circuitelor combinaţionale
Spre exemplificare în figura 5.7. este prezentată structura unei memorii ROM. Liniile orizontale
reprezintă cuvintele iar pe verticală sunt liniile de ieşire date, linii de date care sunt conectate în
ciclu. Dacă adresa de intrare este de exemplu 010 decodificatorul pune pe linia a doua de cuvinte
valoarea 1. Liniile de date Q3 şi Q1 sunt puse pe 1 deoarece aici este setată conexiune. A doua
linie de cuvinte nu este conectata cu liniile d edate Q2 si Q0. De aceea valoarea de iesire este
1010

Fig. 5.7.
Implementarea funcţiilor combinaţionale

Orice circuit combinaţional de n funcţii şi k variabile poate fi realizat cu 2kxn ROM.


Intrările circuitului combinaţional sunt adrese ale locaţiilor ROM. Ieşirile reprezintă cuvinte
stocate în memorie la locaţiile respective.

Fig. 5.9. Tabela combinationala


ROM cu mască programabilă

Conexiunile sunt programate din fabricaţie şi sunt un set de măşti; pot fi scrise o singură
dat (la fabricare) dar stochează date pentru totdeauna. Sunt în mod uzual utilizate pentru
proiectarea formei finale a sistemelor mari.

OTP ROM (Onet-time programmable ROM)

Conexiunile pot fi programate după fabricaţie de către utilizator; acesta furnizează fişierul cu
conţinutul dorit al memoriei ROM. Înscrierea se face printr-un dispozitiv special numit
“programator” de ROM. Fiecare conexiune programabilă este arsă. Programatorul de ROM arde
fuzibilele acolo unde nu există conexiuni. Au următoarele caracteristici:
- abilităţi de scriere foarte scăzute: se pot înscrie o singură dată şi necesită un
programator
- permanenţă ridicată a informaţiei stocate: biţii nu se schimbă decît dacă se
face reconectarea la programator şi se ard noi fuzibile
- utilizare uzuală în produsul final: ieftine, greu de modificat din greaşeală

EPROM (Erasable Programmable ROM)

Aceasta este cunoscută ca read onlz memory reprogramabilă. Componenta programabilă este un
tranzistor MOS. Acest tranzistor are o poartă flotantă înconjurată de izolator. Sarcină negativă
Microcontrolerul PIC16F84
Introducere

CISC, RISC
Aplicaţii
Clock-ul/instrucţiune
Pipelining
Semnificaţia pinilor

2.1 Generator-oscilator de ceas


2.2 Reset
2.3 Unitatea de procesare centrală
2.4 Porturi
2.5 Organizarea memoriei
2.6 Întreruperi
2.7 Timer-ul liber TMRO
2.8 Memoria de date EEPROM

Introducere
PIC16F84 aparţine unei clase de microcontrolere de 8 biţi cu arhitectură RISC. Structura
lui generală este arătată în schiţa următoare reprezentând blocurile de bază.

Memoria program (FLASH)-pentru memorarea unui program scris.


Pentru că memoria ce este făcută în tehnologia FLASH poate fi programată
şi ştearsă mai mult decât odată, aceasta face microcontrolerul potrivit
pentru dezvoltarea de componentă.

EEPROM-memorie de date ce trebuie să fie salvate când nu mai este alimentare.


Este în mod uzual folosită pentru memorarea de date importante ce nu trebuie pierdute
dacă sursa de alimentare se întrerupe dintr-o dată. De exemplu, o astfel de dată este o
temperatură prestabilită în regulatoarele de temperatură. Dacă în timpul întreruperii
alimentării această dată se pierde, va trebui să facem ajustarea încă o dată la revenirea
alimentării. Astfel componenta noastră pierde în privinţa auto-menţinerii.

RAM-memorie de date folosită de un program în timpul executării sale.


În RAM sunt memorate toate rezultatele intermediare sau datele temporare ce nu sunt
cruciale la întreruperea sursei de alimentare.

PORTUL A şi PORTUL B sunt conexiuni fizice între microcontroler şi lumea de afară. Portul
A are 5 pini, iar portul B are 8 pini.

TIMER-UL LIBER (FREE-RUN) este un registru de 8 biţi în interiorul microcontrolerului ce


lucrează independent de program. La fiecare al patrulea impuls de ceas al
oscilatorului îşi încrementează valoarea lui până ce atinge maximul (255), şi
apoi începe să numere tot din nou de la zero. După cum ştim timpul exact
dintre fiecare două incrementări ale conţinutului timer-ului, poate fi folosit
pentru măsurarea timpului ce este foarte util la unele componente.

UNITATEA DE PROCESARE CENTRALĂ are rolul unui element de conectivitate între


celelalte blocuri ale microcontrolerului. Coordonează lucrul altor blocuri şi execută
programul utilizatorului.
CISC, RISC
S-a spus deja că PIC1684 are o arhitectură RISC. Acest termen este adeseori găsit în
literatura despre calculatoare, şi are nevoie să fie explicat aici mai în detaliu. Arhitectura
Harvard este un concept mai nou decât von-Neumann. S-a născut din nevoia de mărire a
vitezei microcontrolerului. În arhitectura Harvard, bus-ul de date şi bus-ul de adrese sunt
separate. Astfel este posibil un mare debit de date prin unitatea de procesare centrală, şi
bineînţeles, o viteză mai mare de lucru. Separarea programului de memoria de date face
posibil ca mai departe instrucţiunile să nu trebuiască să fie cuvinte de 8 biţi. PIC16F84
foloseşte 14 biţi pentru instrucţiuni ceea ce permite ca toate instrucţiunile să fie instrucţiuni
dintr-un singur cuvânt. Este de asemenea tipic pentru arhitectura Harvard să aibă mai
puţine instrucţiuni decât von-Newmann şi să aibă instrucţiuni executate uzual intr-un ciclu.

Microcontrolerele cu arhitectură Harvard sunt de asemenea numite "microcontrolere RISC".


RISC înseamnă Reduced Instruction Set Computer. Microcontrolerele cu arhitectura
von-Newmann sunt numite "microcontrolere CISC". Titlul CISC înseamnă Complex
Instruction Set Computer.

Pentru că PIC16F84 este un microcontroler RISC, aceasta înseamnă că are un set redus de
instrucţiuni, mai precis 35 de instrucţiuni (de ex. microcontrolerele INTEL şi Motorola au
peste 100 de instrucţiuni). Toate aceste instrucţiuni sunt executate într-un ciclu cu excepţia
instrucţiunilor jump şi branch. Conform cu ceea ce spune constructorul, PIC16F84 ajunge la
rezultate de 2:1 în compresia cod şi 4:1 în viteză în comparaţie cu alte microcontrolere de 8
biţi din clasa sa.

Aplicaţii
PIC16F84 se potriveşte perfect în multe folosinţe, de la industriile auto şi aplicaţiile de
control casnice la instrumentele industriale, senzori la distanţă, mânere electrice de uşi şi
dispozitivele de securitate. Este de asemenea ideal pentru cardurile smart ca şi pentru
aparatele alimentate de baterie din cauza consumului lui mic.

Memoria EEPROM face mai uşoară aplicarea microcontrolerelor la aparate unde se cere
memorarea permanentă a diferitor parametri (coduri pentru transmiţătoare, viteza
motorului, frecvenţele receptorului, etc.). Costul scăzut, consumul scăzut, mânuirea uşoară
şi flexibilitatea fac PIC16F84 aplicabil chiar şi în domenii unde microcontrolerele nu au fost
prevăzute înainte (exemple: funcţii de timer, înlocuirea interfeţei în sistemele mari,
aplicaţiile coprocesor, etc.).
Programabilitatea sistemului acestui cip (împreună cu folosirea a doar doi pini în transferul
de date) face posibilă flexibilitatea produsului, după ce asamblarea şi testarea au fost
terminate. Această capabilitate poate fi folosită pentru a crea producţie pe linie de
asamblare, de a înmagazina date de calibrare disponibile doar după testarea finală, sau
poate fi folosit pentru a îmbunătăţi programele la produsele finite.

Clock-ul /ciclul instrucţiune


Clock-ul sau ceasul este starter-ul principal al microcontrolerului, şi este obţinut dintr-o
componentă de memorie externă numită "oscilator". Dacă ar fi să comparăm un
microcontroler cu un ceas de timp, "clock-ul" nostru ar fi un ticăit pe care l-am auzi de la
ceasul de timp. În acest caz, oscilatorul ar putea fi comparat cu arcul ce este răsucit astfel
ca ceasul de timp să meargă. De asemenea, forţa folosită pentru a întoarce ceasul poate fi
comparată cu o sursă electrică.

Clock-ul de la oscilator intră într-un microcontroler prin pinul OSC1 unde circuitul intern al
microcontrolerului divide clock-ul în 4 clock-uri egale Q1, Q2, Q3 şi Q4 ce nu se suprapun.
Aceste 4 clock-uri constituie un ciclu de o singură instrucţiune (numit de asemenea ciclu
maşină) în timpul căreia instrucţiunea este executată.

Executarea instrucţiunii începe prin apelarea unei instrucţiuni care este următoarea în linie.
Instrucţiunea este apelată din memoria program la fiecare Q1 şi este scrisă în registrul de
instrucţiuni la Q4. Decodarea şi executarea instrucţiunii sunt făcute între următoarele cicluri
Q1 şi Q4. În următoarea diagramă putem vedea relaţia dintre ciclul instrucţiunii şi clock-ul
oscilatorului (OSC1) ca şi aceea a clock-urilor interne Q1-Q4. Contorul de program (PC)
reţine informaţia despre adresa următoarei instrucţiuni.

Pipelining
Ciclul instrucţiune constă din ciclurile Q1, Q2, Q3 şi Q4. Ciclurile de instrucţiuni de apelare
şi executare sunt conectate într-un aşa fel încât pentru a face o apelare, este necesar un
ciclu cu o instrucţiune, şi mai este nevoie de încă unul pentru decodare şi executare. Totuşi,
datorită pipelining-ului (folosirea unei pipeline-conductă, şi este aducerea unei instrucţiuni
din memorie în timp ce se execută alta), fiecare instrucţiune este executată efectiv într-un
singur ciclu. Dacă instrucţiunea cauzează o schimbare în contorul programului, şi PC-ul nu
direcţionează spre următoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps
sau calling), 2 cicluri sunt necesare pentru executarea unei instrucţiuni. Aceasta este pentru
că instrucţiunea trebuie procesată din nou, dar de data aceasta de la adresa corectă. Ciclul
începe cu clock-ul Q1, prin scrierea în registrul instruction register (IR). Decodarea şi
executarea începe cu clock-urile Q2, Q3 şi Q4.

TYC0 citeşte instrucţiunea MOVLW 55h (nu are importanţă pentru noi ce instrucţiune a fost
executată, ce explică de ce nu este un dreptunghi desenat în partea de jos).
TCYI execută instrucţiunea MOVLW 55h şi citeşte MOVWF PORTB.
TCY2 execută MOVWF PORTB şi citeşte CALL SUB_1.
TCY3 execută o apelare a subprogramului CALL SUB_1, şi citeşte instrucţiunea BSF PORTA,
BIT3. Pentru că instrucţiunea aceasta nu este aceea de care avem nevoie, sau nu este
prima instrucţiune a subprogramului SUB_1 a cărei execuţie este următoarea în ordine,
instrucţiunea trebuie citită din nou. Acesta este un bun exemplu a unei instrucţiuni având
nevoie de mai mult de un ciclu.
TCY4 ciclul instrucţiunii este total folosit pentru citirea primei instrucţiuni din subprogram la
adresa SUB_1.
TCY5 execută prima instrucţiune din subprogram SUB_1 şi citeşte următoarea.

Semnificaţia pinilor
PIC16F84 are un număr total de 18 pini. Cel mai adesea se găseşte într-o capsulă de tip
DIP18 dar se poate găsi de asemenea şi într-o capsulă SMD care este mai mică ca cea DIP.
DIP este prescurtarea de la Dual In Package. SMD este prescurtarea de la Surface Mount
Devices sugerând că găurile pentru pini unde să intre aceştia, nu sunt necesare în lipirea
acestui tip de componentă.
Pinii microcontrolerului PIC16F84 au următoarea semnificaţie:

Pin nr.1 RA2 Al doilea pin la portul A. Nu are funcţie adiţională.


Pin nr.2 RA3 Al treilea pin la portul A. Nu are funcţie adiţională.
Pin nr.3 RA4 Al patrulea pin la portul A. TOCK1 care funcţionează ca timer se găseşte de
asemenea la acest pin.
Pin nr.4 MCLR Resetează intrarea şi tensiunea de programare Vpp a microcontrolerului.
Pin nr.5 VSS Alimentare, masă.
Pin nr.6 RB0 Pin de zero la portul B. Intrarea Întrerupere este o funcţie adiţională.
Pin nr.7 RB1 Primul pin la portul B. Nu are funcţie adiţională.
Pin nr.8 RB2 Al doilea pin la portul B. Nu are funcţie adiţională.
Pin nr.9 RB3 Al treilea pin la portul B. Nu are funcţie adiţională.
Pin nr.10 RB4 Al patrulea pin la portul B. Nu are funcţie adiţională.
Pin nr.11 RB5 Al cincilea pin la portul B. Nu are funcţie adiţională.
Pin nr.12 RB6 Al şaselea pin la portul B. Linia de 'Clock' în mod programare.
Pin nr.13 RB7 Al şaptelea pin la portul B. Linia 'Data' în mod programare.
Pin nr.14 Vdd Polul pozitiv al sursei.
Pin nr.15 OSC2 Pin desemnat pentru conectarea la un oscilator.
Pin nr.16 OSC1 Pin desemnat pentru conectarea la un oscilator.
Pin nr.17 RA2 Al doilea pin la portul A. Nu are funcţie adiţională.
Pin nr.18 RA1 Primul pin la portul A. Nu are funcţie adiţională.
2.1 Generator de ceas – oscilator
Circuitul oscilator este folosit pentru a da microcontrolerului un ceas-clock. Ceasul este
necesar pentru ca microcontrolerul să execute programul sau instrucţiunile din program.

Tipuri de oscilatoare
PIC16F84 poate lucra cu patru configuraţii diferite de oscilator. Pentru că configuraţiile cu
oscilator cu cristal şi rezistor-condensator (RC) sunt cele utilizate cel mai frecvent, doar pe
ele le vom menţiona aici. Tipul de microcontroler cu oscilator cu cristal este desemnat ca
XT, iar microcontrolerul cu perechea rezistor-condensator are desemnarea RC. Aceasta este
important pentru că trebuie să numiţi tipul de oscilator când cumpăraţi un microcontroler.

Oscilatorul XT

Oscilatorul cu cristal se află intr-o


carcasă metalică cu doi pini pe care este
înscrisă frecvenţa la care cristalul
oscilează. Mai este necesar câte un
condensator ceramic de 30pF cu celălalt
capăt la masă de a fi conectaţi la fiecare
pin.

Oscilatorul şi condensatorii pot fi


încapsulaţi împreună într-o carcasă cu
trei pini. Un asemenea element se
numeşte rezonator ceramic şi este
reprezentat în scheme ca cel de mai jos.
Pinii centrali ai elementului sunt masa,
iar pinii terminali sunt conectaţi la pinii
OSC1 şi OSC2 ai microcontrolerului.
Când se proiectează un aparat, regula
este să plasaţi oscilatorul cât mai
aproape de microcontroler, pentru a
elimina orice interferenţă de pe liniile pe
care microcontrolerul primeşte tactul de
ceas.

Oscilatorul RC
În aplicaţiile unde nu este nevoie de o mare precizie de timp, oscilatorul RC permite
economii adiţionale la cumpărare. Fecvenţa de rezonanţă a oscilatorului RC depinde de
valoarea tensiunii de alimentare, rezistorul R, condensatorul C şi temperatura de lucru.
Trebuie de menţionat că frecvenţa de rezonanţă este de asemenea influenţată de variaţiile
normale ale parametrilor de proces, de toleranţa externă a componentelor R şi C, etc.
Diagrama de mai sus arată cum este conectat oscilatorul RC la PIC16F84. La valoarea
rezistorului mai mică 2.2k, oscilatorul poate deveni instabil, sau oscilaţia se poate chiar
opri. La valori mari a lui R (ex.1M) oscilatorul devine foarte sensibil la zgomot şi umezeală.
Se recomandă ca valoarea rezistorului R să fie între 3 şi 100k. Chiar dacă oscilatorul va
lucra fără un condensator extern (C=0pF), trebuie totuşi folosit un condensator de peste
20pF pentru zgomot şi stabilitate. Indiferent de ce oscilator este folosit, pentru a obţine un
ceas la care să funcţioneze microcontrolerul, ceasul trebuie divizat la 4. Un ceas al
oscilatorului divizat cu 4 se poate obţine la pinul OSC2/CLKOUT, şi poate fi folosit pentru
testarea sau sincronizarea altor circuite logice.

După alimentare, oscilatorul începe să oscileze. Oscilaţia la început are o perioadă şi o


amplitudine instabile, dar după un timp devin stabilizate.

Pentru a preveni ca un asemenea ceas inexact să influenţeze performanţele


microcontrolerului, trebuie să ţinem microcontrolerul în starea reset pe durata stabilizării
ceasului oscilatorului. Diagrama de mai sus arată o formă tipică de semnal pe care
microcontrolerul o primeşte de la oscilatorul cu cuarţ după alimentare.
2.2 Reset-ul
Resetul este folosit pentru a pune microcontrolerul într-o condiţie 'cunoscută'. Aceasta
înseamnă practic că microcontrolerul poate să se comporte incorect în unele condiţii
nedorite. Pentru a continua să funcţioneze corect trebuie resetat, însemnând că toţi registrii
vor fi puşi într-o stare de start. Resetul nu este folosit numai când microcontrolerul nu se
comportă cum vrem noi, dar poate de asemenea să fie folosit când se încearcă un montaj
ca o întrerupere într-un program de execuţie sau când se pregăteşte un microcontroler de a
citi un program.

Pentru a preveni ajungerea unui zero logic la pinul


MCLR accidental (linia de deasupra înseamnă că
resetul este activat de un zero logic), MCLR trebuie
să fie conectat printr-un rezistor la polul pozitiv al
sursei de alimentare. Rezistorul trebuie să fie între
5 şi 10k. Acest rezistor a cărui funcţie este de a
menţine o anumită linie la starea logică unu ca o
prevenire, se numeşte o scoatere-pull up.

Microcontrolerul PIC16F84 are câteva surse de reset:

a) Reset la alimentare, POR (Power-On Reset)


b) Reset în timpul lucrului obişnuit prin aducerea unui zero logic la pinul MCLR al
microcontrolerului.
c) Reset în timpul regimului SLEEP
d) Reset la depăşirea timer-ului watchdog (WDT)
e) Reset în timpul depăşirii WDT în timpul regimului SLEEP.

Cele mai importante resurse de reset sunt a) şi b). Prima are loc de fiecare dată când este
alimentat microcontrolerul şi serveşte la aducerea toturor regiştrilor la starea iniţială a
poziţiei de start. A doua este pentru a aduce un zero logic la pinul MCLR în timpul operaţiei
normale a microcontrolerului. Este des folosită în dezvoltarea de programe.

În timpul unui reset, locaţiile de memorie RAM nu sunt resetate. Ele sunt necunoscute la
alimentare şi nu sunt schimbate la nici un reset. Spre deosebire de acestea, regiştrii SFR
sunt resetaţi la o stare iniţială a poziţiei de start. Unul din cele mai importante efecte ale
resetului este setarea contorului de program (PC) la zero (0000h), ceea ce permite
programului să înceapă executarea de la prima instrucţiune scrisă.

Resetul la scăderea tensiunii de alimentare dincolo de limita


permisibilă (Brown-out Reset)

Impulsul pentru resetare în timpul creşterii tensiunii este generat de microcontrolerul însuşi
când detectează o creştere în tensiunea Vdd (în domeniul de la 1.2V la 1.8V). Acest impuls
durează 72 ms ceea ce este un timp suficient pentru oscilator ca să se stabilizeze. Aceste
72 ms sunt asigurate de un timer intern PWRT care are oscilatorul lui RC. Microcontrolerul
este în modul reset cât timp PWRT este activ. Totuşi, când montajul funcţionează, probleme
apar când sursa nu scade la zero ci când scade mai jos de limita ce garantează funcţionarea
corectă a microcontrolerului. Acesta este un caz real din practică, în special în mediile
industriale unde perturbaţiile şi instabilităţile sursei de alimentare sunt ceva foarte curent.
Pentru a rezolva această problemă trebuie să ne asigurăm că microcontrolerul este într-o
stare de reset de fiecare dată când tensiunea sursei scade sub limita admisă.

Dacă, conform cu specificaţiile electrice, circuitul intern de resetare a microcontrolerului nu


poate satisface aceste cerinţe, se pot folosi componente electronice speciale ce sunt
capabile să genereze semnalul de reset dorit. În afară de această funcţie, ele pot funcţiona
pentru supravegherea tensiunii de alimentare. Dacă tensiunea scade mai jos de nivelul
specificat, un zero logic va apare la pinul MCLR ce ţine microcontrolerul în starea de reset
până ce tensiunea nu este în limitele ce garantează funcţionarea corectă.
2.3 Unitatea de Procesare Centrală
Unitatea de procesare centrală (CPU) este creierul microcontrolerului. Această parte este
responsabilă cu găsirea şi aducerea (citirea din memorie)-fetching instrucţiunii corecte ce
trebuie executată, cu decodarea acelei instrucţiuni, şi în final cu executarea ei.

Unitatea de procesare centrală conectează toate părţile microcontrolerului într-un întreg.


Desigur, funcţia sa cea mai importantă este să decodeze instrucţiunile de program. Când
programatorul scrie un program, instrucţiunile au o formă clară ca MOVLW 0x20. Totuşi,
pentru ca microcontrolerul să înţeleagă aceasta, această formă de 'scrisoare' a unei
instrucţiuni trebuie tradusă într-o serie de zero-uri şi unu-uri ce se numeşte 'opcode'.
Această tranziţie de la o scrisoare la o formă binară este făcută de translatori ca
translatorul assembler (cunoscut ca şi assembler sau asamblor). Instrucţiunea astfel adusă-
fetched din memoria programului trebuie să fie decodată de unitatea de procesare centrală.
Putem apoi selecta din tabela tuturor instrucţiunilor un set de acţiuni ce execută o sarcină
desemnată definită de instrucţiune. Pentru că instrucţiunile pot să conţină în ele asignări ce
cer diferite transferuri de date dintr-o memorie în alta, din memorie la porturi, sau alte
calcule, CPU trebuie să fie conectată cu toate părţile microcontrolerului. Aceasta este posibil
printr-un bus de date şi un bus de adrese.

Unitatea de Logică Aritmetică (ALU)


Unitatea de logică aritmetică este responsabilă de executarea operaţiilor ca adunarea,
scăderea, mutarea (la stânga sau la dreapta într-un registru) şi de operaţiile logice.
Mutarea datelor într-un registru se mai numeşte 'shifting'- transferare. PIC16F84 conţine o
unitate logică aritmetică de 8 biţi şi regiştri de lucru de 8 biţi.
În instrucţiunile cu doi operanzi, în mod obişnuit un operand este în registrul de lucru
(registrul W), iar celălalt este unul din regiştri sau o constantă. Prin operand înţelegem
conţinutul asupra căruia se fac unele operaţii, iar un registru este oricare din regiştrii GPR
sau SFR. GPR este o prescurtare de la 'General Purposes Registers'-Regiştri cu Scopuri
Generale, iar SFR de la 'Special Function Registers'-Regiştri cu Funcţie Specială. În
instrucţiunile cu un operand, un operand este fie registrul W fie unul din regiştri. Pe lângă
operaţiile aritmetice şi logice, ALU controlează biţii de stare (biţi găsiţi în registrul STATUS).
Executarea unor instrucţiuni afectează biţii de stare, de care depinde rezultatul însuşi.
Depinzând de ce instrucţiune este executată, ALU poate afecta valorile biţilor Carry (C),
Digit Carry (DC), şi Zero (Z) în registrul STATUS.
Registru STATUS

bit 0 C (Carry) Transfer


Bit care este afectat de operaţiile de adunare, scădere şi transfer.
1= transferul produs din bitul cel mai înalt al rezultatului
0= transferul nu s-a produs
Bitul C este afectat de instrucţiunile ADDWF, ADDLW, SUBLW, SUBWF.

bit 1 DC (Digit Carry) DC Transfer


Bit afectat de operaţiile de adunare, scădere şi transfer. Spre deosebire de bitul C, acest bit
reprezintă transferul din al patrulea loc rezultat. Este setat de adunare când se întâmplă un
transport de la bitul 3 la bitul 4, sau de scădere când se întâmplă împrumut de la bitul 4 la
bitul 3, sau de transfer în ambele direcţii.
1= transfer produs la al patrulea bit conform cu ordinea, al rezultatului.
0= transferul nu s-a produs
Bitul DC este afectat de instrucţiunile ADDWF, ADDLW, SUBLW, SUBWF.

bit 2 Z (Zero bit) Indicarea unui rezultat zero.


Acest bit este setat când rezultatul unei operaţii aritmetice sau logice executate este zero.
1= rezultatul egal cu zero
0= rezultatul nu este egal cu zero

bit 3 PD (Power-down bit)


Bit ce este setat când microcontrolerul este alimentat atunci când începe să funcţioneze,
după fiecare reset obişnuit şi după executarea instrucţiunii CLRWDT. Instrucţiunea SLEEP îl
resetează când microcontrolerul intră în regimul consum/uzaj redus. Setarea lui repetată
este posibilă prin reset sau prin pornirea sau oprirea sursei. Starea poate fi triggerată de
asemenea de un semnal la pinul RB0/INT, de o schimbare la portul RB, de terminarea
scrierii în EEPROM-ul de date intern, şi de watchdog de asemenea.
1= după ce sursa a fost pornită
0= executarea instrucţiunii SLEEP

bit 4 TO Time-out ; depăşirea-overflow watchdog-ului.


Bitul este setat după pornirea sursei şi executarea instrucţiunilor CLRWDT şi SLEEP. Bitul
este resetat când watchdog-ul ajunge la sfârşit semnalând că ceva nu este în ordine.
1= depăşirea-oveflow nu s-a produs
0= depăşirea-overflow s-a produs

bit6:5 RP1:RP0 (Register Bank Select bits-Biţi de Selectare a Bancului de Regiştri)


Aceşti doi biţi sunt partea superioară a adresei la adresarea directă. Pentru că instrucţiunile
ce adresează memoria direct au doar şapte biţi, ei au nevoie doar de încă un bit pentru a
adresa cei 256 bytes adică câţi are PIC16F84. Bitul RP1 nu este folosit, dar este lăsat
pentru expansiuni viitoare ale acestui microcntroler.
01= primul banc
00= bancul zero

bit 7 IRP (Register Bank Select bit-Bit de Selectare a Bancului de Regiştri)


Bit al cărui rol este de a fi al optulea bit la adresarea indirectă a RAM-ului intern.
1= bancul 2 şi 3
0= bancul 0 şi 1 (de la 00h la FFh)

Registrul STATUS conţine starea aritmetică ALU (C, DC, Z), starea RESET (TO, PD) şi biţii
pentru selectarea bancului de memorie (IRP, RP1, RP0). Considerând că selecţia bancului
de memorie este controlată prin acest registru, el trebuie să fie prezent în fiecare banc.
Bancul de memorie se va discuta mai în detaliu în capitolul Organizarea memoriei. Registrul
STATUS poate fi o destinaţie pentru orice instrucţiune, cu oricare alt registru. Dacă registrul
STATUS este o destinaţie pentru instrucţiunile ce afectează biţii Z, DC or C, atunci scrierea
în aceşti trei biţi nu este posibilă.

Registrul OPTION
bit 0:2 PS0, PS1, PS2 (Prescaler Rate Select bit-Bit Selecţie Rată Prescaler)
Aceşti trei biţi definesc bitul de selecţie a ratei prescalerului. Ce este un prescaler şi cum
pot afecta aceşti biţi funcţionarea unui microcontroler va fi explicat în secţiunea depre
TMRO.

bit 3 PSA (Prescaler Assignment bit-Bit de Asignare Prescaler)


Bit ce asignează prescalerul între TMRO şi watchdog.
1= prescalerul este asignat watchdogului
0= prescalerul este asignat timer-ului liber (ree-run) TMRO

bit 4 T0SE (TMR0 Source Edge Select bit-Bit Selecţie a Frontului Sursei TMR0)
Dacă este permis de a se triggera TMRO prin impulsurile de la pinul RA4/T0CKI, acest bit
determină dacă aceasta va fi la frontul descrescător sau crescător al unui semnal.
1= front crescător
0= front descrescător

bit 5 TOCS (TMR0 Clock Source Select bit-Bit Selecţie Sursă Ceas TMR0)
Acest pin permite timerului liber (free-run) să incrementeze starea lui fie de la oscilatorul
intern la fiecare ¼ a ceasului oscilatorului, fie prin impulsuri externe la pinul RA4/T0CKI.
1= impulsuri externe
0= ceas intern 1/4

bit 6 INTEDG (Interrupt Edge Select bit-Bit de Selecţie a Frontului Întrerupere)


Dacă întreruperea este activată este posibil ca acest bit să determine frontul la care o
întrerupere va fi activată la pinul RB0/INT.
1= front crescător
0= front descrescător

bit 7 RBPU (PORTB Pull-up Enable bit-Bit Enable-Activare Pull-up PORTB)


Acest bit porneşte şi opreşte rezistorii interni 'pull-up'-scoatere la portul B.
1= Rezistori oprire "pull-up"
0= Rezistori pornire "pull-up"
2.3 Unitatea de Procesare Centrală
Unitatea de procesare centrală (CPU) este creierul microcontrolerului. Această parte este
responsabilă cu găsirea şi aducerea (citirea din memorie)-fetching instrucţiunii corecte ce
trebuie executată, cu decodarea acelei instrucţiuni, şi în final cu executarea ei.

Unitatea de procesare centrală conectează toate părţile microcontrolerului într-un întreg.


Desigur, funcţia sa cea mai importantă este să decodeze instrucţiunile de program. Când
programatorul scrie un program, instrucţiunile au o formă clară ca MOVLW 0x20. Totuşi,
pentru ca microcontrolerul să înţeleagă aceasta, această formă de 'scrisoare' a unei
instrucţiuni trebuie tradusă într-o serie de zero-uri şi unu-uri ce se numeşte 'opcode'.
Această tranziţie de la o scrisoare la o formă binară este făcută de translatori ca
translatorul assembler (cunoscut ca şi assembler sau asamblor). Instrucţiunea astfel adusă-
fetched din memoria programului trebuie să fie decodată de unitatea de procesare centrală.
Putem apoi selecta din tabela tuturor instrucţiunilor un set de acţiuni ce execută o sarcină
desemnată definită de instrucţiune. Pentru că instrucţiunile pot să conţină în ele asignări ce
cer diferite transferuri de date dintr-o memorie în alta, din memorie la porturi, sau alte
calcule, CPU trebuie să fie conectată cu toate părţile microcontrolerului. Aceasta este posibil
printr-un bus de date şi un bus de adrese.

Unitatea de Logică Aritmetică (ALU)


Unitatea de logică aritmetică este responsabilă de executarea operaţiilor ca adunarea,
scăderea, mutarea (la stânga sau la dreapta într-un registru) şi de operaţiile logice.
Mutarea datelor într-un registru se mai numeşte 'shifting'- transferare. PIC16F84 conţine o
unitate logică aritmetică de 8 biţi şi regiştri de lucru de 8 biţi.
În instrucţiunile cu doi operanzi, în mod obişnuit un operand este în registrul de lucru
(registrul W), iar celălalt este unul din regiştri sau o constantă. Prin operand înţelegem
conţinutul asupra căruia se fac unele operaţii, iar un registru este oricare din regiştrii GPR
sau SFR. GPR este o prescurtare de la 'General Purposes Registers'-Regiştri cu Scopuri
Generale, iar SFR de la 'Special Function Registers'-Regiştri cu Funcţie Specială. În
instrucţiunile cu un operand, un operand este fie registrul W fie unul din regiştri. Pe lângă
operaţiile aritmetice şi logice, ALU controlează biţii de stare (biţi găsiţi în registrul STATUS).
Executarea unor instrucţiuni afectează biţii de stare, de care depinde rezultatul însuşi.
Depinzând de ce instrucţiune este executată, ALU poate afecta valorile biţilor Carry (C),
Digit Carry (DC), şi Zero (Z) în registrul STATUS.
Registru STATUS

bit 0 C (Carry) Transfer


Bit care este afectat de operaţiile de adunare, scădere şi transfer.
1= transferul produs din bitul cel mai înalt al rezultatului
0= transferul nu s-a produs
Bitul C este afectat de instrucţiunile ADDWF, ADDLW, SUBLW, SUBWF.

bit 1 DC (Digit Carry) DC Transfer


Bit afectat de operaţiile de adunare, scădere şi transfer. Spre deosebire de bitul C, acest bit
reprezintă transferul din al patrulea loc rezultat. Este setat de adunare când se întâmplă un
transport de la bitul 3 la bitul 4, sau de scădere când se întâmplă împrumut de la bitul 4 la
bitul 3, sau de transfer în ambele direcţii.
1= transfer produs la al patrulea bit conform cu ordinea, al rezultatului.
0= transferul nu s-a produs
Bitul DC este afectat de instrucţiunile ADDWF, ADDLW, SUBLW, SUBWF.

bit 2 Z (Zero bit) Indicarea unui rezultat zero.


Acest bit este setat când rezultatul unei operaţii aritmetice sau logice executate este zero.
1= rezultatul egal cu zero
0= rezultatul nu este egal cu zero

bit 3 PD (Power-down bit)


Bit ce este setat când microcontrolerul este alimentat atunci când începe să funcţioneze,
după fiecare reset obişnuit şi după executarea instrucţiunii CLRWDT. Instrucţiunea SLEEP îl
resetează când microcontrolerul intră în regimul consum/uzaj redus. Setarea lui repetată
este posibilă prin reset sau prin pornirea sau oprirea sursei. Starea poate fi triggerată de
asemenea de un semnal la pinul RB0/INT, de o schimbare la portul RB, de terminarea
scrierii în EEPROM-ul de date intern, şi de watchdog de asemenea.
1= după ce sursa a fost pornită
0= executarea instrucţiunii SLEEP

bit 4 TO Time-out ; depăşirea-overflow watchdog-ului.


Bitul este setat după pornirea sursei şi executarea instrucţiunilor CLRWDT şi SLEEP. Bitul
este resetat când watchdog-ul ajunge la sfârşit semnalând că ceva nu este în ordine.
1= depăşirea-oveflow nu s-a produs
0= depăşirea-overflow s-a produs

bit6:5 RP1:RP0 (Register Bank Select bits-Biţi de Selectare a Bancului de Regiştri)


Aceşti doi biţi sunt partea superioară a adresei la adresarea directă. Pentru că instrucţiunile
ce adresează memoria direct au doar şapte biţi, ei au nevoie doar de încă un bit pentru a
adresa cei 256 bytes adică câţi are PIC16F84. Bitul RP1 nu este folosit, dar este lăsat
pentru expansiuni viitoare ale acestui microcntroler.
01= primul banc
00= bancul zero

bit 7 IRP (Register Bank Select bit-Bit de Selectare a Bancului de Regiştri)


Bit al cărui rol este de a fi al optulea bit la adresarea indirectă a RAM-ului intern.
1= bancul 2 şi 3
0= bancul 0 şi 1 (de la 00h la FFh)

Registrul STATUS conţine starea aritmetică ALU (C, DC, Z), starea RESET (TO, PD) şi biţii
pentru selectarea bancului de memorie (IRP, RP1, RP0). Considerând că selecţia bancului
de memorie este controlată prin acest registru, el trebuie să fie prezent în fiecare banc.
Bancul de memorie se va discuta mai în detaliu în capitolul Organizarea memoriei. Registrul
STATUS poate fi o destinaţie pentru orice instrucţiune, cu oricare alt registru. Dacă registrul
STATUS este o destinaţie pentru instrucţiunile ce afectează biţii Z, DC or C, atunci scrierea
în aceşti trei biţi nu este posibilă.

Registrul OPTION
bit 0:2 PS0, PS1, PS2 (Prescaler Rate Select bit-Bit Selecţie Rată Prescaler)
Aceşti trei biţi definesc bitul de selecţie a ratei prescalerului. Ce este un prescaler şi cum
pot afecta aceşti biţi funcţionarea unui microcontroler va fi explicat în secţiunea depre
TMRO.

bit 3 PSA (Prescaler Assignment bit-Bit de Asignare Prescaler)


Bit ce asignează prescalerul între TMRO şi watchdog.
1= prescalerul este asignat watchdogului
0= prescalerul este asignat timer-ului liber (ree-run) TMRO

bit 4 T0SE (TMR0 Source Edge Select bit-Bit Selecţie a Frontului Sursei TMR0)
Dacă este permis de a se triggera TMRO prin impulsurile de la pinul RA4/T0CKI, acest bit
determină dacă aceasta va fi la frontul descrescător sau crescător al unui semnal.
1= front crescător
0= front descrescător

bit 5 TOCS (TMR0 Clock Source Select bit-Bit Selecţie Sursă Ceas TMR0)
Acest pin permite timerului liber (free-run) să incrementeze starea lui fie de la oscilatorul
intern la fiecare ¼ a ceasului oscilatorului, fie prin impulsuri externe la pinul RA4/T0CKI.
1= impulsuri externe
0= ceas intern 1/4

bit 6 INTEDG (Interrupt Edge Select bit-Bit de Selecţie a Frontului Întrerupere)


Dacă întreruperea este activată este posibil ca acest bit să determine frontul la care o
întrerupere va fi activată la pinul RB0/INT.
1= front crescător
0= front descrescător

bit 7 RBPU (PORTB Pull-up Enable bit-Bit Enable-Activare Pull-up PORTB)


Acest bit porneşte şi opreşte rezistorii interni 'pull-up'-scoatere la portul B.
1= Rezistori oprire "pull-up"
0= Rezistori pornire "pull-up"
2.4 Porturi
Portul se referă la un grup de pini ai unui microcontroler ce pot fi accesaţi simultan, sau la
care putem seta combinaţia dorită de zero-uri şi unu-uri, sau de la care putem citi o stare
existentă. Fizic, portul este un registru în interiorul unui microcontroler ce este conectat cu
fire la pinii microcontrolerului. Porturile reprezintă conexiunea fizică a Unităţii de Procesare
Centrală cu lumea exterioară. Microcontrolerul le foloseşte pentru a monitoriza sau controla
alte componente sau aparate. Datorită funcţionalităţii, unii pini au rol dublu ca RA4/TOCKI
de exemplu, care este simultan al patrulea bit la portul A şi o intrare externă pentru
contorul liber (free-run). Selecţia uneia din aceste două funcţii ale pinului se face în unul din
regiştrii configuraţionali. O ilustraţie a acesteia este al cincilea bit T0CS în registrul
OPTION. Selectând una din funcţii cealaltă este dezactivată.

Toţi pinii portului pot fi definiţi ca intrare sau ieşire, conform cu nevoile unui montaj ce este
în dezvoltare. Pentru a defini un pin ca pin de intrare sau ca pin de ieşire, trebuie scrisă
combinaţia corectă de zero-uri şi unu-uri în registrul TRIS. Dacă în locul potrivit este scris
"1" logic în registrul TRIS, acel pin este pin de intrare, iar dacă este valabil contrariul, este
un pin de ieşire. Fiecare port are registrul lui TRIS. Astfel, portul A are TRISA la adresa
85h, iar portul B are TRISB la adresa 86h.

PORTB
PORTB are 8 pini legaţi la el. Registrul adecvat pentru direcţia datelor este TRISB la adresa
86h. Setarea unui bit în registrul TRISB defineşte pinul portului corespunzător ca pin de
intrare, şi resetarea unui bit în registrul TRISB, defineşte pinul portului corespunzător ca pin
de ieşire. Fiecare pin la PORTB are un rezistor slab intern pull-up (scoatere) (rezistor care
defineşte o linie la unu logic) care poate fi activat prin resetarea celui de-al şaptelea bit
RBPU în registrul OPTION. Aceşti rezistori 'pull-up' se închid automat când pinul portului
este configurat ca o ieşire. Când porneşte microcontrolerul, 'pull-up'-ii sunt dezactivaţi.

Patru pini ai portului PORTB, RB7:RB4 pot cauza o întrerupere, care se întâmplă când
starea lor se schimbă de la unu logic la zero logic şi invers. Numai pinii configuraţi ca
intrare pot cauza această întrerupere să se întâmple (dacă fiecare pin RB7:RB4 este
configurat ca o ieşire, nu va fi generată o întrerupere la schimbarea stării). Această opţiune
de întrerupere cu rezistorii 'pull-up' fac mai uşoară rezolvarea problemelor din practică, ca
de exemplu o tastatură matriceală. Dacă rândurile tastaturii sunt conectate la aceşti pini,
fiecare apăsare a unei clape va cauza o întrerupere. Microcontrolerul va determina care
clapă este apăsată în timp ce se procesează o întrerupere. Nu se recomandă să apelaţi la
portul B în timp ce se procesează întreruperea.

Exemplul de mai sus arată cum pinii 0, 1, 2, şi 3 sunt declaraţi ca intrare, şi pinii 4, 5, 6 şi
7 ca ieşire.

PORTA
PORTA are 5 pini legaţi la el. Registrul corespunzător pentru direcţia datelor este TRISA la
adresa 85h. Ca şi la portul B, setarea unui bit în registrul TRISA defineşte de asemenea
pinul portului corespunzător ca un pin de intrare, şi resetarea unui bit în registrul TRISA
defineşte pinul portului corespunzător ca pin de ieşire.
Al cincilea pin al portului A are funcţie duală. La acel pin se află de asemenea o intrare
externă pentru timer-ul TMRO. Una din aceste două opţiuni este aleasă prin setarea sau
resetarea bitului TOCS (TMR0 Clock Source Select bit-bit de Selecţie a Sursei Ceasului
TMRO). Acest pin permite timer-ului TMRO sa-şi crească starea fie de la oscilatorul intern
fie prin impulsuri externe la pinul RA4/T0CKI.

Exemplul arată cum pinii 0, 1, 2, 3, şi 4 sunt declaraţi ca intrare iar 5, 6 şi 7 ca pini de


ieşire.
2.5 Organizarea memoriei
PIC16F84 are două blocuri separate de memorie, unul pentru date şi celălalt pentru
programe. Memoria EEPROM şi regiştrii GPR în memoria RAM constituie un bloc, şi memoria
FLASH constituie un bloc de programe.

Memoria program
Memoria program a fost realizată în tehnologia FLASH ceea ce face posibil de a programa
un microcontroler de mai multe ori înainte de a fi instalat într-un montaj, şi chiar după
instalarea sa dacă se întâmplă unele schimbări în program sau parametri de proces.
Mărimea memoriei program este de 1024 locaţii cu lăţime de 14 biţi unde locaţiile zero şi
patru sunt rezervate pentru reset şi pentru vectorul întrerupere.

Memoria de date
Memoria de date constă din memoriile EEPROM şi RAM. Memoria EEPROM constă din 64 de
locaţii de opt biţi a căror conţinut nu este pierdut în timpul opririi sursei de alimentare.
EEPROM-ul nu este direct adresabil, dar este accesat indirect prin regiştrii EEADR şi
EEDATA. Pentru că memoria EEPROM este folosită curent la memorarea unor parametri
importanţi (de exemplu, o temperatură dată în regulatoarele de temperatură), există o
procedură strictă de scriere în EEPROM ce trebuie urmată pentru a preveni scrierea
accidentală. Memoria RAM pentru date ocupă un spaţiu într-o hartă a memoriei de la locaţia
0x0C la 0x4F ceea ce înseamnă 68 de locaţii. Locaţiile memoriei RAM sunt de asemenea
denumite regiştri GPR care este o abreviere General Purpose Registers-Regiştri cu Scop
General. Regiştrii GPR pot fi accesaţi indiferent de ce banc este selectat la un moment.

Regiştri SFR
Regiştri ce ocupă primele 12 locaţii în bancurile 0 şi 1 şi sunt regiştri ai funcţiei specializate
asignată cu unele blocuri ale microcontrolerului. Aceştia sunt numiţi Special Function
Registers-Regiştri ai Funcţiei Speciale.
Bancuri de Memorie
În afară de această diviziune în 'lungime' a regiştrilor SFR şi GPR, harta memoriei este de
asemenea împărţită în 'lăţime' (vezi harta precedentă) în două zone numite 'bancuri'.
Selectarea unuia din bancuri se face de biţii RPO şi RP1 în registrul STATUS-stare.

Exemplu:
bcf STATUS, RP0

Instrucţiunea BCF şterge bitul RPO (RP0=0) în registrul STATUS şi astfel setează bancul 0.

bsf STATUS, RP0

Instrucţiunea BSF setează bitul RPO (RP0=1) în registrul STATUS şi astfel setează bancul 1.
Uzual, grupurile de instrucţiuni care sunt adesea în uz, sunt conectate într-o singură unitate
ce poate fi uşor apelată într-un program, şi a cărei nume are o semnificaţie clară, aşa-
numitul Macros-macrocomandă. Cu ajutorul lor, selecţia dintre două bancuri devine mai
clară şi programul mult mai elegibil.

BANK0 macro
Bcf STATUS, RP0 ;Select memory bank 0
Endm

BANK1 macro
Bsf STATUS, RP0 ;Select memory bank 1
Endm

Locaţiile 0Ch - 4Fh sunt regiştri cu scop general (GPR) ce sunt folosiţi ca memorie RAM. Când sun
accesate locaţiile 8Ch - CFh în Bancul 1, accesăm de fapt exact aceleaşi locaţii în Bancul 0. Cu alte
cuvinte, când doriţi să accesaţi unul din regiştrii GPR, nu trebuie să vă îngrijoraţi că nu ştiţi în ce b
sunteţi!

Contorul de Program
Contorul de program (PC) este un registru de 13 biţi ce conţine adresa instrucţiunii ce se
execută. Prin incrementarea sau schimbarea sa (ex. în caz de salturi) microcontrolerul
execută instrucţiunile de program pas-cu-pas.

Stiva
PIC16F84 are o stivă de 13 biţi cu 8 nivele, sau cu alte cuvinte, un grup de 8 locaţii de
memorie de 13 biţi lăţime cu funcţii speciale. Rolul său de bază este de a păstra valoarea
contorului de program după un salt din programul principal la o adresă a unui subprogram.
Pentru ca un program să ştie cum să se întoarcă la punctul de unde a pornit, trebuie să
înapoieze valoarea contorului programului din stivă. Când se mută dintr-un program într-un
subprogram, contorul programului este împins în stivă (un exemplu de acesta este
instrucţiunea CALL). Când se execută instrucţiuni ca RETURN, RETLW sau RETFIE ce au fost
executate la sfârşitul unui subprogram, contorul programului a fost luat dintr-o stivă, aşa ca
programul să poată continua de unde a fost oprit înainte de a fi întrerupt. Aceste operaţii de
plasare într-o şi luare dintr-o stivă de contor de program sunt numite PUSH şi POP, şi sunt
numite conform cu instrucţiunile similare ale unor microcontrolere mai mari.

Programarea În Sistem
Pentru a programa o memorie de program, microcontrolerul trebuie să fie setat pentru un
mod de lucru special prin aducerea pinului MCLR la 13.5V, iar sursa de tensiune Vdd trebuie
să fie stabilizată între 4.5V şi 5.5V. Memoria program poate fi programată serial folosind doi
pini 'data/clock' ce trebuie să fie mai întâi separaţi de liniile montajului, aşa ca să nu apară
erori în timpul programării.

Moduri de adresare
Locaţiile de memorie RAM pot fi accesate direct sau indirect.
Adresarea Directă
Adresarea Directă se face printr-o adresă de 9 biţi. Această adresă este obţinută prin
conectarea celui de-al şaptelea bit al adresei directe a unei instrucţiuni cu doi biţi (RP1,
RP0) din registrul STATUS după cum se arată în figura următoarea. Orice acces la regiştrii
SFR poate fi un exemplu de adresare directă.

Bsf STATUS, RP0 ;Bankl


movlw 0xFF ;w=0xFF
movwf TRISA ;address of TRISA register is taken from
;instruction movwf

Adresarea Directă

Adresarea Indirectă
Adresarea indirectă spre deosebire de cea directă nu ia o adresă dintr-o instrucţiune ci o
creează cu ajutorul bitului IRP a regiştrilor STATUS şi FSR. Locaţia adresată este accesată
prin registrul INDF care de fapt ţine o adresă indicată de un FSR. Cu alte cuvinte, orice
instrucţiune care foloseşte INDF ca registrul al ei, în realitate accesează datele indicate de
un registru FSR. Să spunem, de exemplu, că un registru cu scop general (GPR) la adresa
0Fh conţine o valoarea 20. Prin scrierea unei valori 0Fh în registrul FSR vom obţine un
registru indicator la adresa 0Fh, iar prin citirea din registrul INDF, vom obţine valoarea 20,
ceea ce înseamnă că am citit din primul registru valoarea lui fără accesarea lui directă (dar
prin FSR şi INDF). Se pare că acest tip de adresare nu are nici un avantaj faţă de adresarea
directă, dar există unele nevoi în timpul programării ce se pot rezolva mai simplu doar prin
adresarea indirectă.
Un asemenea exemplu poate trimite un set de date prin comunicaţia serială, lucrând cu
bufere şi indicatoare (ce vor fi discutate în continuare într-un capitol cu exemple), sau să
şteargă o parte a memoriei RAM (16 locaţii) ca în următorul exemplu.

Citind datele din registrul INDF când conţinutul registrului FSR este egal cu zero, întoarce
valoarea zero, şi scrie în el rezultatul în operaţia NOP (no operation- nu operează).
2.6 Întreruperi
Întreruperile sunt un mecanism a unui microcontroler ce îi permit să răspundă la unele
evenimente la momentul când se întâmplă, indiferent de ce face atunci microcontrolerul.
Aceasta este o parte foarte importantă, pentru că permite conexiunea microcontrolerului cu
lumea de afară. În general, fiecare întrerupere schimbă debitul programului, îl întrerupe şi
după executarea unui subprogram (rutine de întrerupere), continuă din acelaşi punct.

Registrul de control al unei întreruperi se numeşte INTCON şi se găseşte la adresa 0Bh.


Rolul lui este de a permite sau interzice cererile de întreruperi, şi în caz că nu sunt permise,
înregistrează cererile de întrerupere singulare prin biţii lui.

Registru INTCON

bit 0 RBIF (RB Port Change Interrupt Flag bit-bit Steguleţ de Întrerupere a Schimbării
Portului RB) Bit ce informează despre schimbările de la pinii 4, 5, 6 şi 7 ai portului B.
1=cel puţin un pin şi-a schimbat starea
0=nu s-a întâmplat nici o schimbare la vreun pin
bit 1 INTF (INT External Interrupt Flag bit-bit Steguleţ de Întrerupere Externă INT) A avut
loc o întrerupere externă.
1=a avut loc o întrerupere
0=nu a avut loc o întrerupere
Dacă s-a detectat un front crescător sau descrescător la pinul RB0/INT, (ce este definit cu
bitul INTEDG în registrul OPTION), bitul INTF este setat. Bitul trebuie să fie şters în
subprogramul întrerupere pentru a detecta următoarea întrerupere.

bit 2 T0IF (TMR0 Overflow Interrupt Flag bit-bit Steguleţ Depăşire Întrerupere TMRO)
Depăşirea contorului TMRO.
1=contorul şi-a schimbat starea de la FFh la 00h.
0=depăşirea nu a avut loc
Bitul trebuie să fie şters în program pentru ca o întrerupere să fie detectată.

bit 3 RBIE (RB port change Interrupt Enable bit-bit Permite Întreruperea schimbării
portului RB) Permite să aibă loc întreruperi la schimbarea stării pinilor 4, 5, 6, şi 7 ai
portului B.
1=permite întreruperi la schimbarea stării
0=întreruperi interzise la schimbarea stării
Dacă RBIE şi RBIF au fost simultan setate, va avea loc o întrerupere.

bit 4 INTE (INT External Interrupt Enable bit-bit Permite Întrerupere externă INT) Bit ce
permite întreruperea externă de la pinul RB0/INT.
1=întrerupere externă permisă
0=întrerupere externă interzisă
Dacă INTE şi INTF au fost setate simultan, va avea loc o întrerupere.

bit 5 T0IE (TMR0 Overflow Interrupt Enable bit-bit Permite Depăşire Întrerupere TMRO) Bit
ce permite întreruperile în timpul depăşirii contorului TMRO.
1=întrerupere permisă
0=întrerupere interzisă
Dacă T0IE şi T0IF au fost simultan setate, va avea loc întreruperea.

Bit 6 EEIE (EEPROM Write Complete Interrupt Enable bit-bit Permite Întrerupere Completă
a Scrierii EEPROM) Bit ce permite o întrerupere la sfârşitul unei rutine de scriere în EEPROM

1= întrerupere permisă
0= întrerupere interzisă
Dacă EEIE şi EEIF (ce este în registrul EECON1) au fost simultan setate, va avea loc o
întrerupere.

Bit 7 GIE (Global Interrupt Enable bit-bit Permite Întrerupere Globală) Bit ce permite sau
interzice toate întreruperile.
1=toate întreruperile sunt permise
0=toate întreruperile sunt interzise

PIC16F84 are patru surse de întrerupere:

1. Terminarea scrierii datelor în EEPROM


2. Întrerupere TMR0 cauzată de depăşirea timer-ului
3. Întrerupere în timpul schimbării la pinii RB4, RB5, RB6 şi RB7 ai portului B.
4. Întrerupere Externă de la pinul RB0/INT al microcontrolerului

În general, fiecare sursă de întrerupere are doi biţi legaţi la ea. Unul permite întreruperea,
iar celălalt detectează când au loc întreruperi. Există un bit comun numit GIE ce poate fi
folosit pentru a interzice sau permite toate întreruperile simultan. Acest bit este foarte
folositor când se scrie un program pentru că permite ca toate întreruperile să fie interzise
pentru o perioadă de timp, aşa ca execuţia unei părţi importante a programului să nu fie
întreruptă. Când instrucţiunea ce resetează bitul GIE a fost executată (GIE=0, toate
întreruperile interzise), fiecare întrerupere ce rămâne nerezolvată trebuie ignorată.

Întreruperile ce rămân nerezolvate şi ce au fost ignorate, sunt procesate când bitul GIE
(GIE=1, toate întreruperile sunt permise) va fi şters. Când i s-a răspuns întreruperii, bitul
GIE a fost şters, aşa că orice întreruperi adiţionale vor fi interzise, adresa de întoarcere a
fost trimisă în stivă, iar adresa 0004h a fost scrisă în contorul programului – numai după
aceasta începe răspunsul la o întrerupere! După ce este procesată întreruperea, bitul a
cărui setare a cauzat o întrerupere trebuie şters, sau rutina de întrerupere va fi procesată
automat tot mereu în timpul întoarcerii la programul principal.

Păstrarea conţinutului regiştrilor importanţi


Doar valoarea de întoarcere a contorului programului este înmagazinată într-o stivă în
timpul unei întreruperi (prin valoare de întoarcere a contorului programului înţelegem
adresa instrucţiunii ce trebuie executată, dar nu a fost executată pentru că a avut loc
întreruperea). Păstrând doar valoarea contorului programului adesea nu este suficient. Unii
regiştri ce sunt în uz în programul principal pot fi de asemenea în uz în rutina de
întrerupere. Dacă ei nu sunt reţinuţi, programul principal va obţine valori complet diferite în
acei regiştri în timpul întoarcerii dintr-o rutină de întrerupere, ceea ce va cauza erori în
program. Un exemplu de asemenea caz este conţinutul registrului de lucru W. Dacă
presupunem că programul principal a folosit registrul de lucru W pentru unele din operaţiile
sale, şi că a păstrat în el o valoare ce este importantă pentru următoarea instrucţiune,
atunci o întrerupere ce se va întâmpla înainte de acea instrucţiune va schimba valoarea
registrului de lucru W, ce va influenţa direct programul principal.

Procedura de înregistrare de regiştri importanţi înainte de a merge la o rutină de


întrerupere se numeşte PUSH, în timp ce procedura ce aduce valorile înregistrate înapoi, se
numeşte POP. PUSH şi POP sunt instrucţiuni ale altor microcontrolere (Intel), dar sunt atât
de larg acceptate că o întreagă operaţie este numită după ele. PIC16F84 nu are instrucţiuni
ca PUSH şi POP, şi ele trebuie să fie programate.
Datorită simplităţii şi folosirii frecvente, aceste părţi ale programului pot fi făcute ca macro-
uri. Conceptul unui Macro este explicat în "Limbaj de asamblare program". În următorul
exemplu, conţinuturile regiştrilor W şi STATUS sunt memorate în variabilele W_TEMP şi
STATUS_TEMP înainte de rutina de întrerupere. La începutul rutinei PUSH trebuie să
verificăm bancul selectat în prezent pentru că W_TEMP and STATUS_TEMP nu se găsesc în
bancul 0. Pentru schimbul de date între aceşti regiştri, instrucţiunea SWAPF se foloseşte în
loc de MOVF pentru că nu afectează starea biţilor registrului STATUS.

Exemplul este un program asamblor pentru următorii paşi :


1. Testarea bancului curent
2. Stocarea registrului W indiferent de bancul curent
3. Stocarea registrul STATUS în bancul 0
4. Executarea rutinei de întrerupere pentru procesul de întrerupere (ISR)
5. Restaurează registrul STATUS
6. Restaurează registrul W

Dacă mai sunt şi alte variabile sau regiştri ce trebuie stocaţi, atunci ei trebuie să fie păstraţi
după stocarea registrului STATUS (pasul 3), şi aduşi înapoi înainte ca registrul STATUS să
fie restaurat (pasul 5).
Acelaşi exemplu se poate realiza utilizând macro-uri, făcând astfel programul mai eligibil.
Macro-urile ce sunt deja definite, pot fi folosite pentru scrierea de noi macro-uri. Macro-
urile BANK1 şi BANK0 ce sunt explicate în capitolul "Organizarea memoriei" sunt folosite cu
macro-urile 'push' şi 'pop'.

Întrerupere externă la pinul RB0/INT al microcontrolerului


Întreruperea externă la pinul RB0/INT este triggerată de frontul crescător (dacă bitul
INTEDG=1 în registrul OPTION<6>), sau de frontul descrescător (dacă INTEDG=0). Când
apare semnalul corect la pinul INT, bitul INTF este setat la registrul INTCON. Bitul INTF
(INTCON<1>) trebuie resetat în rutina de întrerupere, aşa ca întreruperea să nu aibă loc
din nou în timpul întoarcerii la programul principal. Acesta este un pas important al
programului pe care programatorul nu trebuie să-l uite, sau programul va merge constant
în rutina de întrerupere. Întreruperea poate fi închisă prin resetarea bitului de control INTE
(INTCON<4>).

Întreruperea în timpul depăşirii contorului TMRO


Depăşirea contorului TMRO (de la FFh la 00h) va seta bitul T0IF (INTCON<2>). Aceasta
este o întrerupere foarte importantă pentru că multe probleme reale se por rezolva folosind
această întrerupere. Unul din exemple este măsurarea timpului. Dacă ştim cât timp are
nevoie contorul pentru a completa un ciclu de la 00h to FFh, atunci numărul de întreruperi
înmulţit cu acea durată de timp va da timpul total scurs. În rutina de întrerupere unele
variabile vor fi incrementate în memoria RAM, valoarea acelei variabile înmulţite cu timpul
de care are nevoie contorul pentru a contoriza într-un ciclu întreg, va da timpul total scurs.
Întreruperea poate fi pornită/oprită prin setarea/resetarea bitului T0IE (INTCON<5>).

Întrerupere pe timpul unei schimbări la pinii 4, 5, 6 şi 7 ai portului


B
Schimbarea semnalului de intrare la PORTB <7:4> setează bitul RBIF (INTCON<0>). Patru
pini RB7, RB6, RB5 şi RB4 ai portului B, pot triggera o întrerupere ce are loc când starea la
ei se schimbă de la unu la zero logic, sau viceversa. Pentru ca pinii să fie sensibili la această
schimbare, trebuie definiţi ca intrare. Dacă oricare din ei este definit ca ieşire, întreruperea
nu va fi generată la schimbarea stării. Dacă ei sunt definiţi ca intrare, starea lor curentă
este comparată cu vechea valoare ce a fost stocată la ultima citire de la portul B.
Întreruperea poate fi pornită/oprită prin setarea/resetarea bitului RBIE în registrul INTCON.

Întreruperea la terminarea subrutinei write în EEPROM


Această întrerupere este doar de natură practică. Pentru că scrierea într-o locaţie EEPROM
durează cam 10ms (care este o durată lungă în termenii microcontrolerului), nu este
rentabil de a aştepta până la capăt scrierea. Este adăugat astfel mecanismul de întrerupere
ceea ce permite microcontrolerului să continue executarea programului principal, în timp ce
scrierea în EEPROM este făcută în plan secundar. Când scrierea este terminată, întreruperea
informează microcontrolerul că scrierea s-a terminat. Bitul EEIF, prin care se face această
informare, se găseşte în registrul EECON1. Producerea unei întreruperi poate fi interzisă
prin resetarea bitului EEIE în registrul INTCON.

Iniţializarea întreruperii
Pentru a folosi un mecanism de întrerupere a unui microcontroler, trebuie făcute unele
sarcini pregătitoare. Aceste proceduri sunt pe scurt numite "iniţializare". Prin iniţializare
definim la ce va răspunde microcontrolerul, şi ce va ignora. Dacă nu setăm bitul ce permite
o anumită întrerupere, programul nu va executa un subprogram întrerupere. Prin aceasta
putem obţine controlul asupra producerii întreruperii, ceea ce este foarte folositor.

Exemplul de mai sus arată iniţializarea unei întreruperi externe la pinul RB0 al
microcontrolerului. Unde se vede unu setat, înseamnă că întreruperea este permisă.
Producerea altor întreruperi nu este permisă, şi toate întreruperile împreună sunt interzise
până ce bitul GIE este ţinut în unu.

Următorul exemplu arată o cale tipică de a dirija întreruperile. PIC16F84 are doar o locaţie
unde adresa unui subprogram întrerupere este memorată. Aceasta înseamnă că mai întâi
trebuie să detectăm ce întrerupere este la îndemână (dacă mai mult de o sursă de
întreruperi este disponibilă), şi apoi putem executa acea parte a programului ce se referă la
acea întrerupere.

Reîntoarcerea dintr-o rutină de întrerupere poate fi făcută cu instrucţiunile RETURN, RETLW şi RET
Se recomandă ca să fie utilizată instrucţiunea RETFIE pentru că acea instrucţiune este singura ce
setează automat bitul GIE, ceea ce permite să se producă o nouă întrerupere.
2.7 Timer-ul liber TMR0
Timer-ele (temporizatoarele) sunt de obicei cele mai complicate părţi ale unui
microcontroler, aşa că este necesar să rezervăm mai mult timp pentru a le explica. Odată
cu aplicarea lor este posibil să se creeze relaţii între o dimensiune reală ca "timp" şi o
variabilă ce reprezintă starea timer-ului într-un microcontroler. Fizic, timer-ul este un
registru a cărui valoare creşte continuu până la 255, şi apoi porneşte de la capăt: 0, 1, 2, 3,
4...255....0,1, 2, 3......etc.

Această incrementare se face în fundalul a tot ceea ce face un microcontroler. Depinde de


programator "să găsească o cale" de cum să profite de această caracteristică pentru nevoile
lui. Una din căi este să crească o variabilă la fiecare depăşire a timer-ului. Dacă ştim cât
timp are nevoie timer-ul să facă o rundă completă, atunci înmulţind valoarea variabilei cu
acel timp obţinem timpul total scurs.

PIC16F84 are un timer de 8 biţi. Numărul de biţi determină până la ce valoare contorizează
timer-ul înainte de a începe să contorizeze de la zero din nou. În cazul unui timer de 8 biţi,
acel număr este 256. O schemă simplificată a relaţiei dintre un timer şi un prescaler-divizor
este reprezentată în diagrama anterioară. Prescalerul este numele acelei părţi din
microcontroler ce divide ceasul oscilatorului înainte de a ajunge la logica ce creşte starea
timer-ului. Numărul ce divide un ceas este definit prin trei biţi în registrul OPTION. Cel mai
mare divizor este 256. Aceasta înseamnă de fapt că doar la al fiecare 256-lea ceas,
valoarea timer-ului va creşte cu unu. Aceasta ne dă posibilitatea de a măsura perioade de
timp mai lungi.
După fiecare numărătoare până la 255, timer-ul îşi resetează valoarea la zero şi începe cu
un nou ciclu de contorizare până la 255. În timpul fiecărei tranziţii de la 255 la zero, bitul
TOIF în registrul INTCON este setat. Dacă se permit întreruperi, de aceasta se poate profita
în generarea şi în procesarea rutinei de întrerupere. Depinde de programator să reseteze
bitul TOIF în rutina de întrerupere, aşa ca noua întrerupere, sau noua depăşire să fie
detectate. În afară de ceasul oscilator intern, starea timer-ului poate de asemenea să
crească prin ceasul extern la pinul RA4/TOCKI. Alegerea uneia din aceste două opţiuni se
face în registrul OPTION prin bitul TOCS. Dacă a fost aleasă această opţiune de ceas extern,
va fi posibil să se definească frontul unui semnal (crescător sau descrescător), la care
timer-ul să-şi crească valoarea.

În practică, unul din exemplele tipice ce este rezolvat prin ceas extern şi unde timer-ul
contorizează rotaţiile complete ale unui ax al unei maşini de producţie, ca bobinatorul de
transformator de exemplu. Să rotim patru şuruburi de metal pe axul unui bobinator. Aceste
patru şuruburi vor reprezenta convexitatea metalică. Să plasăm acum un senzor inductiv la
o distanţă de 5 mm de capătul unui şurub. Senzorul inductiv va genera semnalul
descrescător de fiecare dată când capul şurubului este paralel cu capul senzorului. Fiecare
semnal va reprezenta o pătrime dintr-o rotaţie, şi suma tuturor rotaţiilor se va găsi în
timer-ul TMRO. Programul poate uşor citi aceste date din timer printr-un bus de date.

Următorul exemplu ilustrează cum să se iniţializeze timer-ul la fronturile descrescătoare ale


semnalului din sursa externă cu un prescaler 1:4. Timer-ul lucrează în mod "polig-
împingere".

Acelaşi exemplu poate fi realizat printr-o întrerupere în modul următor:

Prescalerul poate fi asignat fie de timer-ul TMRO fie de watchdog. Watchdogul este un
mecanism pe care microcontrolerul îl foloseşte să se apere împotriva blocării programelor.
Ca orice alt circuit electric, la fel şi cu microcontrolerul se pot întâmpla defectări, sau unele
stricăciuni. Din nefericire microcontrolerul are de asemenea un program unde se pot
întâmpla probleme. Când se întâmplă aceasta, microcontrolerul se va opri din funcţionare şi
va rămâne în acea stare până ce cineva îl resetează. Din cauza aceasta, a fost introdus
mecanismul watchdog. După o anumită perioadă de timp, watchdogul resetează
microcontrolerul (de fapt microcontrolerul se resetează singur). Watchdogul lucează pe
baza unui principiu simplu: dacă se întâmplă depăşirea timer-ului, microcontrolerul este
resetat, şi începe executarea programului mereu din nou. Astfel, se va întâmpla un reset
atât în cazul unei funcţionări corecte cât şi incorecte. Următorul pas este prevenirea
resetului în cazul unei funcţionări corecte, ce se face prin scrierea unui zero în registrul
WDT (instrucţiunea CLRWDT) de fiecare dată când se apropie de depăşire. Astfel programul
va preveni un reset cât timp este executat corect. De îndată ce s-a blocat, nu se va scrie
zero, va avea loc depăşirea timer-ului WDT şi un reset ce va duce microcontrolerul înapoi la
funcţionarea corectă din nou.

Prescalerul este acordat cu timer-ul TMRO, sau cu timer-ul watchdogului prin bitul PSA în
registrul OPTION. Ştergând bitul PSA, prescalerul va fi acordat cu timer-ul TMRO. Când
prescalerul este acordat cu timer-ul TMRO, toate instrucţiunile de scriere în registrul TMRO
(CLRF TMR0, MOVWF TMR0, BSF TMR0,...) vor şterge prescalerul. Când prescalerul este
asignat timerului watchdog, numai instrucţiunea CLRWDT va şterge prescalerul şi timer-ul
watchdog în acelaşi timp. Schimbarea prescalerului este completă sub controlul
programatorului, şi poate fi schimbat în timp ce se rulează programul.

Există doar un prescaler şi un timer. Funcţie de nevoi, ele sunt asignate fie timer-ului TMRO fie
watchdog-ului.

Registrul control OPTION

Bit 0:2 PS0, PS1, PS2 (Prescaler Rate Select bit-bit Selectare Rată Prescaler)
Subiectul prescaler, şi cum afectează aceşti biţi lucrul unui microcontroler va fi abordat în
secţiunea despre TMRO.

bit 3 PSA (Prescaler Assignment bit-bit Asignare Prescaler)


Bit ce asignează prescalerul între TMRO şi timer-ul watchdog).
1=prescalerul este asignat la timer-ul watchdog
0=prescalerul este asignat la timer-ul free-liber

bit 4 T0SE (TMR0 Source Edge Select bit-bit Selectare Front Sursă TMRO)

Dacă triggerul TMRO a fost activat cu impulsuri de la pinul RA4/T0CKI, acest bit va
determina dacă va fi la frontul crescător sau descrescător al semnalului.
1=front descrescător
0=front crescător

bit 5 T0CS (TMR0 Clock Source Select bit-bit Selectare Sursă Ceas TMRO)
Acest bit permite unui timer free-run să-şi incrementeze valoarea fie de la oscilatorul
intern, de exemplu ¼ din ceasul oscilatorului, sau prin impulsuri externe la pinul
RA4/T0CKI.
1=impulsuri externe
0=1/4 ceas intern

bit 6 INTEDG (Interrupt Edge Select bit-bit Selectare Front Întreruperi)


Dacă a fost permisă producerea de întreruperi, acest bit va determina la ce front va avea
loc întreruperea la pinul RB0/INT.
1=front crescător
0=front descrescător

bit 7 RBPU (PORTB Pull-up Enable bit-bit Permite Pull-up-tragerea PORTB)


Acest bit deschide sau închide rezistorii interni la portul B.
1=rezistorii 'pull-up' deschişi
0=rezistorii 'pull-up' închişi
2.8 Memoria de date EEPROM
PIC16F84 are 64 de bytes de locaţii de memorie EEPROM la adresele de la 00h la 63h unde
se poate scrie sau de unde se poate citi. Cea mai importantă caracteristică a acestei
memorii este că nu pierde conţinutul în timpul închideri sursei de alimentare. Aceasta
înseamnă practic că ceea ce a fost scris în ea va rămâne chiar şi când microcontrolerul este
închis. Datele pot fi reţinute în EEPROM fără sursa de alimentare până la 40 de ani. (după
cum declară producătorul lui PICD16F84), şi se pot executa 10000 de cicluri de scriere.

În practică, memoria EEPROM este folosită pentru stocarea unor date importante sau a
unor parametri de proces.
Un asemenea parametru este o temperatură dată, asignată când se setează un regulator de
temperatură la un proces. Dacă nu s-a reţinut, va fi nevoie să se ajusteze temperatura dată
după fiecare întrerupere a alimentării. Pentru că aceasta este foarte nepractic (chiar
periculos), producătorii de microntrolere au început să instaleze un tip mai mic de memorie
EEPROM.

Memoria EEPROM este plasată într-un loc special al memoriei şi poate fi accesată prin
regiştri speciali. Aceşti regiştri sunt:

• EEDATA la adresa 08h, care reţine datele de citit sau cele de scris.
• EEADR la adresa 09h, ce conţine o adresă a locaţiei EEPROM ce este accesată.
• EECON1 la adresa 88h, ce conţine biţi de control.
• EECON2 la adresa 89h. Acest registru nu există fizic şi serveşte la protejarea EEPROM-
ului de scrieri accidentale.

Registrul EECON1 la adresa 88h este un registru de control cu 5 biţi implementaţi.


Biţii 5, 6 şi 7 nu sunt folosiţi, şi prin citire sunt totdeauna zero. Interpretarea biţilor
registrului EECON1 urmează.

Registrul EECON1

bit 0 RD (Read Control bit-bit Control Citire)


Setarea acestui bit iniţializează transferul de date definit în EEADR la registrul EEDATA.
Pentru că timpul nu este esenţial în citirea datelor ca la scriere, datele din EEDATA pot fi
deja folosite în următoarea instrucţiune.
1=initializează citirea
0=nu iniţializează citirea

bit 1 WR (Write Control bit-bit Control Scriere)


Setarea acestui bit iniţializează scrierea datelor din registrul EEDATA la adresa specifcată
prin registrul EEADR.
1=initializează scrierea
0=nu iniţializează scrierea

bit 2 WREN (EEPROM Write Enable bit-bit Permite Scrierea EEPROM) Permite scrierea în
EEPROM
Dacă acest bit nu a fost setat, microcontrolerul nu va permite scrierea în EEPROM.
1=scriere permisă
0=scriere interzisă
bit 3 WRERR (Write EEPROM Error Flag-Steguleţ Eroare Scriere EEPROM ) Eroare în timpul
scrierii în EEPROM
Acest bit a fost setat doar în caz că scrierea în EEPROM a fost intreruptă de un semnal sau
prin terminarea timpului din timer-ul watchdog (dacă este activat).
1=a avut loc eroare
0=nu a avut loc eroare

bit 4 EEIF (EEPROM Write Operation Interrupt Flag bit-bit Steguleţ Întrerupere Operaţie
Scriere EEPROM) Bit folosit pentru a informa că scrierea datelor s-a terminat.
Când s-a terminat scrierea, acest bit va fi setat automat. Programtorul trebuie să şteargă
bitul EEIF în programul său pentru a detecta noua terminare a scrierii.
1=scrierea terminată
0=scrierea încă neterminată, sau încă nu a început

Citirea din memoria EEPROM


Setarea bitului RD iniţializează transferul de date de la adresa găsită în EEADR la registrul
EEDATA. Ca şi la citirea datelor nu avem nevoie de atât de mult timp ca la scriere, datele
luate din registrul EEDATA pot deja fi folosite mai departe în următoarea instrucţiune.

O mostră a părţii programului ce citeşte datele în EEPROM, ar putea arăta ca mai jos:

După ultima instrucţiune de program, conţinutul de la o adresă EEPROM zero poate fi găsit
în registrul w.

Scrierea în memoria EEPROM


Pentru a scrie datele în locaţia EEPROM, programatorul trebuie mai întâi să scrie adresa în
registrul EEADR şi datele în registrul EEDATA. Numai atunci este folositor de a seta bitul WR
ce pune totul în mişcare. Bitul WR va fi resetat, şi bitul EEIF setat urmând o scriere ce
poate fi folosită în procesarea întreruperilor. Valorile 55h şi AAh sunt prima şi a doua cheie
care interzic ca scrierea accidentală în EEPROM să se întâmple. Aceste două valori sunt
scrise în EECON2 care serveşte doar pentru acel scop, de a primi aceste două valori şi de a
preveni orice scriere accidentală în memoria EEPROM. Liniile de program marcate ca 1, 2, 3
şi 4 trebuie să fie executate în acea ordine în intervale egale de timp. De aceea este foarte
important, să închideţi întreruperile ce ar putea schimba timpul necesar pentru executare
instrucţiunilor. După scriere, întreruperile, pot fi permise din nou.

Exemplu unei părţi a programului ce scrie datele 0xEE în prima locaţie în memoria EEPROM
ar putea arăta ca mai jos:
Este recomandat ca WREN să fie închis tot timpul cu excepţia scrierii datelor în EEPROM, aşa că
posibilitatea unei scrieri accidentale va fi minimă. Scrierea în EEPROM va fi automat ştearsă!
SISTEME DE TIMP REAL

CAP.1. STRUCTURI DE SISTEME CU MICROPROCESOR PENTRU


CONDUCEREA PROCESELOR INDUSTRIALE

1.1. Consideraţii generale

Echipamentele numerice de conducere a proceselor industriale (regulatoarele numerice,


calculatoarele de proces), în special după introducerea în structura lor a microprocesoarelor au
constituit un pas considerabil pe calea reducerii decalajului dintre rezultatele remarcabile oferite
de teoria sistemelor automate şi tehnicile aplicate în practica conducerii proceselor industriale.
Aceste echipamente permit, fără a efectua modificări în structura sau în configuraţia lor,
implementarea celor mai diverse strategii de conducere, începând cu cele de tip convenţional,
PID, şi ajungând la cele care să determine atingerea performanţelor optime ale funcţionării
proceselor cu un minimum de energie şi materie primă. Realizarea acestor deziderate impune
specialiştilor din domeniul conducerii proceselor cunoaşterea specificului procesului condus şi a
teoriei sistemelor automate, precum şi a calculatoarelor de proces, a funcţionării acestor
elemente şi, mai ales, a programării lor pentru asigurarea scopului propus: supravegherea şi
conducerea "în timp real" a unui proces.
Definiţie: Se numeşte calculator de proces un complex de mijloace tehnice şi de programme
care sunt destinate rezolvării problemelor de supraveghere, de comandă, de diagnosticare şi de
prognozare a funcţionării instalaţiilor industriale. Un calculator de proces poate fi privit ca o
reuniune între un calculator numeric universal (de obicei un microcalculator sau un
minicalculator) înzestrat cu un executiv sau un sistem de operare corespunzător capabil să
funcţioneze în timp real şi un sistem de interfaţă (cuplorul de proces) cu procesul condus şi
operatorul tehnolog. Schema bloc a unui CP (calculator de proces) este prezentata în Fig.l.l.

Fig. 1.1
În această schemă, în categoria perifericelor generale sunt incluse: consola calculatorului
(pentru inginerul de sistem), imprimanta, unităţi de discuri flexibile (floppy-disk), unităţi de
bandă magnetică (eventual) etc.
Consola operatorului de proces (operatorului tehnolog) - C.O.P. - este consola specialistului
tehnolog care cunoaşte foarte bine procesul condus, dar care, în general, nu este informaticican.
C.O.P.-ul este de regulă un panou cu un sistem de chei şi lămpi de semnalizare sau un tablou
sinoptic sau, mai modern, un video-display color cu schema funcţională a instalaţiei sau
elemente 1 – 1 din schema funcţională a instalaţiei la diferite nivele de detaliere. Astfel de
console (console cu display cu facilităţi grafice) permit şi alte funcţii speciale ca, de exemplu,
depanarea asistată de
calculator a instalaţiei.
Calculatorul universal este de obicei un microcalculator realizat cu microprocesor de 16 biţi sau
chiar de 8 biţi sau un minicalculator.
Cuplorul de proces asigură dialogul bidirecţional între procesul condus şi calculatorul
universal.
Evidenţiind căile de introducere şi extragere (furnizare) a datelor de la şi respectiv către proces
putem defini următoarele moduri potenţiale de conectare dintre calculator şi proces:
- Sisteme de calcul off-line, la care legătura informaţională între calculator şi proces este
stabilită prin intermediul operatorului uman. Datele din proces pot fi culese normal, prin citire,
de către operator, sau automat într-o formă care poate fi utilizată direct de
- Sisteme de calcul in-line, sunt sistemele la care operatorul poate introduce datele în mod
aleator direct de la tastatură, ele trebuind să fie "imediat" preluate şi prelucrate. Apare, în acest
caz, necesitatea "întreruptibilităţii" calculatorului în procesul de calcul;
- Sisteme de calcul on-line, care sunt cuplate direct cu procesul pe partea de culegere de date
prin intermediul cuploarelor de proces (convertoare analog-numerice).
În cazul în care datele de ieşire sunt transmise operatorului sub formă de mesaje, iar acesta
intervine în proces în urma interpretarii lor, sistemul de numeşte on-line în circuit deschis .
Calculatorul funcţionează în regim de "ghid operator" sau "consultant" al conducerii procesului.
În cazul în care, pe baza datelor culese, sistemul de calcul elaborează mărimi pe care le aplică
direct procesului, fară intervenţia operatorului, sistemul se numeşte on-line în circuit închis .
Conectarea on-line în circuit închis poate fi de urmărire, situaţie în care calculatorul calculează
(determină) şi modifică referinţele unor regulatoare convenţionale), sau directă (calculatorul
calculează şi elaborează comanda la nivelul elementelor de execuţie).
Pentru a realiza funcţiile impuse, calculatorul de proces trebuie să posede o serie de facilităţi:
- să fie întreruptibil;
- să permită prelucrarea datelor culese direct din procesul condus prin intermediul unor
periferice specializate;
- să ofere răspunsul într-un anumit interval de timp strict corelat cu evenimentele din process (să
funcţioneze în "timp real");
- să rezolve contradicţia între capacitatea lui de a executa la un moment dat un singur program şi
cerinţa procesului de a fi "servit" în n, n > 1, puncte simultan.
Definiţie: Sistemele de calcul care preiau suficient de rapid datele de intrare, le prelucrează într-
un interval de timp suficient de scurt şi oferă utilizatorului sau direct procesului (prin periferice
specializate) rezultatele suficient de rapid pentru a mai putea influenţa desfăşurarea fenomenelor
din procesul care a produs datele de intrare, se numesc sisteme de calcul în timp real (SCTR).
Deci, din definiţia dată, se observă că, calculatoarele de proces fac parte din clasa SCTR.
Dezvoltarea acestor clase de calculatoare a fost posibilă, pe de o parte datorită perfecţionărilor
tehnologice (unităţi centrale ultrarapide, specializarea echipamentelor periferice, perfecţionarea
transmisiei datelor), iar, pe de altă parte, prin dezvoltarea şi perfecţionarea sistemelor de operare
(SO). Toate aceste perfecţionări au dus la micşorarea timpului de răspuns al sistemului de calcul.
Definiţie: Se numeşte timp de răspuns al unui sistem de calcul intervalul de timp dintre
momentul generării datelor primare şi momentul obţinerii rezultatului prelucrării datelor.
Pentru un sistem de calcul on-line, timpul de răspuns este dat de intervalul de timp dintre
momentul producerii unui eveniment în procesul condus şi momentul în care se generează către
proces. Se observă că acest timp înglobează timpul necesar achiziţiei datelor, prelucrării datelor
şi generării comenzii către proces.
Indiferent de modul de conectare cu procesul, calculatorul de proces a format cel de-al doilea
nivel de conducere a proceselor industriale, primul nivel fiind reprezentat de elemente de
automatizare convenţionale realizate de regulă cu regulatoare de tip PID.
Creşterea complexităţii proceselor de conducere, impunerea unor cerinţe superioare de
fiabilitate, a avut drept efect imposibilitatea îndeplinirii întregului volum de sarcini legate de
conducerea acestora cu un singur calculator de proces. Din aceste considerente a apărut
necesitatea distribuirii funcţiilor de conducere între mai multe unităţi de calcul, care, la rândul
lor, au fost subordonate unui calculator "universal" de mare capacitate, care să rezolve rapid o
serie de probleme complexe cum ar fi: identificarea procesului, conducerea optimală sau
adaptivă a procesului etc. Se obţine astfel o ierarhizare funcţională clasică pe trei nivele a unei
structuri de conducere numită structură distribuită de conducere caracterizată prin fiabilitate,

flexibilitate şi potenţialitate ridicată. Prin intermediul unei astfel de structuri se poate asigura
conducerea proceselor de medie sau de mare complexitate după strategii de la cele mai simple
(de tipul PID) la cele mai evoluate care vizează conducerea adaptivă şi cea optimală. O structură
distribuita de conducere, frecvent întâlnită în prezent este prezentată în Fig.1.2.
Fig. 1.2
La nivelul 1 sunt plasate elementele de automatizare convenţională care primesc informaţiile
despre proces prin intermediul traductoarelor şi elaborează comenzi pentru reglarea acestuia
utilizând algoritmi simpli de reglare de tip PID.
Elementele de la nivelul 2, regulatoare numerice monocanal sau multicanal specializate sau
microcalculatoare pentru conducerea proceselor, au sarcini cvasi-identice şi cvasi-independente,
schimbul de informaţii între elemente realizându-se prin intermediul magistralei sistemului sub
controlul directorului de trafic. Funcţiile ce trebuie realizate la acest nivel sunt: achiziţia şi
validarea datelor culese din proces, calculul şi elaborarea comenzilor către procesul condus prin
intermediul cuploarelor de proces, comunicarea cu operatorul tehnolog (COP) şi cu nivelul
ierarhic superior (minicalculatorul universal). În mod curent, la acest nivel se utilizează
microcalculatoare realizate cu microprocesoare pe 8 sau 16 biţi sau regulatoare numerice
realizate tot cu astfel de elemente. Puterea de calcul a acestor microcalculatoare acoperă
necesităţile de rulare a programelor care asigură funcţiile de reglare pentru 8-16 bucle de reglare.
Dacă numărul buclelor de reglare este mai mare (peste 20) se recomandă folosirea unui
microcalculator industrial de uz larg. La cel de-al treilea nivel de automatizare se introduce un
minicalculator de capacitate mare destinat conducerii după strategii evoluate a întregului proces.
În cazul proceselor mai simple se poate utiliza chiar un microcalculator de proces de uz larg. Tot
la acest nivel este plasată consola operatorului de proces cu funcţii complexe de comunicare cu
toate echipamentele de calcul din cadrul structurii, având rolul de a permite supravegherea şi
conducerea operativă a procesului.
Dinamica elaborării rezultatelor la nivelul 3 este relativ lentă. Minicalculatorul primeşte date
sintetice despre evoluţia procesului de la nivelul inferior (nivelul 2), iar mărimile rezultate în
urma calculelor nu intervin direct în proces, deci la acest nivel nu sunt necesare cuploare de
proces.
O problemă importantă a acestei structuri de conducere este aceea a asigurării compatibilităţii
între structurile de date vehiculate între diferitele nivele pentru a permite un dialog corect între
acestea.
Unul din principalele avantaje ale unei astfel de structuri distribuite de conducere este acela că
ea poate fi dezvoltată în timp şi spaţiu, pe orizontală şi pe verticală, de la simplu la complex,
putându-se începe cu un singur echipament cu microprocesor plasat la nivelul 2 de automatizare,
dotat cu o consolă operator proprie (display, tastatură, imprimantă), Fig.1.3, având implementaţi
algoritmi de: achiziţie şi validare a datelor din proces, semnalizare şi protecţie la depăşirea
limitelor, calcul şi elaborare a comenzilor către proces, comunicare cu operatorul în vederea
realizarii configurării şi urmăririi evoluţiei mărimilor din proces, posibilităţi de comunicare cu
NIS (nivelul ierarhic superior).

Fig.1.3.

Acest echipament poate fi, aşa cum am arătat, fie un regulator numeric specializat având aceşti
algoritmi implementaţi sub forma unei biblioteci de programe organizată după o arhitectură bine
pusă la punct, corespunzătoare unei anumite clase de procese, sau poate fi un calculator destinat
conducerii proceselor industriale (microcalculator de proces) capabil de a fi dotat cu astfel de
algoritmi la momentul dorit.
Fără a face o analiză detaliată a avantajelor şi dezavantajelor celor două moduri de rezolvare a
problemei conducerii, precizăm că vom insista asupra celei de-a doua variante, şi anume,
utilizarea în conducerea directă a proceselor a unui microcalculator de proces. Aceste
echipamente permit eleborarea şi implementarea unor algoritmi strict necesari orientaţi către
aplicaţie şi sunt mult mai flexibile. Efortul de programare devine minim dacă este pusă la punct
tehnica şi tehnologia de elaborare a unor astfel de programe şi dacă organizarea hardware a
echipamentului
este capabilă să suporte un software după aceste principii.
1.2. Schema de principiu a unei structuri de echipament cu microprocesor destinate
conducerii proceselor industriale (microcalculator de proces)

În cele ce urmează va fi prezentată o structură cu microprocesor (microcalculator de


proces) amplasabilă la nivelul 2 de automatizare în cadrul structurii ierarhizate de conducere
prezentate în Fig.1.2. Structura este destinată să îndeplinească funcţiile de supraveghere
automată (culegere, validare şi protocolare de date) şi de conducere numerică directă prin
intermediul unor algoritmi bipoziţionali, tripoziţionali, de tip PID sau evoluaţi a unei întregi
clase de procese, în special, din categoria celor numite "lente". De asemenea, structura trebuie să
asigure comunicarea cu consola operatorului de proces şi cu nivelul ierarhic superior. Schema
bloc a unei astfel de structuri, la nivel de black-box, este prezentată în Fig.1.4. Ea trebuie să
permită o funcţionare permanentă, lipsită de blocaje, iar legăturile dintre modulele de program
utilizator şi resursele hardware să se realizeze uşor şi eficient.

Fig. 1.4.

Mergând pe linia dezvoltării arborescente, se poate obţine o detaliere a schemei din


Fig.1.4, detaliere prezentată în Fig.1.5. O asemenea configuraţie permite din punct de vedere
software următoarele:
- achiziţia şi prelucrarea primară (validare, filtrare, liniarizare) a unui număr de mărimi
analogice din proces;
- primirea unui număr de comenzi (intrări numerice) din proces prin intermediul unor contacte
de releu;
- reglarea unor bucle simple sau în cascadă cu algoritmi de tip PID cu ieşire analogical constantă
pe porţiuni, pe durata intervalului de discretizare;
- comanda unui număr de relee (ieşiri numerice) destinate realizării atât a comenzilor automate
(ieşiri numerice), cât şi a algoritmilor de reglare bipoziţionli sau tripoziţionali sau de tip PI sau
PID

Fig. 1.5.

cu ieşire în impulsuri modulate în durată;


- memorarea datelor curente în memoria RAM;
- înscrierea şi memorarea programelor de bază (MONITOR, EXECUTIV) şi utilizator în
memoria EPROM;
- memorarea datelor strict necesare (din proces, sau cele configurabile) în memoria RAM
nevolatilă în vederea reluării funcţionării sistemului exact din punctul unde a rămas la o eventual
cădere intempestivă a tensiunii de alimentare a calculatorului;
- comunicarea cu consola operator proprie, formată din:
- display, pentru afişarea mărimilor curente şi a celor configurabile;
- tastatură, pentru configurarea sistemului şi pentru conducerea manuală a procesului sau a
nivelului 1 de automatizare;
- imprimantă, pentru protocolare de date şi pentru înregistrarea evoluţiei unor mărimi de interes
din proces;
- comunicarea cu nivelul ierarhic superior.
Numărul de intrări/ieşiri analogice şi/sau numerice depinde de configuraţia aleasă pentru
echipament, adică de numărul de plachete de interfaţă prezente în sistem.
Menţionăm că numărul de intrări/ieşiri al unei plachete specifice (IA-intrări analogice, EA-ieşiri
analogice, IN-intrări numerice, EN-ieşiri numerice) variază de la echipament la echipament.
Indiferent de tipul echipamentului, unitatea centrală trebuie să conţină pe lângă microprocesor şi
un ceas pentru măsurarea timpului şi în funcţie de care se desfăşoară toate operaţiile din sistem,
precum şi un puternic sistem de întreruperi prin intermediul căruia se va lansa în execuţie, la un
moment dat, acel program care va avea prioritate maximă.

1.3. Particularităţile programarii sistemelor de calcul în timp real

Particularităţile programării sistemelor de calcul cu microprocesoare destinate


supravegherii şi/sau conducerii în timp real a proceselor industriale rezultă din următoarele
condiţii care trebuie îndeplinite:
- posibilitatea sistemului de calcul de a răspunde instantaneu la semnale emise din proces în mod
aleator;
- capacitatea sistemului de calcul de a primi datele direct din proces sau/şi de a le transmite
direct în proces prin intermediul unor periferice nestandard (convertoare analog-numerice,
convertoare numeric-analogice etc.);
- cerinţa ca "timpul real" în care sistemul de calcul este ocupat cu o anumită operaţie
corespunzătoare unui anumit eveniment, să fie strict corelat cu timpul în care se produc şi alte
evenimente în procesul industrial condus;
- rezolvarea contradicţiei între capacitatea sistemului de calcul de a executa la un moment dat un
singur program şi cerinţa procesului de a fi "servit" în n puncte simultan; altfel spus, sistemul
trebuie să facă faţă desfăşurării simultane a diferitelor părţi specifice ale procesului;
- posibilitatea programării tuturor categoriilor de procese (continue sau discrete);
- existenţa elementelor pentru testarea şi depanarea eficientă a programelor.
Din cele de mai sus, rezultă că, pentru programarea unei aplicaţii în timp real, limbajul de
programare utilizat trebuie sa conţină trei categorii de instrucţiuni:
- instrucţiuni care să permită programarea modului în care se desfăşoară evenimentele în proces;
- instrucţiuni care să precizeze locul în care se desfăşoară evenimentele în proces;
- instrucţiuni care se referă la momentul sau intervalul de timp în care au loc evenimentele în
proces.
Instrucţiunile din prima categorie formează un set de bază care poate fi utilizat fără opţiuni de
timp real din partea sistemului de calcul. Instrucţiunile din celelalte categorii sunt specific
lucrului în timp real şi formează o extensie a limbajului de bază. Ele pot fi obţinute prin
intermediul sistemului de întreruperi (locul desfăşurării evenimentelor) şi a ceasului de timp real
(timpul sau intervalul de timp în care au loc evenimentele în proces) existente obligatoriu în
orice configuraţie de conducere sau supraveghere a unui proces.
Un sistem de calcul pentru conducerea unui proces reprezintă o unitate dialectică între
componenta hardware a sa, cea care defineşte configuraţia sistemului şi componenta sa software,
care constituie totalitatea programelor sistemului.
Programele implementate pe un astfel de sistem de calcul se împart în două mari categorii:
a) programe de sistem;
b) programe de utilizator sau de aplicaţie.
Programele de sistem sunt programe care au un caracter universal şi sunt parte component a
unui anumit tip de calculator, independent de procesul pe care acesta îl va conduce. Acest
ansamblu de programe formează ceea ce se numeste sistemul de operare al calculatorului şi are
rolul de a asigura executarea corectă a sarcinilor sale.
Programele de utilizator (programele de aplicaţie sau de conducere), în opoziţie cu programele
de sistem, au un caracter specific, funcţie de proces, ele fiind o imagine a ceea ce se întâmplă în
proces.
Cap. 2. Interacţinea taskurilor concurente

2.1. Consideraţii generale

Exploatarea avantajelor aduse de considerarea unei aplicaţii ca fiind compusă din mai multe
taskuri ce se execută în paralel sau concurent impune, aşa cum a rezultat şi din exemplele
prezentate în capitolul anterior, folosirea unor mecanisme care să asigure interacţiunea corectă a
taskurilor pentru ca programul în ansamblu să aibă evoluţia dorită. S-a demonstrat că
interacţiunea taskurilor poate fi redusă la trei tipuri de operaţii multitasking: comunicarea între
taskuri, sincronizarea taskurilor şi excluderea mutuală a taskurilor.
Comunicarea între taskuri este operaţia multitasking prin care se permite taskurilor să schimbe
date între ele. Datele comune (utilizate de mai multe taskuri) sunt memorate în memoria internă
a calculatorului în anumite zone declarate ca zone comune (pentru datele comune) şi la care vor
avea acces toate taskurile. Deoarece zonele de date comune organizate în memoria internă au o
capacitate mică şi limitează la un volum mic datele comune, în cazul unui volum mare de date,
acestea se organizează în fişiere plasate pe un suport de memorie externă (de obicei disc
magnetic).
Majoritatea sistemelor de operare actuale oferă un sistem de lucru cu fişierele prin intermediul
unui SGF (sistem de gestiune a fişierelor). Dezavantajul acestei metode este legat de timpii
relativ mari pentru accesarea datelor din fişiere, dar metoda este utilizată datorită capacităţii
mari de memorare a acestor sisteme.
Sincronizarea este operaţia multitasking care asigură eşalonarea corectă a execuţiei taskurilor în
timp sau, altfel spus, care stabileşte o relaţie de ordine între instrucţiunile executate de acestea,
independent de vitezele relative ale lor.
Scopul unei metode de sincronizare este de a oferi unui task Ti aflat în execuţie mijloacele care
să-i permită, în primul rând, să blocheze un alt task activ Tj sau să se blocheze el însuşi în
aşteptarea producerii unui eveniment extern sau expirării unui interval de timp şi, în al doilea
rând, să deblocheze un task Tk căruia să-i transmită eventual şi unele informaţii. În evoluţia lor
două sau mai multe taskuri se pot sincroniza fie în funcţie de o condiţie de timp, fie în funcţie de
un eveniment exterior. Mai exact, în cadrul unei aplicaţii, se poate întâlni situaţia ca un task Tk
pentru a-şi putea continua execuţia să fie nevoit să aştepte trecerea unui anumit interval de timp
sau realizarea unui eveniment din proces, eveniment controlat de regulă de un alt task Ti. În
cazul sincronizării pe o condiţie de timp, taskul Tk se va bloca până la expirarea intervalului de
timp menţionat după care va trece în starea READY şi îşi va putea continua execuţia. În cazul
sincronizării pe un eveniment exterior, taskul Tk se va bloca dacă evenimentul nu a avut loc. De
regulă, acest eveniment este supravegheat de un alt task Ti care va debloca taskul Tk în
momentul în care evenimentul s-a îndeplinit.
Operaţiile de sincronizare pot fi:
- explicite (directe), caz în care un task acţionează direct asupra altui task, primitivele de blocare
şi deblocare trebuind să fie astfel concepute încât să accepte ca parametru numele taskului
asupra căruia se acţionează;
- implicite (indirecte), caz în care un task acţionează asupra altui task prin declanşarea unor
mecanisme intermediare; primitivele de blocare şi deblocare nu mai folosesc explicit numele
taskului asupra căruia se acţionează, ci folosesc o serie de variabile special-create în acest scop
(semafoare, variabile eveniment etc.).
Restricţiile care determină sincronizarea taskurilor pot fi concentrate sub forma:
- operaţia A nu se poate executa înaintea trecerii intervalului de timp ΔT;
- operaţia A nu se poate executa înaintea operaţiei B.
Excluderea mutuală este operaţia multitasking prin care se exclude accesul simultan al mai
multor taskuri la una şi aceeaşi resursă (zona de date din memorie, fişier, periferic etc.).
Restricţiile, în acest caz, sunt de tipul: operaţiile A, B, C, ..., X nu pot avea loc simultan.
Definiţie: Secvenţa de program a fiecărui task în care se apelează o resursă comună partajată se
numeşte secţiune critică a taskului. (Din această cauză, de multe ori, excluderea mutuală a
taskurilor se mai întâlneşte şi sub denumirea de problema secţiunii critice).
Plecând de la ipoteza că intervalele de timp de execuţie ale taskurilor sunt diferite şi necunoscute
şi că orice task iese din secţiunea sa critică după un interval finit de timp, soluţia unei probleme
de acest tip trebuie să satisfacă următoarele condiţii:
a) - utilizarea exclusivă: la un moment dat un singur task şi numai unul se poate afla în secţiunea
sa critică corespunzătoare unei resurse;
b) - evitarea blocajului reciproc: dacă mai multe taskuri sunt blocate în aşteptarea aceleiaşi
resurse critice şi aceasta nu este ocupată, atunci unul dintre aceste taskuri (de regulă cel mai
prioritar), trebuie să poată să intre în secţiunea sa critică la capătul unui interval finit de timp;
c) - evitarea dependenţelor inutile: dacă un task este blocat în afara secţiunii sale critice, acest
blocaj nu trebuie să împiedice intrarea unui alt task în secţiunea sa critică.
Datorită condiţiilor restrictive similare, problemele sincronizării şi excluderii mutuale pot fi
tratate cu procedee comune. În prezent există o mare varietate de procedee puse la dispoziţia
utilizatorului pentru rezolvarea acestor operaţii multitasking şi anume:
- folosirea unor variabile de tip întreg numite semafoare
- folosirea unor variabile logice numite variabile eveniment
- cu ajutorul unor structuri de date numite mesaje şi a unor zone de memorie unde se depun
aceste mesaje numite celule mesaj sau cutii poştale - cu ajutorul conceptului de monitor
- cu ajutorul conceptului de rendezvous .
Observaţie: Ultimele trei procedee au avantajul de a rezolva în mod unitar şi problema
comunicării
între taskuri.

2.2. Utilizarea semafoarelor pentru excluderea mutuală a taskurilor şi pentru


sincronizarea
lor indirectă
Un semafor SEM este definit de perechea [v(SEM), q(SEM)], unde:
- v(SEM) = valoarea semaforului;
- q(SEM) = o coadă de aşteptare destinată să primească taskurile care eşuează în încercarea lor
de a
trece de acest semafor.
Variabila v(SEM) este de tip întreg, iar valoarea sa iniţială v 0(SEM) este fixată în momentul
creării semaforului.
Administrarea cozii q(SEM) este la latitudinea sistemului de operare, iar conţinutul său înaintea
primei utilizări a semaforului este vid.
Semafoarele pot fi împărţite în două categorii:
- semafoare care pot lua numai două valori, de obicei 0 şi 1, numite, din acest motiv, semafoare
binare;
- semafoare care pot lua orice valoare întreagă, numite semafoare generale sau contorizate.
Pentru manipularea semafoarelor s-au creat două primitive speciale, neîntreruptibile, notate cu P
şi V implementate în software-ul EXECUTIVULUI. Primitiva P apare ca o cerere de depăşire a
semaforului, iar primitiva V are semnificaţia eliberării, în anumite condiţii, a unei autorizaţii de
trecere.
Observaţie: Menţionăm că, semafoarele binare sunt suficiente pentru rezolvarea operaţiilor
multitasking menţionate, astfel încât în continuare se vor face referiri numai la acestea.
Pentru semafoarele binare, primitivele P şi V au următoarea structură:
Primitiva P(SEM):
dacă v(SEM) = 0 atunci
q(SEM) ← Ti /* Blochează taskul Ti, adică taskul care a lansat primitiva, */
/* introducându-l în coada de aşteptare a semaforului q(SEM) */
altfel
v(SEM) = v(SEM) - 1

Primitiva V(SEM):
dacă v(SEM) ≠ 0 atunci
dacă q(SEM) ≠ ф atunci
Tj ← q(SEM) /* Deblochează taskul Tj, care poate fi fie primul task */
/* din coada de aşteptare a semaforului, fie taskul cel */
/* mai prioritar din aceasta */
altfel
v(SEM) = v(SEM) + 1
dacă q(SEM) ≠ ф atunci
Tk ← q(SEM) /* Deblochează toate taskurile Tk din coada */
/* de aşteptare q(SEM) a semaforului SEM */
Prin utilizarea semafoarelor binare şi a primitivelor P şi V care acţionează asupra lor aşa cum s-a
arătat mai sus, se poate rezolva eficient problema excluderii mutuale a resurselor critice
partajate. Pentru aceasta, fiecărei resurse critice i se asociază câte un semafor având iniţial
valoarea 1. Pentru claritate considerăm:
Exemplul 2.1. Considerăm n taskuri T1,T2, ..., Tn, care în execuţia lor pot apela simultan o
aceeaşi resursă. Pentru realizarea excluderii mutuale asociem acestei resurse critice un semafor
binar SEM având valoarea iniţială v0(SEM) = 1. Înainte de a intra în propria secţiune critică,
fiecare task este obligat să execute primitiva P(SEM), iar după părăsirea secţiunii critice trebuie
să execute operaţia V(SEM). Astfel, secvenţa de program care încadrează secţiunea critică a
fiecărui task arată
ca în Figura 21.
Taskul Ti aflat în execuţie care efectuează operaţia
P(SEM) se blochează dacă v(SEM) = 0 şi îşi
continuă execuţia dacă v(SEM) = 1. În cazul blocării
taskului Ti pe operaţia P(SEM), sistemul de operare
va da controlul unui alt task Tj din coada de aşteptare
q(SEM) a semaforului, aflat în starea READY. Dacă
taskul Ti intră în propria sa secţiune critică, atunci
v(SEM) = 0 şi nici o altă operaţie P(SEM) nu mai
poate avea loc, deci nici un alt task Tj, j ≠ i nu mai
poate intra în sectiunea critică a programului său,
până când taskul Ti nu o părăseşte pe a lui, moment
în care executând primitiva V(SEM), face v(SEM) =
1. În acest moment are loc deblocarea taskurilor care
aşteptau să intre în propria lor secţiune critică pentru
aceeaşi resursă.
Fig. 2.1.
Există şi situaţii nedorite şi care trebuie eliminate. De exemplu, dacă taskul aflat în
execuţie
este blocat în propria sa secţiune critică, atunci întrucât v(SEM) a rămas 0 (după execuţia
primitivei
P(SEM)) se realizează blocajul infinit al tuturor celorlalte taskuri care utilizau aceeaşi resursă.
Din
această cauză trebuie luate măsuri pentru eliminarea acestei situaţii, sau de eliberare a resursei.
Pentru a-i garanta fiecărui task introducerea în secţiunea sa critică după un interval de timp finit,
trebuie acordată o atenţie deosebită administrării cozilor de aşteptare a semafoarelor. Cea mai
simplă metodă din acest punct de vedere este metoda FIFO, dar, în multe situaţii, metoda după
priorităţi (utilizată în multe EXECUTIVE de timp real) poate prezenta avantaje evidente.
Semafoarele binare împreună cu primitivele P şi V pot constitui un mijloc de soluţionare a
problemelor de sincronizare indirectă a taskurilor cu evenimente exterioare. Primitiva P
acţionează
ca o operaţie de blocare a unui task, în timp ce primitiva V poate fi privită ca un semnal de
deblocare al acestuia. Valoarea semaforului v(SEM) se asociază cu starea evenimentului exterior
astfel:
v(SEM) = 0 - evenimentul nu a avut loc;
v(SEM) = 1 - evenimentul a avut loc.
În aceste condiţii, valoarea iniţială a semaforului va fi totdeauna zero (v0(SEM) = 0). În cazul a
două sau mai multe taskuri sincronizate pe un singur eveniment exterior, procedeul este foarte
eficient şi se desfăşoară ca în exemplul 2.2.
Exemplul 2.2. Considerăm 2 taskuri T1 şi T2 care trebuie sincronizate pe un eveniment exterior,
eveniment de îndeplinirea căruia este condiţionată la un moment dat execuţia taskului T1.
Pentru aceasta procedăm astfel. Asociem acestui eveniment un semafor SEM. Valoarea
semaforului
v(SEM) se asociază cu starea evenimentului exterior aşa cum s-a arătat mai sus. Realizarea
evenimentului respectiv este supravegheat de taskul T2. Atât timp cât evenimentul nu a avut loc,
semaforul SEM are valoarea v(SEM) = 0. Taskul T1 fiind în execuţie şi ajungând la momentul
critic al programului, va încerca să execute operaţia P(SEM) şi se va bloca deoarece v(SEM) =
0.
Taskul T2 va debloca taskul T1 executând primitiva V(SEM) care va face v(SEM) = 1 când va
sesiza îndeplinirea evenimentului. Structura programelor celor două taskuri în vederea
sincronizării
pe un eveniment exterior este prezentată în Figura 2.2.
Precizăm că acest procedeu devine ineficient în cazul unor taskuri sincronizate pe mai multe
evenimente externe. De asemenea, prin intermediul acestor variabile (semafoare binare), nu este
posibilă realizarea sincronizării taskurilor pe o condiţie de timp. Semafoarele rămân însă foarte
eficiente în rezolvarea problemei secţiunii critice.

Fig. 2.2.

2.3. Utilizarea variabilelor eveniment pentru sincronizarea indirectă şi excluderea


mutuală a taskurilor
Variabilele tip eveniment sunt variabile logice speciale, partajate care pot fi manipulate numai cu
ajutorul unor primitive special-compuse în acest scop. Aceste variabile pot fi declarate prin
program sau pot fi parte constituentă a EXECUTIVULUI, caz în care acestea se cunosc şi pot fi
numai apelate prin program.
Operaţiile posibile asociate unei variabile eveniment sunt, de regulă, DECLAN§AREA
provocată de un task supraveghetor şi A§TEPTAREA şi/sau CONSUMAREA (sau ambele),
executate de un task a cărei execuţie este condiţionată de realizarea respectivului eveniment.
Efectul acestor operaţii depinde de natura evenimentului. În acest sens se definesc evenimente
nememorate şi evenimente memorate. În cazul evenimentelor nememorate, o condiţie esenţială
pentru ca acestea să fie exploatate constă în aceea ca sosirea lor să fie aşteptată. Astfel, dacă unul
sau mai multe taskuri a căror execuţie depinde de un astfel de eveniment se află, în momentul
sosirii evenimentului, în starea BLOCKED, ele vor fi trecute imediat în starea READY. Altfel,
declanşarea evenimentului rămâne fără efect şi, în plus, el este pierdut. Justificarea unui astfel de
mod de tratare se explică prin faptul că în anumite aplicaţii, anumite evenimente sunt
semnificative numai în anumite momente ale derulării procesului şi, în cosecinţă, dacă nu sunt
aşteptate acestea nu mai prezintă nici un interes.
Evenimentul memorat este obţinut prin extensia celui nememorat şi este reprezentat printr-o
variabilă logică notată "EV" care poate lua valorile FALS (asociat cu valoarea 0) sau
ADEVĂRAT (asociat cu valoarea 1), indicând cele două alternative posibile: nedeclanşarea,
respectiv declanşarea acestui eveniment.
Când un task ajunge într-un punct în care continuarea execuţiei lui este condiţionată de sosirea
unui eveniment asociat cu variabila EV, el se va bloca numai dacă evenimentul aşteptat nu s-a
produs (EV = FALS). Sosirea evenimentului (EV = ADEVĂRAT) provoacă trecerea taskului
care îl aştepta în starea READY. Acum este necesară exprimarea faptului că respectivul
eveniment a fost consumat. Consumarea sau anularea unui eveniment se face prin atribuirea
variabilei EV a valorii FALS.
De regulă, în aplicaţiile de conducere a proceselor se operează cu conceptul de eveniment
memorat, primitivele care pot acţiona asupra variabilelor eveniment asociate fiind:
AŞTEAPTĂ(expresie logică formată cu variabile eveniment) : blochează taskul până
când
expresia logică conţinând una sau mai multe variabile eveniment capătă valoarea ADEVĂRAT.
DECLANŞAZĂ(EV) : face ca variabila eveniment EV să capete valoarea ADEVĂRAT
şi
are semnificaţia că evenimentul asociat cu această variabilă logică a avut loc.
CONSUMĂ(EV) : face ca variabila eveniment menţionată EV să capete valoarea FALS
şi
are semnificaţia că evenimentul asociat cu această variabilă logică s-a consumat.
Valoarea iniţială a unei variabile eveniment este FALS. Variabilele eveniment sunt diferite de
semafoare şi prin aceea că primitiva AŞTEAPTĂ(⋅) nu le modifică valoarea.
Variabilele tip eveniment sunt adecvate pentru sincronizarea taskurilor în funcţie de evenimente.
Exemplul 2.3. Structura programelor a două taskuri T1 şi T2 sincronizate pe un eveniment
exterior căruia i se asociază variabila eveniment EV este prezentată în Figura 2.3.
Taskul T2 trebuie să conţină după directiva AŞTEAPTĂ(EV) directiva CONSUMĂ(EV)
care semnifică fapul că evenimentul a fost luat în considerare şi care va permite o nouă aşteptare
din partea taskului T2 pe acelaşi eveniment, în cazul funcţionării celor două taskuri în buclă
infinită. De asemenea, taskul T1 trebuie să aibă posibilitatea de a da controlul taskului T2
imediat după îndeplinirea evenimentului. Aceasta se realizează fie prin introducerea după
directiva DECLANŞAZĂ(EV) a unei directive care să declare eveniment semnificativ, fie prin
construirea
directivei DECLANŞAZĂ (EV) cu o opţiune de acest fel.

Fig. 2.3
Exemplul 2.4. Considerăm trei taskuri T1, T2, T3, primele două urmărind îndeplinirea a două
evenimente externe, asincrone, asociate cu variabilele EV1 şi EV2, iar al treilea fiind condiţionat
în execuţia lui, la un moment dat, de îndeplinirea ambelor evenimente. Ca atare, la momentul
critic, taskul T3 va fi obligat să execute primitiva AŞTEAPTĂ(EV1 şi EV2) şi se va bloca dacă
cel puţin una dintre variabile are valoarea FALS, ceea ce semnifică faptul că cel puţin unul
dintre evenimente nu a avut loc. Pe măsură ce evenimentele au loc, taskul T1, respectiv T2 vor
executa primitivele DECLANŞAZĂ(EV1), respectiv DECLAN§AZĂ(EV2) care vor avea ca
efect
deblocarea taskului T3 şi aducerea lui în situaţia de aşi putea continua execuţia. Structura
programelor celor trei taskuri este prezentată în Figura 2.4.

Figura 2.4.

Variabilele tip eveniment pot fi utilizate şi în realizarea operaţiilor multitasking de


excludere mutuală. Pentru evitarea accesului simultan a două sau mai multe taskuri la o resursă
partajată, acesteia i se asociază o variabilă eveniment EVM căreia i se atribuie iniţial valoarea
ADEVĂRAT. Directiva DECLAN§AZĂ(EVM) simulează primitiva V (de la semafoare), iar
ansamblul de directive A§TEAPTĂ(EVM) urmată imediat de CONSUMĂ(EVM) poate simula
primitiva P, dacă secvenţa se execută neîntreruptibil, ceea ce nu este greu de realizat. Structura a
două taskuri T1 şi T2 în situaţia de excludere mutuală este prezentată în Figura 2.5.
Primul task care intră în secţiunea critică ajunge în aceasta trecând de primitiva
A§TEAPTĂ(EVM) - posibil, deoarece iniţial EVM = ADEVĂRAT, executând apoi primitiva
CONSUMĂ(EVM) ceea ce duce la EVM = FALS. În acest moment orice alt task care doreşte să
pătrundă în propria sa secţiune critică se va bloca pe primitiva AŞTEAPTĂ(EVM) până când
taskul
iniţial abandonând resursa comună execută primitiva DECLANŞAZĂ(EVM) în urma căreia
variabila eveniment EVM capătă valoarea ADEVĂRAT.

Fig. 2.5
Subiecte

Caracteristici ale sistemelor incorporate


Tipuri de sisteme incorporate
Tipuri de funcţii realizate de sistemele incorporate
Arhitectura sistemelor incorporate
Implementarea sistemelor incorporate
Caracteristici ale soft-ului utilizat în sistemele incorporate

PRINCIPALELE ETAPE ÎN PROCESUL DE PROIECTARE AL EmS


ELABORAREA SPECIFICATIILOR
PROIECTARE ARHITECTURALĂ (Importanta şi cerinte)
ALEGEREA PROCESORULUI
DEZVOLTAREA VERSIUNII ARHITECTURALE
IMPLEMENTAREA SISTEMULUI
VERIFICARE SI TESTARE

Structura unui sistem incorporat


Procesoare (destinatii, structura)
Microcontrolere (destinatii, structura)
Procesoare de semnal numeric (DSP)
Dispozitive de intrare ieşire şi chip-uri de interfaţă
Clasificare memorii la nivel de bază
Stocarea datelor
Tipuri de memorii comune

Microcontrolerul PIC16F84 Prezentare generală


Pipelining
Generator de ceas – oscilator
Reset-ul
Registru STATUS
Registrul OPTION
Unitatea de Procesare Centrală

STRUCTURI DE SISTEME CU MICROPROCESOR PENTRU


CONDUCEREA PROCESELOR INDUSTRIALE
Consideraţii generale
Schema de principiu a unei structuri de echipament cu microprocesor destinate conducerii
proceselor industriale (microcalculator de proces)
Particularităţile programarii sistemelor de calcul în timp real

Interacţinea taskurilor concurente Consideraţii generale


Utilizarea semafoarelor pentru excluderea mutuală a taskurilor şi pentru sincronizarea
lor indirectă

S-ar putea să vă placă și