Sunteți pe pagina 1din 158

Universitatea Valahia din Târgoviște

Facultatea de Inginerie Electrică, Electronică și Tehnologia Informației


Specializarea: Automatică și Informatică Aplicată

PROIECT
MĂSURARI SI TRADUCTOARE

PROFESOR COORDONATOR: S.l. dr. ing. Marin Mainea


CUPRINS

Cap. 1. MĂSURĂRI ȘI TRADUCTOARE / SENSORS AND TRANSDUCERS


1.1. Noțuni teoretice despre adaptoare și traductoare / Theoretical notions about
adapters and transducers.
1.2. Tipuri de senzori / Sensors Types
1.3. Mărimi măsurabile cu senzori / Measurable sizes with sensors

Cap. 2. MICROCONTROLLER-ul
2.1. Noțiuni teoretice pentru microcontroller / Theoretical notions for microcontroller
2.2. Microcontroller ATmega
2.3. Interfețe standard controlate direct cu microcontroller / Standard interface can be
controlled directly by microcontroller: ARDUINO, 8051, AVR, PIC, DSP, ARM, ARM, MSP430,
TTL logic

Cap. 3. Platforma de dezvoltare ARDUINO / ARDUINO Development Platform


3.1. ARDUINO NANO
3.1.1. Caracteristici tehnice / Technical specifications
3.1.2. Instrucțiuni / The instructions for ARDUINO
3.2. ARDUINO UNO
3.2.1. Caracteristici tehnice / Technical specifications
3.2.2. Instrucțiuni / The instructions for ARDUINO
3.3. ARDUINO DUE
3.3.1. Caracteristici tehnice / Technical specifications
3.3.2. Instrucțiuni / The instructions for ARDUINO
3.5. ARDUINO MEGA 2560
3.5.1. Caracteristici tehnice / Technical specifications
3.3.2. Instrucțiuni / The instructions for ARDUINO

Cap. 4. Program software ARDUINO


4.1. Structura / Structure;
4.2. Variabile / Variables;
4.3. Funcții / Functions;

2
Cap. 5. Instalare software ARDUINO / Install the ARDUINO Software

Cap. 6. Module de Senzori compatibili cu ARDUINO / Sensor Module Kit for


ARDUINO Compatible
6.1. IR emission;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.2. IR receiver;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.3. Ultrasonic sensor;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.4. Photoresistor;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.5. Laser emit;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.6. Shock;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.7. Water Level sensor;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.8. DS 3231 RTC Module;

3
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.9. Magnetic Spring;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.10. Degital Temperature;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.11. Analog Temperature;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.12. Photo intrreuptor;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.13. Temperature and humidity;
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.

6,14. Linear Hall (Hall Magnetic, Analog Hall, Mini Reed);


Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6,15. Rotary encoder
Specificatie tehnica. Fenomenul fizic care sta la baza conversiei, marimea masurata.
Mediul/modul de comunicatie / Technical specification. The physical phenomenon behind
the conversion, the measured size. Communication environment / mode.
6.16. Alte tipuri de senzori din gama ARDUINO / Other types of sensors in the
ARDUINO range

4
Cap.1. MĂSURĂRI ȘI TRADUCTOARE
1.1. NOȚIUNI TEORETICE DESPRE ADAPTOARE ȘI TRADUCTOARE

Traductoarele sunt elemente de automatizare care sesizează şi transformă mărimea de


măsurat (de ieşire a procesului) într-un semnal mai convenabil, de obicei de altă natură fizică.
In practica industrială sunt acceptate două interpretări asupra noţiunii de traductor: una în
care traductorul este echivalentul senzorului (detectorului, elementului primar sau sensibil),
cealaltă în care traductorul este echivalentul ansamblului senzor-adaptor. Prima interpretare
se utilizează mai ales în cazurile în care senzorul şi adaptorul sunt situate la mare distanţă
între ele. Când senzorul şi adaptorul sunt elemente din componenţa unui singur aparat, se
utilizează de obicei cea de-a doua interpretare. Apariţia aşa numitelor “traductoare
inteligente”, care încorporează alături de senzor şi circuite electronice cu microprocesor
pentru conversia, prelucrarea şi transmisia numerică a datelor, a contribuit la extinderea celei
dea doua interpretări a conceptului de traductor.
Se observă că se pun în evidenţă şase tipuri (domenii) de semnale: radiante (RD),
mecanice (MC), termice (TR), magnetice (MG), chimice (CH) şi electrice (E). Trebuie
observat că deşi în principiu în blocul de prelucrare se poate utiliza oricare dintre cele şase
forme de semnal, cazul întâlnit în mod aproape unanim în realizările concrete de sisteme de
măsurare şi control corespunde operării cu semnale electrice. Exemple notabile de abateri de
la această situaţie sunt date de optica integrată (în blocul de prelucrare se utilizează semnale
radiante) şi de dispozitivele bazate pe unde de suprafaţă (în blocul de prelucrare se utilizează
semnale mecanice):
 După natura mărimii aplicate la intrare: traductoare de temperatură,
presiune, radiaţie
 După natura mărimii de ieşire: traductoare rezistive, inductive,
capacitive
 După natura mărimii intrare-ieşire:
o traductoare de mărimi electrice în mărimi electrice (amplificatoare,
transformatoare, divizoare) 
o traductoare de mărimi neelectrice în mărimi neelectrice (pârghii, reostate,
membrane)
o traductoare de mărimi neelectrice în mărimi electrice
 După modul în care are loc transformarea semnalului în
traductor: directe şi complexe.

5
În traductoare directe mărimea neelectrică este convertită direct în semnalul electric de la
ieşire. Funcţionarea acestor traductoare se bazează pe faptul că o proprietate electrică ce
caracterizează traductorul este dependenţa mijlocit de mărimea neelectrică de interes. Se pot
cita, de exemplu, termorezistenţele şi termocuplurile.
De cele mai multe ori, situaţia aproape ideală corespunzătoare traductoarelor directe nu se
întâlneşte: fie că nu există metode convenabile de transformare directă a mărimii neelectrice
într-o mărime electrică, fie că mărimea electrică de la ieşirea traductorului nu depinde numai
de mărimea neelectrică de măsurat, ci şi de alţi factori (perturbatori), determinaţi chiar de
obiectul sau fenomenul măsurat sau de mediul ambiant.
În aceste situaţii se realizează traductoare complexe, în care conversia semnalului
neelectric se face în mai multe etape intermediare şi/sau structura traductorului se proiectează
astfel încât sa fie imunizată faţa de acţiunea factorilor perturbatori. Ca o ilustraţie tipică se
pot cita, de exemplu, traductoarele diferenţiale, traductoarele cu compensare etc.
 După principiul de funcţionare:
o traductoare parametrice (sau modulatoare)
o traductoare generatoare (sau energetice).
În cazul traductoarelor parametrice, semnalul neelectric determină modificarea unei
proprietăţi electrice a traductorului (rezistenţă, capacitate, inductanţa mutuală, coeficient de
atenuare a radiaţiei etc.). Punerea în evidenţă a modificării necesită existenţa unei surse
exterioare de energie (sursa de activare). Ca exemple tipice se pot cita: termorezistenţa,
transformatorul diferenţial, fotorezistenţa, piezorezistenţa, microfonul capacitiv etc.
În cazul traductoarelor generale semnalul neelectric determină generarea unei tensiuni
electromotoare, a unui curent sau a unei sarcini. Ca exemple tipice se pot cita: termocuplul,
elementul fotovoltaic, traductoarele piezoelectrice.
Împărţirea traductoarelor în parametrice şi generatoare are o importanţă vitală din punctul
de vedere al modului în care se face prelucrarea semnalului electric de la ieşirea
traductorului: circuitele de prelucrare (măsurare) sunt complet diferite.
 După forma semnalului de la ieşirea traductorului:
o traductoare analogice
o traductoare digitale
Trebuie menţionat că din clasa traductoarelor digitale fac parte şi traductoarele cu ieşire
în impulsuri (exemple tipice: traductoare temperatură-frecvenţă, forţă-frecvenţă etc.).

6
Ţinând cont de clasificările enumerate, se poate utiliza pentru descrierea unui traductor un
set de simboluri şi notaţii generale – vezi fig.1.8. (S este semnalul, E este energia).

S
S1 S2 S1 2

1 2
1 2

[S1,S2,0] S=semnal 1

=energie [1,S2,S1]
a) b)

FIG.1.8. SIMBOLUL ŞI NOTAȚIA GENERALĂ PENTRU TRADUCTOR PARAMETRIC (A) ŞI PENTRU


UN TRADUCTOR GENERAL (B)
În fig.1.8. a) sunt indicate simbolul şi notaţia prescurtată pentru un traductor generator,
iar în fig.1.8.b) simbolul şi notaţia prescurtată pentru un traductor parametric. De exemplu,
utilizând aceste notaţii şi abrevierile din fig.1.7., un traductor fotovoltaic va fi descris de [RD,
E, 0] un traductor fotoconducitv de [E, E, RD], un traductor piezoelectric de [MC, E,0],un
traductor piezorezistiv de [E, E, MC], un termocuplu de [TR, E, 0], o termorezistenţă de [E, E,
TR], un traductor Hall de [E, E, MG], un traductor de pH de [CH, E, 0] etc.

STRUCTURA GENERALĂ A UNUI TRADUCTOR


Considerând cazul uzual al sistemelor de reglare, mărimea de măsurat x aplicată la
intrarea traductorului reprezintă parametrul reglat – temperatura, debit, presiune, nivel,
viteza, etc. La ieşire traductorul furnizează valoarea mărimii măsurate y sub forma unui
semnal unificat sau specializat în concordanţa cu cerinţele aparaturii de automatizare dacă
aceasta nu este standardizată.

x y
ES ELT A

SAE

Fig.1.9. Structura generalã a unui traductor


7
8
Pentru sistemele de conducere complexă poate să apară necesitatea caracterizării
procesului printr-o mărime de calitate dedusă de combinarea mai multor parametri. Obţinerea
valorii acestei mărimi de calitate se realizează prin operaţii specifice măsurărilor indirecte, cel
mai adesea, asupra semnalelor de ieşire de la mai multe traductoare cu aceeaşi structură din
fig.1.9.
ELEMENTUL SENSIBIL ES (denumit şi detector, captor sau senzor) este elementul
specific pentru detectarea mărimii fizice pe care traductorul trebuie să o măsoare.
Mediului în care funcţionează traductorul, în afara mărimii x pe care aceasta trebuie să o
convertească, îi sunt proprii numeroase alte mărimi fizice. Elementul sensibil se caracterizează
prin proprietatea de a detecta numai mărimea x, eliminând sau reducând la un mini acceptabil
influenţele pe care le exercită asupra sa toate celelalte mărimi fizice existente în mediul
respectiv.
Sub acţiunea mărimii de intrare are loc o modificare de stare a elementului sensibil, care,
fiind o consecinţă a unor legi fizice cunoscute teoretic sau experimental, conţine informaţia
necesară determinării valorii acestei mărimi. Modificarea de stare presupune un consum
energetic preluat de la proces. În raport cu fenomenele fizice pe care se bazează detecţia, cu
puterea asociată mărimii de intrare şi sub cota din aceasta care se poate ceda fără
a-i altera valoarea, modificarea de stare se poate manifesta sub forma unui semnal la
ieşirea elementului sensibil, (de exemplu, tensiunea electromotoare a unui termocuplu în funcţie
de temperatură). În alte situaţii modificarea de stare are ca efect variaţii ale unor parametri de
material.
ADAPTORUL A este cel de al doilea bloc funcţional important al traductorului. Aşa
cum rezultă şi din denumirea sa, el are rolul de a adapta informaţia obţinută (simbolic) la ieşirea
elementului sensibil cerinţele impuse de aparatura de automatizare care o utilizează, respectiv să
o convertească sub forma impusă pentru semnalul y. Cu privire la adaptor se pot remarca unele
particularităţi semnificative:
 pe partea de intrare adaptorul se caracterizează printr-o marediversificare din necesitatea
de a putea prelua variatele forme sub care pot să apară modificările de stare ale numeroaselor
tipuri de elemente sensibile.

9
 pe partea de ieşire adaptoarele cuprind, îndeosebi în cazul aparaturii de automatizare
standardizate, elemente constructive comune specifice generării semnalelor unificate şi care
nu depind deci de tipul sau domeniul de valori al mărimii de intrare.
Funcţiile realizate de adaptor sunt complexe. Ele determină în ceea ce se înţelege în mod
curent prin adaptare de nivel sau de putere (impedanţa) cu referire la semnalul de ieşire în raport
cu dispozitivele de automatizare. Totodată adaptorul este cel care asigură conversia variaţilor de
stare ale elementelor sensibile în semnale calibrate reprezentând valoarea mărimii de intrare. Prin
urmare, se poate spune că adaptorul este elementul în cadrul căruia se efectuează operaţia
specifică măsurării – comparaţia cu unitatea de măsură adoptată. Modalităţile practice de
efectuare a comparaţiei pot fi diverse, ele ţinând de însăşi principiile de măsurare aplicate şi
determinând diferenţieri structurale importante ale adaptoarelor. Astfel comparaţia se poate face
în raport cu o mărime etalon care exercită o acţiune permanentă şi simultană cu mărimea de
intrare (comparaţie simultană). În cele mai multe cazuri comparaţia este nesimultană, în sensul
că mărimea etalon este aplicată din exterior iniţial, în cadrul operaţiei de calibrare, anumite
elemente constructive memorând efectele sale şi utilizându-le ulterior pentru comparaţia cu
mărimea de măsurat, singura care se aplică din exterior în aceste cazuri (comparaţie succesivă).
Este de semnalat că, potrivit legilor fizice pe care se bazează detecţia efectuată de
elementul sensibil şi măsurarea în cadrul adaptorului, poate să apară necesitatea efectuării unor
operaţii de calcul liniare (atenuare, amplificare, sumare, integrare, diferenţiere), neliniare
(produs, ridicare la putere, logaritmare), sau realizării unor funcţii neliniare particulare
intenţionat introduse pentru compensarea neliniarităţilor inerente anumitor componente şi
asigurarea unei dependenţe liniare intrare-ieşire pentru traductor în ansamblu.
Ţinând seama de elementele constructive comune impuse de tipurile de semnale furnizate
la ieşire, adaptoarele pot fi grupate în două categorii: electrice (electronice) şi pneumatice.
Forma de variaţie a semnalelor respective conduce la o altă modalitate de clasificare:
analogice şi numerice. Semnalele analogice se caracterizează prin variaţii continue ale unui
parametru caracteristic, similare cu variaţiile mărimii aplicate la intrarea traductorului (mărime în
mod natural continuă). Ca exemple de semnale analogice unificate pot fi citate următoarele:
 curent continuu 0,5…5mA; 2…10mA; 4…20mA;
 tensiune continuă 0…10V; 0…20V; -10…+10V;
 presiune (aer) 20…100kN/m².

10
Prin calibrare, intervalul de variaţie al semnalului analogic se asociază domeniul necesar
al mărimii de intrare în traductor şi în consecinţă fiecărui nivel de semnal îi corespunde o valoare
bine precizată (prin legea de dependenţă liniară) a mărimii măsurate.
În ultimii ani, o dată cu utilizarea mai frecventă a calculatoarelor de proces şi a
echipamentelor de reglare numerică, o serie de traductoare furnizează la ieşire semnale numerice,
fiind prevăzute în acest scop cu adaptoare capabile să efectueze conversia analog-numerică.
Semnalele numerice se caracterizează prin variaţii discrete care permit reprezentarea într-un
anumit cod a unui număr finit de valori din domeniul de variaţie continuă al mărimii de intrare.
Codurile adoptate trebuie să fie compatibile cu echipamentele de reglare numerică, respectiv cu
sistemele de interfaţă ale intrărilor calculatoarelor de proces, ceea ce a impus tendinţe de
standardizare şi a semnalelor numerice furnizate de traductoare. Cele mai utilizate sunt
următoarele coduri (cu nivele compatibile TTL):
 binar natural, cu 8; 10; 12 sau 16 biţi;
 binar codificat zecimal, cu 2, 3, sau 4 decade.
Orice traductor, indiferent de complexitate, de destinaţie sau de forma constructivă, poate
fi redus la structura funcţională simplă constituită din două blocuri principale – elementul
sensibil şi adaptorul. Uneori însă, particularităţi legate de aspecte tehnologice sau economice
impun prezenţa şi a unor elemente auxiliare. Astfel sunt cazuri, de exemplu la măsurarea
temperaturilor ridicate, când elementul sensibil nu poate fi plasat în aceeaşi unitate constructivă
cu adaptorul. În asemenea situaţii apare necesitatea unor elemente de legătură pentru
transmiterea stării sau a semnalului furnizat de elementul sensibil către adaptor. În general
elementele de transmisie realizează conexiuni electrice, mecanice, optice sau de altă natură. Dacă
mărimea generată de elementul sensibil este neadecvată pentru transmisie – de exemplu în cazul
transmisiilor la mare distanţă – ele cuprind şi componente de conversie potrivit cerinţelor impuse
de canalele de transmisie.
Tot în categoria elementelor auxiliare se încadrează sursele de energie cuprinse în cadrul
traductoarelor. Conversiile au loc atât în elementul sensibil, cât şi în adaptor necesită consumuri
de energie care, chiar dacă principal s-ar putea obţine obţinând puterea asociată mărimii de
măsurat, introduc dificultăţi de realizare a performanţelor impuse semnalului de ieşire şi de
adaptare de impedanţă cu elementele receptoare. De aceea, de cele mai multe ori conversiile care
au loc se fac utilizând energia furnizată de aceste surse auxiliare.

11
Desigur, pentru diverse cazuri particulare pot fi evidenţiate şi alte elemente auxiliare.
Este de observat însă că toate acestea pot fi grupate din punct de vedere funcţional astfel încât se
ajunge în ultimă instanţă tot la schema din fig.1.9., care reprezintă structura generală tipică a
traductoarelor utilizate în cadrul sistemelor automate.

1.2. TIPURI DE SENZORI

Senzorul este un dispozitiv tehnic care reacționează calitativ sau cantitativ prin proprii
mărimi măsurabile, la anumite proprietăți fizice sau chimice ale mediului din preajma lui. Ca
parte componentă a unui aparat sau sistem tehnic detector poate măsura/înregistra de exemplu
presiunea, umiditatea, câmpul magnetic, accelerația, forța, intensitatea sonoră, radiații ș.a.
Provine din latină: sensus = simț.
Senzorul este un dispozitiv care măsoară o mărime fizică (masă, presiune, temperatură,
umiditate etc.) și o transformă într-un semnal care poate fi citit de către un observator printr-un
instrument sau poate fi prelucrat.
În automatizare, informația calitativă/cantitativa măsurabilă livrată de senzori, dupa o
eventuală amplificare și prelucrare servește la controlul și reglarea sistemelor tehnice automate.
Există astăzi senzori pentru mai mult de 100 de mărimi fizice, iar dacă se iau în
considerare şi senzorii pentru diferite substanţe chimice, numărul lor este de ordinal sutelor. Se
pot pune în evidenţă circa 2000 de tipuri distincte de senzori, oferite în 100.000 de variante, pe
plan mondial [ROD03].
Datorită marii diversităţi a principiilor de conversie a mărimilor fizice în mărimi
electrice, precum şi a soluţiilor de implementare a acestor principii, există şi o multitudine de
criterii de clasificare a senzorilor, dintre care vor fi enumerate câteva dintre cele mai importante:
Senzorii pot fi clasificaţi în funcţie de tehnologiile utilizate pentru realizarea lor:
 Tehnologii ale materialelor feromagnetice;
 Tehnologii ale materialelor piezo-ceramice;
 Tehnologii ale microeelectronicii şi microsistemelor;
 Tehnologii ale staturilor subţiri;
 Tehnologii ale staturilor groase;
 Tehnologii pentru materiale sinterizate;

12
 Tehnologii ale foliilor etc.
În funcţie de tipul mărimii fizice de intrare senzorii pot fi clasificaţi în:
 absoluţi, când semnalul electric de ieşire poate reprezenta toate valorile posibile ale mărimii
fizice de intrare, raportate la o origine (referinţă) aleasă;
 incrementali, când nu poate fi stabilită o origine pentru toate punctele din cadrul domeniului
de măsurare, ci fiecare valoare măsurată reprezintă originea pentru cea următoare.
În funcţie de consumul de energie:
 active, consumator de energie, de exemplu radar (măsurarea distanțelor prin emitere de
radiatii electromagnetice)
 pasiv, de exemplu fotorezistența cu care se poate măsura intensitatea luminii incidente.
Foarte importantă este clasificarea în funcţie de tipul mărimii de ieşire, în:
 senzori analogici, pentru care semnalul de ieşire este în permanenţă proporţional cu mărimea
fizică de intrare;
 senzori numerici (digitali), la care semnalul de ieşire poate lua numai un număr limitat de
valori discrete, care permit cuantificarea semnalului fizic de intrare.
Privind problema semnalului de ieşire din punctul de vedere al numărului de valori posibile, pot
fi puse în evidenţă alte două clase distincte:
 senzori binari, care prezintă la ieşire numai două valori distincte;
 senzori cu un număr mare de valori, pentru măsurarea unei mărimi într-o anumită plajă; pot
fi analogici sau numerici
Pe baza semnalului de intrare, senzorii pot fi clasificați în șase tipuri diferite:

Tipul Proprietăţi detectate


Termici Temperatură, căldură specifică, debit de căldură etc.
Electrici Sarcina, current, tensiune, rezistenta, inductanta etc.
Magnetici Densitatea fluxului magnetic, momentul magnetic etc.
Optici Intensitatea luminoasa, lungimea de unda, polarizare etc.
Mecanici Lungime, acceleratie, debit, forţa, presiune etc.
Chimici Compozitie, concentratie, pH etc.

Clasificarea detaliată a senzorilor în funcție de aplicațiile lor în producție:

13
 Deplasare, poziție, proximitate
o Potențiometru
o Element de măsurare a tensiunii
o Element capacitiv
o Transformatoare diferențiale
o Senzorii de proximitate cu curent turbionar
o Întrerupător inductiv de proximitate
o Encodere optice
o Senzorii pneumatici
o Întrerupătoare de proximitate magnetice
o Senzori cu efect Hall
 Viteza și mișcarea
o Encoder incremental
o Tahogenerator
o Senzori piroelectrici
 Forța
o Celule de sarcină pentru măsurarea tensiunii
 Presiunea fluidelor
o Manometru de presiune cu membrană
o Capsule, burdufuri, tuburi de presiune
o Senzori piezoelectrici
o Senzori tactili
 Debitul lichidului
o Plăcuța cu orificii
o Turbine meter
 Nivelul lichidului
o Plutitoare
o Presiune diferențială
 Temperatura
o Termorezistori
o Termistori

14
o Termo-diode și tranzistori
o Termocuple
o Senzori de lumină
o Fotodiode
o Fotorezistori
o Fototranzistori
1.3. MARIMI MASURABILE CU SENZORI

FENOMENE DETECTABILE FRECVENT:


 Biologice  Magnetic
 Chimice  Mişcare mecanică (deplasare, viteză,
 Electrice acceleraţie, etc.)
 Electromagnetice  Optice
 Caldură/Temperatură  Radioactive

METODELE COMUNE DE CONVERSIE:


 Fizic
o termoelectrice, termo-elastice, termo-magnetice, termo-optice
o fotoelectrice, foto-elastice, foto-magnetice,
o electro-elastice, electro-magnetice
o magneto-electrice
 Chimic
o transport chimic, transformare fizică, electro-chimică
 Biologic
o transformarea biologică, transformarea fizică

MĂRIMI MĂSURATE ÎN MOD FRECVENT:


 Acustic
o undă (amplitudine, fază, polarizare)
o spectru
o viteza undei

15
 Biologic şi chimic
o concentrații de fluide (gaz sau lichid)
 Electric
o sarcină
o tensiune
o intensitate
o câmp electric (amplitudine, fază, polarizare)
o conductivitate, permitivitate
 Magnetic
o câmp magnetic (amplitudine, fază, polarizare)
o permeabilitate
o flux
 Optic
o indice de refracţie
o reflectivitate
o absorbţie
 Termic
o temperatură
o flux
o căldură specifică
o conductivitate termică
 Mecanic
o poziţie
o viteză
o acceleraţie
o forţă
o presiune
o stres
o cuplu

16
Cap.2. MICROCONTROLLER-UL
2.1. NOȚIUNI TEORETICE PENTRU MICROCONTROLLER
2.1.1 Introducere

Ce este un microcontroler ?
La modul general un controler ("controller" termen de origine anglo-saxonă, cu un
domeniu de cuprindere foarte larg) este o structura electronică destinată controlului unui proces
sau unei caracteristici a mediului exterior, fără să fie necesară intervenția operatorului uman.
Un microcontroler este un "calculator pe un chip". Cuvântul "micro" sugerează mărimea redusă a
dispozitivului iar, "controler" ne spune că dispozitivul poate fi folosit pentru a controla obicte,
procese sau evenimente. Microcontrolerele pot fi găsite în componenta oricărui tip de aparat.
Orice aparat care măsoară, stochează, comandă, calculează sau afișează informații este o
potențială gazdă pentru un microcontroler. De exemplu orice automobil fabricat astăzi este
echipat cu cel puțin un microcontroler care comandă motorul mașinii și adesea chiar cu mai
multe pentru comanda sistemelor adiționale din automobil. În calculatoarele de birou (PC) se pot
găsi microcontrolere în tastatură, modemuri, imprimante și alte periferice. În echipamentele de
testare fac posibilă adăugarea unor facilități ca de exemplu memorarea rezultatelor măsurării,
afișarea mesajelor și formelor de undă. Produsele de larg consum care includ microcontrolere
sunt camerele video, video-recorderele, compact-disk (CD) playere și altele.
Circumstanțele în care ne găsim astăzi în domeniul microcontrolerelor și-au avut
începuturile în dezvoltarea tehnologiei circuitelor integrate. Această dezvoltare a făcut posibilă
înmagazinarea a sute de mii de tranzistoare într-un singur cip. Aceasta a fost un prerechizit
pentru producția de microprocesoare, și primele computere au fost făcute prin adăugarea
perifericelor ca memorie, linii intrare-ieșire, timeri și altele. Urmăoarea creștere a volumului
capsulei a dus la crearea circuitelor integrate. Aceste circuite integrate conțin atât procesorul cât
și perifericele. Așa s-a întâmplat cu primul cip continând un microcomputer, sau ce va deveni
cunoscut mai târziu ca microcontroler a luat ființă. Un microcontroler este similar unui

17
microprocesor. Ambele conțin o unitate centrală de prelucrare sau UCP (central processing unit).
UCP execută instrucțiuni care îndeplinesc operațiile de bază logice, matematice și de transport a
informației.
Pentru a construi un calculator complet, microprocesorul necesită memorie pentru
păstrarea datelor și programelor, interfețe de intrare-ieșire (I/O) pentru conectarea dispozitivelor
externe cum ar fi tastatura sau monitorul. Spre diferența de microprocesor, microcontrolerul este
un calculator pe un chip deorece el conține și memorie și interfețe de intrare-iesire pe lânga CPU.
Deoarece memoria și interfețele care încap pe un chip sunt limitate, microcontrolerele tind să fie
utilizate în sisteme mai mici care necesita doar un microcontroler și câteva elemente adiționale.
Resursele integrate la nivelul microcircuitului trebuie să includă cel puțin următoarele
componente: o unitate centrala (CPU), o memorie locală tip RAM și eventual una de tip ROM/
PROM / EPROM, I/O - intrări/ ieșiri numerice (paralele si seriale), timere (temporizatoare),
numaratoare, un sistem de întreruperi.
Este posibil ca la acestea să fie adaugate, la un preț de cost avantajos, caracteristici
specifice sarcinii de control care trebuie îndeplinite.
Un microcontroler tipic mai are facilități de prelucrare la nivel de bit, de acces direct și
usor la intrări/ieșiri și un mecanism de prelucrare a întreruperilor rapid si eficient.
OBS. Utilizarea unui microcontroler, oricât de evoluat , nu elimina unele componente ale
interfeței cu mediul exterior (atunci când ele sunt chiar necesare): subsisteme de prelucrare
analogica, elemente pentru realizarea izolarii galvanice, elemente de comutatie de putere
(electromecanice sau statice).

Variante constructive
Un criteriu de clasificare care se poate aplica întotdeauna este lungimea (dimensiunea)
cuvântului de date. Funcție de puterea de calcul dorita și de alte caracteristici se pot alege
variante având dimensiunea cuvântului de date de 4, 8, 16, sau 32 de biți.
Nu este obligatoriu ca dimensiunea cuvântului de date să fi egală cu dimensiunea unui
cuvânt masina. Există și multe variante zise dedicate (specializate prin intermediul codului
preprogramat și al resurselor hard) pentru comunicație, controlul tastaturilor, controlul aparaturii
audio-video, prelucrarea numerică a semnalului, etc.

18
Tehnologii de fabricație
Practic cea mai mare parte a microcontrolerelor se realizează la ora actuală în tehnologie
CMOS (tehnologii similare seriilor standard CMOS de circuite numerice HC, AC, ALV).
Se pot realiza astfel structuri cu un consum redus (care depinde de frecvența de lucru)
permitând eventual alimentarea de la baterie.
Logica internă este statică (total, sau în cea mai mare parte) permițând astfel, în anumite
condiții, micșorarea frecvenței de ceas sau chiar oprirea ceasului în ideea optimizării consumului.
Tehnologia este caracterizată și de o imunitate mai mare la perturbații, esențială într-un
mare numar de aplicații specifice.
Se realizează și variante pentru domeniu extins al temperaturii de funcționare
(de exemplu -40. +85 °C)
Există diverse variante de încapsulare (plastic și mai rar ceramică), multe destinate
montării pe suprafață (SMT) : DIP (de la 8 la 68 pini), SOIC, PLCC, PQFP, TQFP (> 100 pini),
etc.

2.1.2 Unitatea de memorie UM

Mod de funcționare
Unitatea de memorie este acea parte a microcontrolerului care are funcția de a
înmagazina informația sub forma de date și de a o face accesibilă (operație denumită "Citire")
atunci când se dorește acest lucru.
Pentru a explica și a înțelege mai ușor funcționarera acestui bloc, putem să-l comparam și
să-l descriem ca fiind un dulap cu mai multe sertare. Introducând conceptul de "locație de
memorie" și atribuind sertarelor această denumire, fiecare locație de memorie având câte o
valoare numerotată de la 0 - 15 în așa fel încât să nu fie confundate, oricare din conținuturile
locațiilor de memorie (sertarelor) vor fi atunci ușor accesibile. Pentru a realiza această
accesibilitate introducem al doilea concept nou numit " adresare" care poate fi definit ca fiind
operația de "selectare" sau "desemnare" a unei locații de memorie.
Trebuie menționat faptul că adresarea nu se face la întâmplare, ea se efectuează în
conformitate cu un "cod de adresă" care este unic, aceasta înseamna că fiecarei locații de
memorie îi este alocat codul corespunzător de selecție.

19
Este suficient să se știe desemnarea sertarului (codul de adresa corespunzător unei locații
de memorie) și astfel continuturile locației se vor face cunoscute în mod sigur.
Pentru un anumit cod de adresa aplicat la intrarea " Adrese" (vezi figura) obținem la
ieșirea "Date", conținutul sub forma de date a unei anumite locații de memorie adresate. Se poate
spune deci că memoria este alcătuită din toate locațiile de memorie și adresarea nu este altceva
decât alegerea uneia din ele.
Aceasta trebuie să selecteze locația de memorie la un capăt, și la celalalt capăt trebuie să
așteptăm conținutul sub forma de date ale acelei locații, adica s-a efectuat operația de "Citire" a
locației respective.
În afară de citirea dintr-o locație de memorie, memoria trebuie de asemenea să permită
"Scrierea" în ea (reîmprospatarea). Aceasta se face cu ajutorul unei linii aditionale numită linie
de control. Vom desemna această linie ca W/R (scrie /citește).
Linia de control este folosită în urmatorul fel : daca W/R=1, se face citirea, și dacă
W/R=0 atunci se face scrierea în locația de memorie.

Variante de realizare a memoriei locale


În afara de memoria locală de tip RAM, de dimensiuni relativ reduse (x10 octeți la x1K
octeți), implementată ca atare sau sub forma unui set de registre și destinația memorării datelor
(variabilelor), mai există o serie de aspecte specifice, marea majoritate a acestora fiind legată de
implementarea fizică a memoriei de program (și eventual a unei părți a memoriei de date) cu
ajutorul unor memorii nevolatile.
 EEPROM - multe microcontrolere au și o memorie de acest tip, de dimensiune limitată,
destinața memorării unui număr limitat de parametrii (memorie de date) care eventual trebuie
modificați din timp în timp și este o memorie relativ lentă cu un numar limitat (uzual mic) de
cicluri de scriere/citire.
 FLASH EPROM - este o solutie mai bună decât EEPROM-ul atunci când este necesar un
volum mare de memorie program (nevolatilă) mai rapidă și cu un număr garantat mai mare
de cicluri scriere/citire; este utilizată numai ca memorie de program.

2.1.3 Unitatea centrala de procesare CPU

20
Rol și funcționalitate
Este blocul din componența unui microcontroler capabil să acționeze asupra conținutului
(datelor) uneia sau mai multor locații continute în unitatea de memorie UM, specializat pe
operații (de adunare, înmulțire, împărțire, extragere și reintroducere) de date, care poate să
depoziteze datele atâta timp cât asupra acestora se efectuează operații.
În urma efectuării acestor operații se va depune înapoi în unitatea de memorie, (în
locațiile de memorie) rezultatul operațiilor efectuate (un nou conținut de date).
Deci putem spune că acest bloc lucrează direct cu unitatea de memorie, poate accesa
(prin operația de "Adresare") și prelua datele (prin operația de "Citire"), din fiecare locație de
memorie din cadrul UM, le depune în registrii săi (care sunt de fapt tot locații de memorie altele
decât cele din UM).
Aici are loc prelucrarea asupra datelor corespunzător operației specificate (impuse) de
program ("Mutarea" conținutului dintr-un registru în altul), finalizând prin a depune rezultatul
înapoi în locațiile de memorie din cadrul UM (prin operația de "Scriere").
Partea pe care tocmai am adăugat-o este numită "unitatea de procesare centrală" (CPU).
Locațiile ei de memorie sunt numite regiștri.
Deci concluzionând, registrii sunt locații de memorie a căror rol este de a ajuta prin
prelucrarea și executarea a variate operații matematice sau a altor operații cu date oriunde se vor
fi găsit datele în cadrul UM.

Caracteristici arhitecturale
Arhitectura unității centrale de calcul (CPU) este unul din elementele cele mai importante
care trebuie avut în vedere în analiza oricărui sistem de calcul.
Principalele concepte luate în considerare sunt următoarele:
 Arhitecturile de tip "von Neumann"
Microcontrolerele bazate pe această arhitectură sunt caracterizate de existența unui singur spațiu
de memorie utilizat pentru memorarea atât a codului instrucțiunilor cât și a datelor ce fac
obiectul prelucrării.Există deci o singură magistrală internă (bus) care este folosită pentru
prelucrarea (fetch) instrucțiunilor și datelor; efectuarea celor două operații separate, în mod
secvențial având ca efect încetinirea operațiilor. Este arhitectura standard pentru
microprocesoarele de uz general.

21
 Arhitecturile de tip "Harvard"
La această arhitectură există spații de memorie separate pentru program și date în consecință
există și magistrale separate pentru instrucțiuni și date. Există astfel posibilitatea execuției
cvasiparalele (suprapunerii) a celor două operații menționate. Codul unei instruncțiuni poate fi
preluat din memorie în timp ce se execută operațiile cu datele aferente instrucțiunii anterioare.
Este posibilă (cel puțin teoretic) o execuție mai rapidă, pe seama unei complexități sporite a
microcircuitului mai ales atunci când există și un "PIPE LINE" (acest termen va fi prezentat într-
un articol viitor). Este arhitectura standard pentru procesoarele numerice de semnal (DSP).
 CISC
Aproape toate microcontrolerele au la baza realizării CPU conceptul CISC (Complex
Instruction Set Computer).
Aceasta înseamna un set de peste 80 instrucțiuni, multe din ele foarte puternice și
specializate. De obicei multe din aceste instrucțiuni sunt foarte diferite între ele:
Unele operează numai cu anumite spații de adrese sau regiștrii, altele permit numai anumite
moduri de adresare, etc. Pentru programatorul în limbaj de asamblare există unele avantaje prin
utilizarea unei singure instruncțiuni complexe în locul mai multor instrucțiuni simple (analog
macro-instrucțiunilor clasice).
 RISC
RISC (Reduced Instruction Set Computer) este un concept de realizare a CPU care a început
să fie utilizat cu succes și la realizarea microcontrolerelor. Prin implementarea unui set redus de
instrucțiuni care se pot efectua foarte rapid, se obține o reducere a complexității microcircuitului,
suprafață disponibilizată poate astfel ăa fie utilizata în alte scopuri.
Printre caracteristicile asociate de obicei unui CPU RISC se pot menționa:
-arhitectura Harvard
-viteza sporită de execuție prin implementarea unui PIPE-Line pentru instrucțiuni
-set de instrucțiuni ortogonal (simetric): fiecare instrucțiune operează cu orice spațiu de
adrese (memorie) sau registru, instrucțiunile nu prezintă combinații speciale, excepții, restricții
sau efecte colaterale.
Dacă revenim la situția curentă, rezultă deci că avem doua entități independente
(memoria și CPU) ce sunt interconectate, și astfel orice schimb de informații este ascuns, ca și
funcționalitatea sa.

22
Dacă, de exemplu, dorim să adunăm conținuturile a două locații de memorie și întoarcem
rezultatul înapoi în memorie, vom avea nevoie de o conexiune între memoria UM și CPU. Mai
simplu formulat, trebuie să avem o anumită "cale" prin care datele circulă de la un bloc la altul.

2.1.4 Bus-ul - Magistrala de date și adrese


Rol și funcționalitate
Aceasta cale este numită "bus"-magistrală. Din punct de vedere fizic, el reprezintă un
grup de 8, 16, sau mai multe fire (panglica de fire speciale care permit transmisia de date la
anumite viteze impuse).
Exista două tipuri de bus-uri :
 bus de adresă sau magistrală de adrese (pe care circulă semnale sub forma de cod de
adrese care adreseaza UM)
 de date sau magistrală de date (pe care circulă datele preluate din UM și urmează a fi
depuse în registrii CPU spre a fi prelucrate și nu numai atât.)

Magistrala de adrese
Este alcătuită din atâtea linii cât este cantitatea de memorie și servește la transmiterea
adreselor de la CPU la memorie, practic indică de unde trebuie preluate datele, unde trebuie
trimise și adresa instrucțiunilor care trebuie executate.

Magistrala de date
Transportă informația supusă prelucrării și este atât de lată cât sunt cuvintele de date 8,
16, sau 32 biți (în cazul nostru 8 biți) sau cât este linia de conectare servind totodată la
conectarea tuturor blocurilor din interiorul microcontrolerului.
Din momentul de față putem avea o viziune clara asupra modului de interconectare și
funcționare al celor două entități privite ca blocuri componente din cadrul microcontrolerului
deci putem introduce noțiunea de "funcționalitate" ca parametru fictiv al microsistemului care a
luat naștere prin prezentarea acestora.

2.1.5 Unitatea intrare-ieșire

23
Rol și funcționalitate
În ceea ce privește funcționalitatea, situația s-a îmbunătățit, dar o nouă problemă a apărut
de asemenea: avem o unitate ce este capabilă să lucreze singură, care nu are nici un contact cu
lumea de afară, sau cu noi !
Pentru a înlatura aceasta deficiență, să adaugăm un bloc ce conține câteva locatii de
memorie a căror singur capăt este conectat la busul de date, iar celalat are conexiune cu liniile de
ieșire la microcontroler ce pot fi văzute cu ochiul liber ca pini la componenta electronică.
Aceste locații care tocmai le-am adăugat sunt numite "porți". Sunt diferite tipuri de porți:
intrare, ieșire sau porți pe două-căi.
Când se lucreaza cu porți, mai întâi de toate este necesar să se aleagă cu ce port urmează
să se lucreze, și apoi să se trimita, sau să se ia date de la port.
În timpul accesării, portul se comportă ca o locație de memorie, unde "ceva" este pur și
simplu scris în el sau citit din el, și este posibil de a remarca ușor aceasta la pinii
microcontrolerului. Toate microcontrolerele au un număr oarecare de intrări/ieșiri numerice (
x1...x10).
Conexiunile exterioare sunt bidirecționale sau unidirecționale, unele sunt
multifuncționale (se oferă funcții alternative pe același pin), altele pot avea o capacitate sporită
de a absorbi curent (de ex. pentru comanda directa a unui LED).

Tipuri reprezentative de porturi


 UART (UNIVERSAL ASYNCHRONOUS RECEIVER TRANSMITTER)
Este un port serial bidirecțional destinat implementării unui protocol clasic de comunicație
asincron;
 USART ( UNIVERSAL SYNCHRONOUS RECEIVER TRANSMITTER ).
Este un port similar cu cele cunoscute, dar care permite implementarea și a unui protocol
sincron cu obținerea unor viteze mai mari de comunucație.
 PORTURI SERIALE SINCRONE DEDICATE
Sunt destinate transferului serial de date de mare viteză cu unele periferice specializate
(sisteme de afișare, convertoare analog numerice,etc) sau permit conectarea într-o rețea de
comunicație simplă. Implică și implementarea unor protocoale mai mult sau mai putin complexe

24
de transfer al informației. Există câteva implementari raspândite (prezentate în ordinea
crescătoare a complexității):
o SPI (Serial Peripheral Interface)
Este un port serial sincron și SCI (serial comunications interface) un circuit de tip UART
îmbunătățit, definite și utilizate de fima Motorola

o Microwire / Plus
Este o interfață serială bidirecțională sincronă utilizată de firma National Semiconductor.

o I2C (Inter Integrated Circuits bus)


Este o interfață serială bidirecțională (pe două fire) , dezvoltată de firma Philips, destinată
aplicațiilor de 8 biți . Există și multe circuite "periferice" care sunt prevăzute cu o astfel de
interfață.

 CAN (Controller Area Network)


Sunt standarde de comunicație serială utilizate în industria de automobile, permițând
interconectarea într-o rețea a diverselor componente inteligente (senzori, elemente de execuție,
etc.) folosite într-un automobil modern.

2.1.6 Comunicația serială

S-ar părea la prima vedere că este rezolvată posibilitatea comunicarii cu lumea de afară
dar, în ciuda acestui fapt, acest mod de comunicare are neajunsurile sale. Unul din acestea este
numărul de linii ce trebuie să fie folosite pentru a transfera datele. Să punem următoarea
problemă: Ce s-ar întâmpla daca acestea ar trebui transferate la distanță de câțiva kilometri?
Numărul de linii și numărul de kilometri nu promite costuri eficiente pentru proiect. Nu ne
ramâne decât să reducem numărul de linii în asa fel încât să nu afectăm funcționalitatea. Să
presupunem că lucrăm doar cu 3 linii, și că o linie este folosită pentru trimiterea de date, alta
pentru recepție și a treia este folosită ca o linie de referință atât pentru partea de intrare cât și
pentru partea de ieșire. Pentru ca aceasta să funcționeze, trebuie să stabilim regulile de schimb
ale datelor. Aceste reguli sunt numite protocol. De aceea protocolul este definit în avans ca să nu

25
fie nici o neînțelegere între părțile ce comunică una cu alta. De exemplu, daca un om vorbește în
franceză, și altul vorbeste în engleza, este puțin probabil ca ei se vor înțelege repede și eficient
unul cu altul. Să presupunem că avem următorul protocol. Unitatea logică "1" este setata pe linia
de transmisie pâna ce începe transferul. Odată ce începe transferul, coborâm linia de transmisie
la "0" logic pentru o perioada de timp (pe care o vom desemna ca T), așa că partea receptoare va
ști că sunt date de primit, astfel că va activa mecanismul ei de recepție.
Să ne întoarcem acum la partea de transmisie și să începem să punem zero-uri și unu-uri
pe linia de transmisie în ordinea de la bitul cel mai puțin semnificativ (LSB) la bitul cel mai mult
semnificativ (MSB). Să lăsăm ca fiecare bit să ramână pe linie pentru o perioadă de timp egală
cu T, și la sfârsit, sau dupa al 8-lea bit, să aducem unitatea logica "1" înapoi pe linie ce va marca
sfârșitul transmisiei unei date. Protocolul ce tocmai l-am descris este numit în literatura
profesională NRZ (Non-Return to Zero). Pentru că avem linii separate de recepție și de
transmitere, este posibil să recepționăm și să transmitem date (informații) în același timp. Blocul
ce permite acest mod de comunicare este numit blocul de comunicație serială. Spre deosebire de
transmisia paralelă, datele sunt mutate aici bit cu bit, sau într-o serie de biti, de unde vine și
numele de comunicație serială. După recepția de date trebuie să le citim din locația de transmisie
și să le înmagazinăm în memorie în mod opus transmiterii unde procesul este invers. Datele
circulă din memorie prin bus către locația de trimitere, și de acolo către unitatea de recepție
conform protocolului.

2.1.7 Unitatea de timer

Odată rezolvată problema comunicației seriale, putem recepționa, trimite și procesa date.
Totuși, ca să îl putem utiliza, în special în industrie, mai avem nevoie de câteva blocuri. Unul din
acestea este blocul de timer care este important pentru noi pentru că ne da informația de timp,
durata, protocol etc. Unitatea de bază a timer-ului este un contor liber care este de fapt un
registru a cărui valoare numerică crește cu intervale de timp egale, așa încât luându-i valoarea
după intervalele T1 si T2 și pe baza diferenței lor să putem determina cât timp a trecut. Acesta
este o parte foarte importantă a microcontrolerului a cărui control necesită cea mai mare parte a
timpului nostru.

26
2.1.8 Watchdog-ul

Înca un lucru ce necesita atenția noastră este funcționarea fără defecte a


microcontrolerului în timpul funcționării. Să presupunem ca urmare a unei anumite interferențe
(ce adesea se întâmpla în industrie) microcontrolerul nostru se oprește din executarea
programului, sau și mai rau, începe să funcționeze incorect. Bineînțeles, când aceasta se întâmpla
cu un computer, îl resetam pur și simplu și va continua să lucreze. Totuși, nu există buton de
resetare pe care sa apăsăm în cazul microcontrolerului care să rezolve astfel problema noastră.
Pentru a depăși acest obstacol, avem nevoie de a introduce încă un bloc numit watchdog-câinele
de pază. Acest bloc este de fapt un alt contor liber unde programul nostru are nevoie să scrie un
zero ori de câte ori se execută corect. În caz că programul se "înțepenește", nu se va mai scrie
zero, iar contorul se va reseta singur pâna la obținerea valorii sale maxime. Aceasta va duce la
rularea programului din nou, și corect de aceasta dată pe toată durata. Acesta este un element
important al fiecarui program ce trebuie să fie fiabil fără supravegherea omului.

2.1.9 Convertorul Analog-Digital

Pentru că semnalele de la periferice sunt substanțial diferite de cele pe care le poate


înțelege (zero și unu), ele trebuie convertite într-un mod care să fie înțeles de microcontroler.
Aceasta sarcină este îndeplinită de un bloc pentru conversia analog-digitală sau de un convertor
AD. Acest bloc este responsabil pentru convertirea unei informații privind o anumită valoare
analoga într-un numar binar și pentru a o urmări pe tot parcursul la un bloc CPU în așa fel ca
blocul CPU să o poata procesa.
Convertoarele utilizate fac parte de regula dintr-un sistem de achiziție de date, existând și
un multiplexor analogic cu mai multe canale.
Rezoluția disponibilă este de 8 sau 10 biți cu precizia corespunzatoare numai pentru 8 (9)
biți, pentru mărime de intrare unipolară.
Referința utilizată este externă. Timpul minim de conversie obtenabil este în plaja x1 µs -
x10 µs. Există microcontrolere care utilizează tehnici de (re)calibrare pentru mărimea și/sau
menținerea preciziei.

27
Tehnicile de conversie utilizate sunt: aproximații succesive (majoritatea) cu eșantionare
implicită sau rampă digitala.
Există și subsisteme locale care, în cazul când sunt prezente, pot fi folosite pentru
implementarea unor alte tehnici de conversie (cu utilizarea unui numar minim de componente
exterioare): numărătoare de impulsuri, circuite comparatoare (analogice, standard), intrări de
captare (forțează memorarea "captarea" valorii unui numărător care numără liber în momentul
activării, permițând măsurarea intervalelor de timp sau frecvențelor, etc.
Obs. În ultimul timp au apărut și variante de CAN cu rezoluții mari și foarte mari
realizate în tehnica sigma-delta. Realizările respective sunt mai degrabă un CAN cu
microcontroler (firma Analog Device oferă un nucleu de 8051 plus un CAN sigma-delta cu
rezoluții pâna la 24 biți!)
CONVERTOARE NUMERIC ANALOGICE (CNA)
Practic singura tehnica de conversie numeric analogica care poate fi folosită este bazată
pe modulația factorului de umplere (PWM). Există unul sau mai multe canale pe care se poate
genera un tren de impulsuri cu factor de umplere programabil (0 -100%). Eventual în acest scop
se poate utiliza și sistemul de timere/numărătoare. Printr-o filtrare de tip trece jos, exterioară, se
poate obține o tensiune proporțională cu factorul de umplere.

2.2. MICROCONTROLER ATMEGA

Introducere
Microcontrolerele ATMega aparțin familiei de microcontrolere AVR și sunt fabricate de Atmel
Corporation. Un microcontroler ATMega este un microcontroler pe 8 biți cu arhitectură Harvard
bazat pe seturi de instrucțiuni reduse (RISC).
După cum sugerează și numele, de exemplu, "ATmega16", unde AT = Atmel, mega =
mega AVR și 16 = 16kb memorie flash.
Dispune de caracteristici standard, cum ar fi ROM-ul (Read Only Memory), memoria
RAM (Random Access Memory), memoria EEPROM (Electrical Erasable Programmable Read
Only Memory), timere și porturi de intrare/ieșire, împreună cu periferice suplimentare cum sunt
conventoarele analog digitale (ADC), porturi de interfață serială etc. Acestea au 120 și mai multe
seturi de instrucțiuni și memoria de program variază de la 4K la 256K bytes.

28
Istoria microcontrolelor ATMega
Microcontrolerele ATMega au fost proiectate de doi studenți din cadrul Institutului
Tehnologic Norvegian (NTH) - Alf-Eigel Bogen și Vegard Wollan. Mai târziu a fost cumpărat și
dezvoltat de Atmel Corporation în 1996.

Arhitectura microcontrolerelor ATMega


După cum sa menționat în partea introductivă, microcontrolerele ATMega se bazează pe
arhitectura Harvard, adică memorie de date separată și memorie program. Memoria de program,
cunoscută și sub denumirea de program sau memorie de cod, este memoria cu acces aleatoriu în
memorie (ROM). Dimensiunea memoriei programului variază de la 8K la 128K bytes.
Memoria de date este împărțită în trei părți - 32 registre de scop general, memorie de
intrare/ieșire și memorie internă de acces randomizat (SRAM). În timp ce dimensiunea
registrelor cu scop general este fixă, memoria I / O și dimensiunea internă SRAM variază de la
cip la cip.
Diagrama bloc a mictrocontrolerelor

29
Pinii și module ale microcontrolerului ATMega
 Regiștri de uz general: Microcontrolerele ATMega au arhitectură bazată pe registru, adică
atât operanzii cât și rezultatul operațiilor sunt stocați în registre, colocalizate cu unitatea de
procesare centrală (CPU). Registrele cu scop general sunt cuplate la unitatea logică aritmetică
(ALU) a procesorului.
Aceste registre sunt utilizate pentru stocarea temporară a informațiilor în timpul executării unui
program. Acestea consumă 32 de octeți de spațiu de memorie și iau locația adresei - $00 la $FF.
Aceste registre sunt denumite ca R0 până la R31 și fiecare are o lățime de 8 biți.

30
 Memorie de intrare/ieșire: Aceasta este denumită și memorie specială pentru înregistrarea
funcțiilor (SFR) deoarece este dedicată funcțiilor speciale cum ar fi registrele de stare, timerele,
comunicațiile seriale, porturile I / O, convertoarele analogice digitale (ADC) etc.
Numărul de locații ocupate de această memorie depinde de numărul de pini și de funcțiile
periferice suportate de cip. În timp ce 64 de octeți de locație I / O sunt fixați pentru toate cipurile,
unele microcontrolere ATMega au o memorie I / O extinsă care conține registre legate de
porturile suplimentare și periferice.
 Memoria internă SRAM: Acesta este de asemenea numit şi tampon de zgârieturi și este
utilizat pentru a stoca date și parametri de către programatori și compilatoare. Fiecare locație este
accesibilă direct prin adresa acesteia. Aceasta se utilizează pentru a stoca date din porturile de
intrare / ieșire și porturile seriale în procesor.
 Memorie programabilă flash care poate fi stearsă electric (EEPROM Flash): Aceasta este
o memorie programabilă în sistem pentru stocarea programelor. Este ștearsă și programabilă ca o
singură unitate. Deoarece este non-volatilă, conținutul de memorie este reținut chiar și în cazul
opririi. Pentru fiecare microcontroler ATMega, numărul de la sfârșitul numelui indică
capacitatea memoriei flash.
De exemplu, pentru ATMega16, capacitatea de memorie flash este de 16K Bytes. Un avantaj al
memoriei flash în microcontrolerele ATMega îl reprezintă programabilitatea în sistem, adică
microcontrolerul poate fi programat chiar și în timp ce se află pe placa de circuite.
 Memorie programabilă care poate fi stearsă electronic (EEPROM): o parte din această
memorie este utilizată pentru a stoca și a reține datele permanente ale programului și alta pentru
parametri ai sistemului.
În afară de modulul de memorie, conexiunile externe ale microcontrolerului pentru surse de
alimentare, doi pini externi de intrare a cristalului, resetarea procesorului și patru porturi de 8
biți.
 Porturi: Microcontrolerele ATMega conțin patru porturi de 8 biți - Port A, Port B, Port C și
Port D. Fiecare port este asociat cu trei registre – regristrul de date (scrie date de ieșire la
port), registru pentru direcţia datelor (reglează un pin specific ca ieșire sau intrare) și registru
pentru adresa de intrare (citește date de intrare din port).
 Ceas: Ceasul microcontrolerului este folosit pentru a oferi o bază de timp pentru sub-
sistemele periferice. Putem seta ceasul intern folosind circuitul RC sau oscilatoarele externe.

31
 Timere și numărătoare: Microcontrolerele ATMega conțin în general 3 timere. În timp ce
două timere pe 8 biți pot fi de asemenea utilizate ca contoare, al treilea este un contor de 16
biți. Acestea sunt folosite pentru a genera semnale de ieșire de precizie, pentru a număra
evenimente externe sau pentru a măsura parametrii semnalului digital de intrare.
 Sisteme de comunicații seriale: Cipul microcontrolerului ATMega conține receptorul și
transmițătorul serial universal sincron și asincron (USART), interfața serial periferică (SPI) și
interfața serială cu două fire (TWI).
 Convertoare analog-digitale: Microcontrolerele ATMega conțin subsistemul convertor
analog-digital (ADC) cu mai multe canale. ADC are o rezoluție de 10 biți și funcționează pe
principiul aproximării succesive. Este asociat cu trei registre - ADC registru de selecţie prin
multiplexare, ADC registru de control şi status și ADC registru de date.
 Întreruperi: Există 21 de periferice de întrerupere în microcontrolerele ATMega. În timp ce 3
sunt utilizate pentru surse externe, restul de 19 sunt utilizate pentru subsisteme interne.
Acestea sunt folosite pentru a întrerupe secvența normală a evenimentelor în caz de urgențe
cu prioritate ridicată.

Programarea în microcontrolerele ATMega


Așa cum am menționat mai devreme, microcontrolerul ATMega se bazează pe arhitectura
RISC, adică conține un set redus de instrucțiuni. Similar cu alte microcontrolere, programarea în
microcontrolerele ATMega poate fi efectuată și în limbajele de nivel inferior (asamblare) sau în
limbajele de nivel înalt (C încorporat).

2.3. INTERFETE STANDARD CONTROLATE DIRECT CU


MICROCONTROLER: ARDUINO, 8051, AVR, PIC, DSP, ARM, ARM, MSP430, TTL
LOGIC

2.3.1 Arduino
Arduino este o companie open-source care produce atât plăcuțe de dezvoltare bazate pe
microcontrolere, cât și partea de software destinată funcționării și programării acestora. Pe lângă
acestea include și o comunitate uriașă care se ocupă cu creația și distribuirea de proiecte care au

32
ca scop crearea de dispozitive care pot sesiza și controla diverse activități sau procese în lumea
reală.
Proiectul este bazat pe designul plăcilor cu microcontroler produse de câțiva furnizori,
folosind diverse tipuri de microcontrolere. Aceste plăci pun la dispoziția utilizatorului pini I/O,
digitali și analogici, care pot fi interfațați cu o gamă largă de plăcuțe numite scuturi (shield-uri)
și/sau cu alte circuite. Plăcile au interfețe de comunicații seriale, inclusiv USB pe unele modele,
pentru a încărca programe din calculatorele personale. Pentru programarea microcontrolerelor,
Arduino vine cu un mediu de dezvoltare integrat (IDE) bazat pe proiectul Processing, care
include suport pentru limbaje de programare ca C și C++.
Primul Arduino a fost lansat în 2005, având ca țintă asigurarea unei soluții ieftine și
simple pentru începători și profesioniști spre a crea dispozitive capabile să interacționeze cu
mediul, folosind senzori și sisteme de acționare. Cele mai comune exemple sunt dispozitivele
pentru utilizatorii începători precum: roboții simpli, termostatele și/sau detectoarele de mișcare.
Plăcuțele Arduino sunt disponibile comercial sub formă preasamblată sau sub forma unor
kituri de asamblat acasă (do-it-yourself). Specificațiile schemelor sunt disponibile pentru orice
utilizator, permițând oricui să fabrice plăcuțe Arduino. Adafruit Industries estimase la mijlocul
anului 2011 că peste 300.000 de plăcuțe oficiale Arduino au fost produse, iar în 2013 700.000 de
plăcuțe oficiale erau în posesia utilizatorilor.
Hardware
O plăcuță Arduino este compusă dintr-un microcontroler Atmel AVR de 8-, 16- sau 32-
biți (deși începând cu 2015 s-au folosit microcontrolere de la alți producători) cu componente
complementare care facilitează programarea și încorporarea în alte circuite. Un aspect important
la Arduino este că acesta dispune de conectori standard, care permit utilizatorului să conecteze
plăcuța cu procesorul la diferite module interschimbabile numite shield-uri. Unele shield-uri
comunică cu Arduino direct prin pinii digitali sau analogici, dar altele sunt adresabile individual
prin magistrala serială I²C permițând utilizarea mai multor module în paralel. Până în anul 2015
plăcuțele Arduino oficiale au folosit cipuri Atmel din seria megaAVR, în special ATmega8,
ATmega168, ATmega328, ATmega1280 și ATmega2560, iar în 2015 au fost adăugate cipuri de
la alți producători. O multitudine de alte procesoare au fost folosite de dispozitive compatibile
Arduino. Multe plăcuțe includ un regulator liniar de 5 V și un oscilator cu cuarț de 16 MHz (sau
un rezonator ceramic în unele variante), deși anumite plăcuțe, cum ar fi LilyPad, funcționează la

33
8 MHz și nu necesită regulator, datorită restricțiilor de formă. Un microcontroler instalat pe
Arduino vine preprogramat cu un bootloader care simplifică încărcarea programelor pe memoria
flash a cipului, în comparație cu alte dispozitive care necesită programatoare externe. Acest
aspect face Arduino o soluție simplă, permițând programarea de pe orice computer ordinar. În
prezent, bootloader-ul optiboot este bootloader-ul implicit instalat pe Arduino UNO.
La nivel conceptual, când se folosește mediul de dezvoltare integrat Arduino,
programarea tuturor plăcuțelor se face prin conexiune serială. Implementarea acesteia diferă în
funcție de versiunea hardware. Unele plăcuțe Arduino au implementate convertoare de nivel
logic pentru a realiza conversia între nivelele logice RS-232 și cele TTL. Plăcuțele Arduino din
prezent sunt programate prin USB, având integrate cipuri de conversie USB-serial, cum ar fi
FTDI FT232. Unele modele UNO, mai noi, folosesc un cip AVR separat programat să
funcționeze ca un convertor USB-serial, care poate fi reprogramat printr-un port ICSP dedicat.
Alte variante, cum ar fi Arduino Mini și versiunea neoficială Boarduino, folosesc adaptoare
detașabile USB-serial, cabluri, Bluetooth sau alte metode.
Plăcuța Arduino are expuși mulți dintre pinii de intrare/ieșire ai microcontrolerului,
pentru ca aceștia să fie folosiți de alte circuite. Diecimila, Duemilanove și UNO oferă 14 pini
digitali de intrare/ieșire, dintre care 6 pot produce semnale PWM și 6 intrări analogice care, de
asemenea, pot fi folosite ca intrări/ieșiri digitale. Acești pini sunt accesibili prin partea superioară
a plăcuței, prin intermediul unor barete mamă cu pasul între pini de 2,54 mm.
Software
Programele Arduino pot fi scrise în orice limbaj de programare cu un compilator capabil să
producă un cod mașină binar. Atmel oferă un mediu de dezvoltare pentru microcontrolerele sale,
AVR Studio și mai nou, Atmel Studio.

Proiectul Arduino oferă un mediu integrat de dezvoltare (IDE), care este o aplicație cross-
platform, scrisă în Java. Acesta își are originile în mediul de dezvoltare pentru limbajul de
programare Processing și în proiectul Wiring. Este proiectat pentru a introduce programarea în
lumea artiștilor și a celor nefamiliarizați cu dezvoltarea software. Include un editor de cod cu
funcții ca evidențierea sintaxelor, potrivirea acoladelor și spațierea automată și oferă mecanisme
simple cu un singur click, pentru a compila și a încărca programele în plăcuța Arduino. Un
program scris în IDE pentru Arduino se numește sketch.

34
Arduino IDE suportă limbajele de programare C și C++ folosind reguli speciale de
organizare a codului. Arduino IDE oferă o librărie software numită Wiring, din proiectul Wiring,
care oferă multe proceduri comune de intrare și ieșire. Un sketch tipic Arduino scris în C/C++
este compus din două funcții care sunt compilate și legate cu un ciot de program main(), într-un
program executabil cu o execuție ciclică:
setup(): o funcție care este rulată o singură dată la începutul programului, când se inițializează
setările.
loop(): o funcție apelată în mod repetat până la oprirea alimentării cu energie a plăcuței.
După compilarea și legarea cu GNU toolchain inclus, de asemenea, în IDE, mediul de dezvoltare
Arduino trimite comandă către programul avrdude pentru a converti codul executabil într-un
fișier text codat hexazecimal, care poate fi încărcat în placa Arduino de un program de încărcare.

2.3.2 Intel MCS-51 (8051)


Intel MCS-51 (numit şi 8051) este o serie de microcontrolere cu un singur cip, având o
arhitectură Harvard, ce a fost dezvoltată de compania americană Intel în 1980 pentru folosirea în
sisteme embedded (sisteme cu microprocesoare integrate). Versiunile originale ale Intel au fost
populare în anii 1980 și la începutul anilor 1990, dar astăzi au fost înlocuite de o gamă vastă de
dispozitive compatibile cu 8051 ce sunt mai rapide și/sau îmbunatățite din punct de vedere
funcțional, fabricate de mai mult de 20 de producători independenți inclusiv: Atmel, Infineon
Technologies (fostă Siemens AG), Maxim Integrated Products (prin intermediul filialei sale
Dallas Semiconductor), NXP (fostă Philips Semiconductor), Nuvoton (fostă Winbond), ST
Microelectronics, Silicon Laboratories (fostă Cygnal), Texas Instruments și Cypress
Semiconductor.

Famila originală MCS-51 a lui Intel a fost dezvoltată utilizând tehnologie NMOS, dar
versiunile ulterioare, identificate prin litera C în numele lor (ex.: 80C51) foloseau tehnologie
CMOS și necesitau mai puțină putere de alimentare decât predesoarele lor cu NMOS. Acest
lucru le-a făcut mai potrivite pentru dispozitivele cu baterii.
Caracteristici importante și aplicații

35
Oferă multe funcții (CPU, RAM, ROM, I/O, logică de întreruperi, timer, etc.) într-un
singur pachet; pentru variantele 8051, 8031 și 8751 diferențele apăreau la memoria internă
program.
 UCP pe 8 biți la 12 MHz
 Capabilități de prelucrare booleană (operator pe 1 bit)
 64 K spațiu de adrese (date și program)
 128 baiți memorie internă de date
 4 KB memorie internă program (ROM, none, EPROM)
 32 linii de intrare/ieșire organizate în 4 porturi
 2 timere/numărătoare pe 16 biți
 1 port serial (full duplex UART)
 5 surse de întrerupere (2 externe) pe 2 niveluri de priorități
 Pentru variantele 8052, 8032 și 8752: 256 baiți memorie date, 8 KB memorie program, 6
surse de întrerupere, 3 timere.
O caracteristică deosebit de utilă a microcontrolerului 8051 este includerea unui motor de
procesare boolean care permite operațiilor logice booleene la nivel de bit să fie efectuate în mod
direct și eficient cu ajutorul registrelor interne și RAM-ului. Aceasta caracteristică a ajutat la
cimentarea popularității 8051 în aplicațiile de control industrial. O altă caracteristică importantă
este că are patru seturi de registre separate, care pot fi utilizate pentru a reduce foarte mult latența
de întreruperi, comparativ cu metoda mai comune de stocare a contextului de întreruperi într-o
stivă.
UART-urile MCS-51 fac simplu de utilizat chip-ul ca o interfață serială de comunicații.
Pinii externi pot fi configurați să se conecteze la regiștrii interni într-o varietate de moduri, și
timer-ele interne pot fi de asemenea utilizate, permițând comunicații pe serială într-o serie de
moduri, atât sincrone și asincrone. Unele moduri permit comunicații fără componente externe.
Un mod compatibil cu un mediu multi-punct de comunicații RS-485 este realizabil, dar puterea
reală a 8051 este de compatibilitate cu protocoalele ad-hoc existente (de exemplu, atunci când se
controlează dispozitivele de control serial).
O dată ce un UART, și un timer dacă este necesar, au fost configurate, programatorul are
nevoie doar să scrie o simplă rutină de înteruperi pentru a reumple registrul de send (de trimitere)
ori de câte ori ultimul bit este shiftat afară de către UART și/sau să golească întregul registru

36
receive (de primire), să copieze datele în altă parte. Programul principal efectuează apoi citiri
seriale și scrie doar prin citirea și scrierea a 8 biți de date în stivă.
Microcontrolerele bazate pe MCS-51 includ de obicei unul sau două UART-uri, două sau
trei timere, 128 sau 256 biți de memorie internă de date RAM (dintre care 16 bytes sunt bit-
adresabili), până la 128 bytes de I/O, de la 512 bytes până la 64KB de memorie internă program
și uneori o cantitate de memorie de date RAM extinsă (ERAM) localizată în spațiul de date
extern. Nucleul 8051 original rula 12 cicluri de ceas pe ciclu mașină, cu majoritatea
instrucțiunilor executându-se în unul sau două cicluri mașină. Cu o frecvență de ceas de 12 MHz,
8051 putea astfel să execute un milion de instrucțiuni de un ciclu pe secundă sau 500 000 de
intrucțiuni de doi cicli pe secundă. Nucleele 8051 îmbunătățite, ce sunt astăzi folosite, rulează
șase, patru, două sau chiar un ceas pe ciclu mașină și au frecvențe de ceas de până la 100 MHz,
fiind astfel capabile de un număr mult mai mare de intrucțiuni pe secundă.
Caracteristici comune incluse în microcontrolere moderne bazate pe 8051 includ built-in
timere de reset cu detectare brown-out, oscilatoare on-chip, memorie program Flash ROM auto-
programabilă, cod bootloader în ROM, spațiu de stocare a datelor EEPROM non-volatilă, I²C,
SPI, și interfețe USB host, magistrale CAN sau LIN, generatoare PWM, comparatoare analogice,
convertoare A/D și D/A, RTC-uri, contoare și timere suplimentare, facilități de debugging in-
circuit, mai multe surse de întrerupere, și moduri suplimentare de economisire a energiei.
Arhitectura internă
Microcontrolerele din familia MCS-51 au o arhitectură internă bazată pe cea a
microprocesoarelor de uz general. Diferențele față de microprocesoarele de uz general au pornit
de la faptul că se dorea o unitate de procesare cât mai ieftină și care să fie folosită în sisteme de
conducere. Microprocesoarele Intel 8080 și 8085 au o arhitectură orientată spre procesare a
datelor de uz general. Pentru realizarea unui sistem de conducere, o unitate centrală cu
microprocesor de uz general, nu poate fi folosită fără a face apel și la anumite circuite externe
specializate. Astfel, pentru introducerea timpului în sistem este nevoie de un circuit digital numit
timer, pentru achiziția datelor din exterior trebuie prevăzută o interfață paralelă (porturi), pentru
comunicație între diverse module ale sistemului de conducere este nevoie de o interfață serială.
Se obține în final un sistem destul de complex, cu o dimensiune mare și fiabilitate redusă
determinată de numărul destul de mare de circuite digitale folosite. Microcontrolerele elimină
aceste neajunsuri prin includerea pe același cip a acestor circuite specializate, ceea ce a condus la

37
o arhitectură internă mai complexă. Astfel, au rezultat structuri de conducere mult mai simple și
mai puternice.
Un microcontroler 8051 este organizat în jurul unei unități centrale similare cu un
microprocesor de uz general. Resursele hardware on-chip care nu se regăsesc la
microprocesoarele de uz general sunt:
 facilitatea de operare directa pe bit a unității aritmetico-logice (acumulator) datorită integrării
unui procesor boolean;
 organizarea internă a unei stive de maxim 128KB;
 existența un set de instrucțiuni mai elaborat;
 capabilitatea de calcul binar și zecimal;
 4 porturi bidirecțonale a câte 8 linii fiecare;
 2 timere pe 16 biți;
 port serial de mare viteză cu mai multe moduri de lucru;
 structură de întreruperi cu două nivele de prioritate;
Microcontrolerele sunt denumite și "embedded microprocessors" tocmai datorită acestei
organizări interne hardware. Scopul de a obține un circuit cât mai compact a determinat o altfel
de abordare a conceptului de magistrală față de microprocesoarele de uz general. După cum se
observă din figură, un microcontroler scoate în exterior o serie de linii denumite porturi care,
funcție de aplicație, pot avea dublă întrebuințare. Datorită acestei facilități, microcontrolerele pot
folosi numai resursele integrate pe cip (stand-alone) în sistemele de conducere de nivel mediu,
sau, acolo unde aplicația o cere, aceste resurse pot fi completate cu memorie și porturi externe.
Astfel, se poate crește spațiul de memorie ROM și/sau RAM sau pot fi conectate dispozitive I/E
suplimentare - circuite specializate din familia 8080/8085 (PPI 8255, USART 8251, PIT 8253
etc.). Pentru a realiza comunicarea între aceste extensii și microcontroler, este nevoie ca o parte
din liniile de port să fie redirecționate în alte scopuri. De exemplu, adresa pe 16 biți pentru
accesul la memoria externă se furnizează cu ajutorul porturilor P0 și P2 care acum joacă rolul de
magistrală de adrese. Magistrala de date este obținută din liniile portului P0. Pentru a face
deosebirea între adresă și date, liniile portului P0 sunt multiplexate în timp.
MCS-51 are patru tipuri distincte de memorie - RAM intern, registre de uz special, memorie
program și memorie externă de date.

38
Memoria RAM internă (IRAM) este localizată de la adresa 0 la adresa 0xFF, avand o
capacitate de 256 octeti. IRAM-ul de la 0x00 la 0x7F (primii 128 octeti) poate fi accesat direct,
iar biții de la 0x20 la 0x2F sunt de asemenea bit-adresabili. IRAM-ul de la 0x80 la 0xFF
(urmatorii 128 de octeti) trebuie accesat indirect, folosind sintaxa @R0 sau @R1, cu adresa de
acces incărcată în R0 sau R1.
Registrele de uz special (SFR) sunt localizate de la adresa 0x80 la 0xFF și sunt accesate
direct folosind aceleași instrucțiuni ca pentru partea inferioara (low) a IRAM. O parte din
registrele SFR sunt de asemenea bit-adresabile.
Memoria program (PMEM), deși mai putin folosită decât IRAM sau XRAM, este
localizată Incepând cu adresa 0. Poate fi on- sau off-chip, depinzând de tipul de chip folosit.
Memoria program poate fi doar citită (read-only), deși anumite variante ale 8051 folosesc
memorie flash on-chip și oferă o metodă de reprogramare a memoriei. Pe lângă stocarea codului,
memoria program poate stoca și tabele de constante ce pot fi accesate prin MOVC A, @DPTR,
folosind registrul de uz special @DPTR.
Memoria de date externă (XRAM) de asemenea începe la adresa 0. Poate fi on- sau off-
chip; ceea ce o face "externă" este că trebuie accesată folosind instrucțiunea MOVX (Move
eXternal). Multe variante ale 8051 includ standardul de 256 bytes de IRAM plus câțiva KB de
XRAM pe chip. Dacă mai multă memorie XRAM este necesară unei aplicații, XRAM-ul intern
poate fi dezactivat, iar toate instrucțiunile XRAM vor fi descărcate de pe magistrala externă.

2.3.2 Microcontrolere AVR


AVR este o familie de microcontrolere dezvoltate începând cu anul 1996 de catre Atmel,
achiziționate de Microchip Technology în 2016. Acestea sunt microcontrolere RISC cu un singur
chip de arhitectura Harvard modificate pe 8 biți.AVR a fost una dintre primele familii de
microcontrolere care utilizează memorie flash on-chip pentru stocarea programelor, spre
deosebire de ROM-ul, EPROM-ul sau EEPROM-ul programabil o singură data, utilizat de alte
microcontrolere la momentul respective.

Microcontrolerele AVR găsesc multe aplicații ca sisteme încorporate. Acestea sunt în


mod obișnuit comune în aplicațiile de tip hobby și educaționale, popularizate prin includerea lor
în multe dintre liniile de dezvoltare a hardware-ului deschis de la Arduino

39
Scurt istoric
Arhitectura AVR a fost concepută de doi studenți la Institutul Norvegian de Tehnologie
(NTH), Alf-Egil Bogen și Vegard Wollan.
AVR-ul inițial a fost dezvoltat la o casă locala de tip ASIC din Trondheim, Norvegia,
numită VLSI Nordic la acea dată, acum purtând numele de Nordic Semiconductor, unde Bogen
si Wollan lucrau ca studenți. Acesta a fost cunoscut ca un μRISC (Micro RISC) și a fost
disponibil ca bloc de siliciu IP de VLSI Nordic. Atunci când tehnologia a fost vândută la Atmel
de la Nordic VLSI, arhitectura internă a fost dezvoltată ulterior de Bogen și Wollan de la Atmel
Norway, o filială a Atmel. Designerii au lucrat îndeaproape cu scriitori de compilatoare de la
IAR Systems pentru a se asigura că setul de instrucțiuni AVR oferă o compilație eficientă a
limbilor de nivel înalt.
Atmel spune că numele AVR nu este un acronim și nu reprezintă nimic în special.
Creatorii AVR nu dau nici un răspuns definitiv cu privire la termenul "AVR". Cu toate acestea,
se acceptă în mod obișnuit că AVR reprezintă procesorul RISC al lui Alf și Vegard. Rețineți că
utilizarea "AVR" în acest articol se referă în general la linia RISC pe 8 biți a microcontrolerelor
Atmel AVR.
Printre primele linii AVR a fost AT90S8515, care într-un pachet DIP de 40 pini are
același pin-out ca un microcontroler 8051, inclusiv adresa de multiplexare externă și magistrala
de date. Polaritatea liniei RESET a fost opusă (8051 are un RESET ridicat activ, în timp ce AVR
are un RESET redus activ), dar în afară de asta pin-outul a fost identic.
Arhitectura microcontrolerului pe 8 biți AVR a fost introdusă în 1997. Până în 2003,
Atmel a trimis 500 milioane de microcontrolere AVR flash. Platforma Arduino, dezvoltată
pentru proiecte electronice simple, a fost lansată în 2005 și a prezentat microcontrolerele
ATmega8 AVR.
Prezentarea generală a dispozitivelor
AVR este o mașină de arhitectură Harvard modificată, în care programul și datele sunt
stocate în sisteme de memorie fizică separate care apar în diferite spații de adrese, dar care au
capacitatea de a citi articole de date din memoria programelor folosind instrucțiuni speciale.

AVR-urile sunt în general clasificate în următoarele:


 tinyAVR – seria ATtiny

40
o 0.5–32 KB memorie program
o 6–32- pini
o Set periferic limitat
 megaAVR – seria ATmega
o 4–256 KB memorie program
o 28–100-pini
o Set de instrucțiuni extins (instrucțiuni înmulțite și instrucțiuni pentru manipularea mai
multor memorii de program)
o Set periferic extins
 XMEGA – seria ATxmega
o 16–384 KB memorie program
o 44–64–100-pini (A4, A3, A1)
o 32-pachetul de pini: XMEGA-E (XMEGA8E5)
o Funcții de performanță extinse, cum ar fi DMA, "Event System" și suport pentru
criptografie
o Set periferic extins cu ADC-uri
 Aplicație specifică AVR
o megaAVR cu caracteristici speciale care nu se găsește în alți membrii ai familiei
AVR, cum ar fi controlere LCD, USB, PWM avansat, CAN etc.
 FPSLIC (AVR cu FPGA)
o FPGA 5k la 40k -număr de porți
o SRAM pentru codul programului AVR, spre deosebire de toate celelalte AVR-uri
o Nucleul AVR poate rula până la 50MHz
 AVR-uri pe 32 biți
În 2006, Atmel a lansat microcontrolere pe baza arhitecturii AVR32 pe 32 de biți. Aceasta a
fost o arhitectură complet diferită de cea AVR pe 8 biți, destinată să concureze cu procesoare
bazate pe ARM. Avea o cale de date pe 32 de biți, instrucțiuni SIMD și DSP, împreună cu alte
caracteristici de procesare audio și video. Setul de instrucțiuni a fost similar cu alte nuclee RISC,
dar nu a fost compatibil cu AVR-ul original (cu niciunul dintre diferitele nuclee ARM). De
atunci, suportul pentru AVR32 a fost abandonat din Linux ca de kernel 4.12; Atmel a trecut mai
ales la variantele M ale arhitecturii ARM.

41
2.3.2 Microcontrolere PIC
PIC (de obicei pronunțată ca "pick") este o familie de microcontrolere realizată de
Microchip Technology, derivată din PIC1650 inițial dezvoltat de General Instrument's
Microelectronics Division. Numele PIC sa referit inițial la controlerul de interfață periferică, apoi
a fost corectat ca computer inteligent programabil. Primele părți ale familiei erau disponibile în
1976; până în 2013, compania a transportat mai mult de douăsprezece miliarde de piese
individuale, utilizate într-o mare varietate de sisteme încorporate.
Modelele anterioare ale PIC au avut memorie numai pentru citire (ROM) sau EPROM
programabil în câmp pentru stocarea programelor, unele având posibilitatea de a șterge memoria.
Toate modelele actuale utilizează memoria flash pentru stocarea programelor, iar modelele mai
noi permit PIC să se reprogrameze. Memoria programelor și memoria de date sunt separate.
Memoria de date este de 8 biți, de 16 biți și, în cele mai recente modele, este de 32 de biți.
Programul de instrucțiuni variază în număr de biți de familie PIC, și poate fi de 12, 14, 16 sau 24
de biți lungime. Setul de instrucțiuni variază de asemenea în funcție de model, cu cipuri mai
puternice care adaugă instrucțiuni pentru funcțiile de procesare a semnalului digital.
Capacitățile hardware ale dispozitivelor PIC variază de la SMD cu 6 pini, chips-uri DIP
cu 8 pini până la cipuri SMD cu 144 pini, cu pini I / O discrete, module ADC și DAC și porturi
de comunicații precum UART, I2C, CAN și chiar și USB. Variantele de putere mică și de mare
viteză există pentru multe tipuri.
Producătorul furnizează software-ul pentru dezvoltare cunoscut sub numele de MPLAB
X, asamblori și compilatoare C / C ++ și hardware pentru programator / depanare în seria
MPLAB și PICKit. Sunt disponibile, de asemenea, instrumente terță parte și unele instrumente
open source. Unele componente au capacitatea de programare în circuit; programatori de
dezvoltare low-cost sunt disponibili, precum și programatori de producție de înaltă calitate.
Dispozitivele PIC sunt populare atât pentru dezvoltatorii industriali, cât și pentru
pasionații datorită costului lor scăzut, disponibilității largi, bazei largi de utilizatori, colecției
extinse de note de aplicație, disponibilității instrumentelor de dezvoltare gratuită sau gratuită,
programării în serie și a capacității de memorie Flash re-programabilă.
.
FAMILIILE DE DISPOZITIVE

42
Microcipurile PIC sunt proiectate cu o arhitectură Harvard și sunt oferite în diverse
familii de dispozitive. Familiile de bază și familia mijlocie folosesc memorie de date pe 8 biți, iar
familiile de vârf utilizează memorie de date pe 16 biți. Ultima serie, PIC32MZ este un
microcontroler bazat pe 32 de biți MIPS. Cuvintele de instrucțiuni sunt în dimensiuni de 12 biți
(PIC10 și PIC12), 14 biți (PIC16) și 24 biți (PIC24 și dsPIC). Reprezentările binare ale
instrucțiunilor mașinii variază în funcție de familie și sunt afișate în lista de instrucțiuni PIC.
În cadrul acestor familii, dispozitivele pot fi desemnate PICnnCxxx (CMOS) sau
PICnnFxxx (Flash). Dispozitivele "C" sunt în general clasificate ca "Nu potrivite pentru o nouă
dezvoltare" (nu sunt promovate activ de Microchip). Memoria de program a dispozitivelor "C"
este descrisă diferit ca OTP, ROM sau EEPROM. În octombrie 2016, singurul produs OTP
clasificat ca "în producție" este pic16HV540. Dispozitivele "C" cu ferestre cu cuarț (pentru
ștergere), în general, nu mai sunt disponibile.PIC10 and PIC12
Aceste dispozitive dispun de o memorie de coduri pe 12 biți, de un fișier de 32 de octeți
și de un mic set de apeluri de nivel înalt de două niveluri. Acestea sunt reprezentate de seria
PIC10, precum și de unele dispozitive PIC12 și PIC16. Dispozitivele de bază sunt disponibile în
pachete de 6 pini până la 40 de pini.
În general, primii 7 până la 9 octeți din fișierul de registru sunt registre cu scop special,
iar restul de octeți sunt RAM cu destinație generală. Pointerii sunt implementați cu ajutorul unei
perechi de registre: după scrierea unei adrese către FSR (registrul de selectare a fișierelor),
registrul INDF (indirect f) devine un alias pentru registrul adresat. Dacă este implementată
memoria RAM bancată, numărul băncii este selectat de cei 3 biți mari ai FSR-ului. Aceasta
afectează numerele de registru 16-31; registrele 0-15 sunt globale și nu sunt afectate de biții
selectați de bancă. Din cauza spațiului foarte limitat al registrelor (5 biți), 4 înregistrări rar citite
nu au fost atribuite adrese, ci au fost scrise prin instrucțiuni speciale (OPTION și TRIS)
Spațiul de adrese ROM este de 512 de cuvinte (câte 12 biți fiecare), care pot fi extinse la
2048 de cuvinte prin intermediul serviciilor bancare. Instrucțiunile CALL și GOTO specifică 9
biți redus ai noii locații de cod; biți suplimentari de înaltă ordine sunt luați din registrul de stare.
Rețineți că o instrucțiune CALL include numai 8 biți de adresă și poate specifica numai adrese în
prima jumătate a fiecărei pagini cu 512 de cuvinte.
Tabelele de căutări sunt implementate utilizând un GOTO calculat (atribuirea registrului
PCL) într-un tabel cu instrucțiunile RETLW.

43
Acest "nucleu de bază" nu suportă întreruperi; toate intrările / ieșirile trebuie să fie
chestionate. Există câteva variante de "îmbunătățire a liniei de bază" cu suport de întrerupere și o
stivă de apel pe patru niveluri

Dispozitivele PIC10F32x dispun de o memorie de cod la nivel mediu de 14 biți de 256 sau 512
de cuvinte, un fișier de registru SRAM de 64 de octeți și un stiv de hardware adânc pe 8 niveluri.
Aceste dispozitive sunt disponibile în pachete SMD cu 6 pini și DIP cu 8 pini (cu două pini
neutilizate). Sunt disponibile numai o singură intrare și trei pinii de intrare / ieșire. Un set
complex de întreruperi este disponibil. Ceasurile sunt un oscilator de frecvență înaltă de 16 MHz,
calibrat intern, cu o gamă de viteze selectabile prin software și o sursă de putere de 31 kHz.
PIC16
Aceste dispozitive sunt dotate cu o memorie de cod largă pe 14 biți și cu o stivă
îmbunătățită de 8 niveluri de apel adânc. Setul de instrucțiuni diferă foarte puțin de dispozitivele
de bază, dar cei doi biți suplimentari de opcode permit ca 128 registre și 2048 de cuvinte de cod
să fie adresate direct. Există câteva instrucțiuni diverse și alte două instrucțiuni adiționale pe 8
biți, adunarea și scăderea. Nucleul de mărime medie este disponibil în majoritatea dispozitivelor
etichetate PIC12 și PIC16.
Primii 32 octeți din spațiul de înregistrare sunt alocați registrelor cu scop special; restul
de 96 de octeți sunt utilizați pentru RAM cu destinație generală
În cazul în care se utilizează RAM banked, cele 16 registre mari (0x70-0x7F) sunt
globale, la fel ca și câteva dintre cele mai importante registre speciale, inclusiv registrul
STATUS care deține biții selectați de banca RAM. (Celelalte registre globale sunt FSR și INDF,
cele 8 biți mici ale contorului de programe PCL, PCLATH pentru registrul de preîncărcare PC și
registrul de control al întreruperii de comandă INTCON.)
Registrul PCLATH furnizează biți de adresă de instrucțiuni de mare ordine atunci când
cei 8 biți furnizați de o scriere în registrul PCL sau cei 11 biți furnizați de o instrucțiune GOTO
sau CALL nu sunt suficienți pentru a aborda spațiul ROM disponibil.

PIC17

44
Seria 17 nu a devenit niciodată populară și a fost înlocuită de arhitectura PIC18 (cu toate
acestea, a se vedea clonele de mai jos). Seria 17 nu este recomandată pentru modele noi, iar
disponibilitatea poate fi limitată la utilizatori.
Îmbunătățirile față de nucleurile anterioare sunt opcode largi pe 16 biți (permițând multe
instrucțiuni noi) și un stack de apel în profunzime pe 16 nivele. Dispozitivele PIC17 au fost
produse în pachete de la 40 până la 68 de pini.
Seria 17 a introdus o serie de noi caracteristici importante:
 un acumulator mapat în memorie
 posibilitatea de a citi și accesa memoria de cod (citirea tabelului)
 înregistrare directă pentru înregistrarea mișcărilor (nuclee anterioare necesare pentru
deplasarea registrelor prin acumulator)
 o interfață de memorie externă pentru a extinde spațiul de cod
 un multiplicator hardware 8 biți × 8 biți
 o a doua pereche indirectă de registru
 adresarea automată a incrementării/decrementării controlată de biți de control într-un registru
de stare (ALUSTA)
O limitare semnificativă a fost reducerea spațiului RAM la 256 octeți (26 de octeți ai registrelor
de funcții speciale și 232 de octeți de RAM cu destinație generală), cu schimbarea dificilă a
băncilor în modelele care au suportat mai mult.
PIC18
În 2000, Microchip a introdus arhitectura PIC18. Spre deosebire de seria 17, s-a dovedit a
fi foarte popular, cu un număr mare de variante de dispozitive aflate în prezent în producție. Spre
deosebire de dispozitivele anterioare, care au fost cel mai adesea programate în asamblare, C a
devenit limbajul predominant de dezvoltare.
Seria 18 moștenește majoritatea caracteristicilor și instrucțiunilor din seria 17,
adăugând în același timp o serie de caracteristici noi importante:
 stiva de apel este de 21 de biți lățime și mult mai adâncă (31 de niveluri)
 stiva apelurilor poate fi citită și scrisă (registrele TOSU: TOSH: TOSL)
 instrucțiuni de ramură condiționată
 modul de adresare indexată (PLUSW)

45
 extinderea registrelor FSR la 12 biți, permițându-le să abordeze liniar întregul spațiu de
adrese de date
adăugarea unui alt registru FSR (aducerea numărului până la 3)
Spațiul RAM este de 12 biți, adresat folosind un registru selectat pe 4 biți și un offset pe 8
biți în fiecare instrucțiune. Un bit suplimentar de acces în fiecare instrucțiune selectează între
banca 0 (a = 0) și banca selectată de BSR (a = 1).
O stivă cu nivel 1 este, de asemenea, disponibilă pentru registrele STATUS, WREG și BSR.
Ele sunt salvate pe fiecare întrerupere și pot fi restaurate la întoarcere. Dacă întreruperile sunt
dezactivate, ele pot fi de asemenea folosite la apelul / returnarea subrutinei prin setarea bitului s
(adăugând "FAST" la instrucțiune).
Caracteristica incrementării / reducerii automate a fost îmbunătățită prin eliminarea biților de
control și prin adăugarea a patru noi registre indirecte pe FSR. În funcție de registrul indirect al
fișierelor accesate, este posibilă FSR postdecrement, postincrement sau preincrement; sau
formați adresa eficientă adăugând W la FSR.
În dispozitivele PIC18 mai avansate, este disponibil un "mod extins" care face ca
adresarea să fie chiar mai favorabilă pentru codul compilat:
 un nou mod de adresare offset; unele adrese care au fost relative la banca de acces sunt acum
interpretate în raport cu registrul FSR2
 adăugarea mai multor instrucțiuni noi, notabile pentru manipularea registrelor FSR.
Dispozitivele PIC18 sunt încă dezvoltate (2017) și echipate cu CIP (Core Independent
Peripherals).
PIC24 și dsPIC
În 2001, Microchip a introdus seria de cipuri dsPIC [10], care a intrat în producția de
masă la sfârșitul anului 2004. Acestea sunt primele microcontrolere pe 16 biți ale Microchip.
Dispozitivele PIC24 sunt proiectate ca microcontrolere cu scop general. Dispozitivele dsPIC
includ capabilități de procesare a semnalului digital în plus.
Deși încă sunt similare cu arhitecturile PIC anterioare, există îmbunătățiri semnificative:
 Toate registrele au o lățime de 16 biți
 Contorul de programe este de 22 de biți (biți 22: 1, bitul 0 este întotdeauna 0)
 Instrucțiunile sunt de 24 de biți
 Spațiul adreselor de date a fost extins la 64 KiB

46
 Primele 2 KiB sunt rezervate registrelor de control periferic
 Nu este necesară comutarea băncii de date decât dacă memoria RAM depășește 62 KiB
 Adresarea directă "operand" f extinsă la 13 biți (8 KiB)
 sunt disponibile registre de 16 W pentru operațiunile registru-registru.
 (Dar operațiile pe operanții f se referă întotdeauna la W0.)
 Instrucțiunile vin în biți și sub forma de cuvinte (16 biți)
 Stack-ul este în memorie RAM (cu W15 ca pointer stack); nu există un stack hardware
 W14 este indicatorul de cadru
 Datele stocate în ROM pot fi accesate direct ("Visibility Space Space")
 Întreruperi vectoriale pentru diferite surse de întrerupere
Unele caracteristici sunt:
 (16×16)-bit un singur ciclu de multiplicare și alte operații de prelucrare a semnalului digital
 hardware multiplică-acumulă (MAC)
 asistență pentru diviziunea hardware (19 cicluri pentru diviziunea de 32/16-biți)
 schimbarea barrel-ului - atât pentru acumulatori, cât și pentru registrele de uz general
 inversarea biților
 suport hardware pentru indexarea în bucla
 accesul la memorie directă periferică
dsPIC-urile pot fi programate în C utilizând compilatorul XC16 al Microchip (anterior numit
C30) care este o variantă a GCC.
ROM-ul de instrucțiuni are o lățime de 24 de biți. Software-ul poate accesa ROM-ul în
cuvinte pe 16 biți, unde chiar și cuvintele dețin cele mai puțin semnificative 16 biți ale fiecărei
instrucțiuni, iar cuvintele ciudate dețin cele mai semnificative 8 biți. Jumătatea înaltă a cuvintelor
caudate se citește ca zero. Contorul de programe are o lățime de 23 de biți, dar bitul cel mai puțin
semnificativ este întotdeauna 0, deci există 22 de biți modificabili.
Instrucțiunile vin în două varietăți principale, cele mai importante operațiuni (adunarea,
xor, schimburi, etc.) permițând ambele forme.
Primul este ca și instrucțiunile PIC clasice, cu o operație între un registru f specificat
(adică primul 8K de RAM) și un singur acumulator W0, cu o selecție de selectare a destinației

47
care este actualizată cu rezultatul. (Registrele W sunt mapate în memorie, astfel încât operandul f
poate fi orice registru W.)
A doua formă este mai convențională, permițând trei operanzi, care pot fi oricare dintre
registrele de 16 W. Destinația și una dintre surse suportă și moduri de adresare, permițând
operandului să fie în memorie indicat de un registru W.
PIC32M linie bazată pe MIPS
 PIC32MX
În noiembrie 2007, Microchip a introdus familia PIC32MX de microcontrolere pe 32 de biți,
bazată pe MIPS M4K Core. Dispozitivul poate fi programat folosind Microchip MPLAB C
Compiler pentru PIC32 MCU, o variantă a compilatorului GCC. Primele 18 modele în curs de
producție (PIC32MX3xx și PIC32MX4xx) sunt compatibile cu pin-to-pin și au același set de
periferice cu familia de dispozitive (16 biți) PIC24FxxGA0xx care permit utilizarea bibliotecilor,
a software-urilor și a instrumentelor hardware comune. Astăzi, pornind de la pachete de 28 pini
în pachete QFN mici, până la dispozitive de înaltă performanță cu Ethernet, CAN și USB OTG,
sunt disponibile gama completă de familii de microcontrolere de 32 de biți.

Arhitectura PIC32 a adus o serie de caracteristici noi în portofoliul Microchip, incluzând:


o Viteza maximă de execuție 80 MIPS (120+ Dhrystone MIPS @ 80 MHz)
o Cea mai mare memorie flash: 512 kB
o O instrucțiune pe fiecare ciclu de execuție
o Primul procesor cache
o Permite execuția din RAM
o Posibilități de plată cu viteză completă / Dual Role și capacități OTG USB
o Programare JTAG completă și programare cu 2 fire și depanare
o Urmărire în timp real
 PIC32MZ
În noiembrie 2013, Microchip a introdus seria de microcontrolere PIC32MZ, bazată pe
miezul MIPS M14K. Seria PIC32MZ include:
o viteză de bază 252 MHz, 415 DMIPS
o Până la 2 MB Flash și 512 KB RAM
o Periferice noi, inclusiv USB de mare viteză, motor criptografic și SQI

48
În 2015, Microchip a lansat familia PIC32MZ EF, utilizând procesorul MIPS M5150 Warrior
actualizat M-Class.
În 2017, Microchip a introdus familia PIC32MZ DA, care include un controler grafic integrat,
procesor grafic și 32MB de DRAM DDR2.
 PIC32MM
În iunie 2016, Microchip a introdus familia PIC32MM, specializată pentru aplicații
low-power și low-cost. PIC32MM oferă periferice independente de bază, moduri de dormit
până la 500 nA și pachete de 4 x 4 mm. Microcontrolerele PIC32MM utilizează MIPS
Technologies M4K, un procesor MIPS32 pe 32 de biți. Acestea sunt destinate consumului de
energie foarte redus și limitate la 25 MHz. Avantajul lor cheie este de a sprijini instrucțiunile
de 16 biți ale MIPS, făcând dimensiunea programului mult mai compactă (aproximativ 40%).
 PIC32MK
Microchip a introdus familia PIC32MK în 2017, specializată pentru controlul motorului,
controlul industrial, Internetul Industriei Lucrurilor (IIoT) și aplicațiile CAN pe mai multe
canale.

2.3.5 Procesor de semnal digital


Un procesor digital de semnal (DSP) este un microprocesor specializat (sau un bloc SIP),
cu arhitectura sa optimizată pentru necesitățile operaționale ale procesării semnalelor digitale.
Scopul DSP este, de obicei, acela de a măsura, filtra sau comprima semnale analogice
reale din lumea reală. Majoritatea microprocesoarelor cu scop general pot executa cu succes
algoritmi de procesare a semnalelor digitale, dar pot să nu poată ține pasul cu o astfel de
procesare în mod continuu în timp real. De asemenea, DSP-urile dedicate au, de obicei, o
eficiență energetică mai bună, astfel că sunt mai potrivite în dispozitivele portabile, cum ar fi
telefoanele mobile din cauza constrângerilor legate de consumul de energie. DSP-urile folosesc
adesea arhitecturi de memorie speciale care pot prelua simultan mai multe date sau instrucțiuni.
Prezentare generală
Algoritmii de procesare a semnalelor digitale necesită în mod obișnuit un număr mare de
operații matematice care trebuie efectuate rapid și repetat pe o serie de eșantioane de date.
Semnalele (probabil din senzori audio sau video) sunt convertite în mod constant de la analogic
la digital, manipulate digital și apoi transformate înapoi în formă analogică. Multe aplicații DSP
au constrângeri latente; adică pentru ca sistemul să funcționeze, operațiunea DSP trebuie să se
finalizeze într-un timp determinat, iar prelucrarea amânată (sau batch) nu este viabilă.

49
Majoritatea microprocesoarelor de uz general și a sistemelor de operare pot executa cu
succes algoritmi DSP, dar nu sunt adecvate pentru utilizarea în dispozitive portabile, cum ar fi
telefoanele mobile și PDA-urile, din cauza constrângerilor de eficiență energetică. Un procesor
de semnal digital specializat, totuși, va avea tendința de a oferi o soluție cu costuri mai mici, cu
performanțe mai bune, cu o latență mai mică și fără cerințe pentru răcirea specializată sau pentru
bateriile mari.
Astfel de îmbunătățiri ale performanței au dus la introducerea procesării semnalelor
digitale în sateliții de comunicații comerciale unde sute sau chiar mii de filtre analogice,
comutatoare, convertoare de frecvență și așa mai departe sunt necesare pentru a recepționa și
procesa semnalele ascendente și pentru a le pregăti pentru downlinking și pot fi înlocuite cu DSP
specializate, cu beneficii semnificative pentru greutatea sateliților, consumul de energie,
complexitatea / costul construcției, fiabilitatea și flexibilitatea funcționării. De exemplu, sateliții
SES-12 și SES-14 de la operatorul SES, ambele destinați lansării în 2017, sunt construiți de
Airbus Defense and Space cu o capacitate de 25% folosind DSP.
Arhitectura unui procesor de semnal digital este optimizată special pentru procesarea
semnalelor digitale. Majoritatea suportă, de asemenea, unele dintre caracteristici ca procesor de
aplicații sau microcontroler, deoarece prelucrarea semnalelor este rareori singura sarcină a unui
sistem. Unele caracteristici utile pentru optimizarea algoritmilor DSP sunt prezentate mai jos.
ARCHITECTURA SOFTWARE
Prin standardele procesoarelor cu scop general, seturile de instrucțiuni DSP sunt adesea
foarte neregulate; în timp ce seturile de instrucțiuni tradiționale sunt alcătuite din instrucțiuni mai
generale care le permit să efectueze o varietate mai largă de operații, seturile de instrucțiuni
optimizate pentru procesarea semnalelor digitale conțin instrucțiuni pentru operații matematice
comune care apar frecvent în calculele DSP. Seturile de instrucțiuni tradiționale și DSP
optimizate sunt capabile să calculeze orice operație arbitrară, dar o operație care ar putea necesita
instrucțiuni ARM sau x86 multiple pentru a calcula, ele pot necesita doar o singură instrucțiune
într-un set de instrucțiuni DSP, de preferat optimizat.
O implicație pentru arhitectura software este că rutinele de cod de asamblare optimizate
manual sunt în mod obișnuit ambalate în biblioteci pentru reutilizare, în loc să se bazeze pe
tehnologii avansate de compilatoare pentru a gestiona algoritmi esențiali. Chiar și în cazul
optimizărilor compilatoare moderne, codul de asamblare optimizat manual este mai eficient și

50
mulți algoritmi obișnuiți implicați în calculele DSP sunt scrise manual pentru a profita pe deplin
de optimizările arhitecturale.
Seturi de instrucțiuni
 multiplică-acumulează (operațiuni MAC, inclusiv operațiuni de multiplicare-adăugare
fuzionată, FMA)
o utilizate extensiv în toate tipurile de operațiuni matrice
 convoluție pentru filtrare
 produs dot
 evaluare polinomială
o Algoritmii fundamentali ai DSP depind în mare măsură de performanța de multiplicare-
acumulare
 Filtru FIR
 Transformarea rapidă Fourier (FFT)
 Instrucțiuni de creștere a paralelismului:
o SIMD
o VLIW
o Arhitectura super-scalară
 Instrucțiuni specializate pentru adresarea modulelor în bufferele inel și modul de adresare
inversat bit pentru referință încrucișată FFT
 Procesoarele digitale de semnal utilizează uneori codare în timp-staționare pentru a
simplifica hardware-ul și pentru a spori eficiența codificării.
 Unitățile aritmetice multiple pot necesita arhitecturi de memorie pentru a suporta mai multe
accesări pe ciclu de instrucțiuni
 Controale speciale în buclă, cum ar fi suportul arhitectural pentru executarea câtorva cuvinte
de instrucțiuni într-o buclă foarte strânsă, fără cheltuieli generale, pentru preluarea
instrucțiunilor sau testarea la ieșire.
Instrucțiuni de date
 Aritmetica de saturație, în care operațiile care produc deversări se vor acumula la valorile
maxime (sau minime) pe care registrul le poate menține, mai degrabă decât înfășurarea
(maxim + 1 nu depășește minimumul, ca în multe CPU-uri cu scop general, ba chiar rămâne
la maxim). Uneori sunt disponibile diferite moduri de funcționare a sticky-biților.

51
 Aritmetica punctului fix este adesea folosită pentru a accelera procesarea aritmetică
 Operațiuni cu un singur ciclu pentru a crește beneficiile conductei
Programul fluxului
 Unitatea floating-point integrată direct în calea de date
 Arhitectura pipeline
 Multipli-acumulatori paraleli (unități MAC)
 Buclele controlate de hardware, pentru a reduce sau elimina supratensiunea necesară
operațiunilor în buclă
ARHITECTURA HARDWARE
În inginerie, arhitectura hardware se referă la identificarea componentelor fizice ale
sistemului și la interdependențele lor. Această descriere, denumită adesea un model de design
hardware, permite proiectanților hardware să înțeleagă modul în care componentele lor se
încadrează într-o arhitectură de sistem și oferă proiectanților componentelor software informații
importante necesare dezvoltării și integrării software-ului. Definirea clară a unei arhitecturi
hardware permite diferitelor discipline de inginerie tradiționale (de exemplu, inginerie electrică
și mecanică) să lucreze mai eficient împreună pentru a dezvolta și produce noi mașini,
dispozitive și componente.

Hardware este, de asemenea, o expresie folosită în cadrul industriei de calculatoare


pentru a distinge explicit hardware-ul (computerul electronic) de software-ul care rulează pe el.
Dar hardware-ul, în cadrul disciplinei de automatizare și de inginerie software, nu trebuie să fie
pur și simplu un calculator de un fel. Un automobil modern rulează mult mai mult software decât
navele spațiale Apollo. De asemenea, aeronavele moderne nu pot funcționa fără a rula zeci de
milioane de instrucțiuni de calculator încorporate și distribuite în aeronave și rezidente atât în
hardware-ul standard al calculatorului, cât și în componente hardware specializate, cum ar fi
porți logice prin cablu IC, dispozitive analogice și hibride și alte componente digitale. Nevoia de
a modela în mod eficient modul în care se combină componentele fizice separate pentru a forma
sisteme complexe este importantă pentru o gamă largă de aplicații, inclusiv computere, asistenți
digitali personali (PDA), telefoane mobile, instrumente chirurgicale, sateliți și submarine.

52
Memoria arhitecturii
DSP-urile sunt, de obicei, optimizate pentru streaming de date și folosesc arhitecturi de
memorie speciale care pot prelua simultan mai multe date sau instrucțiuni, cum ar fi arhitectura
Harvard sau arhitectura modificată von Neumann, care utilizează memorii individuale de
program și date (uneori chiar acces concurrent la mai multe buses-data).
DSP-urile pot uneori să se bazeze pe codul de suport pentru a afla despre ierarhiile cache-
ului și întârzierile asociate. Acesta este un compromis care permite o performanță mai bună. În
plus, este folosită utilizarea extensivă a DMA.
Adresarea și memoria virtuală
DSP-urile folosesc frecvent sisteme de operare multi-tasking, dar nu au suport pentru
memoria virtuală sau pentru protecția memoriei. Sistemele de operare care utilizează memoria
virtuală necesită mai mult timp pentru a schimba contextul între procese, ceea ce sporește latența.
 Adresarea modulelor hardware
o Permite ca buferele circulare să fie puse în aplicare fără a fi necesară testarea
ambalări
 Adresare bit-inversă, un mod special de adresare
o til pentru calcularea FFT-urilor
 Excluderea unei unități de gestionare a memoriei
 Unitatea de generare a adreselor

2.3.6 Arhitectură ARM


Arhitectura ARM (Advanced RISC Machine) inițial cunoscută sub numele de Acorn
RISC Machine, este o arhitectură de microprocesoare de tip RISC (Reduced Instruction Set
Computer) 32-bit și 64-bit introduse în 1983 de Acorn Computers și dezvoltate de ARM
Holdings începând cu 1990.
Arhitectura ARM a devenit una dintre cele mai utilizate arhitecturi de calculatoare
datorită consumului redus de energie, performanței sale ridicate în rezolvarea sarcinilor mici și
multiple simultan, a costurilor și a dimensiunilor reduse. Este utilizată în mare măsură în
smartphone-uri, sisteme înglobate, servere, supercomputere etc.
ISTORIC ARM
 1978 - este înființată în Cambridge, Marea Britanie compania Acorn Computers Ltd.

53
 1981 - Acorn produce BBC Micro, un calculator educațional foarte popular. Acorn BBC
Micro a folosit microprocesorul MOS 6502 pe 8-bit, 2 MHz.
 1983 - Acorn a format Advanced Research and Development Group, și proiectul Acorn RISC
Machine.
 1985 - ARMv1 prima versiune a arhitecturii ARM apare cu procesor ul ARM1 RISC, care
permite unui sistem computerizat să utilizeze comenzi mai simple pentru a funcționa mai
rapid. ARM1 a fost dezvoltat pe tehnologia VLSI Technology de 3 μm folosind doar 24.800
tranzistori și avea doar 808 de linii de cod.
 1987 - Acorn a introdus ARMv2 cu ARM2, un procesor pe 32-bit și 8 MHz, cu doar 30.000
de tranzistoare, performanțe superioare unui Intel 80286 și un consum mai redus de energie.
ARM2 a fost primul microprocesor ce a devenit un succes comercial. A fost folosit în
computerele Acorn Archimedes.
 1989 - Apare ARM3 (ARMv2) de asemenea un procesor RISC pe 32-bit cu îmbunătățiri ale
performanței (cache 4 KB, frecvență de ceas de 25 MHz, și 12 MIPS). A fost utilizat în
modelele Archimedes A540, A5000 și A4.
 1990 - Este fondată Advanced RISC Machines Ltd într-un parteneriat cu Apple, VLSI
Technology și Acorn Computers. Noua companie a fost înființată cu scopul principal de a
dezvolta în continuare microprocesoarele ARM ca parte a dezvoltării noului sistem
informatic Apple Newton.
 1991 - Versiunea ARMv3 cu microprocesorul ARM6 RISC pe 32-bit, frecvența de 12-33
MHz și 17.96 MIPS dezvoltat de noua companie ARM (Advanced RISC Machine). S-au
introdus modurile Abort și Undefined, variantele T (extensia Thumb) și M. A fost folosit în
calculatoarele Apple Newton și Acorn Risc.
 1993 - Versiunea ARMv4 cu modul privilegiat System și ARM7TDMI, model low-end al
familiei ARM, unul din cele mai populare procesoare ARM. A fost utilizat în principal ca o
componentă în SoC-urile pentru telefoane mobile (iPod) și alte dispozitive portabile sau
dispozitive multimedia, inclusiv Game Boy Advance, Nintendo DS și Nintendo 3DS.
StrongARM care implementa tot ARMv4 și îmbunătățiri substanțiale de vitezăși consum de
energie (1W la 233MHz) dezvoltat împreună cu DEC, a fost primul spin-off al arhitecturii
ARM. Alte procesoare în acestă versiune au fost ARM8, ARM9.

54
 1997 - Versiunea arhitecturală ARMv5TE introduce extensiile DSP și Jazelle DBX (pentru
accelerarea execuției codului Java), a fost implementată de ARM în modelele procesoarelor
ARM7EJ, ARM9E și ARM10E. ARM9 este o dezvoltare ulterioară a procesoarelor
StrongARM și ARM8. Principala diferență dintre ARM9 și ARM7 este o magistrală separată
de instrucțiuni și date (arhitectură Harvard).
 2002 - Arhitectura ARMv6 aduce câteva noutăți cum ar fi: îmbunătățirea sistemului de
gestiune a memoriei, reducerea timpului de încărcare pentru instrucțiuni și date, creșterea
performanțelor cu până la 30%, suport pentru sisteme multiprocesor, posibilitatea unor
sisteme mai complexe de sincronizare pentru memoria partajată. Include familiile ARM11,
ARM Cortex-M0, ARM Cortex-M0 + și ARM Cortex-M1.
 2004 - ARMv7 cu introducerea unei unități SIMD avansate de 128 de biți, în principal pentru
procesare multimedia și implementarea mai eficientă a aplicațiilor audio, video, grafică 3D,
extensia NEON, MPE (Media Processing Engine). Arhitectura ARMv7 este în principal
împărțită în trei profiluri care acoperă diferite domenii de aplicare în domeniul sistemelor
înglobate: ARM Cortex-A, ARM Cortex-R, ARM Cortex-M.
 2011 - ARMv8 a fost primul ARM care a implementat o arhitectură pe 64-bit pentru
prelucrarea datelor și adresarea memoriei. ARMv8 este compatibil cu ARMv5. Există două
moduri de execuție independente: AArch32 pentru procesarea software-ului pe 32-bit
șiAArch64 pentru procesarea software-ului pe 64-bit. Modul AArch64 folosește un set de
instrucțiuni nou numit A64, în timp ce modul AArch32 acceptă setul standard de instrucțiuni
ARM.
 2012 - ARM a introdus modelele Cortex-A53 și Cortex-A57, Cortex-A72 primele modele de
procesoare care implementează ARMv8 ce livreză performanță superioară la aceeași putere
și viteză de ceas, comparativ cu procesoarele bazate pe ARMv7. Primul dispozitiv mobil cu
SoC bazat pe ARMv8 este iPhone 5 lansat în septembrie 2013. SoC-ul încorporat integrează
două nuclee de procesor Apple A7 numite Cyclone.
 2014 - Allwinner Technology, MediaTek, Samsung Electronics au lansat procesoare
licențiate folosind arhitectura ARM.
 2015 - Rockchip anunță primele sale modele de procesoare ARMv8. Phytium Technology
dezvoltă Phytium Mars, procesor cu 64 de nuclee pentru supercomputere.

55
 2016 - ARM anunță lansarea Cortex-A73 pentru realitate virtuală, ce prezintă o creștere de
30% a puterii de calcul și a performanței energetice comparativ cu Cortex-A72.
 2017 - ARM a lansat două procesoare noi pentru smartphone Cortex-A75 și Cortex-A55.
 2018 - ARM anunță Cortex-A76, un procesor cu 40% mai eficient în privința consumului de
energie și 35% mai rapid. Conceput pentru următoarele generații smartphone high-end,
Cortex-A76 este proiectat pentru a folosi procesul de fabricație pe 7nm dezvoltat de TSMC și
ar putea atinge frecvențe de până la 3GHz.
CARACTERISTICI
Set de instrucțiuni
Procesoarele moderne ARM au mai multe seturi de instrucțiuni:
 ARM pe 32-bit
 Thumb: set de instrucțiuni mai restricționat pe 16-bit care oferă o submulțime a
instrucțiunilor clasice ARM pe 32-bit și permite obținerea unui câștig semnificativ de
memorie. Primul procesor cu un decodor de instrucțiuni Thumb a fost ARM7TDMI.
 DSP: au fost adăugate instrucțiunile DSP. Acestea sunt semnificate de un "E" în denumirea
arhitecturilor (ARMv5TE, ARMv5TEJ) sau a procesorului (ARM9E). Variante implică de
asemenea T, D, M și I. Aplicații includ procesarea semnalelor digitale și multimedia,
echipamente de rețea, telefoane mobile și tablete, sisteme de control pentru automobile.
 Jazelle DBX (Direct Bytecode eXecution): pentru codurile Java, în paralel cu modul ARM și
Thumb. Este indicat prin litera "J" (ARMv5TEJ, ARM7EJ-S, ARM9EJ-S). Setul Jazelle
adaugă suport pentru diferite mașini virtuale Java, sisteme de operare (WindowsCE, Linux,
PalmOS), sisteme de operare în timp real.
 Thumb-2 (16/32-bit): Performanța este îmbunătățită cu până la 38%, dimensiunea memoriei
este redusă cu 30%. Începe cu nucleul ARM1156 anunțat în 2003. Toate cipurile ARMv7,
seria Cortex și ARM11 acceptă setul de instrucțiuni Thumb-2.
 ThumbEE: Thumb-2EE sau Jazelle RCT (Runtime Compilation Target), apare pentru prima
dată în procesorul Cortex-A8 în 2005 și adaugă mici modificări setului de instrucțiuni
Thumb-2. ThumbEE este orientat spre limbaje de programare cum ar fi Limbo, Java, C#,
Perl, Python sau Ruby și permite compilatoarelor să genereze mai puține coduri fără a afecta
performanța.

56
 Vector Floating Point (VFP): set de instrucțiuni în virgulă mobilă. VFP oferă calcule în
virgulă mobilă pentru un spectru larg de aplicații și cerințe pentru dispozitive mobile
(smartphone, PDA, tablete), compresie și decompresie voce, grafică tridimensională, audio
digitală, imprimante, multimedia și aplicații pentru automobile. Setul VFP a fost înlocuit cu
modul NEON Advanced SIMD.
 Advanced SIMD: (NEON), este un SIMD (Single Instruction, Multiple Data) ce combină
seturi de instrucțiuni 64/128-bit și oferă accelerații computerizate standardizate pentru medii,
aplicații 2D/3D și procesare de semnal. Suport pentru diferite standarde: MPEG-4, H.264,
RealAudio, AVS, se poate utiliza pentru prelucrare vectorială. Performanță crescută cu
60..150% pentru codec-uri video și de 4..8 ori pentru algoritmi DSP simpli. NEON este
inclus în toate nucleele Cortex-A8, opțional în Cortex-A910.
Moduri de operare
Arhitectura ARM are șapte moduri de operare:
 User: singurul mod neprivilegiat, cele mai multe task-uri rulează aici
 FIQ: declanșat la producerea unei întreruperi de prioritate mare (fast interrupt)
 IRQ: declanșat la producerea unei întreruperi de prioritate normală (low interrupt)
 Supervisor: pornit la RESET și la întreruperi software
 Abort: este introdus la acces nepermis la memorie (excepție automată de suprascriere sau
suprascriere de date)
 Undefined: pentru instrucțiuni nedefinite
 System: singurul mod privilegiat care nu este introdus de o excepție; folosește aceleași
registre ca User Mode.

Procesoare ARM
Procesoarele ARM sunt produse de ARM Holdings și de companiile care dețin licențe
ARM. Cele mai cunoscute serii de procesoare ARM dezvoltate de ARM Holdings sunt ARM7,
ARM9, ARM11 și Cortex.
Dimensiunea redusă, complexitatea și consumul redus de energie, face ca procesoarele
ARM să fie utilizate în majoritatea dispozitivelor portabile și sisteme înglobate. Aproape toate
telefoanele mobile moderne conțin procesoare ARM, fiind cea mai utilizată familie de
microprocesoare pe 32-bit.

57
2.3.7 MSP430
MSP430 este o familie de microcontrolere cu semnal mixt de la Texas Instruments.
Construit în jurul unui procesor pe 16 biți, MSP430 este proiectat pentru aplicații încorporate cu
costuri reduse și, în special, cu consum redus de energie.
APLICAȚII
MSP430 poate fi utilizat pentru dispozitive încorporate cu putere redusă. Curentul tras în
mod inactiv poate fi mai mic de 1 μA. Viteza maximă a procesorului este de 25 MHz. Poate fi
împins înapoi pentru un consum redus de energie. MSP430 utilizează de asemenea șase moduri
diferite de alimentare redusă, care pot dezactiva ceasurile și procesoarele care nu sunt necesare.
În plus, MSP430 este capabil să treacă timp de 1 microsecund, permițând microcontrolerului să
rămână în modul de repaus mai mult timp, minimizând consumul mediu de curent. Dispozitivul
vine într-o varietate de configurații cu periferice obișnuite: oscilator intern, temporizator,
inclusiv PWM, watchdog, USART, SPI, I2C, ADC-uri de 10/12/14/16/24-bit și circuite resetable
brownout. Unele opțiuni periferice mai puțin obișnuite includ comparatori (care pot fi utilizați cu
temporizatoarele pentru a face ADC simplu), op-amp-uri pentru condiționarea semnalului, DAC
pe 12 biți, driver LCD, multiplicator de hardware, USB și DMA pentru rezultatele ADC. În afară
de unele versiuni mai vechi EPROM (MSP430E3xx) și masă de volum mare ROM
(MSP430Cxxx), toate dispozitivele sunt programabile în sistem prin JTAG (full-wire sau Spy-
Bi-Wire) sau un încărcător de bootstrap (BSL) utilizând UART, cum ar fi RS232, sau USB pe
dispozitive cu suport USB.
Cu toate acestea, există limitări care împiedică utilizarea acestuia în sistemele integrate
mai complexe. MSP430 nu are o magistrală de memorie externă, deci este limitată la memorie
on-chip (memorie flash de până la 512 KB și 66 KB RAM), care poate fi prea mică pentru
aplicațiile care necesită buffere mari sau tabele de date. De asemenea, deși are un controler
DMA, este foarte dificil să-l folosești pentru a muta datele de pe cip din cauza lipsei unei strobe
de ieșire DMA.
GENERAȚIILE MSP430
Există șase generații generale de procesoare MSP430. În ordinea dezvoltării, au fost
generația 3xx, generația 1xx, generația 4xx, generația 2xx, generația 5xx și generația 6xx. Cifra

58
după generație identifică modelul (în general, numerele de model mai mari sunt mai mari și mai
capabile), a treia cifră identifică cantitatea de memorie aflată la bord, iar a patra, dacă există,
identifică o variantă de model minoră. Variația cea mai comună este un alt convertor analog-
digital pe un chip
Generațiile 3xx și 1xx au fost limitate la un spațiu de adrese pe 16 biți. În generațiile
ulterioare, acest lucru a fost extins pentru a include instrucțiunile "430X" care permit un spațiu
de adrese pe 20 de biți. Așa cum sa întâmplat și cu alte arhitecturi ale procesoarelor (de exemplu,
procesorul PDP-11), extinderea domeniului de adresare dincolo de dimensiunea cuvântului de 16
biți a introdus unele particularități și ineficiențe pentru programele mai mari de 64 kBytes.
În următoarea listă, este util să se gândească la o capacitate tipică de 200 mA·Hr a unei
celule de monedă de litiu CR2032 ca 200.000 μA·Hr, sau 22.8 μ ·an. Astfel, luând în considerare
doar remizele procesorului, o astfel de baterie ar putea furniza o remiză curentă de 0,7 μA timp
de 32 de ani. (În realitate, descărcarea de la baterie ar reduce acest număr.)
Semnificația "reținerii RAM" față de modul "clock în timp real" este că, în modul clock
în timp real, procesorul poate să meargă să doarmă cu un ceas de funcționare care îl va trezi într-
un anumit moment viitor. În modul de reținere RAM, este necesar un semnal extern pentru a-l
trezi, de ex. I / O pin de semnal sau SPI Slave pentru a primi întrerupere.
Seria MSP430x1xx
MSP430x1Seria MSP430x1xx este generația de bază fără un controler LCD încorporat. Ele sunt,
în general, mai mici decât generația 3xx. Aceste microcontrolere MCU cu memorie flash sau
ROM oferă o funcționare de 8 MIPS, 1.8-3.6 V, până la 60 KB bliț și o gamă largă de serii
periferice.xx analogice și digitale

 Prezentare generală a specificațiilor de alimentare, la fel de scăzută ca:


o μA RAM retenție
o Mod de clock în timp real de 0,7 μA
o 200 μA / MIPS activă
o Dispune de trezire rapidă din modul de așteptare în mai puțin de 6 μs
 Parametrii dispozitivului
o Opțiuni Flash: 1–60 KB
o Opțiuni ROM: 1–16 KB

59
o RAM: 128 B–10 KB
o Opțiuni GPIO: 14, 22, 48 pini
o Opțiuni ADC: Slope, 10 & 12-bit SAR
o Alte periferice integrate: DAC pe 12 biți, până la 2 timere pe 16 biți, temporizator de
watchdog, reset resetare, SVS, modul USART (UART, SPI), DMA, multiplicator 16
× 16, Comparator_A, senzor de temperatură
Seria MSP430F2xx
Seria MSP430F2xx este similară generației 1xx, dar funcționează la o putere chiar mai mică,
suportă operarea de până la 16 MHz și are un ceas mai precis (± 2%) pe chip care ușurează
funcționarea fără un cristal extern. Aceste dispozitive cu putere redusă, bazate pe bliț, oferă o
funcționare de 1,8-3,6 V. Include oscilatorul de putere foarte scăzut (VLO), rezistențele de
tracțiune / retragere internă și opțiunile de număr mic de pini.
Prezentare generală a specificațiilor de putere, la fel de scăzute ca:
o μA RAM retenție
o μA standby mod (VLO)
o 0.7 μA mod clock în timp real
o 220 μA / MIPS activă
o Funcționare ultra-fast wake-up din modul de așteptare în mai puțin de 1 μs
 Parametrii dispozitivului
o Opțiuni Flash: 1–120 KB
o Opțiuni RAM: 128 B – 8 KB
o Opțiuni GPIO: 10, 11, 16, 24, 32, and 48 pins
o Opțiuni ADC: Pantă, 10 & 12-bit SAR, 16 & 24-biți Sigma Delta
o Alte periferice integrate: amplificatoare operaționale, DAC pe 12 biți, până la 2
timere pe 16 biți, temporizator de supraveghere, reset resetare, SVS, modul USI (I²C,
SPI), modul USCI, DMA, multiplicator 16 × 16, Comparator_A + , senzor de
temperatura
Seria MSP430G2xx
Seria MSP430G2xx Value dispune de MCU de putere ultra-scăzută de până la 16 MIPS
cu funcționare de 1.8-3.6 V pe bază de bliț. Include Oscilatorul de putere foarte scăzut (VLO),

60
rezistoarele interne de tracțiune / retragere și opțiunile reduse de numărare a pinilor, la prețuri
mai mici decât seria MSP430F2xx.
 Ultra-Low Power, la fel de scăzută ca (@ 2,2 V):
o μA RAM retenție
o 0.4 μA Standby mode (VLO)
o 0.7 μA mod clock în timp real
o 220 μA / MIPS activă
o Ultra-Fast Wake-Up din modul de așteptare în mai puțin de 1 μs
 Parametrii dispozitivului
o Opțiuni Flash: 0.5–56 KB
o Opțiuni RAM: 128 B–4 KB
o Opțiuni GPIO: 10, 16, 24, 32 pins
o Opțiuni ADC: Slope, 10-bit SAR
o Alte periferice integrate: I / O cu capacitiv tactil, până la 3 timere pe 16 biți,
temporizator, reset resetare, modul USI (I²C, SPI), modul USCI, Comparator_A +,
senzor de temperatură
Seria MSP430x3xx
Seria MSP430x3xx este cea mai veche generație, proiectată pentru instrumente portabile
cu un controler LCD încorporat. Acesta include, de asemenea, un oscilator cu buclă blocată în
frecvență care se poate sincroniza automat cu un cristal de turație redusă (32 kHz). Această
generație nu suportă memoria EEPROM, doar mască ROM și EPROM-erasable și EPROM
programabil unic. Generațiile ulterioare oferă doar opțiuni de memorie flash și opțiuni de mască
ROM. Aceste dispozitive oferă o operație de 2,5-5,5 V, până la 32 KB ROM.
 Prezentare generală a specificațiilor de alimentare, la fel de scăzută ca:
o μA RAM retenție
o 0.9 μA mod clock în timp real
o 160 μA / MIPS activă
o Dispune de fast wake-up din modul de așteptare în mai puțin de 6 μs.
 Parametrii dispozitivului:
o Opțiuni ROM: 2–32 KB
o Opțiuni RAM: 512 B–1 KB

61
o Opțiuni GPIO: 14, 40 pins
o Opțiuni ADC: Slope, 14-bit SAR
o Alte periferice integrate: controler LCD, multiplicator

Seria MSP430x4xx
Seria MSP430x4xx este similară celei din generația 3xx, dar include un controler LCD
integrat și sunt mai mari și mai capabile. Aceste dispozitive flash sau ROM oferă 8-16 MIPS la o
operare de 1,8-3,6 V, cu FLL și SVS. Ideal pentru măsurarea puterii scăzute și aplicațiile
medicale.
 Prezentare generală a specificațiilor de alimentare, la fel de scăzută ca:
o μA RAM retenție
o 0.7 μA mod clock în timp real
o 200 μA / MIPS activă
o Dispune de fast wake-up din modul de standby în mai puțin de 6 μs.
 Parametrii dispozitivului:
o Opțiuni Flash/ROM: 4 – 120 KB
o Opțiuni RAM: 256 B – 8 KB
o Opțiuni GPIO: 14, 32, 48, 56, 68, 72, 80 pins
o Opțiuni ADC: Slope, 10 & 12-bit SAR, 16-bit Sigma Delta
o Alte periferice integrate: SCAN_IF, ESP430, DAC pe 12 biți, Amperi Op, RTC, până
la 2 timere pe 16 biți, temporizator, temporizator de bază, resetare maro, SVS, modul
UART (UART, SPI) , Controler LCD, DMA, multiplicator 16 × 16 și 32x32,
comparator_A, senzor de temperatură, viteză CPU 8 MIPS
Seria MSP430x5xx
Seria MSP430x5xx este capabilă să ruleze până la 25 MHz, să aibă o memorie flash de
până la 512 KB și până la 66 KB RAM. Această familie flash are un consum redus de energie
activă cu până la 25 MIPS la o funcționare de 1,8-3,6 V (165 uA / MIPS). Include un modul
inovativ de gestionare a alimentării pentru un consum optim de energie și o conexiune USB
integrată.
 Prezentare generală a specificațiilor de alimentare, la fel de scăzută ca
o μA RAM retenție

62
o 2.5 μA mod clock în timp real
o 165 μA / MIPS activă
o Dispune de fast wake-up din modul de standby în mai puțin de 5 μs.
 Parametrii dispozitivului:
o Opțiuni Flash options: până la 512 KB
o Opțiuni RAM: până la 66 KB
o Opțiuni ADC: 10 & 12-biți SAR
o Opțiuni GPIO: 29, 31, 47, 48, 63, 67, 74, 87 pini
o Alte periferice integrate: PWM de înaltă rezoluție, 5 switch-uri VI / O, USB, baterie
de rezervă, până la 4 timere pe 16 biți, temporizator, ceas în timp real, resetare maro,
SVS, modul USCI, multiplicator DMA 32x32, Comp B, senzor de temperatură
Seria MSP430x6xx
Seria MSP430x6xx este capabilă să ruleze până la 25 MHz, să aibă memorie flash de
până la 512 KB și până la 66 KB RAM. Această familie flash are un consum redus de energie
activă cu până la 25 MIPS la o funcționare de 1,8-3,6 V (165 uA / MIPS). Include un modul
inovativ de gestionare a alimentării pentru un consum optim de energie și o conexiune USB
integrată.
 Prezentare generală a specificațiilor de alimentare, la fel de scăzută ca:
o μA RAM retenție
o 2.5 μA mod clock în timp real
o 165 μA / MIPS activă
o Dispune de fast wake-up din modul de standby în mai puțin de 5 μs.
 Parametrii dispozitivului:
o Opțiuni Flash options: până la 512 KB
o Opțiuni RAM: până la 66 KB
o Opțiuni ADC: 12-biți SAR
o Opțiuni GPIO: 74 pini
o Alte periferice integrate: USB, LCD, DAC, Comparator_B, DMA, multiplicator
32x32, modul de gestionare a puterii (BOR, SVS, SVM, LDO), temporizator, RTC,
Seria RF SoC (CC430)

63
Seria RF SoC (CC430) asigură o integrare strânsă între nucleul microcontrolerului,
perifericele, software-ul și transceiver-ul RF. Caracteristici transceiver RF <1 GHz, cu
funcționare de 1,8 V-3,6 V. Programarea folosind IDE Arduino este posibilă prin API-ul
panStamp.
 Prezentare generală a specificațiilor de alimentare, la fel de scăzută ca:
o 1 μA RAM retenție
o 1.7 μA mod clock în timp real
o 180 μA / MIPS activă
 Parametrii dispozitivului:
o Opțiuni de viteză: până la 20 MHz
o Opțiuni Flash options: până la 32 KB
o Opțiuni RAM: până la 4 KB
o Opțiuni ADC: 12-biți SAR
o Opțiuni GPIO: 30 & 44 pini
o Alte periferice integrate: controler LCD, până la 2 timere pe 16 biți, temporizator de
supraveghere, RTC, modul de gestionare a alimentării (BOR, SVS, SVM, LDO),
modul USCI, DMA, multiplicator 32x32,
Seria FRAM
Seria FRAM de la Texas Instruments oferă o memorie unificată cu partiție dinamică și viteze
de acces la memorie de 100 de ori mai rapide decât blițul. De asemenea, FRAM este capabil să
rețină starea de putere zero în toate modurile de alimentare, ceea ce înseamnă că scrierea este
garantată, chiar și în cazul unei pierderi de putere. Cu o rezistență de scriere de peste 100
trilioane de cicluri, EEPROM nu mai este necesară. Consum de energie activă la mai puțin de
100μA / MHz.
 Prezentare generală a specificațiilor de alimentare, la fel de scăzută ca:
o 320 nARAM retenție
o 0.35 μAmod clock în timp real
o 82 μA / MIPS activă
 Parametrii dispozitivului:
o Opțiuni de viteză: 8 până la 24 MHz
o Opțiuni FRAM: 4 până la 128 KB

64
o Opțiuni RAM: 0,5 până la 2 KB
o Opțiuni ADC: 10 sau 12-biți SAR
o Opțiuni GPIO: 17 & 83 pini
o Alte periferice integrate posibile: MPU, până la 6 timere pe 16 biți, temporizator de
supraveghere, RTC, modul de gestionare a alimentării (BOR, SVS, SVM, LDO),
modul USCI, I2C și UART BSL, interfață de scanare extinsă, AES, modulare IR

Seria Low voltage


Seria Low Voltage include componentele MSP430C09x și MSP430L092. Aceste două
serii de microcontrolere de 16 biți de joasă tensiune au configurații cu două timere pe 16 biți, un
convertor analog-digital (A / D) pe 8 biți, un convertor digital-analogic pe 8 biți (D / A) și până
la 11 știre I / O.
 Prezentare generală a specificațiilor de alimentare, la fel de scăzută ca:
o 1 μA RAM retenție
o 1.7 μA mod clock în timp rea
o 180 μA / MIPS activă
 Parametrii dispozitivului:
o Opțiuni de viteză: 4 MHz
o Opțiuni ROM: 1–2 kB
o Opțiuni SRAM: 2 kB
o Opțiuni ADC: 8-biți SAR
o Opțiuni GPIO: 11 pins
o Alte periferice integrate: până la 2 timere pe 16 biți, temporizator de supraveghere,
reset resetare, SVS, comparator, senzor de temperatură
Alte familii MSP430
Familiile adiționale din cadrul MSP430 includ funcțiile Fixed Function, Automotive și
Piese Extended.
Funcție fixă: microcontrolerul pe 16 biți MSP430BQ1010 este un dispozitiv avansat cu
funcții fixe care formează unitatea de control și comunicație de pe partea receptorului pentru
transferul de energie wireless în aplicații portabile. MSP430BQ1010 respectă specificațiile

65
Wireless Power Consortium (WPC). Pentru mai multe informații, consultați funcția Contactless
Power [dead link permanent].
Automobile: Microcontrolerele MSP430 de la Texas Instruments (TI) sunt procesoare cu
semnal mixt RISC pe 16 biți, care sunt AEC-Q100 calificate și potrivite pentru aplicații auto în
medii de temperatură ambientală de până la 105 ° C. LIN compatibile pentru MCU MSP430
furnizate de IHR GmbH.
Temp. Extins: Dispozitivele MSP430 sunt foarte populare în medii dure precum senzorul
industrial pentru consumul redus de energie și integrarea analogică inovatoare. Unele aplicații
dure de mediu includ transport / auto, energie regenerabilă, militar / spațiu / avionică, explorare
minerală, industrială, siguranță și securitate
 Definiții dispozitiv:
o HT: -55 °C to 150 °C
o EP: Produse imbunătățite -55 °C to 125 °C
o Q1: Automotive Q100 qualified -40 °C to 105 °C
o T: Temperatură extinsă-40 °C to 105 °C
Rețineți că atunci când dimensiunea flash-ului este de peste 64K cuvinte (128 KBytes), adresele
de instrucțiuni nu mai pot fi codate în doar două octeți. Această modificare a mărimii indicelui
cauzează unele incompatibilități cu părțile anterioare
2.3.8 Tranzistor-tranzistor logic

Logic tranzistor-tranzistor (TTL) este o familie logică construită din tranzistori de


joncțiune bipolară. Numele său semnifică faptul că tranzistorii efectuează atât funcția logică
(primul "tranzistor"), cât și funcția de amplificare (al doilea "tranzistor"); este aceeași convenție
de denumire folosită în logica tranzistorului rezistor (RTL) și logica tranzistorului diodă (DTL).
Circuitele integrate TTL (IC) au fost utilizate pe scară largă în aplicații cum ar fi
computere, controale industriale, echipamente de testare și instrumente, electronice de consum și
sintetizatoare. Uneori, nivelurile logice compatibile cu TTL nu sunt asociate direct cu circuitele
integrate TTL, de exemplu, ele pot fi utilizate la intrările și ieșirile instrumentelor electronice.
După introducerea lor în circuite integrate în 1963 de către Sylvania, circuitele integrate
TTL au fost fabricate de mai multe companii de semiconductori. Seria 7400 de la Texas
Instruments a devenit deosebit de populară. Producătorii TTL au oferit o gamă largă de porți

66
logice, flip-flops, contoare și alte circuite. Variațiile designului original al circuitelor TTL au
oferit o viteză mai mare sau o disipare a puterii mai reduse pentru a permite optimizarea
designului. Dispozitivele TTL au fost fabricate inițial în pachete ceramice și din plastic cu dublă
linie (DIP), și în formă de pachet plat. Chipurile TTL sunt acum realizate și în pachete de
montare pe suprafață.
TTL a devenit fundamentul calculatoarelor și al altor produse electronice digitale. Chiar
și după ce circuitele integrate de integrare pe scară largă au făcut ca procesoarele cu circuite
multiple să fie învechite, dispozitivele TTL se găsesc încă pe scară largă, deoarece interfața
adezivă dintre componentele mai dens integrate.
ISTORIC
TTL a fost inventat în 1961 de către James L. Buie de la TRW, care a declarat că este
"potrivită în mod special noii tehnologii de proiectare a circuitelor integrate". Numele original
pentru TTL a fost logica tranzistor-cuplată tranzistor (TCTL). Primele dispozitive comerciale
TTL cu circuite integrate au fost fabricate de Sylvania în 1963, numită familia Sylvania
Universal High-Level Logic (SUHL). Părțile Sylvania au fost folosite în controlul rachetei
Phoenix. TTL a devenit popular cu designerii de sisteme electronice după ce Texas Instruments a
introdus seria 5400 de circuite integrate cu temperatură militară în 1964, iar seria 7400 mai
târziu, specificată pe o gamă mai restrânsă și cu pachete de plastic ieftin, în 1966.

Familia Texas Instruments 7400 a devenit un standard industrial. Piesele compatibile au


fost produse de Motorola, AMD, Fairchild, Intel, Intersil, Signetics, Mullard, Siemens, SGS-
Thomson, Rifa, National Semiconductor și multe alte companii, chiar în Blocul de Est (Uniunea
Sovietică, Ungaria, România - pentru detalii vezi seria 7400). Nu numai alții au făcut părți
compatibile TTL, dar și componente compatibile au fost fabricate utilizând și alte tehnologii de
circuit. Cel puțin un producător, IBM, a produs circuite TTL necorespunzătoare pentru uz
propriu; IBM a folosit tehnologia în IBM System / 38, IBM 4300 și IBM 3081.
Termenul "TTL" se aplică multor generații succesive de logică bipolară, cu îmbunătățiri
treptate ale vitezei și consumului de energie în decurs de aproximativ două decenii. Cea mai
recent introdusă familie 74Fxx este încă vândută astăzi și a fost folosită pe scară largă la sfârșitul
anilor '90. 74AS / ALS Advanced Schottky a fost introdus în 1985. Începând cu anul 2008,
Texas Instruments continuă să furnizeze chips-uri de uz general în numeroase familii de

67
tehnologii învechite, deși la prețuri sporite. În mod tipic, chips-urile TTL nu integrează mai mult
de câteva sute de tranzistoare fiecare. Funcțiile într-un singur pachet variază, în general, de la
câteva porți logice la o mică bucată de microprocesor. TTL a devenit, de asemenea, important
datorită faptului că costul său redus a făcut tehnici digitale practice din punct de vedere
economic pentru sarcinile realizate anterior prin metode analoage.
Kenbak-1, strămoșul primelor computere personale, a folosit TTL pentru CPU în locul
unui cip de microprocesor, care nu era disponibil în 1971. [10] Datapoint 2200 din 1970 a folosit
componentele TTL pentru CPU-ul său și a fost baza pentru setul de instrucțiuni 8008 și ulterior
x86. [11] Stațiile de lucru Xerox Alto și 1981 Star, care au introdus interfața grafică cu
utilizatorul, au folosit circuite TTL integrate la nivelul unităților logice aritmetice (ALU) și,
respectiv, al bitslicelor. Cele mai multe computere au folosit "logica lipiciului" compatibilă cu
TTL între cipurile mai mari și anii 1990. Până la apariția logicii programabile, logica bipolară
discretă a fost folosită pentru prototipul și emularea microarhitecturilor aflate în curs de
dezvoltare
IMPLEMENTARE
Fundamentul porților TTL
Intrările TTL sunt emițătorii tranzistoarelor bipolare. În cazul intrărilor NAND, intrările sunt
emițătorii tranzistorilor cu mai mulți emițători, echivalenți funcțional cu tranzistori multiple,
unde bazele și colectorii sunt legați împreună. Ieșirea este tamponată de un amplificator comun
emițător.
Intrările logice. Când toate intrările sunt ținute
la tensiune înaltă, joncțiunile de bază-emițător ale
tranzistorului cu mai multe emițătoare sunt inversate.
Spre deosebire de DTL, un mic "colector" curent
(aproximativ 10μA) este tras de fiecare intrare. Acest
lucru se datorează faptului că tranzistorul este în mod
activ invers. Un curent aproximativ constant curge de la
șina pozitivă, prin rezistență și în baza tranzistorului
emițătorului multiplu. Acest curent trece prin
joncțiunea de bază-emițător a tranzistorului de ieșire,
permițându-i să conducă și să tragă tensiunea de ieșire
scăzută (logic zero).
O intrare zero logic. Rețineți că joncțiunea colector-bază a tranzistorului cu mai mulți
emițători și joncțiunea emițător de bază a tranzistorului de ieșire sunt în serie între partea
inferioară a rezistorului și sol. Dacă o tensiune de intrare devine zero, joncțiunea corespunzătoare
emițător de bază a tranzistorului cu mai mulți emițători este în paralel cu aceste două joncțiuni.
Un fenomen denumit direcție curentă înseamnă că atunci când două elemente de tensiune stabilă
cu tensiuni diferite de prag sunt conectate în paralel, curentul trece prin traseu cu pragul de prag
mai mic. Adică curentul curge din această intrare și în sursa de tensiune zero (joasă). Ca rezultat,

68
nu trece curentul prin baza tranzistorului de ieșire, determinându-l să oprească conducerea și
tensiunea de ieșire devine ridicată (logică). În timpul tranziției, tranzistorul de intrare este în
scurt timp în regiunea sa activă; astfel încât acesta trage un curent mare departe de baza
tranzistorului de ieșire și, astfel, descarcă rapid baza sa. Acesta este un avantaj critic al TTL
peste DTL care accelerează tranziția pe o structură de intrare a diodelor.
Principalul dezavantaj al TTL cu o fază de ieșire simplă este rezistența de ieșire relativ
ridicată la ieșirea logică "1" care este determinată complet de rezistorul colectorului de ieșire.
Acesta limitează numărul de intrări care pot fi conectate (fanout). Un avantaj al stadiului simplu
de ieșire este nivelul de tensiune ridicată (până la VCC) a ieșirii logice "1" atunci când ieșirea nu
este încărcată.
O variație comună omite rezistorul colector al tranzistorului de ieșire, făcând o ieșire de
colector deschis. Acest lucru permite proiectantului să realizeze o logică prin conectarea
împreună a ieșirilor colectoare deschise ale mai multor porți logice și oferind un singur rezistor
extern de tracțiune. Dacă oricare dintre porțile logice devine logică scăzută (conductor
tranzistor), ieșirea combinată va fi scăzută. Exemple pentru acest tip de poarta sunt seriile 7401
si 7403. Ieșirile de colector ale unor porți au o tensiune maximă mai mare, cum ar fi 15V pentru
7426, utilă atunci când conduceți alte sarcini decât TTL

TTL cu o fază de ieșire "totem-pole"


Pentru a rezolva problema cu rezistența de ieșire ridicată a stadiului simplu de ieșire, a
doua schemă adaugă la aceasta o ieșire "totem-pole" ("push-pull"). Se compune din cele două
tranzistoare n-p-n V3 și V4, dioda "lifting" V5 și rezistența limitatoare de curent R3 (vezi figura
din dreapta). Aceasta se datorează aplicării aceleiași idei de direcție actuale ca mai sus.
Atunci când V2 este "oprit", V4 este "oprit", iar V3 funcționează în regiune activă ca un
follower de tensiune care produce tensiune de ieșire mare (logic "1").
Când V2 este "pornit", activează V4, determinând o tensiune joasă (logic "0") la ieșire.
Din nou, există un efect de direcție curent: combinația de serie a joncțiunii C-E a V2 și
joncțiunea B-E a V4 este în paralel cu seria de joncțiuni V3 B-E, V5 cu anod-catod și V4 C-E. A
doua combinație de serie are tensiunea de prag mai mare, deci nu trece curentul prin el, adică
curentul de bază V3 este lipsit. Tranzistorul V3 se oprește și nu are impact asupra ieșirii.
În mijlocul tranziției, rezistorul R3 limitează curentul care curge direct prin tranzistorul
conectat în serie V3, dioda V5 și tranzistorul V4 care sunt toate conducătoare. De asemenea,
limitează curentul de ieșire în cazul ieșirii logice "1" și conexiunea scurtă la sol. Rezistența porții
poate fi mărită fără a afecta în mod proporțional consumul de energie prin eliminarea
rezistențelor de tracțiune și retragere din stadiul de ieșire.
Principalul avantaj al TTL cu o fază de ieșire "totem-pole" este rezistența scăzută la ieșire
la ieșirea logică "1". Aceasta este determinată de tranzistorul de ieșire superior V3 care operează
în regiunea activă ca un follower de emițător. Rezistorul R3 nu mărește rezistența la ieșire,
deoarece este conectat la colectorul V3 și influența lui este compensată de feedback-ul negativ.
Un dezavantaj al stadiului de ieșire "totem-pole" este scăderea nivelului de tensiune (nu mai mult
de 3,5 V) a ieșirii logice "1" (chiar dacă ieșirea este descărcată). Motivul acestei reduceri este
scăderea tensiunii între joncțiunile V3 de bază și emitatorul V5 anod-catod.
INTERPRETAREA CONSIDERAȚIILOR
Ca și DTL, TTL este o logică curentă, deoarece un curent trebuie extras din intrări pentru
a le aduce la un nivel de tensiune logic. Stadiul de acționare trebuie să absoarbă până la 1,6 mA
de la o intrare standard TTL, fără a permite ca tensiunea să crească la mai mult de 0,4 volți.

69
Etapa de ieșire a celor mai comune porți TTL este specificată pentru a funcționa corect atunci
când conduceți până la 10 etape de intrare standard (un fanout de 10). Intrările TTL sunt pur și
simplu lăsate plutitoare pentru a furniza un "1" logic, deși această utilizare nu este recomandată.
Circuitele standard TTL funcționează cu o sursă de alimentare de 5 volți. Un semnal de
intrare TTL este definit ca fiind "scăzut" atunci când este cuprins între 0 V și 0,8 V față de borna
de masă și "înalt" atunci când între 2 V și VCC (5 V), [21] [22] și dacă un semnal de tensiune
variind între 0,8 V și 2,0 V este trimis în intrarea unei porți TTL, nu există un răspuns sigur de la
poartă și, prin urmare, este considerat "nesigur" (nivelurile logice precise variază ușor între sub-
tipuri și temperatură). Ieșirile TTL sunt în mod obișnuit limitate la limite mai restrânse între 0,0
V și 0,4 V pentru un "low" și între 2,4 V și VCC pentru un "înalt", oferind cel puțin 0,4 V de
imunitate la zgomot. Standardizarea nivelurilor TTL este atât de omniprezentă încât circuitele
complexe conțin adesea cipuri TTL fabricate de mai mulți producători diferiți selectați pentru
disponibilitate și cost, asigurându-se compatibilitatea. Două unități de plăci de circuit de pe
aceeași linie de asamblare în zile diferite sau săptămâni succesive pot avea o combinație diferită
de mărci de cipuri în aceleași poziții pe bord; reparația este posibilă cu cipuri fabricate ani mai
târziu decât componentele originale. În limite largi utile, porțile logice pot fi tratate ca
dispozitive boolene ideale fără îngrijorare pentru limitările electrice. Marjele de zgomot de 0,4V
sunt adecvate datorită impedanței scăzute de ieșire a șoferului, adică o cantitate mare de putere
de zgomot suprapusă pe ieșire este necesară pentru a conduce o intrare într-o regiune nedefinită.
În unele cazuri (de exemplu, când ieșirea unei porți logice TTL trebuie utilizată pentru a
conduce intrarea unei porți CMOS), nivelul de tensiune al fazei de ieșire "totem-pole" la ieșirea
logică "1" poate fi mărit mai aproape la VCC prin conectarea unui rezistor extern între colectorul
V3 și șina pozitivă. Trage in sus catodul V5 si taie dioda. Cu toate acestea, această tehnică
transformă de fapt ieșirea sofisticată "totem-pole" într-o etapă de ieșire simplă, având o rezistență
semnificativă la ieșire atunci când conduce un nivel ridicat (determinat de rezistența externă).
APLICAȚII
Înainte de apariția dispozitivelor VLSI, circuitele integrate TTL erau o metodă standard
de construcție pentru procesoarele procesoarelor mini-computer și mainframe; cum ar fi DEC
VAX și Data General Eclipse, precum și pentru echipamente precum comenzile numerice ale
mașinii-unelte, imprimantele și terminalele de afișare video. Pe măsură ce microprocesoarele au
devenit mai funcționale, dispozitivele TTL au devenit importante pentru aplicațiile "lipici
logice", cum ar fi driverele de autobuz rapid pe o placă de bază, care leagă blocurile funcționale
realizate în elementele VLSI.
Aplicații analogice
În timp ce inițial a fost conceput pentru a gestiona semnale digitale la nivel logic, un
invertor TTL poate fi părtinitor ca amplificator analogic. Conectarea unui rezistor între ieșire și
intrare împiedică elementul TTL ca un amplificator de feedback negativ. Astfel de
amplificatoare pot fi utile pentru conversia semnalelor analogice în domeniul digital, dar nu ar fi
utilizate în mod obișnuit acolo unde amplificarea analogică este scopul principal. Invertoarele
TTL pot fi de asemenea folosite în oscilatoare de cristal unde capacitatea lor de amplificare
analogică este semnificativă.
O poartă TTL poate funcționa din neatenție ca amplificator analogic dacă intrarea este
conectată la un semnal de intrare care se schimbă lent și care traversează regiunea nespecificată
de la 0,8 V la 2 V. Ieșirea poate fi eronată atunci când intrarea este în acest interval. O intrare
lentă în schimbare poate duce la disiparea excesului de putere în circuitul de ieșire. Dacă trebuie
utilizată o astfel de intrare analogică, există părți TTL specializate cu intrări de declanșare

70
Schmitt care vor converti fiabil intrarea analogică la o valoare digitală, funcționând efectiv ca un
convertor de un bit de la A la D.

Cap. 3. Platforma de dezvoltare ARDUINO


3.1. ARDUINO NANO
3.1.1 Caracteristici tehnice
Prezentare generală:
Arduino Nano este o placă mică, completă și pașnică, bazată pe ATmega328 (Arduino
Nano 3.0) sau ATmega168 (Arduino Nano 2.x). Are mai mult sau mai puțin aceeași
funcționalitate a lui Arduino Duemilanove, dar într-un alt pachet. Este lipsit doar de o mufă de
alimentare DC și funcționează cu un cablu USB Mini-B în locul celui standard. Nano a fost
proiectat și este produs de Gravitech.

Schema și design-ul:

-Arduino Nano 3.0 (ATmega328): schematică, fișiere Eagle.

71
-Arduino Nano 2.3 (ATmega168): manual (pdf), fișiere Eagle. Notă: deoarece versiunea gratuită
a Eagle nu manipula mai mult de 2 straturi, și această versiune a Nano este de 4 straturi, este
publicat aici unrouted, astfel încât utilizatorii poate să o deschidă și să o folosească în versiunea
gratuită a lui Eagle.

Specificații:

Microcontroler Atmel ATmega168 sau ATmega328


Tensiunea de 5V
funcționare (logică
nivel)
Tensiune de 7-12 V
intrare(recomandat)
Tensiunea de intrare 6-20 V
(limite)
Inele digitale I / O 14 (din care 6 asigură ieșirea PWM)
Pini de intrare 8
analogice
Curent continuu pe pin 40 mA
I/O
Memorie flash 16 KB (ATmega168) sau 32 KB (ATmega328) din care 2 KB utilizate de
bootloader)

SRAM 1 KB (ATmega168) sau 2 KB (ATmega328)

SRAM 512 octeți (ATmega168) sau 1 KB (ATmega328)

Ceas de viteză 16 MHz

Dimensiuni 0,73 "x 1,70"

Alimentarea
Arduino Nano poate fi alimentat prin conexiunea USB Mini-B, putere externă
nereglementată de 6-20V (pinul 30) sau sursa de alimentare externă reglată la 5V (pinul 27).
Sursa de alimentare este selectată automat la cea mai mare sursă de tensiune.
Cipul FTDI FT232RL de pe Nano este alimentat numai dacă placa este alimentată prin USB. Ca
rezultat, atunci când rulează pe o sursă externă (non-USB), ieșirea de 3.3V (furnizată de chipul
FTDI) nu este disponibilă, iar LED-urile RX și TX vor clipi dacă pinii digitali 0 sau 1 sunt mari.

Memoria
ATmega168 are 16 KB de memorie flash pentru stocarea codului (din care 2 KB este
folosit pentru bootloader); ATmega328 are 32 KB, (și cu 2 KB pentru bootloader). ATmega168
are 1 KB de SRAM și 512 octeți de EEPROM (care poate fi citit și scris cu biblioteca
EEPROM); ATmega328 are 2 KB de SRAM și 1 KB de EEPROM.

72
Input and Output
Fiecare dintre cei 14 pini digitali de pe Nano poate fi utilizat ca intrare sau ieșire,
utilizând funcțiile pinMode (), digitalWrite () și digitalRead (). Acestea funcționează la 5 volți.
Fiecare pin poate furniza sau primi un maxim de 40 mA și are o rezistență internă de tracțiune
(deconectată în mod implicit) de 20-50 kOhms. În plus, unele pini au funcții specializate:
Serial: 0 (RX) și 1 (TX). Folosit pentru a primi (RX) și a transmite (TX) date TTL
seriale. Acești ace sunt conectați la pinii corespunzători ai cipului FTDI USB-to-TTL Serial.
Întreruperi externe: 2 și 3. Acești pini pot fi configurați pentru a declanșa o întrerupere la
o valoare scăzută, o margine în creștere sau în scădere sau o schimbare a valorii. Consultați
funcția attachInterrupt () pentru detalii.
PWM: 3, 5, 6, 9, 10 și 11. Asigurați ieșirea PWM pe 8 biți cu funcția analogWrite ().
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Acești pini acceptă comunicarea SPI,
care, deși furnizată de hardware-ul de bază, nu este inclusă în prezent în limba Arduino.
LED-ul: 13. Există un LED încorporat conectat la pinul digital 13. Când pinul este
HIGH, LED-ul este pornit, când pinul este LOW, este oprit.

Nano are 8 intrări analogice, fiecare furnizând 10 biți de rezoluție (adică 1024 valori
diferite). În mod implicit, se măsoară de la sol la 5 volți, deși este posibil să se schimbe capătul
superior al intervalului lor folosind funcția analogReference (). În plus, unele pini au
funcționalități specializate:
I2C: 4 (SDA) și 5 (SCL). Suportă comunicarea I2C (TWI) folosind biblioteca Wire
(documentația de pe site-ul Wiring).

Există și câțiva alți pini pe placă:


AREF. Tensiunea de referință pentru intrările analogice. Folosit cu analogReference ().
Reset. Aduceți această linie LOW pentru a reseta microcontrolerul. În mod obișnuit, pentru a
adăuga un buton de resetare la scuturile care blochează cel de pe placă.

3.1.2. Instrucțiuni

Arduino Nano are o serie de facilități pentru a comunica cu un computer, un alt Arduino
sau cu alte microcontrolere. ATmega168 și ATmega328 furnizează comunicație serială UART
TTL (5V), disponibilă pe pinii digitali 0 (RX) și 1 (TX). Un FTDI FT232RL pe placa de canale
această comunicare serială prin USB și driverele FTDI (incluse cu software-ul Arduino) oferă un
port virtual de software-ul pe computer. Software-ul Arduino include un monitor serial care
permite transmiterea de date textuale simple către și de la bordul Arduino. LED-urile RX și TX
de pe placă vor clipi atunci când datele sunt transmise prin intermediul cipului FTDI și
conexiunii USB la computer (dar nu și pentru comunicarea serială pe pinii 0 și 1). O bibliotecă
SoftwareSerial permite comunicarea serială pe oricare dintre pinii digitali ai lui Nano.
ATmega168 și ATmega328 suportă și comunicațiile I2C (TWI) și SPI. Software-ul Arduino
include o bibliotecă Wire pentru simplificarea utilizării magistralei I2C; consultați documentația
pentru detalii. Pentru a utiliza comunicarea SPI, consultați fișa tehnică ATmega168 sau
ATmega328.

73
Programarea
Arduino Nano poate fi programat cu software-ul Arduino (descărcare). Selectați "Arduino
Diecimila, Duemilanove sau Nano w / ATmega168" sau "Arduino Duemilanove sau Nano w /
ATmega328" din Instrumente > Meniul de bord (în funcție de microcontrolerul de pe bord).
Pentru detalii, consultați referințele și tutorialele. ATmega168 sau ATmega328 de pe Arduino
Nano vine preburnat cu un bootloader care vă permite să încărcați un nou cod la el fără a utiliza
un programator hardware extern. Acesta comunică utilizând protocolul STK500 original
(referință, fișiere de antet C). De asemenea, puteți să treceți de bootloader și să programați
microcontrolerul prin antetul ICSP (Programare în serie); consultați aceste instrucțiuni pentru
detalii.

Reset Automat
Mai degrabă decât necesită o apăsare fizică a butonului de resetare înainte de încărcare,
Arduino Nano este proiectat într-un mod care să permită resetarea acestuia prin software-ul care
rulează pe un computer conectat. Una dintre liniile de control al fluxului hardware (DTR) ale
FT232RL este conectată la linia de resetare a ATmega168 sau ATmega328 printr-un condensator
de 100 nanofarad. Când această linie este afirmată (scăzută), linia de resetare scade suficient de
mult pentru a reseta cipul. Software-ul Arduino folosește această capacitate pentru a vă permite
să încărcați cod prin simpla apăsare a butonului de încărcare din mediul Arduino. Aceasta
înseamnă că bootloader-ul poate avea un interval de timp mai scurt, deoarece scăderea DTR
poate fi bine coordonată cu începutul încărcării. Această configurație are alte implicații. Atunci
când Nano este conectat la un computer care rulează Mac OS X sau Linux, acesta se resetează de
fiecare dată când se face o conexiune de la software (prin USB). Pentru următoarea jumătate de
secundă, bootloaderul rulează pe Nano. Deși este programat să ignore datele incorecte (adică
orice, în afară de încărcarea unui nou cod), va intercepta primele câteva octeți de date trimise
plăcii după deschiderea unei conexiuni. Dacă o schiță care rulează pe placă primește o
configurație unică sau alte date la prima pornire, asigurați-vă că software-ul cu care comunică
așteaptă o secundă după deschiderea conexiunii și înainte de a trimite aceste date.

3.2. ARDUINO UNO


3.1.1 Caracteristici tehnice

Prezentare generală:
Arduino Uno este un microcontroler bazat pe ATmega328P (datasheet). Are 14 intrări /
ieșiri digitale (dintre care 6 pot fi utilizate ca ieșiri PWM), 6 intrări analogice, un cristal de cuarț
de 16 MHz, o conexiune USB, o mufă de alimentare, un antet ICSP și un buton de resetare.
Conține tot ceea ce este necesar pentru a susține microcontrolerul; pur și simplu conectați-l la un
computer cu un cablu USB sau alimentați-l cu un adaptor AC-DC sau acumulator pentru a
începe. Aveți posibilitatea să dăruiți-vă cu UNO dvs. fără să vă faceți griji prea multe despre a
face ceva greșit, cel mai rău scenariu puteți înlocui cip pentru câțiva dolari și începeți din nou.
"Uno" înseamnă unul în italiană și a fost ales pentru a marca lansarea programului Arduino
Software (IDE) 1.0. Placa Uno și versiunea 1.0 a Arduino Software (IDE) au fost versiunile de
referință ale Arduino, care au evoluat acum în versiuni mai noi. Placa Uno este prima dintr-o
serie de plăci USB Arduino și modelul de referință pentru platforma Arduino; pentru o listă

74
extinsă de panouri actuale, trecute sau depășite, vezi indexul Arduino al panourilor. Puteți găsi
aici informațiile dvs. privind
garanția la bord.

Schema detaliată a
unui Arduino Uno

Specificații:

Alimentarea

75
Placa Arduino Uno poate fi alimentată prin conexiunea USB sau cu o sursă externă de
alimentare. Sursa de alimentare este selectată automat. Puterea externă (non-USB) poate proveni
de la un adaptor AC-to-DC (perete-wart) sau de la o baterie. Adaptorul poate fi conectat prin
conectarea unui conector central pozitiv de 2,1 mm în mufa de alimentare a plăcii. Conductoarele
din baterie pot fi introduse în anteturile GND și Vin ale conectorului POWER. Placa poate
funcționa pe o sursă externă de la 6 la 20 de volți. Dacă este furnizat cu mai puțin de 7V, pinul
5V poate furniza mai puțin de 5 volți, iar placa poate deveni instabilă. Dacă se utilizează mai
mult de 12V, regulatorul de tensiune se poate supraîncălzi și poate deteriora placa. Intervalul
recomandat este de la 7 la 12 volți.

Pinii de alimentare sunt după cum urmează:


 Vin. Tensiunea de intrare la placa Arduino / Genuino atunci când utilizează o sursă
externă de alimentare (spre deosebire de 5 volți de la conexiunea USB sau de la altă sursă
de alimentare reglată). Puteți furniza tensiune prin acest pin sau, dacă furnizați tensiune
prin mufa de alimentare, accesați-l prin acest pin.
 5V.Acest pin transmite un ieșire regulată de 5V de la regulatorul de pe placă. Placa
poate fi alimentată de la mufa de alimentare DC (7 - 12V), conectorul USB (5V) sau
pinul VIN al plăcii (7-12V). Tensiunea de alimentare prin pinii de 5 V sau 3,3 V ocolește
regulatorul și vă poate deteriora bordul. Nu ne sfătuim.
 3V3. O alimentare de 3,3 volți generată de regulatorul de la bord. Rezistența curentului
maxim este de 50 mA.
 GND. Ground pin.
 IOREF. Acest pin pe placa Arduino / Genuino furnizează referința de tensiune cu care
microcontrolerul funcționează. Un scut bine configurat poate citi tensiunea de pin IOREF
și poate selecta sursa de alimentare adecvată sau poate activa traducătorii de tensiune pe
ieșiri pentru a funcționa cu 5V sau 3,3V.
Memoria
ATmega328 are 32 KB (cu 0,5 KB ocupat de bootloader). De asemenea, are 2 KB de SRAM și 1
KB de EEPROM (care poate fi citit și scris cu biblioteca EEPROM).

Intrările/Ieșirile

Fiecare dintre cele 14 pini digitale de pe Uno poate fi utilizat ca intrare sau ieșire, utilizând
funcțiile pinMode (), digitalWrite () și digitalRead (). Acestea funcționează la 5 volți. Fiecare pin
poate furniza sau recepționa 20 mA ca condiție de funcționare recomandată și are o rezistență
internă de tracțiune (deconectată în mod implicit) de 20-50k ohm. Un maxim de 40 mA este
valoarea care nu trebuie depășită pe nici un pin de intrare / ieșire pentru a evita deteriorarea
permanentă a microcontrolerului.
În plus, unii pini au funcții specializate:
 Serial: 0 (RX) și 1 (TX). Folosit pentru a primi (RX) și a transmite (TX) date TTL seriale.
Acești pini sunt conectați la pinii corespunzători ai cipului ATmega8U2 USB-to-TTL
Serial.
 Externă întreruperi: 2 și 3. Acești pini pot fi configurați pentru a declanșa o întrerupere la
o valoare scăzută, o margine în creștere sau în scădere sau o schimbare a valorii.
Consultați funcția attachInterrupt () pentru detalii.
 PWM: 3, 5, 6, 9, 10 și 11. Asigurați ieșirea PWM pe 8 biți cu funcția analogWrite ().

76
 SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Acești pini acceptă comunicarea SPI
utilizând biblioteca SPI.
 LED-ul: 13. Există un LED încorporat, acționat de pinul digital 13. Când pinul este
HIGH, LED-ul este pornit, când pinul este LOW, este oprit.
 TWI: pinul A4 sau SDA și știftul A5 sau SCL. Suportă comunicarea TWI folosind
biblioteca Wire.

Uno are 6 intrări analogice, numite A0 până la A5, fiecare dintre acestea oferând 10 biți de
rezoluție (adică 1024 valori diferite). În mod implicit, se măsoară de la sol la 5 volți, deși este
posibil să se schimbe capătul superior al intervalului lor utilizând funcția AREF pin și funcția
analogReference (). Există și câțiva alți pini pe bord:
 AREF. Tensiunea de referință pentru intrările analogice. Folosit cu analogReference
().
 Reset. Aduceți această linie LOW pentru a reseta microcontrolerul. În mod obișnuit,
pentru a adăuga un buton de resetare la scuturile care blochează cel de pe placă.

3.1.2. Instrucțiuni

Arduino / Genuino Uno dispune de o serie de facilități pentru comunicarea cu un


computer, o altă placă Arduino / Genuino sau alte microcontrolere. ATmega328 oferă
comunicație serială UART TTL (5V), care este disponibil pe pinii digitali 0 (RX) și 1 (TX). Un
ATmega16U2 de pe placa de canale comunică acest serial prin USB și apare ca un port com
virtual pentru software-ul de pe computer. Firmware-ul 16U2 utilizează drivere USB standard
standard și nu este nevoie de driver extern. Cu toate acestea, în Windows, este necesar un fișier
.inf. Software-ul Arduino (IDE) include un monitor serial care permite trimiterea de date textuale
simple la și de la bord. LED-urile RX și TX de pe placă vor clipi când datele sunt transmise prin
cip USB-to-serial și conexiune USB la computer (dar nu pentru comunicația serială pe pinii 0 și
1).

Reset Automat

În loc să fie nevoie de o presare fizică a butonului de resetare înainte de încărcare, placa
Arduino / Genuino Uno este proiectată astfel încât să poată fi resetată prin software-ul care
rulează pe un computer conectat. Una dintre liniile de control al fluxului hardware (DTR) ale
ATmega8U2 / 16U2 este conectată la linia de resetare a ATmega328 printr-un condensator de
100 nanofaradi. Când această linie este afirmată (scăzută), linia de resetare scade suficient de
mult pentru a reseta cipul. Software-ul Arduino (IDE) utilizează această capacitate pentru a vă
permite să încărcați cod prin simpla apăsare a butonului de încărcare din bara de instrumente a
interfeței.
Aceasta înseamnă că bootloader-ul poate avea un interval de timp mai scurt, deoarece
scăderea DTR poate fi bine coordonată cu începutul încărcării. Această configurație are alte
implicații. Atunci când Uno este conectat la un computer care rulează Mac OS X sau Linux,
acesta se resetează de fiecare dată când se face o conexiune de la software (prin USB). Pentru
următoarea jumătate de secundă, bootloaderul rulează pe Uno.
Deși este programat să ignore datele incorecte (adică orice, în afară de încărcarea unui
nou cod), va intercepta primele câteva octeți de date trimise plăcii după deschiderea unei

77
conexiuni. Dacă o schiță care rulează pe placă primește o configurație unică sau alte date la
prima pornire, asigurați-vă că software-ul cu care comunică așteaptă o secundă după deschiderea
conexiunii și înainte de a trimite aceste date. Placa Uno conține o urmă care poate fi tăiată pentru
a dezactiva resetarea automată. Plăcuțele de pe ambele părți ale traseului pot fi lipite împreună
pentru a le reactiva. Este etichetat cu "RESET-EN". De asemenea, este posibil să dezactivați
resetarea automată conectând un rezistor de 110 ohmi de la 5V la linia de resetare; a se vedea
acest thread forum pentru detalii.

Avertismente

Arduino Uno are o polifuză resetabilă care protejează porturile USB ale computerului
de pantaloni scurți și de supracurent. Deși majoritatea calculatoarelor oferă o protecție internă
proprie, siguranța oferă un strat suplimentar de protecție. Dacă pe portul USB este aplicată o
valoare mai mare de 500 mA, siguranța va rupe automat conexiunea până când scurtcircuitul sau
suprasarcina vor fi eliminate.

Diferențe cu alte plăci

Uno diferă de toate plăcile precedente prin faptul că nu utilizează chip-ul FTDI USB-
to-serial. În schimb, acesta oferă Atmega16U2 (Atmega8U2 până la versiunea R2) programată ca
un convertor USB-serial.

3.3. ARDUINO DUE


3.3.1. Caracteristici tehnice
Arduino Due este o placă de microcontroler bazată pe procesorul Atmel SAM3X8E ARM
Cortex-M3. Este prima placă Arduino bazată pe un microcontroler ARM pe 32 de biți. Dispune
de 54 de intrări / ieșiri digitale (din care 12 pot fi utilizate ca ieșiri PWM), 12 intrări analogice, 4
UART-uri (porturi seriale hardware), un ceas 84 MHz, o conexiune USB OTG, 2 DAC , 2 TWI,
o mufă de alimentare, un antet SPI, un antet JTAG, un buton de resetare și un buton de ștergere.
Boardul conține tot ce este necesar pentru a susține microcontrolerul; pur și simplu
conectați-l la un calculator cu un cablu micro-USB sau alimentați-l cu un adaptor AC-DC sau
acumulator pentru a începe. The Due este compatibil cu toate scuturile Arduino care
funcționează la 3.3V și sunt compatibile cu pinoul 1.0 Arduino.
Pinii de ieșire 1.0 au următoarele caracteristici:
 TWI: pinii SDA și SCL care sunt aproape de pinul AREF.
 IOREF: permite un scut atașat cu o configurație adecvată pentru a se adapta la tensiunea
furnizată de placă. Acest lucru permite compatibilitatea scutului cu o placă de 3.3V, cum
ar fi plăcile de bază Due și AVR care funcționează la 5V.

78
 Un pin nesolicitat, rezervat pentru utilizare ulterioară.

Specificații:

Alimentarea
Arduino Due poate fi alimentat prin conectorul USB sau cu o sursă externă de alimentare.
Sursa de alimentare este selectată automat. Puterea externă (non-USB) poate proveni de la un
adaptor AC-to-DC (perete-wart) sau de la o baterie. Adaptorul poate fi conectat prin conectarea
unui conector central pozitiv de 2,1 mm în mufa de alimentare a plăcii. Conductorii de la o
baterie pot fi inserați în anteturile de știri Gnd și Vin ale conectorului POWER.
Placa poate funcționa pe o sursă externă de 6 până la 20 de volți. Dacă este furnizat cu
mai puțin de 7V, totuși, pinul 5V poate furniza mai puțin de 5 volți, iar placa poate fi instabilă.
Dacă se utilizează mai mult de 12V, regulatorul de tensiune se poate supraîncălzi și poate
deteriora placa. Intervalul recomandat este de la 7 la 12 volți.

Pinii sunt după cum urmează:


 Vin. Tensiunea de intrare la placa Arduino atunci când utilizează o sursă externă de
alimentare (spre deosebire de 5 volți de la conexiunea USB sau altă sursă de alimentare
reglată). Puteți furniza tensiune prin acest pin sau dacă alimentați tensiunea prin mufa de
alimentare, 5V.Acest pin transmite un ieșire regulată de 5V de la regulatorul de pe placă.
Placa poate fi alimentată de la mufa de alimentare DC (7 - 12V), conectorul USB (5V)
sau pinul VIN al plăcii (7-12V). Tensiunea de alimentare prin pinii de 5 V sau 3,3 V
ocolește regulatorul și vă poate deteriora bordul. Nu ne sfătuim.

79
 accesați-l prin acest pin.
 3V3. O alimentare de 3,3 volți generată de regulatorul de la bord. Rezistența curentului
maxim este de 800 mA. Acest regulator oferă, de asemenea, sursa de alimentare a
microcontrolerului SAM3X.
 IOREF. Acest pin pe placa Arduino furnizează referința de tensiune cu care
microcontrolerul funcționează. Un scut configurat corespunzător poate citi tensiunea de
pin IOREF și poate selecta sursa de alimentare adecvată sau poate activa traducătorii de
tensiune pe ieșiri pentru a lucra cu 5V sau 3,3V.
 Pinul GROUND

Memoria
SAM3X are 512 KB (2 blocuri de 256 KB) de memorie flash pentru stocarea codului.
Bootloaderul este preburnat în fabrică de la Atmel și este stocat într-o memorie ROM dedicată.
SRAM-ul disponibil este de 96 KB în două bancomate de 64 KB și 32 KB.
Toată memoria disponibilă (Flash, RAM și ROM) poate fi accesată direct ca spațiu de
adresare plat. Este posibil să ștergeți memoria flash a dispozitivului SAM3X cu butonul de
ștergere de la bord. Aceasta va elimina schița încărcată curent din MCU. Pentru a șterge, apăsați
și țineți apăsat butonul Ștergere timp de câteva secunde în timp ce placa este alimentată.

Input și Output
I / O digitale: pini de la 0 la 53
Fiecare dintre cei 54 de caractere digitale de pe Datele poate fi folosit ca intrări sau ieșiri,
utilizând funcțiile pinMode (), digitalWrite () și digitalRead (). Acestea funcționează la 3,3 volți.
Fiecare pin poate furniza (sursă) un curent de 3 mA sau 15 mA, în funcție de pin sau să
primească (chiulasă) un curent de 6 mA sau 9 mA, în funcție de pin. De asemenea, au o
rezistență internă de tracțiune (deconectată în mod implicit) de 100 KOhm. În plus, unele pini au
funcții specializate:
 Serial: 0 (RX) și 1 (TX)
 Serial 1: 19 (RX) și 18 (TX)

80
 Serial 2: 17 (RX) și 16 (TX)
 Serial 3: 15 (RX) și 14 (TX) Folosit pentru a recepționa (RX) și a transmite (TX)
datele TTL serial (cu nivelul 3.3 V). Pinii 0 și 1 sunt conectați la pinii
corespunzători ai cipului ATmega16U2 USB-to-TTL Serial.
 PWM: Pini de la 2 la 13 Asigurați ieșirea PWM pe 8 biți cu funcția analogWrite
(). rezoluția PWM poate fi schimbată cu funcția analogWriteResolution ().
 SPI: antetul SPI (antetul ICSP pe alte plăci Arduino) Aceste știuleți suportă
comunicarea SPI utilizând biblioteca SPI. Pinii SPI sunt difuzați pe antetul central
cu 6 pini, care este compatibil fizic cu Uno, Leonardo și Mega2560. Antetul SPI
poate fi folosit numai pentru a comunica cu alte dispozitive SPI, nu pentru
programarea SAM3X cu tehnica de programare în serie. SPI a datoriei are, de
asemenea, caracteristici avansate care pot fi utilizate cu metodele Extended SPI
pentru Due.
 CAN: CANRX și CANTX Aceste pini acceptă protocolul de comunicație CAN,
dar nu sunt încă acceptate de API-urile Arduino.
 LED-ul "L": 13 Există un LED încorporat conectat la pinul digital 13. Când pinul
este HIGH, LED-ul este pornit, când pinul este LOW, este oprit. De asemenea,
este posibil să se diminueze LED-ul deoarece pinul digital 13 este de asemenea o
ieșire PWM.
 TWI 1: 20 (SDA) și 21 (SCL)
 TWI 2: SDA1 și SCL1. Suportă comunicarea TWI folosind biblioteca Wire.
SDA1 și SCL1 pot fi controlate utilizând clasa Wire1 furnizată de biblioteca
Wire. În timp ce SDA și SCL au rezistențe pullup interne, SDA1 și SCL1 nu au.
Adăugarea a două rezistențe pullup pe liniile SDA1 și SCL1 este necesară pentru
utilizarea Wire1.
 Intrări analogice: pinii de la A0 la A11 Datorită are 12 intrări analogice, fiecare
dintre acestea putând oferi 12 biți de rezoluție (adică 4096 valori diferite).
Implicit, rezoluția citirilor este setată la 10 biți, pentru compatibilitatea cu alte
plăci Arduino. Este posibil să modificați rezoluția ADC cu
analogalogReadResolution (). Intrările analogice ale lui Due au măsurat pinii de la

81
sol la o valoare maximă de 3.3V. Aplicând mai mult de 3.3V pe pinii lui Due va
afecta chipul SAM3X. Funcția analogReference () este ignorată pe funcția Due.
 DAC1 și DAC2 Aceste pini oferă ieșiri analogice reale cu rezoluție de 12 biți
(4096 nivele) cu funcția analogWrite (). Acești pini pot fi utilizați pentru a crea o
ieșire audio utilizând biblioteca audio.
 AREF Tensiune de referință pentru intrările analogice. Folosit cu analogReference
().
 Resetare Aduceți această linie LOW pentru a reseta microcontrolerul. În mod
obișnuit, pentru a adăuga un buton de resetare la scuturile care blochează cel de
pe placă.
Rețineți că domeniul de ieșire DAC este de fapt de la numai 0.55 V până la 2.75 V.

3.1.2. Instrucțiuni
Comunicația
Arduino Due dispune de o serie de facilități pentru a comunica cu un calculator, cu un alt
dispozitiv Arduino sau cu alte microcontrolere și cu diferite dispozitive cum ar fi telefoane,
tablete, camere de luat vederi și așa mai departe. SAM3X oferă un UART hardware și trei
USART-uri hardware pentru comunicarea serială TTL (3.3V).
Portul de programare este conectat la un ATmega16U2, care oferă un port COM virtual
pentru software pe un computer conectat (Pentru a recunoaște dispozitivul, mașinile Windows
vor avea nevoie de un fișier .inf, dar sistemele OSX și Linux vor recunoaște placa ca port COM
). De asemenea, 16U2 este conectat la UART hardware SAM3X. Serial pe pinii RX0 și TX0
oferă comunicații Serial-USB pentru programarea plăcii prin intermediul microcontrolerului
ATmega16U2. Software-ul Arduino include un monitor serial care permite trimiterea de date
textuale simple la și de la bord. LED-urile RX și TX de pe placă vor clipi când datele sunt
transmise prin intermediul cipului ATmega16U2 și conexiunii USB la computer (dar nu și pentru
comunicarea serială pe pinii 0 și 1).
Portul USB nativ este conectat la SAM3X. Permite comunicarea serial (CDC) prin USB.
Aceasta oferă o conexiune serială la monitorul serial sau la alte aplicații de pe computer. De

82
asemenea, permite opțiunea Datorită emulării unui mouse sau a unei tastaturi USB pe un
computer atașat. Pentru a utiliza aceste funcții, consultați paginile de referință ale bibliotecii
Mouse și tastatură. Portul USB nativ poate acționa și ca gazdă USB pentru periferice conectate,
cum ar fi șoareci, tastaturi și smartphone-uri. Pentru a utiliza aceste funcții, consultați paginile de
referință USBHost.
SAM3X suportă, de asemenea, comunicarea TWI și SPI. Software-ul Arduino include o
bibliotecă Wire pentru simplificarea utilizării magistralei TWI; consultați documentația pentru
detalii. Pentru comunicarea SPI, utilizați biblioteca SPI.

Programarea
Programul Due poate fi programat cu software-ul Arduino Arduino (IDE). Pentru detalii,
consultați referințele și tutorialele. Încărcarea schițelor la SAM3X este diferită de
microcontrolerele AVR găsite în alte plăci Arduino, deoarece memoria flash trebuie șters înainte
de a fi reprogramată. Încărcarea în cip este gestionată de ROM pe SAM3X, care se execută
numai atunci când memoria flash a cipului este goală.
Fiecare dintre porturile USB poate fi folosit pentru programarea plăcii, deși se recomandă
utilizarea portului de programare datorită modului de ștergere a cipului:
 Port de programare: Pentru a utiliza acest port, selectați "Arduino Due
(ProgrammingPort)" ca placă în ID-ul Arduino. Conectați portul de programare
Due (cel mai apropiat de mufa de alimentare DC) la computer. Portul de
programare utilizează 16U2 ca un cip USB-serial conectat la primul UART al
SAM3X (RX0 și TX0). Unitatea 16U2 are doi pini conectați la pinii de resetare și
ștergere ai dispozitivului SAM3X. Deschiderea și închiderea portului de
programare conectat la 1200 bps declanșează o procedură "de ștergere" a chipului
SAM3X, activând pinii Erase și Reset pe SAM3X înainte de a comunica cu
UART. Acesta este portul recomandat pentru programarea funcției Due. Este mai
de încredere decât "ștergerea soft" care apare pe portul Native și ar trebui să
funcționeze chiar dacă MCU-ul principal sa prăbușit.
 Port nativ: Pentru a utiliza acest port, selectați "Arduino Due (NativeUSBPort)" ca
placă în ID-ul Arduino. Portul USB nativ este conectat direct la SAM3X.
Conectați portul Nativ USB de la Due (cel mai apropiat de butonul de resetare) la

83
computer. Deschiderea și închiderea portului nativ la 1200 bps declanșează o
procedură de "ștergere soft": memoria flash este ștersă și placa este repornit cu
încărcătorul de boot. Dacă MCU sa prăbușit din anumite motive, este probabil ca
procedura de ștergere soft să nu funcționeze deoarece această procedură se
întâmplă în întregime în software-ul de pe SAM3X. Deschiderea și închiderea
portului nativ la un alt baudrate nu va reseta SAM3X.

Spre deosebire de alte plăci Arduino care utilizează avrdude pentru încărcare, Datele se
bazează pe bossac. Codul sursă firmware ATmega16U2 este disponibil în depozitul Arduino.
Puteți utiliza antetul ISP cu un programator extern (suprascrierea aplicației de încărcare DFU).
Consultați acest tutorial pentru utilizatori pentru mai multe informații.

Protecție la supracurent USB

Arduino Due are o multifuză resetabilă care protejează porturile USB ale computerului de
pantaloni scurți și de supracurent. Deși majoritatea calculatoarelor oferă o protecție internă
proprie, siguranța oferă un strat suplimentar de protecție. Dacă pe portul USB este aplicată o
valoare mai mare de 500 mA, siguranța va rupe automat conexiunea până când scurtcircuitul sau
suprasarcina vor fi eliminate.
Caracteristicile fizice și compatibilitatea shieldului
Lungimea și lățimea maximă a PCB-ului Arduino Due sunt de 4 și respectiv 2,1 inci, iar
conectorii USB și mufa de alimentare se extind dincolo de dimensiunea anterioară. Trei găuri de
șuruburi permit placa să fie atașată la o suprafață sau la o carcasă. Rețineți că distanța dintre
știfturile digitale 7 și 8 este de 160 mil (0.16 "), nu este un multiplu uniform din distanța de 100
de milimetri a celorlalți. Arduino Due este proiectat să fie compatibil cu majoritatea scuturilor
proiectate pentru Uno, Diecimila sau Duemilanove.Picurile digitale de la 0 la 13 (și pinii AREF
adiacenți și GND adiacenți), intrările analogice 0 la 5, antetul de alimentare și antetul "ICSP"
(SPI) sunt toate în locații echivalente. (0 și 1). Vă rugăm să rețineți că I2C nu este localizat pe
aceleași capete de pe Datele (20 și 21) ca Duemilanove / Diecimila (intrări analogice 4 și 5).
Atenție: Spre deosebire de majoritatea plăcilor Arduino, placa Arduino Due rulează la 3.3V.
Tensiunea maximă pe care pinii I / O poate tolera este de 3.3V. Aplicarea tensiunilor mai mari de
3.3V la orice pin de intrare / ieșire ar putea deteriora placa.

84
3.4. ARDUINO MEGA 2560
3.5.1. Caracteristici tehnice
Prezentare generală
Arduino Mega 2560 este o placă de microcontrolere bazată pe ATmega2560 (foaie de date). Are
54 intrări / ieșiri digitale pini (dintre care 14 pot fi utilizați ca ieșiri PWM), 16 intrări analogice, 4
UART s (porturi seriale hardware), un cristal de 16 MHz oscilator, o conexiune USB, o mufă de
alimentare, un antet ICSP și un buton de resetare. Conține tot ce este necesar pentru a vă sprijini
microcontrolerul; pur și simplu conectați-l la un computer cu un cablu USB sau alimentați-l cu
un adaptor AC-to-DC sau o baterie incepe. Me Mega este compatibil cu majoritatea scuturilor
proiectate pentru Arduino Duemilanove sau Diecimila.
Mega 2560 este o actualizare a Arduino Mega, pe care o înlocuiește.
Mega2560 diferă de toate plăcile anterioare prin faptul că nu utilizează chip-ul FT DI USB-to-
serial. În schimb, asta include ATmega16U2 (ATmega8U2 în placile de revizuire 1 și revizuire
2) programate ca USB-to-serial convertor. Revizia 2 a plăcii Mega2560 are un rezistor care trage
linia HWB 8U2 la sol, făcând mai ușor să se pună în DFU Mod.
Revizia 3 a boardului are următoarele caracteristici noi:
 1.0 pinout: au fost adăugați pinii SDA și SCL care se află în apropierea pinului AREF și
alți doi pini noi plasați în apropierea pinului RESET, IOREF care permite ecranelor să se
adapteze la tensiunea furnizată de placă. In viitor, scuturile vor fi compatibile atat cu
placa care utilizeaza AVR, care functioneaza cu 5V cat si cu Arduino Due care
functioneaza cu 30/10/2012 Ar duino - Ar duinoBoar dM ega2560 ar duo. cc / ro / Main /
Ar duinoBoar dMega2560 2/4 3.3V. Cel de-al doilea este un bolț ne-conectat, care este
rezervat pentru scopuri viitoare.
 Circuit RESET mai puternic.
 Atmega 16U2 înlocuiește 8U2.

85
Specificații

86
Alimentarea
Arduino Mega poate fi alimentat prin conexiunea USB sau cu o sursă externă de
alimentare. Sursa de alimentare este selectată automat. Puterea externă (non-USB) poate proveni
de la un adaptor AC-to-DC (perete-wart) sau de la o baterie. Adaptorul poate fi conectat prin
conectarea unui conector central pozitiv de 2,1 mm în mufa de alimentare a plăcii. Conductoarele
din baterie pot fi introduse în anteturile GND și Vin ale conectorului POWER. Placa poate
funcționa pe o sursă externă de 6 până la 20 de volți. Dacă este furnizat cu mai puțin de 7V, pinul
5V poate furniza mai puțin de 5 volți, iar placa poate deveni instabilă. Dacă se utilizează mai
mult de 12V, regulatorul de tensiune se poate supraîncălzi și poate deteriora placa. Intervalul
recomandat este de la 7 la 12 volți.
Pinii de alimentare sunt după cum urmează:
 Vin. Tensiunea de intrare pe placă când utilizează o sursă de alimentare externă
(spre deosebire de 5 volți de la conexiunea USB sau de la altă sursă de alimentare
reglată). Puteți furniza tensiune prin acest pin sau, dacă furnizați tensiune prin
mufa de alimentare, accesați-l prin acest pin.
 5V. Acest pin scoate un regulat 5V de la regulatorul de pe placa. Placa poate fi
alimentată de la mufa de alimentare DC (7 - 12V), conectorul USB (5V) sau pinul

87
VIN al plăcii (7-12V). Tensiunea de alimentare prin pinii de 5 V sau 3,3 V
ocolește regulatorul și vă poate deteriora bordul. Nu ne sfătuim.
 3V3. O alimentare de 3,3 volți generată de regulatorul de la bord. Rezistența
curentului maxim este de 50 mA.
 Pinul GROUND
 IOREF. Acest pin pe placă furnizează referința de tensiune cu care funcționează
microcontrolerul. Un scut configurat corespunzător poate citi tensiunea de pin
IOREF și poate selecta sursa de alimentare adecvată sau poate activa traducătorii
de tensiune pe ieșiri pentru a lucra cu 5V sau 3,3V.

Memoria
ATmega2560 dispune de memorie flash de 256 KB pentru stocarea codului (8 KB de SRAM) și
8 KB de EEPROM (care poate fi citit și scris cu biblioteca EEPROM).
Input și Output
Fiecare dintre cele 54 de caractere digitale de pe Mega poate fi folosit ca intrare sau
ieșire, utilizând funcțiile pinMode (), digitalWrite () și digitalRead (). Acestea funcționează la 5
volți. Fiecare pin poate furniza sau recepționa 20 mA ca condiție de funcționare recomandată și
are un rezistor intern de tracțiune (deconectat în mod implicit) de 20-50 k ohm. Un maxim de 40
mA este valoarea care nu trebuie depășită pentru a evita deteriorarea permanentă a
microcontrolerului.
În plus, unii pini au funcții specializate:
 Serial: 0 (RX) și 1 (TX); Serial 1: 19 (RX) și 18 (TX); Serial 2: 17 (RX) și 16 (TX);
Serial 3: 15 (RX) și 14 (TX). Folosit pentru a primi (RX) și a transmite (TX) date TTL
seriale. Pinii 0 și 1 sunt de asemenea conectați la pinii corespunzători ai cipului
ATmega16U2 USB-to-TTL Serial.
 Interferențe externe: 2 (întrerupere 0), 3 (întrerupere 1), 18 (întrerupere 5), 19 (întrerupere
4), 20 (întrerupere 3) și 21 (întrerupere 2). Acești pini pot fi configurați pentru a declanșa
o întrerupere la un nivel scăzut, o margine în creștere sau în scădere sau o schimbare a
nivelului. Consultați funcția attachInterrupt () pentru detalii.
 PWM: 2 până la 13 și 44 până la 46. Asigurați ieșirea PWM pe 8 biți cu funcția
analogWrite ().

88
 SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). Acești pini acceptă comunicarea SPI
utilizând biblioteca SPI. Pinii SPI sunt difuzați și pe antetul ICSP, care este fizic
compatibil cu placile Arduino / Genuino Uno și tabelele vechi Duemilanove și Diecimila
Arduino.
 LED-ul: 13. Există un LED încorporat conectat la pinul digital 13. Când pinul este HIGH,
LED-ul este pornit, când pinul este LOW, este oprit.
 TWI: 20 (SDA) și 21 (SCL). Suportă comunicarea TWI folosind biblioteca Wire. Rețineți
că acești ace nu se află în aceeași locație ca și pinii TWI de pe vechile panouri
Duemilanove sau Diecimila Arduino.
Mega 2560 are 16 intrări analogice, fiecare furnizând 10 biți de rezoluție (adică 1024 valori
diferite). În mod implicit, acestea măsoară de la sol la 5 volți, deși este posibil să se schimbe
capătul superior al domeniului lor folosind funcția AREF pin și analogReference ().
Există și câțiva alți pini pe bord:
 AREF. Tensiunea de referință pentru intrările analogice. Folosit cu analogReference ().
 Reset. Aduceți această linie LOW pentru a reseta microcontrolerul. În mod obișnuit,
pentru a adăuga un buton de resetare la scuturile care blochează cel de pe placă.

3.1.2. Instrucțiuni
Comunicația
Placa Mega 2560 dispune de o serie de facilități pentru comunicarea cu un calculator, cu
o altă placă sau cu alte microcontrolere. ATmega2560 oferă patru UART-uri hardware pentru
comunicarea serială TTL (5V). Un ATmega16U2 (ATmega 8U2 pe placile de revizie 1 si revizie
2) pe canalele de bord unul dintre acestea prin USB si ofera un port virtual de comanda a
software-ului pe computer (Windows va avea nevoie de un fisier .inf, dar OSX si Linux
recunoaste automat placa ca un port COM.Alduino Software (IDE) include un monitor serial
care permite trimiterea de date textuale simple la si de la bord.De LED-uri RX si TX de pe bord
vor clipi atunci cand datele sunt transmise prin intermediul ATmega8U2 / ATmega16U2 cip și
conexiune USB la calculator (dar nu pentru comunicare serială pe pinii 0 și 1).

89
O bibliotecă SoftwareSerial permite comunicarea serială pe oricare dintre pinii mega
2560.
Mega 2560 suportă, de asemenea, comunicarea TWI și SPI. Software-ul Arduino (IDE)
include o bibliotecă Wire pentru simplificarea utilizării magistralei TWI, consultați documentația
pentru detalii. Pentru comunicarea SPI, utilizați biblioteca SPI.

Caracteristicile fizice și compatibilitatea shieldului


Lungimea și lățimea maximă a placilor Mega 2560 sunt de 4 și respectiv 2,1 inci, iar
conectorul USB și mufa de alimentare se extind dincolo de dimensiunea anterioară. Trei găuri de
șuruburi permit placa să fie atașată la o suprafață sau la o carcasă. Rețineți că distanța dintre
știfturile digitale 7 și 8 este de 160 mil (0,16 "), nu un multiplu uniform de distanțare de 100 mil.
Mega 2560 este conceput pentru a fi compatibil cu majoritatea scuturilor proiectate
pentru placile Uno si vechile tablouri Diecimila sau Duemilanove Arduino. Pini digital 0 la 13 (și
pinii AREF adiacenți și GND adiacenți), intrările analogice 0 la 5, antetul de alimentare și
antetul ICSP sunt toate în locații echivalente. Mai mult, principala UART (port serial) este
localizată pe aceleași pini (0 și 1), la fel ca și întreruperile externe 0 și 1 (pini 2 și respectiv 3).
SPI este disponibil prin antetul ICSP pe ambele plăci Mega 2560 și Duemilanove / Diecimila.
Rețineți că I2C nu se află pe aceleași plăcuțe de pe plăcile Mega 2560 (20 și 21) ca plăci
Duemilanove / Diecimila (intrări analogice 4 și 5).

Reset Automat
Mai degrabă decât necesită o apăsare fizică a butonului de resetare înainte de încărcare,
Mega 2560 este proiectat într-un mod care să permită resetarea acestuia prin software-ul care
rulează pe un computer conectat. Una dintre liniile de control al fluxului hardware (DTR) ale
ATmega8U2 este conectată la linia de resetare a ATmega2560 printr-un condensator de 100
nanofarad. Când această linie este afirmată (scăzută), linia de resetare scade suficient de mult
pentru a reseta cipul. Software-ul Arduino (IDE) utilizează această capacitate pentru a vă permite
să încărcați cod prin simpla apăsare a butonului de încărcare din mediul Arduino. Aceasta
înseamnă că bootloader-ul poate avea un interval de timp mai scurt, deoarece scăderea DTR
poate fi bine coordonată cu începutul încărcării.

90
Această configurație are alte implicații. Când placa Mega 2560 este conectată la un
computer care rulează Mac OS X sau Linux, acesta se resetează de fiecare dată când o conexiune
este făcută de la software (prin USB). Pentru următoarea jumătate de secundă, bootloaderul
rulează pe ATMega2560. Deși este programat să ignore datele incorecte (adică orice, în afară de
încărcarea unui nou cod), va intercepta primele câteva octeți de date trimise plăcii după
deschiderea unei conexiuni. Dacă o schiță care rulează pe placă primește o configurație unică sau
alte date la prima pornire, asigurați-vă că software-ul cu care comunică așteaptă o secundă după
deschiderea conexiunii și înainte de a trimite aceste date.
Placa Mega 2560 conține o urmă care poate fi tăiată pentru a dezactiva resetarea
automată. Plăcuțele de pe ambele părți ale traseului pot fi lipite împreună pentru a le reactiva.
Este etichetat cu "RESET-EN". De asemenea, este posibil să dezactivați resetarea automată
conectând un rezistor de 110 ohmi de la 5V la linia de resetare; a se vedea acest thread forum
pentru detalii.
Mega 2560 nu utilizează chip-ul FTDI USB-to-serial folosit în modelele anterioare. În
schimb, acesta oferă ATmega16U2 (ATmega8U2 în placile de revizie 1 și revizuire 2 Arduino)
programate ca convertoare USB-to-serial.
Revizia 2 a plăcii Mega 2560 are un rezistor care trage linia HWB 8U2 la masă, făcând
mai ușor introducerea în modul DFU.

Pericole
Mega 2560 are o polifuză resetabilă care protejează porturile USB ale computerului de
pantaloni scurți și supracurent. Deși majoritatea calculatoarelor oferă o protecție internă proprie,
siguranța oferă un strat suplimentar de protecție. Dacă pe portul USB este aplicată o valoare mai
mare de 500 mA, siguranța va rupe automat conexiunea până când scurtcircuitul sau suprasarcina
vor fi eliminate.

91
Cap. 4. Program software ARDUINO
4.1. STRUCTURA

Elementele codului Arduino (C++):

 SCHIȚĂ
o setup()
 Descriere - Funcția setup() este apelată când începe o schiță. Se utilizează
pentru a inițializa variabile, moduri de conectare, biblioteci etc. Funcția
setup() va funcționa o singură dată, după fiecare pornire sau resetare a plăcii
Arduino.
o loop()
 Descriere - După crearea funcției setup(), care inițializează și stabilește valorile
inițiale, funcția loop() face exact ceea ce sugerează numele acesteia și rulează
continuu în buclă, permițând programului să se schimbe și să răspundă. Se
utilizează pentru a controla în mod activ plăcuţa Arduino.

 STRUCTURI DE CONTROL
o break
 Descriere - Break este utilizată pentru a ieși dintr-un for, o buclă while sau
do…while, ocolind condiția de buclă normală. Este, de asemenea, utilizat
pentru a ieși dintr-o declarație switch case.
o continue
 Descriere - Instrucțiunea continue trece peste restul iterației curente a unei
bucle (for, while, sau do…while). Aceasta continuă verificând expresia
condiționată a buclei și continuând cu orice iterații ulterioare.
o while
 Descriere - O buclă în timp va continua și, infinit, până când expresia din
interiorul parantezei, () va deveni falsă. Ceva trebuie să schimbe variabila
testată, sau bucla în timp ce nu va ieși niciodată. Aceasta ar putea fi în codul
dvs., cum ar fi o variabilă incrementată sau o condiție externă, cum ar fi
testarea unui senzor.
 Sintaxa
while(condiţie){
// instrucţiuni
}
Condiția este o expresie booleană care este apreciată ca adevărată sau falsă
o do...while
 Descriere - Bucla do...while funcționează în același mod ca și bucla while, cu
excepția faptului că condiția este testată la sfârșitul buclei, astfel încât bucla
va rula întotdeauna cel puțin o dată.
 Sintaxa
do
{

92
// instrucţiuni
} while (conditiţie);
o if...else
 Descriere - Instrucțiunea if verifică o condiție și execută instrucțiunea de
procedură sau setul de instrucțiuni dacă condiția este "adevărată".
 Sintaxa
if (condiţie)
{
//instrucţiuni
}
o return
 Descriere - Termină o funcție și returnează o valoare de la o funcție la funcția
de apelare, dacă se doreşte.
 Sintaxa
return;
sau
return valoare; // ambele forme sunt valide
 Parametrii
valoare: orice tip de variabilă sau constantă
o switch...case
 Descriere - Ca și în cazul declarațiilor if, switch case controlează fluxul de
programe, permițând programatorilor să specifice cod diferit care ar trebui să
fie executat în diferite condiții. În particular, o declarație de comutare compară
valoarea unei variabile cu valorile specificate în instrucțiunile de caz. Atunci
când se găsește o instrucțiune de caz a cărei valoare se potrivește cu cea a
variabilei, se execută codul din acea instrucțiune.
Cuvântul cheie break iese din declarația de comutare și este folosit de obicei la
sfârșitul fiecărui caz. Fără o declarație break, instrucțiunea comutator va
continua să execute următoarele expresii ("fall-through") până când se ajunge
la o pauză sau la sfârșitul instrucțiunii switch.
 Sintaxa
switch (var) {
case eticheta1:
// instrucţiuni
break;
case eticheta2:
// instrucţiuni
break;
default:
// instrucţiuni
break;
}
 Parametrii
var: o variabilă a cărei valoare trebuie comparată cu diferite cazuri. Tipuri de
date permise: int, char
eticheta1, eticheta2: constante. Tipuri de date permise: int, char

93
o else
 Descriere – if…else permite un control mai mare asupra fluxului de cod decât
instrucțiunea de bază if, permițând mai multe teste să fie grupate împreună. O
clauză else (dacă există) va fi executată dacă condiția din instrucțiunea if are
drept rezultat false. Else poate proceda la un alt test if, astfel încât să se poată
executa simultan mai multe teste exclusive.
Fiecare test va continua până la următorul, până când se va întâmpina un test
al cărui rezultat este true. Când se găsește un test al cărui rezultat este true, se
rulează blocul de cod asociat și programul trece apoi pe linia care urmează
întregii construcții if / else. Dacă niciuna dintre teste nu se dovedește a fi
adevărată, se execută alt bloc implicit, dacă este prezent și se stabilește
comportamentul implicit.

 Sintaxa
if (condiţie1)
{
// fă lucrul A
}
else if (condiţie2)
{
// fă lucrul B
}
else
{
// fă lucrul C
}
o for
 Descriere - Instrucțiunea for este folosită pentru a repeta un bloc de
instrucţiuni închise acolade. Un contor de incrementare este de obicei folosit
pentru a incrementa și a termina bucla. Instrucțiunea pentru este utilă pentru
orice operație repetitivă și este adesea folosită în combinație cu tablourile
pentru a funcționa pe colecții de date / pini.
 Sintaxa
pentru (inițializare, condiție, increment) {
// declarația (e);
}
Inițializarea se face întâi și exact o dată. De fiecare dată prin bucle, condiția
este testată; dacă este adevărată, blocul de instrucțiuni este executat şi se
incrementează contorul, apoi condiția este testată din nou. Când condiția
devine falsă, se termină bucla.
o goto
 Descriere - Transferă fluxul programului către un punct etichetat din program.
 Sintaxa
eticheta:

94
goto eticheta; // trimite fluxul de programe la etichetă
 SINTAXĂ SUPLIMENTARĂ
o #define
 Descriere - #define este o componentă utilă C ++ care permite
programatorului să dea un nume unei valori constante înainte de compilarea
programului. Constantele definite în arduino nu ocupă nici un spațiu de
memorie programat pe chip. Compilatorul va înlocui referințele la aceste
constante cu valoarea definită la momentul compilării.
Acest lucru poate avea unele efecte secundare nedorite, deși, dacă, de
exemplu, un nume constant care a fost #defined este inclus în alt nume
constant sau variabil. În acest caz, textul va fi înlocuit cu numărul #definit
(sau textul). În general, cuvântul cheie const este preferat pentru definirea
constantelor și ar trebui folosit în loc de #define.
 Sintaxa
#define numeConstanta valoare

De reţinut că # este necesar.

o #include
 Descriere - #include este folosit pentru a include bibliotecile din afara în
schiță. Aceasta oferă programatorului acces la un grup mare de biblioteci
standard C (grupuri de funcții pre-făcute), precum și biblioteci scrise special
pentru Arduino.
De reţinut că # include, similar cu #define, nu are terminator punct și virgulă,
iar compilatorul va primi mesaje de eroare criptice dacă adăugați unul.
o /* */
 Descriere - Comentariile sunt linii din program care sunt folosite pentru a vă
informa pe dvs. sau pe alții despre modul în care funcționează programul.
Acestea sunt ignorate de către compilator și nu sunt exportate către procesor,
astfel încât să nu preia nici un spațiu în memoria flash a microcontrolerului.
Scopul "numai pentru comentarii" este să vă ajute să înțelegeți (sau să rețineți)
sau să îi informați pe ceilalți despre modul în care funcționează programul
dvs.
Începutul unui comentariu în bloc sau al unui comentariu cu mai multe linii
este marcat de simbolul / *, iar simbolul * / marchează sfârșitul acestuia.
Acest tip de comentariu este numit astfel încât acesta să se poată extinde pe
mai multe linii; odată ce compilatorul citește / * ignoră orice urmează după
unitatea pe care o prezintă un * /.
o // (slash dublu)
 Descriere - Un comentariu cu o singură linie începe cu // (două tăieturi
adiacente). Acest comentariu se termină automat la sfârșitul unei linii. Orice
urmează după // până la sfârșitul unei linii va fi ignorat de compilator.
o ; (punct şi virgulă)
 Descriere - Folosit pentru a încheia o instrucţiune.
o {}

95
 Descriere - Acoladele reprezintă o parte majoră a limbajului de programare C
++. Ele sunt folosite în câteva construcții diferite, iar acest lucru poate fi
uneori confuz pentru începători.
O acoladă deschisă {trebuie să fie întotdeauna urmată de o acoladă de
încheiere}. Aceasta este o condiție care este adesea menționată ca acoladele
fiind echilibrate. Arduino IDE (Mediu de Dezvoltare Integrat) include o
caracteristică convenabilă pentru a verifica echilibrul de acolade. Trebuie doar
să selectați o acoladă sau chiar să faceți clic pe punctul de inserție imediat
după o acoladă, iar companionul său logic va fi evidențiat.
Programatorii începători și programatorii care vin la C ++ din limbajul BASIC
găsesc adesea folosirea unor acolade confuză sau descurajantă. La urma
urmei, aceleași acolade înlocuiesc instrucţiunea RETURN într-o subrutină
(funcție), instrucțiunea ENDIF într-o condiție condițională și instrucțiunea
NEXT într-o buclă FOR.
Acoladele neechilibrate pot duce adesea la erori de compilare, uneori greu de
identificat într-un program mare. Datorită utilizărilor lor variate, acoladele
sunt, de asemenea, incredibil de importante pentru sintaxa unui program și
mutarea unei accolade cu una sau două linii afectează adesea în mod
semnificativ sensul unui program.

 OPERATORI ARITMETICI
o % (restul)
 Descriere - Operația de resturi calculează restul când un întreg este împărțit de
altul. Este utilă pentru păstrarea unei variabile într-un anumit interval (de
exemplu dimensiunea unei matrice). Simbolul % (procente) este utilizat
pentru a efectua operarea restului.
 Sintaxa
restul = numărător % numitor;
 Parametrii
restul: variabilă. Tipuri de date permise: int, float, double
deîmparţit: variabilă sau constantă. Tipuri de date permise: int
divizor: variabilă diferită de zero sau constantă. Tipuri de date permise: int
o * (înmulţire)
 Descriere - Înmulţirea este una dintre cele patru operații aritmetice primare.
Operatorul * (asterisc) funcționează pe doi operanzi pentru a face produsul.
 Sintaxa
produsul = operand1 * operand2;
 Parametrii
produs: variabilă. Tipuri de date permise: int, float, double, byte, short, long
operand1: variabilă sau constantă. Tipuri de date permise: int, float, double,
byte, short, long
operand2: variabilă sau constantă. Tipuri de date permise: int, float, double,
byte, short, long
o + (adunare)
 Descriere - Adăugarea este una dintre cele patru operații aritmetice primare.
Operatorul + (plus) operează pe doi operanzi pentru a produce suma lor.

96
 Sintaxa
suma = operand1 + operand2;
 Parametrii
suma: variablă. Tipuri de date permise: int, float, double, byte, short, long
operand1: variabilă sau constantă. Tipuri de date permise: int, float, double,
byte, short, long
operand2: variabilă sau constantă. Tipuri de date permise: int, float, double,
byte, short, long
o - (scădere)
 Descriere - Scăderea este una dintre cele patru operații aritmetice primare.
Operatorul - (minus) funcționează pe doi operanzi pentru a produce scăderea
celui de-al doilea din primul.
 Sintaxa
diferenţa = operand1 – operand2;
 Parametrii
diferența: variabilă. Tipuri de date permise: int, float, double, byte, short, long
operand1: variabilă sau constantă. Tipuri de date permise: int, float, double,
byte, short, long
operand2: variabilă sau constantă. Tipuri de date permise: int, float, double,
byte, short, long
o / (împărţire)
 Descriere - Împărţire este una dintre cele patru operații aritmetice primare.
Operatorul / (slash) funcționează pe doi operanzi pentru a produce câtul.
 Sintaxa
câtul = numărător / numitor
 Parametrii
câtul: variabilă. Tipuri de date permise: int, float, double, byte, short, long
numărător: variabilă sau constantă. Tipuri de date permise: int, float, double,
byte, short, long
numitor: variabilă sau constantă. Tipuri de date permise: int, float, double,
byte, short, long
o = (egal)
 Descriere - Un singur semn egal = în limbajul de programare C ++ se numește
operatorul de atribuire. Are un alt sens decât în clasa de algebră unde a indicat
o ecuație sau egalitate. Operatorul de atribuire spune microcontrolerului să
evalueze ce valoare sau expresie se află pe partea dreaptă a semnalului egal și
să îl stocheze în variabila din stânga semnului egal.

 OPERATORI DE COMPARARE
o != (nu este egal cu)
 Descriere - Compară variabila din stânga cu valoarea sau variabila din partea
dreaptă a operatorului. Returnează true când cei doi operanzi nu sunt egali.
Rețineți că puteți compara variabilele de tipuri diferite de date, dar care ar
putea genera rezultate imprevizibile, prin urmare, se recomandă compararea
variabilelor aceluiași tip de date, inclusiv tipul signed / unsigned.

97
 Sintaxa
x! = y; //este fals dacă x este egal cu y și este adevărat dacă x nu este egal cu y
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long
y: variabilă sau constantă. Tipuri de date permise: int, float, double, byte,
short, long
o < (mai mic ca)
 Descriere - Compară variabila din stânga cu valoarea sau variabila din partea
dreaptă a operatorului. Returneaza true cand operandul din stanga este mai
mic decat operandul din dreapta. Rețineți că puteți compara variabilele de
tipuri diferite de date, dar care ar putea genera rezultate imprevizibile, prin
urmare, se recomandă compararea variabilelor aceluiași tip de date, inclusiv
tipul signed / unsigned.
 Sintaxa
x < y; // este adevărat dacă x este mai mic decât y și este fals dacă x este egal
sau mai mare decât y
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long
y: variabilă sau constantă. Tipuri de date permise: int, float, double, byte,
short, long
o <= (mai mic sau egal ca)
 Descriere - Compară variabila din stânga cu valoarea sau variabila din partea
dreaptă a operatorului. Returnează adevărat când operandul din stânga este
mai mic decât sau egal cu operandul din dreapta. Rețineți că puteți compara
variabilele de tipuri diferite de date, dar care ar putea genera rezultate
imprevizibile, prin urmare, se recomandă compararea variabilelor aceluiași tip
de date, inclusiv tipul signed / unsigned.
 Sintaxa
x <= y; // este adevărat dacă x este mai mic sau egal decât y și este fals dacă x
este mai mare decăt y
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long
y: variabilă sau constantă. Tipuri de date permise: int, float, double, byte,
short, long
o == (egal dublu)
 Descriere - Compară variabila din stânga cu valoarea sau variabila din partea
dreaptă a operatorului. Returnează true când cei doi operanzi sunt egali.
Rețineți că puteți compara variabilele de tipuri diferite de date, dar care ar
putea genera rezultate imprevizibile, prin urmare, se recomandă compararea
variabilelor aceluiași tip de date, inclusiv tipul signed / unsigned.
 Sintaxa
x == y; //este adevărat dacă x este egal cu y și este fals dacă x nu este egal cu
y
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long

98
y: variabilă sau constantă. Tipuri de date permise: int, float, double, byte,
short, long
o > (mai mare ca)
 Descriere - Compară variabila din stânga cu valoarea sau variabila din partea
dreaptă a operatorului. Returnează adevărat atunci când operandul din stânga
este mai mare decât operandul din dreapta. Rețineți că puteți compara
variabilele de tipuri diferite de date, dar care ar putea genera rezultate
imprevizibile, prin urmare, se recomandă compararea variabilelor aceluiași tip
de date, inclusiv tipul signed / unsigned.
 Sintaxa
x> y; // este adevărat dacă x este mai mare decât y și este fals dacă x este egal
sau mai mic decât y
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long
y: variabilă sau constantă. Tipuri de date permise: int, float, double, byte,
short, long
o >= (mai mare sau egal ca)
 Descriere - Compară variabila din stânga cu valoarea sau variabila din partea
dreaptă a operatorului. Returneaza true cand operandul din stanga este mai
mare decat sau egal cu operandul din dreapta. Rețineți că puteți compara
variabilele de tipuri diferite de date, dar care ar putea genera rezultate
imprevizibile, prin urmare, se recomandă compararea variabilelor aceluiași tip
de date, inclusiv tipul signed / unsigned.
 Sintaxa
x> = y; // este adevărat dacă x este mai mare sau egal cu y și este fals dacă x
este mai mic decât y
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long
y: variabilă sau constantă. Tipuri de date permise: int, float, double, byte,
short, long

 OPERATORI BOOLEENI
o ! (NU logic)
 Descriere - NU logic are ca rezultat adevărat dacă operandul este fals și
invers.
o && (ŞI logic)
 Descriere - ŞI logic are ca rezultat adevărat dacă ambii operanzi sunt
adevăraţi.
o || (SAU logic)
 Descriere - SAU logic are ca rezultat adevărat dacă unul dintre operanzi este
adevărat.

 OPERATORI PENTRU POINTERI


o & (operatorul pentru referinţă)

99
 Descriere - Operatorul pentru referinţă este una dintre caracteristicile specifice
pentru utilizare a pointerilor. Operatorul ampersand & este folosit în acest
scop. Dacă x este o variabilă, atunci &x reprezintă adresa variabilei x.
o * (operatorul pentru dereferinţă)
 Descriere - Operatorul pentru dereferinţă este una dintre caracteristicile
specifice pentru utilizarea cu pointeri. Operatorul asterisc * este utilizat în
acest scop. Dacă p este un pointer, atunci *p reprezintă valoarea conținută în
adresa indicată de p.

 OPERATORI PENTRU BIŢI


o & (ŞI între biţi)
 Descriere - Operatorul de biți ŞI în C ++ este un singur ampersand &, folosit
între două alte expresii întregi. Instrumentul ŞI pe biţi funcționează
independent pe fiecare poziție de biți a expresiilor înconjurătoare, în
conformitate cu această regulă: dacă ambii biți de intrare sunt 1, rezultatul
rezultat este 1, altfel ieșirea este 0.
o | (SAU între biţi)
 Descriere - Operatorul de biți SAU din C ++ este simbolul bara verticală, |.
Instrumentul ŞI pe biţi funcționează independent pe fiecare poziție de biți a
expresiilor înconjurătoare, în conformitate cu această regulă: rezultatul este 0
dacă ambii biţi sunt 0, altfel rezultatul este 1
o ^ (SAU EXCLUSIV între biţi)
 Descriere - Există un operator oarecum neobișnuit în C ++ numit SAU
EXCLISUV pe biţi, cunoscut și ca XOR. Operatorul XOR în biți este scris
folosind simbolul ^. O operație XOR pe biți are ca rezultat 1 numai dacă biții
de intrare sunt diferiți, altfel rezultă o valoare 0.
o ~ (NU pe biţi)
 Descriere - Operatorul NU pe biţi în C ++ este caracterul tilda ~. NU pe biţi
modifică fiecare bit la opusul său: 0 devine 1 și 1 devine 0.
o << (deplasare biţi spre stânga)
 Descriere - Operatorul de deplasare spre stânga << determină ca biții
operandului stâng să fie deplasați la stânga cu numărul de poziții specificate
de către operandul drept.
 Sintaxa
variabilă << număr_de_biţi;
 Parametrii
variabilă: Tipuri de date permise: byte, int, long
număr_de_biţi: un număr care este <= 32. Tipuri de date permise: int
o >> (deplasare biţi spre stânga)
 Descriere - Operatorul de deplasare spre dreapta >> determină ca biții
operandului stâng să fie deplasați la dreapta cu numărul de poziții specificate
de către operandul drept.
 Sintaxa
variabilă >> număr_de_biţi;
 Parametrii
variabilă: Tipuri de date permise: byte, int, long

100
număr_de_biţi: un număr care este <= 32. Tipuri de date permise: int

 OPERATORI COMPUŞI
o &= (ŞI pe biţi compus)
 Descriere - Operatorul compus ŞI pe biţi &= este adesea folosit cu o variabilă
și constantă pentru a forța anumiţi biți într-o variabilă la starea LOW (la 0).
Acest lucru este deseori menționat în ghidurile de programare ca biți "de
compensare" sau "resetare".
 Sintaxa
x &= y; // echivalent cu x = x & y;
 Parametrii
x: variabiă. Tipuri de date permise: char, int, long
y: variabiă sau constantă. Tipuri de date permise: char, int, long
o *= (înmulţire compusă)
 Descriere - Aceasta este o scurtătură convenabilă pentru a efectua
multiplicarea unei variabile cu o altă constantă sau variabilă.
 Sintaxa
x *= y; // echivalent cu expresia x = x * y;
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long
y: variabilă sau constantă. Tipuri de date permise: int, float, double, byte,
short, long
o ++ (incrementare)
 Descriere - Increments the value of a variable by 1.
 Sintaxa
x ++; // incrementează x cu 1 și returnează vechea valoare a lui x
++ x; // incrementează x cu 1 și returnează noua valoare a lui x
 Parametrii
x: variabilă. Tipuri de date permise: integer, long (posibil unsigned)
 Returnează
Valoarea originală sau recent incrementată a variabilei.
o += (adunare compusă)
 Descriere - Aceasta este o scurtătură convenabilă pentru a efectua adunarea
unei variabile cu altă constantă sau variabilă.
 Sintaxa
x + = y; // echivalent cu expresia x = x + y;
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long
y: variabilă sau constantă. Tipuri de date permise: int, float, double, byte,
short, long
o -- (decrementare)
 Descriere - Decrește valoarea unei variabile cu 1.
 Sintaxa
x-- ; // decrementează x cu 1 și returnează vechea valoare a lui x
--x ; // decrementează x cu 1 și returnează noua valoare a lui x
 Parametrii

101
x: variabilă. Tipuri de date permise: integer, long (posibil unsigned)
 Returnează
Valoarea originală sau recent incrementată a variabilei.
o -= (scădere compusă)
 Descriere - Aceasta este o scurtătură convenabilă pentru a efectua scăderea
unei variabile sau constante dintr-o variabilă.
 Sintaxa
x - = y; // echivalent cu expresia x = x - y;
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long
y: variabilă sau constantă. Tipuri de date permise: int, float, double, byte,
short, long
o /= (împărţire compusă)
 Descriere - Aceasta este o scurtătură convenabilă pentru a efectua împărţirea
unei variabile cu o altă constantă sau variabilă.
 Sintaxa
x /= y; // echivalent cu expresia x = x / y;
 Parametrii
x: variabilă. Tipuri de date permise: int, float, double, byte, short, long
y: variabilă sau constantă diferită de zero. Tipuri de date permise: int, float,
double, byte, short, long
o ^= (SAU EXCLISIV pe biţi compus)
 Descriere - Operatorul compus SAU EXCLISIV (XOR) ^ = este adesea folosit
cu o variabilă și o constantă pentru a comuta (inversa) anumiţi biți într-o
variabilă.
 Sintaxa
x ^= y; // echivalent cu x = x ^ y;
 Parametrii
x: variabilă. Tipuri de date permise: char, int, long
y: variabilă sau constantă. Tipuri de date permise: char, int, long
o |= (SAU pe biţi compus)
 Descriere - Operatorul compus SAU pe biţi | = este adesea folosit cu o
variabilă și o constantă pentru a "seta" (seta la 1) biți speciali într-o variabilă.
 Sintaxa
x |= y; // echivalent cu x = x | y;
 Parametrii
x: variabilă. Tipuri de date permise: char, int, long
y: variabilă sau constantă. Tipuri de date permise: char, int, long

4.2. VARIABILE

Tipuri de date arduino şi constante.


 CONSTANTE
o Constante cu virgulă mobilă
 Descriere - Similar cu constantele întregi, constantele cu virgulă mobilă sunt
folosite pentru a face codul mai lizibil. Constantele cu virgulă mobilă sunt

102
schimbate la momentul compilării pentru valoarea la care se evaluează
expresia.
o Constante întregi
 Descriere - Constantele întregi sunt numere care sunt folosite direct într-o
schiță, ca 123. În mod normal, constantele întregi sunt tratate ca numere de
bază 10 (zecimale), dar notația specială (formatori) poate fi utilizată pentru a
introduce numere în alte baze.
 Zecimal (baza 10)
 Descriere - Acesta este matematica obișnuită pe care o cunoașteți.
Constantele fără alte prefixe se presupun a fi în format zecimal.
 Binar (baza 2)
 Descriere - Doar caracterele 0 şi 1 sunt valide.
 Octal (baza 8)
 Descriere - Numai caracterele de la 0 la 7 sunt valide. Valorile octale
sunt indicate prin prefixul "0" (zero).
 Hexazecimal (baza 16)
 Descriere - Caracterele valide sunt de la 0 la 9 și literele A până la F;
A are valoarea 10, B este 11, până la F, care este 15. Valorile
hexazecimale sunt indicate prin prefixul "0x".
o Definirea nivelelor logice: true şi false (constante booleene)
 Descriere - Există două constante folosite pentru a reprezenta adevărul și falsitatea în
limbajul Arduino: true şi false.
 false - false este cel mai ușor de definit dintre cei doi. false este definit ca 0
(zero).
 true - true se spune adesea că este definit ca 1, care este corect, dar true are o
definiție mai largă. Orice număr întreg care nu este zero este true, într-un
sens boolean. Deci, -1, 2 și -200 sunt toate definite ca și adevărate, într-un
sens boolean.
Rețineți că constantele true și false sunt tipărite în litere mici, spre deosebire
de HIGH, LOW, INPUT și OUTPUT.
o Definirea nivelelor pinilor: HIGH și LOW
 Descriere - Când citiți sau scrieți pe un pin digital, există doar două valori posibile pe
care un pin poate lua / se poate seta: HIGH și LOW.
 HIGH
Semnificația HIGH (cu referire la un pin) este oarecum diferită în funcție de faptul dacă
un pin este setat la un INPUT sau OUTPUT. Când un pin este configurat ca INPUT cu
pinMode () și citit cu digitalRead (), Arduino (ATmega) va raporta HIGH dacă:
 tensiune mai mare decât 3.0V este prezentă la pin (plăci de 5V)
 tensiune mai mare de 2.0V volți este prezentă la pin (plăci de 3.3V)
Un pin poate fi, de asemenea, configurat ca INPUT cu pinMode (), și ulterior făcut HIGH
cu digitalWrite (). Acest lucru va permite rezistențele interne de atragere de 20K, care vor
scoate pinul de intrare la o citire HIGH dacă nu este tras LOW de circuitele externe.
Acest lucru se poate face alternativ prin trecerea INPUT_PULLUP ca argument în funcţia
pinMode (), după cum este explicat mai detaliat în secţiunea "Definirea modurilor digitale
ale pinilor: INPUT, INPUT_PULLUP și OUTPUT" de mai jos.
Când un pin este configurat pentru OUTPUT cu pinMode () și setat la HIGH cu
digitalWrite (), pinul este la:
 5 volți (plăci 5V)

103
 3.3 volți (plăci 3.3V)
În această stare poate furniza curent, de ex. luminează un LED care este conectat printr-o
rezistență serie la masă.
 LOW
Semnificația LOW are de asemenea o semnificație diferită, în funcție de faptul dacă un
pin este setat la INPUT sau OUTPUT. Când un pin este configurat ca INPUT cu
pinMode () și citit cu digitalRead (), Arduino (ATmega) va raporta LOW dacă:
 tensiune mai mică de 1,5V este prezentă la pin (panouri 5V)
 tensiune mai mică de 1,0V (Aproximativ) este prezentă la pin (plăci de 3.3V)
Când un pin este configurat pentru OUTPUT cu pinMode () și setat la LOW cu
digitalWrite (), pinul este la 0 volți (ambele plăci de 5V și 3.3V). În această stare se poate
scufunda curent, de ex. luminează un LED care este conectat printr-o serie rezistor la +5
volți (sau +3.3 volți).
o Definirea modurilor digitale ale pinilor: INPUT, INPUT_PULLUP și OUTPUT
Pinii digitali pot fi utilizați ca INPUT, INPUT_PULLUP sau OUTPUT. Schimbarea
unui pin cu pinMode () modifică comportamentul electric al pinului.
 Pini configuraţi ca INPUT
Pinii Arduino (ATmega) configuraţi ca INPUT cu pinMode () se spune că se
află într-o stare de înaltă impedanță. Pini configurați ca INPUT fac cerințe
extrem de mici pe circuitul pe care îl prelevă, echivalent cu un rezistor de
serie de 100 Megohmi în fața pinului. Acest lucru le face utile pentru citirea
unui senzor.
Dacă aveți pinul configurat ca INPUT și citiți un comutator, atunci când
comutatorul este în stare deschisă, pinul de intrare va fi "plutitor", rezultând
rezultate imprevizibile. Pentru a asigura o citire adecvată atunci când
comutatorul este deschis, trebuie folosit un rezistor de tracțiune sau retragere.
Scopul acestui rezistor este de a trage pinul într-o stare cunoscută când
comutatorul este deschis. Este de obicei ales un rezistor de 10 ohmi, deoarece
este o valoare suficient de scăzută pentru a preveni în mod fiabil o intrare
plutitoare și, în același timp, o valoare suficient de mare pentru a nu atrage
prea mult curent atunci când comutatorul este închis. Consultați secțiunea de
citire digitală pentru mai multe informații.
Dacă se folosește un rezistor retractabil (pull-down), pinul de intrare va fi
LOW când comutatorul este deschis și HIGH când întrerupătorul este închis.
Dacă este folosit un rezistor de tracțiune (pull-up), pinul de intrare va fi HIGH
când comutatorul este deschis și LOW când întrerupătorul este închis.
 Pini configuraţi ca INPUT_PULLUP
Microcontrolerul ATmega de pe Arduino are rezistențe interne de tracțiune
(rezistențe care se conectează la putere intern) pe care le puteți accesa. Dacă
preferați să utilizați aceste rezistențe în locul rezistențelor externe, puteți
utiliza argumentul INPUT_PULLUP în pinMode ().
Pinii configurați ca intrări cu INPUT sau INPUT_PULLUP pot fi deteriorați
sau distruși dacă sunt conectați la tensiuni sub tensiune (tensiuni negative) sau
deasupra șinei de putere pozitivă (5V sau 3V).
 Pini configuraţi ca OUTPUT
Pini configurați ca OUTPUT cu pinMode () se spune că se află într-o stare de
impedanță redusă. Aceasta înseamnă că pot furniza o cantitate substanțială de

104
curent altor circuite. Conectorii ATmega pot furniza curent sau pot absorbi
până la 40 mA (milliamps) de curent la alte dispozitive / circuite. Acest lucru
le face utile pentru alimentarea LED-urilor, deoarece LED-urile utilizează de
obicei mai puțin de 40 mA. Încărcări mai mari de 40 mA (de exemplu,
motoare) vor necesita un circuit tranzistor sau altă interfață.
Pinii configurați ca ieșiri pot fi deteriorați sau distruși dacă sunt conectați fie
la sol, fie la șine de putere pozitive.
o Definirea modulelor încorporate: LED_BUILTIN
Cele mai multe plăci Arduino au un pin conectat la un LED de bord în serie cu
un rezistor. Condiția LED_BUILTIN este numărul pinului la care este
conectat LED-ul de bord. Cele mai multe plăci au acest LED conectat la pinul
digital 13.
 CONVERSIE
o byte()
 Descriere - Convertește o valoare la tipul de date octet.
 Sintaxa
byte(x)
 Parametrii
x: o valoare de orice tip
 Returnează - byte
o char()
 Descriere - Convertește o valoare la tipul de date caracter.
 Sintaxa
char(x)
 Parametrii
x: o valoare de orice tip
 Returnează - char
o float()
 Descriere - Convertește o valoare la tipul de date număr cu virgulă mobilă.
 Sintaxa
float(x)
 Parametrii
x: o valoare de orice tip
 Returnează - float
o int()
 Descriere - Convertește o valoare la tipul de date număr întreg.
 Sintaxa
int(x)
 Parametrii
x: o valoare de orice tip
 Returnează - int
o long()
 Descriere - Convertește o valoare la tipul de date număr lung.
 Sintaxa
long(x)
 Parametrii

105
x: o valoare de orice tip
 Returnează - long
o word()
 Descriere - Convertește o valoare la tipul de date cuvânt.
 Sintaxa
word(x)
word(h, l)
 Parametrii
x: o valoare de orice tip
h: octetul semnificativ (cel mai din stânga) al cuvântului
l: octetul nesemnificativ (cel mai din dreapta) al cuvântului
 Returnează - word

 TIPURI DE DATE
o String
 Descriere - Construiește o instanță a clasei String. Există mai multe versiuni
care construiesc șiruri din diferite tipuri de date (adică formate ca secvențe de
caractere), inclusiv:
 un șir constant de caractere, în ghilimele duble (adică o matrice de
caractere)
 un singur caracter constant, în ghilimele simple
 o altă instanță a obiectului String
 un număr întreg constant sau un întreg lung
 un număr întreg constant sau un întreg lung, folosind o bază
specificată
 o variabilă de tip întreg sau întreg lung
 o variabilă de tip întreg sau întreg lung, folosind o bază specificată
 un număr cu virgulă mobilă sau dublu, utilizând o zecimală specificată
 Sintaxa
String (val)
String (val, bază)
String (val, zecimale)
 Parametrii
val: o variabila pentru a forma ca String - Tipuri de date permise: string, char,
byte, int, long, unsigned int, unsigned long, float, double
bază (opțional): baza în care să se formateze o valoare integrală
zecimale (numai dacă val este float sau double): zecimalele dorite
 Returnează
O instanţă a clasei String.
o array
 Descriere - O matrice este o colecție de variabile care sunt accesate cu un
număr de index.
 Crearea (declararea) unei matrice - Toate metodele de mai jos sunt metode
valide de a crea (declara) un tablou.
int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};

106
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";
Puteți declara o matrice fără a o inițializa ca în cazul myInts.
În myPins, declarăm o matrice fără a alege în mod explicit o dimensiune.
Compilatorul numără elementele și creează o matrice de dimensiune
corespunzătoare.
În cele din urmă, puteți inițializa și dimensiona matricea, la fel ca în
mySensVals. Rețineți că atunci când declarați o matrice de tip char, este
necesar un element suplimentar decât inițializarea, pentru a ține caracterul nul
necesar.
 Accesarea unei matrice
Matricile sunt indexate zero, adică, referindu-se la inițializarea matricei de
mai sus, primul element al matricei este la indexul 0, deci mySensVals [0] ==
2, mySensVals [1] == 4, și așa mai departe.
De asemenea, înseamnă că într-o matrice cu zece elemente, indexul 9 este
ultimul element. De aici:
int myArray [10] = {9,3,2,4,3,2,7,8,9,11};
// myArray[9] conține 11
// myArray[10] este nevalid și conține informații aleatoare (altă adresă de
memorie)
Din acest motiv, ar trebui să fiți atenți la accesarea matricelor. Accesarea la
sfârșitul unui tablou (folosind un număr de index mai mare decât dimensiunea
matricei declarată - 1) este citirea din memoria care este utilizată în alte
scopuri. Citirea din aceste locații probabil că nu va face prea mult, cu excepția
datelor nevalabile privind randamentul. Scrierea în locațiile de memorie
aleatoare este cu siguranță o idee proastă și poate duce adesea la rezultate
nefericite, cum ar fi accidentele sau defecțiunile programelor. Aceasta poate fi
și o problemă dificilă de urmărit.
 Pentru a atribui o valoare unei matrice:
mySensVals[0] = 10;
 Pentru a prelua o valoare dintr-o matrice:
x = mySensVals[4];
 Matricele şi buclele FOR
Matricele sunt adesea manipulate în interiorul buclelor, unde contorul de
bucla este folosit ca index pentru fiecare element de matrice. De exemplu,
pentru a transmite elementele unui matrice pe portul serial, puteți face ceva de
genul:
int i;
for (i = 0; i < 5; i = i + 1) {
Serial.println(myPins[i]);
}
o bool
 Descriere - Un bool deține una din cele două valori, adevărată sau falsă.
(Fiecare variabilă bool ocupă un octet de memorie.)
o boolean

107
 Descriere - boolean este un alias de tip non-standard pentru bool definit de
Arduino. Se recomandă utilizarea în schimb a tipului standard bool, care este
identic.
o byte
 Descriere - Un octet stochează un număr fară semn de 8 biți, de la 0 la 255.
o char
 Descriere - Un tip de date care ocupă un octet de memorie care stochează o
valoare a caracterelor. Caracterele literale sunt scrise în ghilimele simple, cum
ar fi: "A" (pentru mai multe caractere - șiruri - utilizați ghilimele duble:
"ABC").
Caracterele sunt însă stocate ca numere. Puteți vedea codificarea specifică în
graficul ASCII. Aceasta înseamnă că este posibil să se facă aritmetică pe
caractere, în care se folosește valoarea ASCII a caracterelor (de ex. 'A' + 1 are
valoarea 66, deoarece valoarea ASCII a literei A este de 65). Vedeți referința
Serial.println pentru mai multe despre modul în care caracterele sunt traduse
la numere.
Tipul de date char este cu semn, ceea ce înseamnă că codifică numerele de la -
128 la 127.
o double
 Descriere - Numărul în virgulă mobile cu dublă precizie. Pe placile Uno și alte
plăci bazate pe ATMEGA, aceasta ocupă 4 octeți. Asta înseamnă că dubla
implementare este exact aceeași cu cea a float, fără câștig de precizie.
Pe Arduino Due, double au o precizie de 8 biți (64 biți).
o float
 Descriere - Tip de date pentru numerele cu virgulă mobilă, un număr care are
un punct zecimal. Numerele cu virgulă mobilă sunt adesea folosite pentru a
aproxima valorile analogice și continue deoarece au o rezoluție mai mare
decât numerele întregi. Numerele cu numere în virgulă pot fi la fel de mari ca
3.4028235E + 38 și de -3.4028235E + 38. Ele sunt stocate ca 32 de biți (4
octeți) de informații.
Plăcile au doar 6-7 cifre zecimale de precizie. Asta inseamna numarul total de
cifre, nu numarul din dreapta punctului zecimal. Spre deosebire de alte
platforme, unde puteți obține mai multă precizie utilizând un dublu (de ex.,
Până la 15 cifre), pe Arduino, dublul este de aceeași dimensiune ca float.
Numerele cu virgulă mobile nu sunt precise și pot genera rezultate stranii
atunci când sunt comparate. De exemplu, 6.0 / 3.0 poate să nu fie egală cu 2.0.
Ar trebui să verificați dacă valoarea absolută a diferenței dintre numere este
mai mică decât un număr mic.
Valorile matematice cu virgulă mobilă sunt, de asemenea, mult mai lente
decât matematica întregului în efectuarea calculelor, deci ar trebui să fie
evitate dacă, de exemplu, o buclă trebuie să funcționeze la o viteză maximă
pentru o funcție de sincronizare critică. Programatorii merg de multe ori la
unele lungimi pentru a converti calculele cu virgulă mobilă la numere întregi
pentru a crește viteza.
Dacă faci matematică cu float, trebuie să adaugi un punct zecimal, altfel va fi
tratat ca un int.

108
o int
 Descriere - Numerele întregi reprezintă tipul dvs. principal de date pentru
stocarea în număr.
Pe arduino Uno (și alte plăci bazate pe ATmega) un int stochează o valoare de
16 biți (2 octeți). Aceasta are un interval de -32,768 la 32,767 (valoare minimă
de -2 ^ 15 și o valoare maximă de (2 ^ 15) -1). Pe plăcile bazate pe Arduino
Due și SAMD (cum ar fi MKR1000 și Zero), un int stochează o valoare pe 32
de biți (4 octeți). Aceasta are un interval de valori de -2.147.483.648 până la
2.147.483.647 (valoare minimă de -231 și o valoare maximă de (231) -1).
Numerele întregi stochează numerele negative cu o tehnică numită
complement faţă de 2. Cel mai mare bit, denumit uneori bitul "semn",
marchează numărul ca număr negativ. Restul biților sunt inversați și se adaugă
1. Arduino are grija de a se ocupa de numere negative pentru tine, astfel încât
operațiile aritmetice să funcționeze transparent în modul așteptat. Poate fi o
complicație neașteptată în ceea ce privește manipularea operatorului(bitshift)
(>).

o long
 Descriere - Variabilele lungi sunt variabilele de mărime extinsă pentru
stocarea numerelor și stochează 32 de biți (4 octeți), de la -2.147.483.648 la
2.147.483.647. Dacă faci matematică cu numere întregi, cel puțin unul dintre
numere trebuie urmat de un L, forțându-l să fie lung.
o short
 Descriere - Un short este un tip de date de 16 biți. Pe toate Arduino (ATMega
și bazate pe ARM), un scurt stochează o valoare pe 16 biți (2 octeți). Aceasta
are un interval de la -32,768 la 32,767 (valoare minimă de -215 și o valoare
maximă de (215) -1).
o size_t
 Descriere - size_t este un tip de date capabil să reprezinte dimensiunea
oricărui obiect în octeți. Exemple de utilizare a size_t sunt tipul de returnare a
sizeof() și Serial.print().
o string
 Descriere - Șirurile de text pot fi reprezentate în două moduri. puteți utiliza
tipul de date String, care face parte din nucleu, sau puteți face o șir dintr-o
matrice de tip char și null-terminate. Această pagină descrie ultima metodă.
 Sintaxa
Toate cele ce urmează sunt declarații valide pentru șiruri de caractere.
char Str1 [15];
char str2 [8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char str3 [8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\ 0'};
char Str4 [] = "arduino";
char Str5 [8] = "arduino";
char Str6 [15] = "arduino";

Posibilități de declarare a șirurilor

109
 Declarați o matrice de caractere fără a o inițializa ca în Str1
 Declarați o serie de caractere (cu un caracter extra), iar compilatorul va
adăuga caracterul nul necesar, la fel ca în Str3
 Adăugați în mod explicit caracterul nul, Str3
 Inițializați cu o constantă string în ghilimele; compilatorul va
dimensiona matricea pentru a se potrivi constantă șirului și un caracter
nul terminator, Str4
 Inițializați matricea cu o dimensiune explicită și o constantă string,
Str5
 Inițializați matricea, lăsând un spațiu suplimentar pentru un șir mai
mare, Str6

Terminarea null

În general, șirurile sunt terminate cu un caracter nul (codul ASCII 0). Acest
lucru permite funcțiilor (cum ar fi Serial.print ()) să spună unde este sfârșitul
unui șir. În caz contrar, ei vor continua să citească octeți ulteriori de memorie
care nu fac de fapt parte din șir.
Aceasta înseamnă că șirul dvs. trebuie să aibă un spațiu pentru încă un
caracter decât textul pe care doriți să îl conțină. De aceea Str2 și Str5 trebuie
să fie de opt caractere, chiar dacă "arduino" este doar șapte - ultima poziție
este umplută automat cu un caracter nul. Str4 va fi dimensionat automat la opt
caractere, unul pentru extra nul. În Str3, am inclus în mod explicit caracterul
nul (scris '\ 0') noi înșine.
Rețineți că este posibil să aveți un șir fără un caracter final nul (de ex. Dacă ați
specificat lungimea lui Str2 ca șapte în loc de opt). Acest lucru va strica cele
mai multe funcții care utilizează șiruri, deci nu ar trebui să o faceți în mod
intenționat. Dacă observați ceva care se comportă ciudat (funcționând pe
caractere care nu sunt în șir), aceasta ar putea fi problema.

Ghilimele simple sau double?

String-urile sunt întotdeauna definite în interiorul ghilimelelor duble ("Abc"),


iar caracterele sunt întotdeauna definite în interiorul ghilimelelor simple
("A").

Înfășurarea șirurilor lungi

Puteți înfășura șiruri lungi, cum ar fi:


char myString [] = "Aceasta este prima linie"
"aceasta este a doua linie"
"etcetera";

Tablouri de șiruri de caractere

110
Este adesea convenabil, atunci când lucrați cu cantități mari de text, cum ar fi
un proiect cu afișaj LCD, să configurați un tablou de șiruri de caractere.
Deoarece şirurile de caractere sunt ele însele tablouri, acest lucru este de fapt
un exemplu de matrice bidimensională.
o unsigned char
 Descriere - Un tip de date fără semn care ocupă un octet de memorie. La fel ca
tipul de date octet.
Datele de caractere fără semn codifică numere de la 0 la 255.
Pentru consistența stilului de programare Arduino, tipul de date byte trebuie să
fie preferat.
o unsigned int
 Descriere - Pe placile Uno si alte placi bazate pe ATMEGA, numerele întregi
fără semn sunt aceleasi cu cele in care stocheaza o valoare de 2 octeti. În loc
să stocheze numere negative, acestea stochează numai valori pozitive,
obținând un interval util de la 0 la 65 535 ((216) -1).
Due stochează o valoare de 4 octeți (32 biți), variind de la 0 la 4,294,967,295
(232-1).
Diferența dintre numerele întregi cu semn şi fără semn se află în modul în care
este interpretat cel mai înalt bit, uneori denumit bit "semn". În Arduino
numerele întregi cu semn, dacă bitul semnificativ este un "1", numărul este
interpretat ca un număr negativ, iar ceilalți 15 biți sunt interpretați cu
matematica complementului 2.
o unsigned long
 Descriere - Variabilele lungi fără semn sunt variabile de mărime extinsă
pentru stocarea de numere și stochează 32 de biți (4 octeți). Spre deosebire de
lungimile standard, numerele lungi fără semn nu vor stoca numere negative,
făcându-le intervalul de la 0 la 4,294,967,295 (232-1).

o void
 Descriere - Cuvântul void este utilizat numai în declarațiile de funcții. Aceasta
indică faptul că este de așteptat ca funcția să nu returneze nicio informație
funcției din care a fost apelată.
o word
 Descriere - Un cuvânt stochează un număr fără semn de 16 biți, de la 0 la
65535. La fel ca un int unsigned.

 VARIABILE GLOBALE
o const
 Descriere - Cuvantul const vine de la constant. Este un calificativ care
modifică comportamentul variabilei, făcând o variabilă "read-only". Aceasta
înseamnă că variabila poate fi utilizată la fel ca orice altă variabilă de tipul ei,
dar valoarea sa nu poate fi modificată. Veți obține o eroare de compilator dacă
încercați să atribuiți o valoare unei variabile const.
Constantele definite cu cuvântul cheie const îndeplinește regulile de domeniu
de variabilă care guvernează alte variabile. Acest lucru, precum și capcanele

111
de a utiliza #define, face ca keyword-ul const să fie o metodă superioară
pentru definirea constantelor și este preferat să folosească în locul #define.
o scope
 Descriere - Variabilele în limbajul de programare C ++, pe care Arduino le
utilizează, au o proprietate numită domeniu. Acest lucru este în contrast cu
versiunile inițiale ale limbajelor, cum ar fi BASIC, în care fiecare variabilă
este o variabilă globală.
O variabilă globală este una care poate fi văzută de fiecare funcție a unui
program. Variabilele locale sunt vizibile doar pentru funcția în care sunt
declarate. În mediul Arduino, orice variabilă declarată în afara unei funcții (de
exemplu, setup(), loop(), etc.) este o variabilă globală.
Atunci când programele încep să devină mai mari și mai complexe, variabilele
locale reprezintă o modalitate utilă de a asigura că doar o funcție are acces la
propriile variabile. Acest lucru previne erorile de programare atunci când o
funcție modifică din greșeală variabilele utilizate de o altă funcție.
De asemenea, este uneori la îndemână să declarați și să inițializați o variabilă
în buclă for. Aceasta creează o variabilă care poate fi accesată numai din
interiorul parantezelor for-loop.
o static
 Descriere - Cuvântul cheie static este utilizat pentru a crea variabile care sunt
vizibile pentru o singură funcție. Cu toate acestea, spre deosebire de
variabilele locale care se creează și se distrug de fiecare dată când se numește
o funcție, variabilele statice persistă dincolo de apelul funcției, păstrând datele
lor între apelurile funcțiilor.
Variabilele declarate ca statice vor fi create și inițializate doar pentru prima
dată când este apelată o funcție.
o volatile
 Descriere - volatile este un cuvânt cheie cunoscut ca un calificativ variabil,
este de obicei folosit înainte de tipul de date al unei variabile, pentru a
modifica modul în care compilatorul și programul ulterior tratează variabila.
Declararea unei variabile volatile este o directivă a compilatorului.
Compilatorul este un software care vă traduce codul C / C ++ în codul
mașinii, care reprezintă instrucțiunile reale pentru cipul Atmega din Arduino.
Mai exact, direcționează compilatorul să încarce variabila din memoria RAM
și nu dintr-un registru de stocare, care este o locație de memorie temporară în
care variabilele de program sunt stocate și manipulate. În anumite condiții,
valoarea pentru o variabilă stocată în registre poate fi inexactă.
O variabilă ar trebui să fie declarată volatilă ori de câte ori valoarea acesteia
poate fi modificată de ceva ce nu se află sub controlul secțiunii de cod în care
apare, cum ar fi un fir de execuție simultan. În Arduino, singurul loc în care
este posibil să apară acest lucru este în secțiuni de cod asociate cu întreruperi,
numite rutini de întrerupere a serviciului.

 UTILITĂȚI
o PROGMEM

112
 Descriere - Stocați datele în memoria flash (program) în loc de SRAM. Există
o descriere a diferitelor tipuri de memorie disponibile pe o placă Arduino.
Cuvântul cheie PROGMEM este un modificator variabil, acesta ar trebui să
fie utilizat numai cu tipurile de date definite în pgmspace.h. Se spune
compilatorului că "pune această informație în memoria flash", în loc de
SRAM, unde ar merge în mod normal.
PROGMEM face parte din biblioteca pgmspace.h. Acesta este inclus automat
în versiunile moderne ale IDE, însă dacă utilizați o versiune IDE sub 1.0
(2011), va trebui mai întâi să includeți biblioteca în partea superioară a schiței,
după cum urmează:
# include <avr / pgmspace.h>
 Sintaxa
const dataType variableName[] PROGMEM = {date0, data1, data3 ...};

dataType - orice tip de variabilă


variableName - numele tabloului de date

Rețineți că, deoarece PROGMEM este un modificator variabil, nu există o


regulă tare și rapidă despre locul unde ar trebui să meargă, astfel încât
compilatorul Arduino acceptă toate definițiile de mai jos, care sunt, de
asemenea, sinonime. Cu toate acestea, experimentele au arătat că, în diferite
variante ale lui Arduino (având legătură cu versiunea GCC), PROGMEM
poate funcționa într-o locație și nu într-o altă locație. Exemplul "tabelul de
caractere" de mai jos a fost testat pentru a lucra cu Arduino 13. Versiunile
anterioare ale IDE pot funcționa mai bine dacă PROGMEM este inclus după
numele variabilei.

const dataType variableName[] PROGMEM = {}; // folosiţi această formă


const PROGMEM dataType variableName[] = {}; // sau aceasta
const dataType PROGMEM variableName[] = {}; // nu aceasta
o sizeof()
 Descriere - Operatorul sizeof returnează numărul de octeți într-un tip de
variabilă sau numărul de octeți ocupați de un tablou.
 Sintaxa
sizeof(variabilă)
 Parametrii
variabilă: orice tip sau matrice (de exemplu, int, float, byte)
 Returnează
Numărul de octeți dintr-o variabilă sau octeți ocupați într-o matrice. (size_t)

4.3 FUNCŢII

 DIGITAL I/O
o digitalRead()
 Descriere - Citește valoarea dintr-un pin digital specificat, fie HIGH sau
LOW.

113
 Sintaxa
digitalRead(pin)
 Parametrii
pin: numărul pinului digital pe care doriți să îl citiți
 Returnează
HIGH sau LOW.
o digitalWrite()
 Descriere - Scrie o valoare HIGH sau LOW la un pin digital.
Dacă pinul a fost configurat ca OUTPUT cu pinMode(), tensiunea acestuia va
fi setată la valoarea corespunzătoare: 5V (sau 3.3V pe plăcile de 3.3V) pentru
HIGH, 0V (ground) pentru LOW.
Dacă pinul este configurat ca INPUT, digitalWrite() va activa (HIGH) sau va
dezactiva (LOW) tragerea internă pe pinul de intrare. Se recomandă să setați
pinMode() la INPUT_PULLUP pentru a activa rezistența internă de tragere.
 Sintaxa
digitalWrite(pin, valoare)
 Parametrii
pin: numărul pinului
valoare: HIGH sau LOW
 Returnează
nimic.

opinMode()
 Descriere - Configurează pinul specificat să se comporte fie ca intrare, fie ca
ieșire. Consultați descrierea (pini digitali) pentru detalii privind
funcționalitatea pinilor. Începând de la Arduino 1.0.1, este posibil să activați
rezistoarele de tracțiune internă cu modul INPUT_PULLUP. În plus, modul
INPUT dezactivează în mod explicit rezistenţele interne.
 Sintaxa
 pinMode(pin, mod)
 Parametrii
pin: numărul pinului al cărui mod doriți să îl setați
mod: INPUT, OUTPUT sau INPUT_PULLUP.
 Returnează
nimic.
 ANALOG I/O
o analogRead()
 Descriere - Citește valoarea de pe pinul analogic specificat. Placile arduino
conțin un convertor analogic-digital de 10 biți pe mai multe canale. Aceasta
înseamnă că va mapa tensiunile de intrare între 0 și tensiunea de operare (5V
sau 3.3V) în valori întregi între 0 și 1023. Pe un Arduino UNO, de exemplu,
aceasta oferă o rezoluție între citirile de: 5 volți / 1024 unități sau , 0,0049
volți (4,9 mV) pe unitate.
Intervalul de intrare poate fi modificat folosind analogReference (), în timp ce
rezoluția poate fi modificată (numai pentru plăcile Zero, Due și MKR)
folosind analogReadResolution().

114
În cazul plăcilor bazate pe ATmega (UNO, Nano, Mini, Mega), este nevoie de
aproximativ 100 de microsecunde (0,0001 s) pentru a citi o intrare analogică,
astfel încât rata maximă de citire este de aproximativ 10 000 de ori pe
secundă.
 Sintaxa
 analogRead(pin)
 Parametrii
 pin: numele pinului de intrare analogic de citit de la (A0 la A5 pe majoritatea
panourilor, A0 la A6 pe plăcile MKR, A0 până la A7 pe Mini și Nano, A0
până la A15 pe Mega).
 Returnează
Citirea analogică pe pin (int). Este limitat la rezoluția convertorului analog-
digital (0-1023 pentru 10 biți sau 0-4095 pentru 12 biți).
o analogRead()
 Descriere - Configurează tensiunea de referință utilizată pentru intrarea
analogică (adică valoarea folosită ca vârful domeniului de intrare). Opțiunile
sunt:
Placile ARduino AVR (Uno, Mega, etc.)
 DEFAULT: referința analogică implicită de 5 volți (pe plăcile Arduino
de 5V) sau 3.3 volți (pe plăcile de 3.3V Arduino)
 INTERN: o referință încorporată, egală cu 1,1 volți pe ATmega168
sau ATmega328P și 2,56 volți pe ATmega8 (nu este disponibilă pe
Arduino Mega)
 INTERNAL1V1: o referință încorporată de 1.1V (doar Arduino Mega)
 INTERNAL2V56: o referință încorporată de 2.56V (doar Arduino
Mega)
 EXTERN: tensiunea aplicată pinului AREF (numai 0 până la 5V) este
utilizată ca referință.

Arduino Placi SAMD (Zero, etc.)


 AR_DEFAULT: referința analogică implicită de 3.3V
 AR_INTERNAL: o referință încorporată de 2.23V
 AR_INTERNAL1V0: o referință încorporată de 1.0V
 AR_INTERNAL1V65: o referință încorporată de 1.65V
 AR_INTERNAL2V23: o referință încorporată de 2.23V
 AR_EXTERNAL: tensiunea aplicată pinului AREF este utilizată ca
referință
Arduino Placi SAM (datorate)
 AR_DEFAULT: referința analogică implicită de 3.3V. Aceasta este
singura opțiune acceptată pentru Datorită.
 Sintaxa
analogReference(tip)
 Parametrii
tip: ce tip de referință să utilizați.
 Returnează
nimic.

115
o analogWrite()
 Descriere - Scrie o valoare analogică (val PWM) unui pin. Poate fi folosit
pentru a aprinde un LED la diferite luminozități sau pentru a conduce un
motor la diferite viteze. După apelul la analogWrite (), pinul va genera un val
pătrat constant al ciclului de sarcină specificat până la următorul apel la
analogWrite () (sau un apel către digitalRead () sau digitalWrite ()) pe același
pin. Frecvența semnalului PWM pe majoritatea pinilor este de aproximativ
490 Hz. Pe panourile Uno și similare, pinii 5 și 6 au o frecvență de
aproximativ 980 Hz.
Pe cele mai multe plăci Arduino (cele cu ATmega168 sau ATmega328P),
această funcție funcționează pe pinii 3, 5, 6, 9, 10 și 11. Pe Arduino Mega,
funcționează pe pinii 2 - 13 și 44 - 46. Arduino mai vechi plăcile cu un
ATmega8 suportă numai analogWrite () pe pinii 9, 10 și 11.
Arduino DUE suportă analogWrite () pe pinii 2 până la 13, plus pini DAC0 și
DAC1. Spre deosebire de pinii PWM, DAC0 și DAC1 sunt convertoare
digitale la analogice și funcționează ca ieșiri analogice adevărate.
Nu este necesar să apelați pinMode () pentru a seta pinul ca ieșire înainte de a
apela analogWrite ().
Funcția analogWrite nu are nimic de-a face cu pinii analogi sau cu funcția
analogReader.
 Sintaxa
analogWrite(pin, valoare)
 Parametrii
pin: pinul pentru se scrie. Tipuri de date permise: int.
valoare: ciclul de funcționare: între 0 (întotdeauna oprit) și 255 (întotdeauna
pornit). Tipuri de date permise: int
 Returnează
nimic.
 ZERO, DUE ȘI FAMILIA MKR
o analogReadResolution()
 Descriere - analogReadResolution () este o extensie a API-ului analog pentru
familia Arduino Due, Zero și MKR.
Setează dimensiunea (în biți) a valorii returnate de analogRead (). Este
implicit la 10 biți (returnează valori între 0-1023) pentru compatibilitate
înapoi cu plăcile bazate pe AVR.
Panourile Due, Zero și MKR de familie au capacități ADC pe 12 biți, care pot
fi accesate prin modificarea rezoluției la 12. Aceasta va returna valorile din
analogRead () între 0 și 4095.
 Sintaxa
analogReadResolution(biți)
 Parametrii
 biți: determină rezoluția (în biți) a valorii returnate de funcția analogRead ().
Puteți seta această valoare între 1 și 32. Puteți seta rezoluții mai mari de 12 dar
valorile returnate de analogRead () vor suferi aproximație.
 Returnează
nimic.

116
o analogWriteResolution()
 Descriere - analogWriteResolution () este o extensie a API-ului analogic
pentru Arduino Due.
analogWriteResolution () stabilește rezoluția funcției analogWrite (). Este
implicit la 8 biți (valori între 0-255) pentru compatibilitate înapoi cu plăcile
bazate pe AVR.
The Due are următoarele capabilități hardware:
 12 pini care implicit sunt PWM pe 8 biți, cum ar fi placile bazate pe
AVR. Acestea pot fi modificate la rezoluția pe 12 biți.
 2 pini cu DAC pe 12 biți (convertor digital-analogic)
Prin setarea rezoluției de scriere la 12, puteți utiliza analogWrite () cu valori
cuprinse între 0 și 4095 pentru a exploata rezoluția DAC completă sau pentru
a seta semnalul PWM fără a se rostogoli.
Zero are următoarele capabilități hardware:
 10 pini care implicit sunt PWM pe 8 biți, cum ar fi placile bazate pe
AVR. Acestea pot fi modificate la rezoluția pe 12 biți.
 1 pin cu DAC pe 10 biți (convertor digital-analogic).
Prin setarea rezoluției de scriere la 10, puteți folosi analogWrite () cu valori
între 0 și 1023 pentru a exploata rezoluția DAC completă
Familia MKR de placi are următoarele capabilități hardware:
 4 pini care implicit PWM pe 8 biți, cum ar fi placile bazate pe AVR.
Acestea pot fi modificate de la 8 (implicit) la rezoluția de 12 biți
 1 pin cu DAC pe 10 biți (convertor digital-analogic)
Prin setarea rezoluției de scriere la 12 biți, puteți utiliza analogWrite () cu
valori între 0 și 4095 pentru semnalele PWM; setați 10 biți pe pinul DAC
pentru a exploata rezoluția DAC completă de 1024 valori.
 Sintaxa
analogWriteResolution (biți)
 Parametrii
biți: determină rezoluția (în biți) a valorilor utilizate în funcția analogWrite ().
Valoarea poate varia de la 1 la 32. Dacă alegeți o rezoluție mai mare sau mai
mică decât capacitățile hardware ale plăcii, valoarea folosită în analogWrite ()
va fi fie trunchiată dacă este prea mare, fie umplută cu zerouri dacă este prea
mică.
 Returnează
nimic.
 I/O AVANSAT
o noTone()
 Descriere - Opreşte generarea valurilor pătrate declanșate de tone(). Nu are
efect dacă nu se generează tonuri.
 Sintaxa
noTone(pin)
 Parametrii
pin: pinul pe care se oprește generarea tonului
 Returnează
nimic.

117
o pulseIn()
 Descriere - Citește un impuls (fie HIGH sau LOW) pe un pin. De exemplu,
dacă valoarea este HIGH, pulseIn () așteaptă ca pinul să meargă de la LOW la
HIGH, începe timerul, apoi așteaptă ca pinul să meargă LOW și oprește
timerul. Returnează lungimea impulsului în microsecunde sau renunță și
returnează 0 dacă nu a fost primit un impuls complet în intervalul de timp.
Conometrul acestei funcții a fost determinat empiric și probabil va afișa erori
în impulsuri mai lungi. Funcționează pe impulsuri de la 10 microsecunde la 3
minute în lungime.
 Sintaxa
pulseIn(pin, valoare)
pulseIn(pin, valoare, pauză)
 Parametrii
 pin: numărul pinului pe care doriți să citiți pulsul. (Int)
 valoare: tipul de puls pentru citire: fie HIGH sau LOW. (Int)
 timeout (opțional): numărul de microsecunde care trebuie așteptat pentru
pornirea impulsului; implicit este o secundă (unsigned long)
 Returnează
lungimea impulsului (în microsecunde) sau 0 dacă nu a început nici un impuls
înainte de expirarea timpului (unsigned long).
o pulseInLong()
 Descriere - pulseInLong () este o alternativă la pulseIn () care este mai bună la
manipularea impulsurilor lungi și la întreruperea scenariilor afectate.
Citește un impuls (fie HIGH sau LOW) pe un pin. De exemplu, dacă valoarea
este HIGH, pulseInLong () așteaptă ca pinul să meargă de la LOW la HIGH,
începe cronometrul, apoi așteaptă ca pinul să meargă LOW și oprește
cronometrul. Returnează lungimea impulsului în microsecunde sau renunță și
returnează 0 dacă nu a fost primit un impuls complet în intervalul de timp.
 Cronometrul acestei funcții a fost determinat empiric și probabil va afișa erori
în impulsuri mai scurte. Funcționează pe impulsuri de la 10 microsecunde la 3
minute în lungime. Această rutină poate fi utilizată numai dacă sunt activate
întreruperi. În plus, cea mai mare rezoluție este obținută cu intervale mari.
 Sintaxa
pulseInLong (pin, valoare)
pulseInLong (pin, valoare, pauză)
 Parametrii
 pin: numărul pinului pe care doriți să citiți pulsul. (Int)
 valoare: tipul de puls pentru citire: fie HIGH sau LOW. (Int)
 timeout (opțional): numărul de microsecunde care trebuie așteptat pentru
pornirea impulsului; implicit este o secundă (unsigned long)
 Returnează
lungimea impulsului (în microsecunde) sau 0 dacă nu a început nici un impuls
înainte de expirarea timpului (unsigned long).
o shiftIn()
 Descriere - Schimba intr-un octet de câte un bit pe rând. Porneste de la cel mai
semnificativ (cel mai din stânga) sau cel mai nesemnificativ (cel mai din

118
dreapta) bit. Pentru fiecare bit, pinul ceasului este tras în sus, următorul bit
este citit din linia de date și apoi pinul ceasului este scăzut.
Dacă interfațați cu un dispozitiv care este tactat de margini în creștere, va
trebui să vă asigurați că pinul de ceas este mic înainte de primul apel pentru a
schimbaIn (), de ex. cu un apel la digitalWrite (clockPin, LOW).
Notă: aceasta este o implementare de software; Arduino oferă, de asemenea, o
bibliotecă SPI care utilizează implementarea hardware, care este mai rapidă,
dar funcționează numai pe pinii specifici.
 Sintaxa
byte incoming = shiftIn(dataPin, clockPin, bitOrder)
 Parametrii
dataPin: pinul pe care se introduce fiecare bit (int)
clockPin: pinul care se comută pentru a semnala o citire de la dataPin
 bitOrder: care ordonă schimbarea în biți; fie MSBFIRST, fie LSBFIRST. (Cel
mai important bit primul sau cel puțin puțin semnificativ)
 Returnează
valoarea citită (octet).
o shiftOut()
 Descriere - Schimba intr-un octet de câte un bit pe rând. Porneste de la cel mai
semnificativ (cel mai din stânga) sau cel mai nesemnificativ (cel mai din
dreapta) bit. Pentru fiecare bit, pinul ceasului este tras în sus, următorul bit
este citit din linia de date și apoi pinul ceasului este scăzut.
Dacă interfațați cu un dispozitiv care este tactat de margini în creștere, va
trebui să vă asigurați că pinul de ceas este mic înainte de primul apel pentru a
schimbaIn (), de ex. cu un apel la digitalWrite (clockPin, LOW).
Notă: aceasta este o implementare de software; Arduino oferă, de asemenea, o
bibliotecă SPI care utilizează implementarea hardware, care este mai rapidă,
dar funcționează numai pe pinii specifici.
 Sintaxa
shiftOut(dataPin, clockPin, bitOrder, value)
 Parametrii
dataPin: pinul pe care se emite fiecare bit (int)
clockPin: pinul se comută după ce dataPin a fost setat la valoarea corectă (int)
bitOrder: care ordonă deplasarea biților; fie MSBFIRST, fie LSBFIRST. (Cel
mai important bit în primul rând sau cel puțin puțin semnificativ)
valoare: datele să se deplaseze. (Byte)
 Returnează
nimic.
o tone()
 Descriere - Generă un val pătrat de frecvență specificată (și ciclu de
funcționare de 50%) pe un pin. O durată poate fi specificată, în caz contrar
valul va continua până la un apel la noTone (). Pinul poate fi conectat la un
buzzer piezo sau la alt difuzor pentru a reda tonuri.
Doar un singur sunet poate fi generat la un moment dat. Dacă un ton este deja
un pin diferit, apelul la tone () nu va avea efect. Dacă tonul este redat pe
același pin, apelul își va stabili frecvența.

119
Utilizarea funcției tone () va interfera cu ieșirea PWM pe pinii 3 și 11 (pe alte
placi decât Mega).
Nu este posibil să se genereze tonuri mai mici de 31 Hz. Pentru detalii tehnice,
a se vedea notele lui Brett Hagman.
 Sintaxa
tone(pin, frecvenţă)
tone(pin, frecvenţă, durata)
 Parametrii
pin: pinul pe care se generează tonul
frecvența: frecvența tonului în hertz - unsigned int
durata: durata tonului în milisecunde (opțional) - unsigned long
 Returnează
nimic.
 TIMP
o delay()
 Descriere - Întrerupe programul pentru perioada de timp (în milisecunde)
specificată ca parametru. (Există 1000 de milisecunde într-o secundă.)
 Sintaxa
delay(ms)
 Parametrii
ms: numărul de milisecunde de pauză (unsigned long)
 Returnează
nimic.
o delayMicroseconds()
 Descriere - Întrerupe programul pentru perioada de timp (în microsecunde)
specificată ca parametru. Există o mie de microsecunde într-o milisecundă și
un milion de microsecunde într-o secundă.
În prezent, cea mai mare valoare care va produce o întârziere exactă este
16383. Acest lucru s-ar putea schimba în versiunile viitoare ale Arduino.
Pentru întârzieri mai mari de câteva mii de microsecunde, ar trebui să utilizați
delay().
 Sintaxa
delayMicroseconds(us)
 Parametrii
ms: numărul de microsecunde de pauză (unsigned int)
 Returnează
nimic.
o micros()
 Descriere - Returnează numărul de microsecunde de când placa Arduino a
început să ruleze programul curent. Acest număr va depăși (înapoi la zero)
după aproximativ 70 de minute. Pe plăcile Arduino de 16 MHz (de exemplu,
Duemilanove și Nano), această funcție are o rezoluție de patru microsecunde
(adică valoarea returnată este întotdeauna un multiplu de patru). Pe plăcile
Arduino de 8 MHz (de exemplu, LilyPad), această funcție are o rezoluție de
opt microsecunde.
 Sintaxa

120
time = micros()
 Parametrii
nimic
 Returnează
Returnează numărul de microsecunde de când placa Arduino a început să
ruleze programul curent (unsigned long).
omillis()
 Descriere - Returnează numărul de milisecunde de la începerea executării
programului curent de către placa Arduino. Acest număr va depăși (înapoi la
zero) după aproximativ 50 de zile.
 Sintaxa
time = millis()
 Parametrii
nimic
 Returnează
Returnează numărul de milisecunde de când placa Arduino a început să ruleze
programul curent (unsigned long).
 MATEMATICĂ
o abs()
 Descriere - Calculează valoarea absolută a unui număr.
 Sintaxa
abs(x)
 Parametrii
x: numărul
 Returnează
x: dacă x este mai mare sau egal cu 0.
-x: dacă x este mai mică de 0.
o constrain()
 Descriere - Constrânge un număr să se afle într-un interval.
 Sintaxa
constrain(x, a, b)
 Parametrii
x: numărul de constrângere, toate tipurile de date
a: capătul inferior al intervalului, toate tipurile de date
b: capătul superior al intervalului, toate tipurile de date
 Returnează
x: dacă x este între a și b
a: dacă x este mai mică decât a
b: dacă x este mai mare decât b
o map()
 Descriere - Remapează un număr dintr-un interval în altul. Adică, o valoare
fromLow ar putea fi mapată toLow, o valoare de fromHigh la toHigh, valori
între valori între ele, etc.
Nu constrânge valori în interiorul intervalului, deoarece valorile din afara
domeniului sunt uneori intenționate și utile. Funcția constrain () poate fi
folosită fie înainte, fie după această funcție, dacă se doresc limite la intervale.

121
Rețineți că "limitele inferioare" ale fiecărui interval pot fi mai mari sau mai
mici decât "limitele superioare", astfel încât funcția map () poate fi utilizată
pentru a inversa un interval de numere, de exemplu
y = map(x, 1, 50, 50, 1);
Funcția de asemenea gestionează numerele negative bine, astfel încât acest
exemplu
y = map(x, 1, 50, 50, -100);
este, de asemenea, valabilă și funcționează bine.
Funcția map () utilizează matematica integer astfel încât nu va genera fracții,
atunci când matematica ar putea indica că ar trebui să facă acest lucru.
Resturile fracționale sunt trunchiate și nu sunt rotunjite sau mediate.
 Sintaxa
map(value, fromLow, fromHigh, toLow, toHigh)
 Parametrii
value: numărul de mapat
fromLow: limita inferioară a intervalului curent al valorii
fromHigh: limita superioară a intervalului curent al valorii
toLow: limita inferioară a intervalului țintă al valorii
toHigh: limita superioară a intervalului țintă al valorii
 Returnează
Valoarea mapată.
o max()
 Descriere - Calculează maximul dintre două numere.
 Sintaxa
max(x, y)
 Parametrii
x: primul număr, orice tip de date
y: al doilea număr, orice tip de date
 Returnează
Cea mai mare dintre cele două valori ale parametrilor.
o min()
 Descriere - Calculează minimul dintre două numere.
 Sintaxa
min(x, y)
 Parametrii
x: primul număr, orice tip de date
y: al doilea număr, orice tip de date
 Returnează
Cea mai mică dintre cele două valori ale parametrilor.
o pow()
 Descriere - Calculează valoarea unui număr ridicat la o putere. Pow() poate fi
folosit pentru a ridica un număr la o putere fracționată. Acest lucru este util
pentru generarea unei mapări exponențiale a valorilor sau curbelor.
 Sintaxa
pow(bază, exponent)
 Parametrii

122
baza: numărul (float)
exponent: puterea la care este ridicată baza (float)
 Returnează
Rezultatul exponentierii. (double)
o sq()
 Descriere - Calculează pătratul unui număr: numărul multiplicat de el însuși.
 Sintaxa
sq(x)
 Parametrii
 x: numărul, orice tip de date
 Returnează
Pătratul numărului. (double)
o sqrt()
 Descriere - Calculează rădăcina pătrată a unui număr.
 Sintaxa
sqrt(x)
 Parametrii
 x: numărul, orice tip de date
 Returnează
Rădăcina pătrată a numărului. (double)

 TRIGONOMETRIE
o cos()
 Descriere - Calculează cosinusul unui unghi (în radiani). Rezultatul va fi între
-1 și 1.
 Sintaxa
cos(rad)
 Parametrii
rad: unghiul în radiani (float)
 Returnează
Cosinusul unghiului. (double)
o cos()
 Descriere - Calculează sinusul unui unghi (în radiani). Rezultatul va fi între -1
și 1.
 Sintaxa
sin(rad)
 Parametrii
rad: unghiul în radiani (float)
 Returnează
Sinusul unghiului. (double)
o cos()
 Descriere - Calculează cosinusul unui unghi (în radiani). Rezultatul va fi între
-1 și 1.
 Sintaxa
cos(rad)
 Parametrii

123
rad: unghiul în radiani (float)
 Returnează
Cosinusul unghiului. (double)
o tan()
Descriere - Calculează tangenta unui unghi (în radiani). Rezultatul va fi între
infinit negativ și infinit.
 Sintaxa
tan(rad)
 Parametrii
rad: unghiul în radiani (float)
 Returnează
Tangenta unghiului. (double)
 CARACTERE
o isAlpha()
 Descriere - Analizează dacă un caracter este alfa (adică o literă).
 Sintaxa
isAlpha(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este alfa.
o isAlphaNumeric()
 Descriere - Analizează dacă un caracter este alfanumeric (adică o literă sau un
număr). Returnează true dacă thisChar conține fie un număr, fie o literă.
 Sintaxa
isAlphaNumeric(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este alfanumeric.
o isAscii()
 Descriere - Analizează dacă un caracter este Ascii. Returnează true dacă
thisChar conține un caracter Ascii.
 Sintaxa
isAscii(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este ascii.
o isControl()
 Descriere - Analizează dacă un caracter este caracter de control.
 Sintaxa
isControl(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează

124
true: dacă thisChar este caracter de control.
o isDigit()
 Descriere - Analizează dacă un caracter este digit (număr).
 Sintaxa
isDigit(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este număr.
o isGraph()
 Descriere - Analizează dacă un caracter este printabil cu conținut (spațiul este
imprimabil, dar nu are conținut). Returnează true dacă thisChar este printabil.
 Sintaxa
isGraph(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este printabil.
o isHexadecimalDigit()
 Descriere - Analizează dacă un caracter este o cifră hexazecimală (A-F, 0-9).
Returnează true dacă thisChar conține o cifră hexazecimală.
 Sintaxa
isHexadecimalDigit(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este cifră hexazecimală.
o isLowerCase()
 Descriere - Analizează dacă caracterele sunt minuscule (adică cu litere mici).
Returnează true dacă thisChar conține o literă mică.
 Sintaxa
isLowerCase(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este literă mică.
o isPrintable()
 Descriere - Analizează dacă un caracter este printabil (adică orice caracter
care produce o ieșire, chiar și un spațiu gol). Returnează true dacă thisChar
este printabil.
 Sintaxa
isPrintable(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este printabil.

125
o isPunct()
 Descriere - Analizează dacă un caracter este punctuație (adică o virgulă, punct
și virgulă, un semn de exclamare și așa mai departe). Returnează adevărat
dacă Char este punctuație.
 Sintaxa
isPunct(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este semn de punctuaţie.
o isSpace()
 Descriere - Analizează dacă un caracter este caracterul spaţiu. Returnează true
dacă thisChar conține caracterul spațiu.
 Sintaxa
isSpace(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este spaţiu.

o
isLowerCase()
 Descriere - Analizează dacă caracterele sunt majuscule (adică cu litere mari).
Returnează true dacă thisChar conține o literă mare.
 Sintaxa
isUpperCase(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este literă mare.
o isWhitespace()
 Descriere - Analizează dacă un caracter este un spațiu alb, adică spațiu,
formată ('\ f'), linie nouă ('\ n'), retur transport ('\ r'), fila orizontală ( '\ v')).
Returnează true dacă thisChar conține un spațiu alb.
 Sintaxa
isWhitespace(thisChar)
 Parametrii
thisChar: variabilă. Tipuri de date permise: char
 Returnează
true: dacă thisChar este spaţiu alb.
 NUMERE ALEATOARE
o random()
 Descriere - Funcția random generează numere pseudo-aleatoare.
 Sintaxa
random(max)
random(min, max)

126
Parametrii
min - limita inferioară a valorii aleatorii, inclusiv (opțional)
max - limita superioară a valorii aleatorii, exclusiv
 Returnează
Un număr aleator între min și max-1 (long).
o randomSeed()
 Descriere - randomSeed() inițializează generatorul de numere pseudo-
aleatoare, provocând pornirea acestuia într-un punct arbitrar în secvența
aleatorie. Această secvență, în timp ce este foarte lungă și aleatoare, este
întotdeauna aceeași.
Dacă este important pentru o secvență de valori generate de random() să
difere, la execuțiile ulterioare ale unei schițe, utilizați randomSeed () pentru a
inițializa generatorul de numere aleatorii cu o intrare destul de aleatorie, cum
ar fi analogRead(), pe un pin neconectat.
În schimb, uneori poate fi util să se utilizeze secvențe pseudo-aleatoare care se
repetă exact. Aceasta se poate realiza apelând randomSeed() cu un număr fix,
înainte de a începe secvența aleatoare.
 Sintaxa
randomSeed(seed)
 Parametrii
 seed - numărul pentru a inițializa secvența pseudo-aleatoare (unsigned long).
 Returnează
nimic.
 BIŢI ŞI OCTEŢI
o bit()
 Descriere - Calculează valoarea bitului specificat (bitul 0 este 1, bitul 1 este 2,
bitul 2 este 4, etc.).
 Sintaxa
bit(n)
 Parametrii
n: bitul a cărui valoare este calculată
Returnează
Valoarea bitului.
o bitClear()
 Descriere - Șterge (scrie 0) un bit al unei variabile numerice.
 Sintaxa
bitClear(x, n)
 Parametrii
x: variabila numerică al cărei bit să fie șters
n: care bit să se steargă, începând de la 0 pentru bitul cel mai puțin
semnificativ (din dreapta)
 Returnează
nimic.
o bitRead()
 Descriere - Citeste un bit al unui număr.
 Sintaxa

127
bitRead(x, n)
 Parametrii
x: numărul din care să se citească
n: care bit să se citească, începând de la 0 pentru bitul cel mai puțin
semnificativ (din dreapta)
 Returnează
Valoare bitului (0 sau 1).
o bitSet()
 Descriere - Setează (scrie un 1) unui bit al unei variabile numerice.
 Sintaxa
bitSet(x, n)
 Parametrii
x: variabila numerică al cărei bit să fie setat
n: care bit să se seteze, începând de la 0 pentru bitul cel mai puțin semnificativ
(din dreapta)
 Returnează
nimic.
o bitWrite()
 Descriere - Scrie un bit al unui număr.
 Sintaxa
bitWrite(x, n, b)
 Parametrii
x: numărul la care să se scrie
n: care bit să se scrie, începând de la 0 pentru bitul cel mai puțin semnificativ
(din dreapta)
b: valoarea de scriere a bitului (0 sau 1)
 Returnează
nimic.
o highByte()
 Descriere - Extrage octetul de ordin înalt (cel mai din stânga) al unui cuvânt
(sau cel de-al doilea octet inferior al unui tip de date mai mare).
 Sintaxa
highByte(x)
 Parametrii
x: o valoare de orice tip
 Returnează
octetul.
o lowByte()
 Descriere - Extrage octetul mai puţin semnificativ (cel mai din dreapta) al unei
variabile (de exemplu, un cuvânt).
 Sintaxa
lowByte(x)
 Parametrii
x: o valoare de orice tip
 Returnează
octetul.

128
 ÎNTRERUPERI EXTERNE
o attachInterrupt()
 Descriere - Primul parametru al attachInterrupt() este un număr de întrerupere.
În mod normal, ar trebui să utilizați digitalpinToInterrupt(pin) pentru a
traduce pinul digital real la numărul de întrerupere specific. De exemplu, dacă
vă conectați la pinul 3, utilizați digitalPinToInterrupt(3) ca primul parametru
pentru a atașaInterrupt().
Utilizări întreruperi
Întreruperile sunt utile pentru a face lucrurile să se întâmple automat în
programele microcontrolerului și pot ajuta la rezolvarea problemelor de
sincronizare. Sarcinile bune pentru utilizarea unei întreruperi pot include
citirea unui codificator rotativ sau monitorizarea intrării utilizatorului.
Dacă doriți să vă asigurați că un program a capturat întotdeauna impulsurile
de la un encoder rotativ, astfel încât să nu piardă niciodată un impuls, ar fi
foarte dificil să scrieți un program pentru a face orice altceva, deoarece
programul ar trebui să verifice mereu encoderul, pentru a prinde impulsuri
atunci când au apărut. Alți senzori au și o dinamică similară a interfeței, cum
ar fi încercarea de a citi un senzor de sunet care încearcă să prindă un clic sau
un senzor cu infraroșu (foto-întreruperi) care încearcă să prindă o cădere a
monedei. În toate aceste situații, folosirea unei întreruperi poate elibera
microcontrolerul pentru a obține o altă lucrare în timp ce nu pierde intrarea.
Despre rutinele seriviului de întreruperi
ISR-urile sunt tipuri speciale de funcții care au unele limitări unice pe care
cele mai multe alte funcții nu le au. Un ISR nu poate avea parametri și nu ar
trebui să returneze nimic.
În general, un ISR ar trebui să fie cât mai scurt și mai rapid posibil. Dacă
schița utilizează mai multe ISR-uri, numai una poate rula simultan, alte
întreruperi vor fi executate după terminarea celei curente într-o ordine care
depinde de prioritatea pe care o au. millis() se bazează pe întreruperile de
numărare, deci nu va crește niciodată în interiorul unui ISR. Deoarece delay()
necesită întreruperi pentru a funcționa, aceasta nu va funcționa dacă este
apelată în interiorul unui ISR. micros() funcționează inițial, dar va începe să se
comporte eronatcdupă 1-2 ms. delayMicroseconds() nu utilizează nici un
contor, deci va funcționa normal.
De obicei, variabilele globale sunt utilizate pentru a transmite date între un
ISR și programul principal. Pentru a vă asigura că variabilele partajate între un
ISR și programul principal sunt actualizate corect, declarați-le ca volatile.
 Sintaxa
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); (recomandat)
attachInterrupt(interrupt, ISR, mode); (nu este recomandat)
attachInterrupt(pin, ISR, mode); (nu este recomandat la Arduino Due, Zero,
MKR1000, 101)
 Parametrii
interrupt: numărul întreruperii (int)
pin: numărul pinului (numai Arduino Due, Zero, MKR1000)

129
ISR: ISR apelat când are loc întreruperea; această funcție nu trebuie să ia nici
un parametru și să nu întoarcă nimic. Această funcție este uneori menționată
ca o rutină de întrerupere a serviciului.
mode: definește când trebuie declanșată întreruperea. Patru constante sunt
predefinite ca valori valide:
LOW pentru a declanșa întreruperea ori de câte ori pinul este scăzut,
CHANGE pentru a declanșa întreruperea ori de câte ori pinul modifică
valoarea
RISING pentru a declanșa atunci când pinul trece de la scăzut la înalt,
FALLING atunci când pinul trece de la înalt la scăzut.
Plăcile Due, Zero și MKR1000 permit, de asemenea:
HIGH pentru a declanșa întreruperea ori de câte ori pinul este înalt.
 Returnează
nimic.
o detachInterrupt()
 Descriere - Dezactivează întreruperea dată.
 Sintaxa
detachInterrupt(digitalPinToInterrupt(pin))(doar Arduino AVR, recomandat)
detachInterrupt(interrupt) (doar Arduino AVR, nerecomandat)
detachInterrupt(pin) (doar Arduino SAMD Boards, Due, 101)
 Parametrii
interrupt: numărul întreruperii pentru dezactivare

pin: numărul pinului al întreruperii pentru dezactivare


 Returnează
nimic.
 ÎNTRERUPERI
o interrupts()
 Descriere - Re-activează întreruperile (după ce au fost dezactivate de
nointerrupts()). Întreruperile permit anumite sarcini importante să se întâmple
în fundal și sunt activate în mod implicit. Poate deranja ușor timpul de codare
și poate fi dezactivat pentru secțiunile critice de cod.
 Sintaxa
interrupts()
 Parametrii
nimic
 Returnează
nimic.
o noInterrupts()
 Descriere - Dezactivează întreruperile (le puteți reactiva cu interrupts()).
Întreruperile permit anumite sarcini importante să se întâmple în fundal și sunt
activate în mod implicit. Unele funcții nu vor funcționa în timp ce
întreruperile sunt dezactivate și comunicarea de intrare poate fi ignorată.
Întreruperile pot însă să perturbe ușor timpul de codare și pot fi dezactivate
pentru anumite secțiuni critice de cod.
 Sintaxa

130
noInterrupts()
 Parametrii
nimic
 Returnează
nimic.
 COMUNICAŢIA
o Serială
 Descriere - Folosit pentru comunicarea dintre placa Arduino și un computer
sau alte dispozitive. Toate plăcile Arduino au cel puțin un port serial
(cunoscut și ca UART sau USART), iar altele au mai multe.
Pe Uno, Nano, Mini și Mega, pinii 0 și 1 sunt utilizați pentru comunicarea cu
computerul. Conectarea oricărui element la acești pini poate interfera cu acea
comunicare, inclusiv cauzând încărcări nereușite la bord.
Puteți utiliza monitorul serial din seria Arduino pentru a comunica cu o placă
Arduino. Faceți clic pe butonul monitorului serial din bara de instrumente și
selectați aceeași rată de baud utilizată pentru a începe ().
Comunicarea serială pe pinii TX / RX utilizează niveluri logice TTL (5V sau
3.3V în funcție de placă). Nu conectați aceşti pini direct la un port serial
RS232; acestea funcționează la +/- 12V și pot deteriora placa Arduino.
Pentru a utiliza aceste porturi extra seriale pentru a comunica cu calculatorul
personal, veți avea nevoie de un adaptor suplimentar USB-to-serial, deoarece
acestea nu sunt conectate la adaptorul USB-to-serial Mega.
o Flux
 Descriere - Stream este clasa de bază pentru fluxurile bazate pe caracter și
binare. Nu este apelată direct, ci invocată ori de câte ori utilizați o funcție care
se bazează pe ea.
Stream definește funcțiile de citire din Arduino. Atunci când utilizați orice
funcție de bază care utilizează o metodă read() sau o metodă similară, puteți să
o asumați cu siguranță în apelurile din clasa Stream. Pentru funcții precum
print(), Stream moștenește din clasa Print.
 USB
o Keyboard
 Descriere - Funcțiile tastaturii permit placilor micro 32u4 sau SAMD să
trimită intrări de la un calculator atașat prin portul USB nativ.
Notă: Nu toate caracterele posibile ASCII, în special cele care nu se imprimă,
pot fi trimise cu biblioteca tastaturii.
Biblioteca acceptă utilizarea cheilor de modificare. Tastele modificatoare
schimbă comportamentul unei alte taste atunci când sunt apăsate simultan.
o Mouse
 Descriere - Funcțiile mouse-ului permit placilor micro 32u4 sau SAMD să
controleze mișcarea cursorului pe un computer conectat prin portul USB
nativ. Când actualizați poziția cursorului, aceasta este întotdeauna relativă la
locația anterioară a cursorului.

131
Cap.6. Module de Senzori compatibili cu ARDUINO

6.1. IR EMISSION
 Specificație tehnică

Tensiunea de operare 5V

Curent în față 30 ~ 60 mA

Consum 90mW

Temperatura de funcționare -25 ° C până la 80 ° C [-13 ° F până la 176 ° F]

Dimensiuni 18.5mm x 15mm [0.728in x 0.591in]

 Fenomenul fizic care stă la baza conversiei


Emițătorul cu infraroșu convertește energia electrică în lumină infraroșie aproape. Este,
de asemenea, cunoscut sub numele de diodă care emite infraroșu. Structura sa este similară cu
cea a unei diode emitetoare de lumină generală, dar realizată dintr-un material semiconductor
diferit.

 Mărimea măsurată
Folosind emițătorul IR putem măsura :
 Radiația termică (căldura)
 Termografia (pentru a determina de la distanță temperatura obiectelor dacă se cunoaște
emitivitatea lor)

 Mediul/modul de comunicație
Principiul comunicării în infraroșu. Să aruncăm o privire asupra structurii receptorului
infraroșu: există două elemente importante care includ un receptor infraroșu, denumit IC și PD.

132
IC este elementul de procesare a receptorului, compus în principal din cristale de siliciu și
circuite, este un dispozitiv extrem de integrat, funcția sa principală fiind filtrarea, modelarea,
decodarea. Fotodioda funcției principale PD este de a primi numărul semnalului optic.

6.2. IR RECEIVER
 Specificație tehnică
Tensiune de operare 2.7 - 5.5V

Curent de funcționare de 0,4 până la 1,5 mA

Recepție Distanța de 18m

Unghi de recepție ± 45º

Frecventa de transport 38KHz

Tensiune scăzută 0.4V

Tensiune ridicată 4.5V

Filtru de lumină ambientală până la 500LUX

 Fenomenul fizic care stă la baza conversiei


Detectoarele IR sunt microcipuri mici cu o fotocelula care sunt reglate pentru a asculta
lumina infrarosie. IR receiver-ul convertește semnalul electric modulat într-un semnal modulat
IR. Receptorul IR demodulează semnalul luminos IR și îl convertește înapoi în binar înainte de a
transmite informațiile către un microcontroler.

 Mărimea măsurată.

133
Cu ajutorul IR receiver-ului puteam măsura:
- Frecvența
- Sensibilitatea spectrală

 Mediul/modul de comunicație
Modelul în care semnalul IR modulat este convertit în binar este definit de un protocol de
transmisie. Există multe protocoale de transmisie IR. Sony, Matsushita, NEC și RC5 sunt câteva
dintre cele mai comune protocoale.
Protocolul NEC este, de asemenea, tipul cel mai obișnuit în proiectele Arduino, așadar o voi
folosi ca exemplu pentru a vă arăta cum receptorul convertește semnalul IR modulat la unul
binar.
Logicul "1" începe cu un impuls de lungă durată de 562,5 μs IR de 38 kHz urmat de un impuls
LOW lung de 1,687,5 μs. Logica "0" este transmisă cu un impuls de lungă durată de 562,5 μs
urmat de un impuls lung LOW de 562,5 μs:

Acesta este modul în care protocolul NEC codifică și decodifică datele binare într-un semnal
modulat. Alte protocoale diferă numai în funcție de durata impulsurilor individuale HIGH și
LOW.

6.3. ULTRASONIC SENSOR


Senzorul ultrasonic este excelent pentru toate tipurile de proiecte care necesită măsurători la
distanță, evitând obstacolele ca exemplu.

134
 Specificație tehnică
+ 5V DC + 5V DC

Curent <2mA

Curent de lucru 15mA

Unghiul efectiv <15 °

Distanțare 2cm - 400cm / 1 "- 13ft

Rezoluție 0,3 cm

Unghiul de măsurare 30 grade

Lățimea pulsului de intrare 10uS

Dimensiuni 45mm x 20mm x 15mm

 Fenomenul fizic care stă la baza conversiei


Senzorul se bazează pe un principiu simplu, un fenomen sonor de ecou. O membrană
emite un sunet ultrasonic, iar o a doua membrană va prinde semnalul de ecou reflectat de
obstacol.

Formula este prin urmare:


D = VT / 2

Unde:
-D = distanța obstacolului
-V = viteza sunetului
-T = timpul măsurat pentru semnalul
de declanșare pentru efectuarea
călătoriei

135
 Mărimea măsurată.
- Ele emit ultrasunete la 40 000 Hz care se deplasează prin aer și dacă există un
obiect sau un obstacol pe calea sa ,revin înapoi la modul. Având în vedere timpul
de călătorie și viteza se poate calcula distanta
- MĂSURAREA NIVELULUI LICHID - măsurarea înălțimii lichidelornetului,
putem calcula distanța.
- DETECȚIA OBIECTULUI - detectarea prezenței obiectelor sau a oamenilor
- MĂSURAREA ȘI DIMENSIUNEA DISTANȚELOR - măsurarea locației

 Mediul/modul de comunicație
Iată ce se întâmplă:
1. Transmițătorul (pinul de declanșare) trimite un semnal: un sunet de înaltă frecvență.
2. Când semnalul găsește un obiect, acesta se reflectă și ...
3. ... emițătorul (ecoul PIN) îl primește.

Modul de comunicare

6.4. PHOTORESISTOR

136
Un fotorezistor (sau rezistor dependent de lumină, LDR sau celula fotoconductoare) este un
rezistor variabil controlat de lumină. Rezistența unui fotorezistor scade cu intensitatea intensității
luminii incidente; cu alte cuvinte, prezintă fotoconductivitate. Un fotorezistor poate fi aplicat în
circuitele de detecție sensibile la lumină și în circuite de comutare activate cu lumină și
întunecate.

 Specificație tehnică
Putere maximă de disipare 200mW

Tensiunea maximă 200V

Doza maximă de undă 600nm

Min. rezistență 10lux 1.8kΩ

Max. rezistenta 10lux 4.5kΩ

Tip. rezistență 100lux 0.7kΩ

Rezistența la întunecare după 1 sec 0,03MΩ

Rezistență la întunecare după 5 secunde 0.25MΩ

 Fenomenul fizic care stă la baza conversiei


Pe baza materialelor utilizate, fotorezistoarele pot fi împărțite în două tipuri; intrinsecă și
extrinsecă. Resistorii foto intrinseci utilizează materiale nedepășite, cum ar fi siliciul sau
germaniul. Fotonii care cad pe dispozitiv excită electronii din banda de valență în banda de
conducție, iar rezultatul acestui proces sunt mai mulți electroni liberi în material, care pot
transporta curent și, prin urmare, mai puțin rezistenți. Rezistoarele foto extinse sunt fabricate din
materiale dopate cu impurități, numite și dopanți. Dopantii creează o nouă bandă de energie

137
deasupra banda de valență existentă, populată de electroni. Acești electroni au nevoie de mai
puțină energie pentru a face trecerea la banda de conducere datorită diferenței energetice mai
mici. Rezultatul este un dispozitiv sensibil la diferite lungimi de undă de lumină. Indiferent,
ambele tipuri vor prezenta o scădere a rezistenței atunci când sunt iluminate. Cu cât intensitatea
luminii este mai mare, cu atât este mai mare căderea de rezistență. Prin urmare, rezistența LDR
este o funcție inversă, neliniară a intensității luminii.
 Mărimea măsurată.
- Fotorezistorii sunt printre cei mai buni detectori infra-infraroșii disponibili și sunt
utilizați pentru astronomia în infraroșu și spectroscopia infraroșie.
- Schimbările de rezistență pot fi măsurate și utilizate pentru a conduce alte
componente electronice. De exemplu, pentru ca o cameră să devină mai
întunecată, un fotorezistor poate fi folosit pentru a lumina.

 Mediul/modul de comunicație
Un fotorezistor este un senzor la care rezistența electrică este modificată în funcție de
intensitatea luminii care se încadrează pe ea. Cu cât este mai intensă lumina, cu atât se formează
mai mulți purtători liberi și, prin urmare, cel mai jos devine rezistența elementului. Doi contacte
metalice exterioare ale fotorezistorului ajung prin materialul de bază ceramic la membrana
sensibilă la lumină, care determină proprietățile de rezistență electrică cu proprietățile geometrice
și materiale. De vreme ce materialul fotosensibil are o rezistență ridicată, cu o cale îngustă,
curbată între electrozii, se obține o rezistență totală scăzută la intensitatea medie a luminii.
Similar cu ochiul uman, fotorezistorul este sensibil la o anumită gamă de lungimi de undă și
trebuie luat în considerare atunci când selectează un element foto, în caz contrar poate să nu
reacționeze la sursa de lumină utilizată în aplicație.

6.5. LASER EMIT


Este un dispozitiv semiconductor similar unei diode emițătoare de lumină în care fasciculul
laser este creat la joncțiunea diodei. Diodele laser sunt cele mai comune tipuri de lasere produse,
cu o gamă largă de utilizări care includ comunicații cu fibră optică, cititoare de coduri de bare,

138
indicatoare laser, citire / înregistrare pe CD / DVD / Blu-ray, imprimare laser, scanare laser și
iluminare fascicul de lumină.
 Specificație tehnică

 Fenomenul fizic care stă la baza conversiei


"Laser" este un acronim pentru amplificarea luminii prin emisia stimulată de radiație. Un
laser este creat când electronii din atomi în ochelari, cristale sau gaze speciale absorb energie
dintr-un curent electric sau alt laser și devin "excitați". Electronii excitați se deplasează de la
o orbită de energie mai mică la o orbită de energie mai înaltă nucleul atomului. Când se
întorc în starea lor normală sau "în sol", electronii emit fotoni (particule de lumină). Lampa
laser este diferită de lumina normală și în alte moduri. În primul rând, lumina sa conține o
singură lungime de undă (o anumită culoare). Lungimea de undă specială a luminii este
determinată de cantitatea de energie eliberată atunci când electronul excitat scade pe o orbită
inferioară. În al doilea rând, lumina laser este direcționată. În timp ce un laser generează un
fascicul foarte strâns, o lanternă produce lumină difuză. Deoarece lumina laserului este
coerentă, ea rămâne concentrată pentru distanțe mari, chiar până la lună și înapoi.

 Mărimea măsurată.
- Măsurarea distanței
- Măsurarea nivelului unui lichid
 Mediul/modul de comunicație
La fel ca în majoritatea laserelor mari, strălucirea intensă a luminii albe de la farurile
gigantice "pompează" electronii în plăci mari de sticlă laser la o stare de energie mai înaltă, care
durează doar aproximativ o miliimă de secundă. Un mic impuls de lumină laser "reglat" la

139
energia excitată a electronilor este direcționat prin plăcile de sticlă. Acest puls laser stimulează
electronii să scadă la starea lor de energie inferioară sau la sol, și emite un foton laser cu exact
aceeași lungime de undă.

Un comutator optic trage impulsul laser cu energie redusă în amplificatorul principal pentru
patru treceri prin plăcile de sticlă laser. Oglinzile la ambele capete ale amplificatorului de sticlă
determină fotonii să călătorească înainte și înapoi prin sticlă, stimulând mai mulți electroni să
scadă la starea lor de energie mai mică și să emită fotoni. Acest proces produce un număr mare
de fotoni de aceeași lungime de undă și aceeași direcție - un fascicul de lumină extrem de
luminos și drept. În acest fel, pulsul inițial cu energie scăzută este amplificat cu mai mult de
patru cvadrilioane de ori pentru a crea 192 de fascicule laser extrem de energice, strâns
concentrate, care converg în centrul camerei țintă.

6.6. SHOCK
Bazându-se pe tehnologia ceramică piezoelectrică in-house, senzorii de șoc sunt dezvoltați
pentru a detecta vibrațiile și impactul (șoc mecanic).

 Specificație tehnică

 Fenomenul fizic care stă la baza conversiei

140
Comutatorul constă în principal dintr-un terminal care formează un post central și un al
doilea terminal care este un arc care înconjoară postul central. Când o forță suficientă este
transferată pe comutator, terminalul constând din arc mișcă și scurtcircuite ambele terminale
împreună. Legătura dintre terminale este momentană și va necesita puțină gândire pe măsură ce o
implementați în proiectul dvs. Arduino.
Poziționarea comutatorului este, de asemenea, importantă. În general, comutatorul ar trebui
să fie amplasat fizic cât mai aproape posibil de zona monitorizată. În caz contrar, vibrațiile
detectate pot fi atenuate de alte componente structurale din proiect.
O excepție de la această regulă poate fi cazul în care descoperiți că comutatorul este prea
sensibil pentru aplicația dvs. În acest caz, deplasarea comutatorului mai departe de zona de
interes poate face ca acesta să fie mai puțin sensibil.

 Mărimea măsurată.
- Detectarea vibrației
- Șoc mecanic

 Mediul/modul de comunicație

141
Aceasta arată semnalele emise de senzorii de șoc pentru diferite accelerații. Axa verticală
indică ieșirea de accelerație de către senzorul de șoc, iar axa orizontală indică timpul. Senzorii de
șoc au o putere mică atunci când se aplică o accelerație lentă, cum ar fi atunci când se deplasează
pe distanțe mari cu mâna, dar când sunt supuși unor șocuri rapide, mari, cum ar fi picăturile,ele
produc ieșire care corespunde vitezei și mărimii șocului la care au fost supuse. Direcția de la care
a fost aplicat șocul determină dacă ieșirea lor începe pe laturile plus sau minus, ceea ce face
posibilă utilizarea acestora pentru a determina direcțiile șocurilor.

6.7. WATER LEVEL SENSOR


Senzorii de nivel sunt utilizați pentru a monitoriza și regla nivelurile unei anumite substanțe
care curge liber într-un spațiu limitat. Aceste substanțe sunt, de obicei, lichide, cu toate acestea
senzorii de nivel pot fi, de asemenea, utilizați pentru a monitoriza unele substanțe solide, cum ar
fi substanțele sub formă de pulbere. Senzorii de nivel sunt utilizați pe scară largă din punct de
vedere industrial.
 Specificație tehnică
- Tensiune de operare: DC5V

142
- Curent de lucru: mai mic de 20mA
- Tip senzor: Analog
- Detectare zonă: 40mm x16mm

 Fenomenul fizic care stă la baza conversiei


Senzorii de nivel detectează nivelul apei, inclusiv suspensiile, materialele granulare și
pulberile care prezintă o suprafață liberă superioară. Substanțele măsurate pot fi în recipientele
lor. Substanța care trebuie măsurată poate fi în interiorul unui recipient sau poate fi în forma sa
naturală (de exemplu, un râu sau un lac). Măsurarea nivelului poate fi de tipul unor valori
continue sau punctuale. Senzorii de nivel continuu măsoară nivelul într-un interval specificat și
determină cantitatea exactă de substanță într-un anumit loc, în timp ce senzorii de nivel punct
indică numai dacă substanța este peste sau sub punctul de detectare. În general, acesta din urmă
detectează niveluri excesiv de mari sau scăzute.
Există multe variabile fizice și de aplicație care afectează selecția metodei de monitorizare a
nivelului optim pentru procesele industriale și comerciale. Criteriile de selecție includ: faza fizică
(lichidă, solidă sau tulbureală), temperatură, presiune sau vid, chimie, constantă dielectrică
medie, densitate (greutate specifică) medie, agitație (acționare), zgomot acustic sau electric,
vibrații, șoc, rezervor sau dimensiunea și forma recipientului.
 Mărimea măsurată.
- Nivelul apei
- Cantitatea de apă
 Mediul/modul de comunicație
Controlerele automate ale nivelului de apă pornesc motorul ori de câte ori nivelul apei scade
sub un anumit nivel și oprește motorul atunci când apa crește cu mult peste un nivel fix. De
asemenea, motorul se va opri atunci când apa de acumulare este epuizată înainte de umplerea
rezervorului de la capăt, sau dacă pompa funcționează uscat, precum și menține fluctuațiile de
tensiune.
6.8. DS 3231 RTC MODULE
DS3231 este un ceas cu timp real I2C în timp real (RTC), cu un oscilator de cristal cu
compensare de temperatură integrat (TCXO) și cristal. Dispozitivul încorporează o intrare a
bateriei, deconectează alimentarea electrică principală și menține o cronometrare precisă.

143
Oscilatorul integrat îmbunătățește acuratețea pe termen lung a dispozitivului și reduce numărul
de componente ale liniei de producție. DS3231 este disponibil în intervale de temperatură
comerciale și industriale, utilizând un pachet de 16-pini de 300 ml SO.
RTC menține informații secunde, minute, ore, zi, dată, lună și an. Mai puțin de 31 de zile din
lună, data de încheiere va fi ajustată automat, inclusiv corecțiile pentru anul bisect. Ceasul
funcționează fie în 24 ore, fie în indicația bandă / AM / PM a formatului de 12 ore. Oferă două
ceasuri de alarmă configurabile și un calendar poate fi setat la o ieșire de undă pătrată. Adresa și
datele sunt transferate în serie printr-o magistrală bidirecțională I2C.

Un circuit de referință de tensiune compensat la temperatură și un comparator de măsurare a


temperaturii monitorizează starea VCC pentru a detecta defecțiunile de alimentare, a furniza o
ieșire de resetare și, dacă este necesar, a comuta automat la sursa de alimentare de rezervă. În
plus, pinul RST este monitorizat ca generând manual resetarea μP.
 Specificație tehnică
- Dimensiuni: 38mm (lungime) x 22mm (Lățime) x 14mm (înălțime)
- Greutate: 8g
- Tensiune de operare: 3.3 - 5.5V
- Cip de ceas: Cip de înaltă precizie DS3231
- Precizia ceasului: intervalul 0-40 ° C, precizia 2ppm, eroarea a fost de
aproximativ 1 minut
- Ceas cu alarmă calendar cu două
- Proiecție de undă programabilă
- Generator de ceasuri în timp real, secunde, minute, ore, zi, data, calendarul lunii și
anului și furnizați valabil până la anul 2100
- Senzorul de temperatură a cipului are o precizie de ± 3 ° C
- Cipuri de memorie: AT24C32 (capacitate de stocare 32K)
- IIC interfață de autobuz, viteza maximă de transmisie de 400KHz (tensiune de
lucru de 5V)
- Poate fi cascadă cu alt dispozitiv IIC, adresele 24C32 pot fi scurtate A0 / A1 / A2
Modifică adresa implicită este 0x57
- Ambalare: un singur ambalaj anti-static

144
 Fenomenul fizic care stă la baza conversiei
RTC înseamnă ceas în timp real. Modulele RTC sunt pur și simplu sistemele de amintire
TIME și DATE, care au setări ale bateriei care, în absența alimentării externe, mențin modul în
funcțiune. Acest lucru pastreaza TIME si DATE actualizate. Deci, putem avea exact TIME și
DATE din modulul RTC ori de câte ori dorim.
Dispozitivul integrează un senzor digital de temperatură foarte precis, prin intermediul
interfeței I2C * pentru a accesa (în același timp). Această precizie a senzorului de temperatură
este de ± 3 ° C. Circuitul de control al sursei de alimentare on-chip poate detecta și gestiona
automat puterea principală și în așteptare (adică bateria de joasă tensiune) pentru a comuta între
sursa de alimentare. Dacă întrerupeți alimentarea cu energie electrică, dispozitivul poate continua
să furnizeze un timp și o temperatură exacte, performanța nu este afectată. Când valoarea
principală de reîncărcare a puterii sau a tensiunii revine la intervalul permis, funcția de resetare
pe cip poate fi utilizată pentru a reporni microprocesorul sistemului.

 Mărimea măsurată.
- Măsurarea timpului (ore/minute/secunde)
- Informații depsre zi,lună,an

 Mediul/modul de comunicație
Comunicarea dintre controler și modul este foarte complexă. De obicei, informațiile sunt trimise
sau primite byte în octet. Deci, folosind bibliotecile care sunt scrise pentru modulul DS3231 este
ideal. Folosirea bibliotecilor face comunicarea ușoară. Tot ce trebuie să faceți este să descărcați
aceste biblioteci și să le apelați în programe. Odată ce fișierul header este inclus, controlerul
efectuează comunicarea de la sine și vă oferă data și ora. De asemenea, ceasul deșteptător poate
fi setat sau schimbat cu ușurință utilizând bibliotecile.

145
6.9. MAGNETIC SPRING
 Specificație tehnică
- Tensiune de lucru: DC 5 V
- Compatibilitate: Arduino
- Material: FR4
- Greutate: 2,92g
-
CARACTERISTICI:

Având o instrucțiune de ieșire a semnalului;


Cu găuri de montare pentru instalare ușoară;
Sentimentul de distanță pentru a sta departe, în măsura în care distanța efectivă de detectare
este de până la 5 cm, (cu intensitatea câmpului);
Sensori magnetici cu sensibilitate ridicată;
Placa circuitului comutatorului de ieșire poate fi conectată direct la portul IO al
microcontrolerului;
Poate fi folosit pentru detectarea magnetică, detectarea poziției și alte ocazii.

 Fenomenul fizic care stă la baza conversiei


Senzorul are 3 componente principale pe placa de circuit. Mai întâi, unitatea de senzori din
partea frontală a modulului care măsoară zona fizic și trimite un semnal analog pe cel de-al
doilea unitate, amplificatorul. Amplificatorul amplifică semnalul, în funcție de valoarea
rezistentă a potențiometrului, și trimite semnalul la ieșirea analogică a modulului.
A treia componentă este un comparator care comută digitalul și LED-ul dacă semnalul se află
sub o valoare specifică.

146
 Mărimea măsurată.
- Temperatura (Măsurarea temperaturii)
- Rotații (rotary encoder)
Acesta poate detecta si alarme,dar poate fi folosit și ca întrerupător de proximitate

 Mediul/modul de comunicație
Dacă a fost detectat un câmp magnetic, acesta va fi afișat la ieșirea digitală.
Din această cauză vom obține o conexiune electrică și vom trimite semnalul
- Exit digital: După detectarea unui câmp magnetic, va fi afișat un semnal
- Analog Out: măsurarea directă a unității senzor

6.10. DIGITAL TEMPERATURE


Sensibilitatea la temperatură este omniprezentă. Din punct de vedere istoric, senzorii de
temperatură au avut aplicații bine cunoscute în controlul mediului și al proceselor, precum și în
încercări, măsurători și comunicații. Aplicațiile contemporane includ toate celelalte, plus aplicații
de consum de mare volum, o gamă largă de aplicații pentru automobile și produse medicale din
imaginile RMN pentru scanere portabile cu ultrasunete.
 Specificație tehnică
- Interfața unică 1-Wire® necesită numai un singur port pentru comunicație
- Fiecare dispozitiv are un cod serial unic pe 64 de biți stocat pe un ROM la bord
- Capacitatea Multidrop simplifică aplicațiile de detectare a temperaturii distribuite
- Nu necesită componente externe
- Poate fi alimentat de la linia de date.
- Intervalul de alimentare este de 3.0V până la 5.5V
- Măsoară temperaturi de la -55 ° C la + 125 ° C (-67 ° F până la + 257 ° F) ± 0,5 °
C acuratețea de la -10 ° C la + 85 ° C
- Rezoluția termometrului este selectabilă de la 9 la 12 biți
- Convertește temperatura la cuvântul digital pe 12 biți în 750 ms (max.)
- Setările de alarmă nedovolate (NV) definite de utilizator

147
- Comanda de căutare alarmei identifică și adresează dispozitive ale căror
temperatură se află în afara limitelor programate (condiție de alarmă de
temperatură)
- Aplicațiile includ controale termostatice, sisteme industriale, produse de consum,
termometre sau orice sistem sensibil termic
 Fenomenul fizic care stă la baza conversiei
La senzorii de temperatură de ieșire digitală, o versiune amplificată a VBE de la tranzistorul
de sens poate fi comparată cu o referință de tensiune de bandgap și rezultatul intrării într-un S-
sau registru succesiv de aproximare ADC pentru a furniza o ieșire digitalizată. Precizia poate fi
de 13 sau 16 biți, bitul cel mai puțin semnificativ folosit ca bit semn.
O schemă alternativă de ieșire digitală utilizează modulația pulsului (PWM), cu o
temperatură proporțională cu raportul timpului de pornire / oprire. Deoarece timpul de
funcționare este fix, acești senzori pot fi utilizați într-un mod de fotografiere la cerere, pentru a
minimiza consumul de energie.
 Caracteristici
Ce flexibilitate oferă un senzor digital de temperatură?
Registrele pot fi programate pentru temperaturi "ridicate", "scăzute" și "critice" (a se vedea
figura). Valoarea măsurată este comparată cu aceste limite, iar peste evenimente sau sub
evenimente declanșează anumite pini pe pachet. Temperatura măsurată este comunicată
controlerului de sistem printr-o magistrală de serie care este utilizată și pentru configurarea și
pentru încărcarea acestor registre mari, joase și critice.

Alternativ, senzorii de temperatură digital funcționează în mod esențial ca termostatele,


comutând starea lor de ieșire (deschidere-scurgere sau împingere) atunci când este trecut un
punct de declanșare presetat din fabrică. Punctele de trecere merg de la 35 ° C la 115 ° C în 10 °
incremente. Histerezisul poate fi setat printr-un pin extern.

6.11. ANALOG TEMPERATURE


Senzorii de temperatură analogică asigură o ieșire de curent sau de tensiune proporțională
cu temperatura absolută cu o precizie de până la ± 1 ° C.

148
TMP35 / TMP36 / TMP37 sunt senzori de temperatură cu precizie de centigrade de joasă
tensiune. Ele oferă o ieșire de tensiune care este linear proporțional cu temperatura Celsius
(Celsius).TMP35 / TMP36 / TMP37 nu necesită niciun echipament extern calibrare pentru a
oferi o precizie de ± 1 ° C la + 25 ° C și ± 2 ° C peste intervalul de temperatură între -40 ° C și +
125 ° C. Impedanța scăzută la ieșire a modelelor TMP35 / TMP36 / TMP37 și producția sa
liniară și calibrarea precisă simplifică interfața circuite de control al temperaturii și ADC-uri.
Toate cele trei dispozitive sunt destinat funcționării unice de la 2,7 V la 5,5 V maxim. Curentul
de alimentare rulează cu mult sub 50 μA, oferind foarte scăzută de auto-încălzire - mai puțin de
0,1 ° C în aerul încă. În plus, a funcția de oprire este prevăzută pentru a reduce curentul de
alimentare la mai puțin decât 0,5 μA

 Fenomenul fizic care stă la baza conversiei


Acești senzori folosesc o tehnică solidă pentru a determina temperatura. Adică nu folosesc
mercur (cum ar fi termometrele vechi), benzi bimetalice (cum ar fi în unele termometre sau sobe)
și nici nu folosesc termistori (rezistori sensibili la temperatură). În schimb, ei folosesc acest fapt
ca creșterea temperaturii, tensiunea pe o diodă crește la o rată cunoscută. (Tehnic, aceasta este de
fapt căderea de tensiune între bază și emițător - Vbe - a unui tranzistor.) Prin amplificarea precisă
a schimbării de tensiune, este ușor să generați un semnal analogic direct proporțional cu
temperatura. Au existat unele îmbunătățiri ale tehnicii, dar, în esență, modul în care este
măsurată temperatura.

Măsurarea temperaturii folosind senzorul TMP36


Folosind TMP36 este ușor, conectați simplu pinul stâng la putere (2,7-5,5V) și pinul drept la
masă. Apoi pinul de mijloc va avea o tensiune analogică direct proporțională (liniară) cu
temperatura. Tensiunea analogică este independentă de sursa de alimentare.

Pentru a converti tensiunea la temperatură, pur și simplu utilizați formula de bază:


- Temp în ° C = [(Vout în mV) - 500] / 10

149
 Specificație tehnică

6.12. PHOTO INTRREUPTOR


Practic, un întrerupător foto este format din două părți: transmițător și receptor.
Transmițătorul (de exemplu, un LED sau un laser) emite lumină și apoi lumina trece la receptor.
Dacă fasciculul de lumină dintre emițător și receptor este întrerupt de un obstacol, receptorul nu
va detecta nici o lumină de intrare chiar și pentru un moment și nivelul de ieșire se va schimba.
 Specificație tehnică
- Tensiune de operare 3.3 ~ 5V
- Dimensiuni 18.5mm x 15mm [0.728in x 0.591in]

150
 Fenomenul fizic care stă la baza conversiei
Un Photointerr este un fotosensor de tip transmisie, care constă, în mod obișnuit, dintr-un
element emițător de lumină și elemente de recepție a luminii, aliniate una față de cealaltă într-un
singur pachet, care funcționează prin detectarea blocajei luminoase atunci când un obiect țintă
intră între ambele elemente, acționând ca un întrerupător optic .
La ROHM, ne referim la fotosenzori de tip optic ca foto-întrerupătoare.
Spre deosebire de comutatoarele mecanice, photointerruptoarele sunt comutatoare (optice) non-
contact, îmbunătățind fiabilitatea prin împiedicarea uzurii datorită abraziunii (contactului).
 Exemple de aplicații
- Senzori de capăt de bandă
- Senzori de temporizare
- Senzori de margine
- Copiatoare
6.13. TEMPERATURE AND HUMIDITY
Senzorul digital de temperatură și umiditate digital utilizează un senzor de umiditate
capacitiv și un termistor pentru măsurarea aerului înconjurător și scutură un semnal digital pe
pinul de date (nu sunt necesare ace de intrare analogice). Este destul de simplu de utilizat, dar
necesită o sincronizare atentă pentru a obține date. Singurul dezavantaj real al acestui senzor este
că puteți obține doar date noi de la acesta o dată la 2 secunde, deci atunci când folosiți biblioteca
noastră, citirile senzorilor pot avea o vechime de până la 2 secunde.

 Fenomenul fizic care stă la baza conversiei


Senzorii electronici măsoară umiditatea prin măsurarea capacității sau rezistenței probelor de aer.
Pentru un higrometru capacitiv, aerul curge între două plăci metalice. Schimbarea umidității
aerului este direct proporțională cu modificarea capacității între plăci. Într-un higrometru
rezistiv, un polimer ceramic sau conductiv absoarbe umezeala care apoi afectează rezistivitatea
acestuia. este conectat la un circuit în care umiditatea afectează rezistența materialului.
Umiditatea relativă este apoi determinată pe baza modificării curentului.
Gigrometrele sunt adesea echipate cu un senzor de temperatură și un barometru care combină
datele de temperatură și presiune împreună cu modificarea capacității / rezistenței pentru a
măsura umiditatea.

151
Umiditatea este definită ca cantitatea de apă prezentă în aerul din jur. Acest conținut de apă în
aer este un factor cheie în sănătatea omenirii. De exemplu, ne vom simți confortabil chiar dacă
temperatura este 00C cu o umiditate mai mică, adică aerul este uscat.

Dar dacă temperatura este de 100 ° C și umiditatea este ridicată, adică conținutul de apă al
aerului este ridicat, atunci ne vom simți foarte inconfortabil. Umiditatea este, de asemenea, un
factor major pentru utilizarea echipamentelor sensibile cum ar fi electronica, echipamente
industriale, dispozitive sensibile la electrostatice și dispozitive de înaltă tensiune etc. Aceste
echipamente sensibile trebuie să funcționeze într-un mediu de umiditate adecvat pentru
dispozitiv.
Prin urmare, detectarea, măsurarea, monitorizarea și controlul umidității reprezintă o sarcină
foarte importantă. Unele dintre domeniile importante de aplicare pentru detectarea, măsurarea și
controlul umidității sunt menționate mai jos.

 Aplicații ale senzorului de temperature și umiditate


 Domestic: Sensibilizarea și controlul umidității în casele și birourile noastre este
importantă, deoarece condițiile de umiditate mai mari vor afecta fluxul sanguin. Alte zone
includ gătit, plantații interioare etc.
 Industrial: În industriile cum ar fi rafinăriile, industria chimică, metal sau alte industrii în
care sunt utilizate cuptoare, umiditatea ridicată va reduce cantitatea de oxigen din aer și, prin
urmare, va reduce rata de ardere. Alte industrii, cum ar fi prelucrarea alimentelor, textile,
hârtie etc., au nevoie, de asemenea, de controlul umidității.
 Agricultura: Tehnicile de irigare precum irigarea prin picurare necesită un conținut de
umiditate exact pentru plante. De asemenea, umiditatea din sol joacă un rol important în
creșterea corespunzătoare a plantei. Alte zone în care este necesară controlul umidității este
vegetația interioară.
 Electronică și semiconductor: Aproape toate dispozitivele electronice sunt evaluate cu o
gamă de valori de umiditate în care funcționează conform așteptărilor. În general, această
valoare va fi de 10% - 50% Umiditate. Fabrica de semiconductori (fabricile de fabricație)

152
trebuie să mențină valori foarte precise ale temperaturii și umidității, deoarece chiar și
diferența minute poate avea un impact imens asupra producției.
 Medical: Echipamentele medicale precum ventilatoare, incubatoare, sterilizatoare etc.
necesită controlul umidității. Se utilizează, de asemenea, în plante farmaceutice și procese
biologice.

 Specificație tehnică

6.14. SENZORUL HALL


Un senzor de efect Hall este un dispozitiv care este utilizat pentru a măsura magnitudinea unui
câmp magnetic. Tensiunea de ieșire este direct proporțională cu intensitatea câmpului magnetic
prin acesta.
Hall senzorii de efect sunt folosiți pentru detectarea proximității, poziționarea, detectarea vitezei
și aplicațiile de detectare a curentului.

153
Frecvent, un senzor Hall este combinat cu detectarea pragului, astfel încât să acționeze așa cum
se numește un întrerupător. În mod obișnuit, în aplicațiile industriale, cum ar fi cilindrul
pneumatic ilustrat, ele sunt de asemenea utilizate în echipamente de consum; de exemplu, unele
imprimante de calculator le folosesc pentru a detecta hârtia lipsă și deschideți capacul. Acestea
pot fi de asemenea folosite în tastaturi pentru calculatoare, o aplicație care necesită fiabilitate
ultra-ridicată.

Senzorii de hală sunt utilizați în mod obișnuit pentru a testa viteza roților și arborilor, cum ar fi
timpul de aprindere a motorului cu combustie internă, tahometrele și sistemele de frânare
antiblocare. Acestea sunt utilizate în motoare electrice DC fără perii pentru a detecta poziția
magnetului permanent. În roata imaginată cu doi magneți la fel de distanțați, tensiunea de la
senzor va atinge de două ori fiecare revoluție. Acest aranjament este utilizat în mod obișnuit
pentru a regla viteza unităților de disc.

 Specificație tehnică

 Fenomenul fizic care stă la baza conversiei


Principiul de funcționare al senzorului Hall este foarte simplu. Acesta constă, de fapt, dintr-o
bandă de curent purtătoare de curent atunci când această banda metalică de curent este plasată în
interiorul unui câmp magnetic transversal, apoi EMF este dezvoltat de-a lungul marginilor

154
acestei benzi metalice care transportă curent. Mărimea acestui EMF dezvoltat depinde de
densitatea fluxului și de mobilitatea electronului. Această proprietate a acestui conductor care
poartă curent se numește efect Hall. Acest element de efect al halei este folosit în mod obișnuit
pentru detectarea măsurătorilor de câmp magnetic și curent.
 Tipuri de senzori Hall
 Senzor Hall Analogic- Dacă am compara acest senzor cu un senzor de bază pentru
efectul Hall, acest tip de senzor oferă un comportament stabil în mediul zgomotos și are o
gamă largă de tensiuni care să funcționeze. Un circuit senzor de efect analogic este
prezentat în figura de mai jos, care oferă tensiunea de ieșire analogică proporțională cu
câmpul magnetic expus.

 Senzor Hall Digital- Acest tip de senzor are ieșire digitală ON sau OFF, prin urmare,
acest lucru este numit și senzor pentru efectul Hall cu două niveluri. Acest senzor este
aproape identic cu senzorul analogic, dar numai diferența este că există o dependență de
declanșator Schmitt. În acest declanșator Schmitt, se construiește nivelul de asistare
hysteresis thresh și acest ansamblu de dependență de declanșare Schmitt convertește
intrarea analogică în ieșire digitală după compararea ieșirii amplificatorului diferențial cu
tensiuni fixe de referință. Când ieșirea amplificatorului diferențial este mai mare decât
tensiunile de referință fixe, declanșatorul Schmitt va fi activat similar atunci când ieșirea
diferențială a amplificatorului este mai mică decât tensiunile de referință fixe, apoi
declanșatorul Schmitt va fi oprit.
 Aplicații :
- Senzor de poziție

155
- Senzor de curent continuu
- Senzor de curent (folosit atât pentru măsurarea în curent continuu,cât și în
analogic)

6.15. ROTARY ENCODER


Un codificator rotativ este un tip de senzor de poziție care este utilizat pentru determinarea
poziției unghiulare a unui arbore rotativ. Acesta generează un semnal electric, analog sau digital,
în funcție de mișcarea de rotație.
Un codificator rotativ, numit și codificator de arbore, este un dispozitiv electro-mecanic care
convertește poziția unghiulară sau mișcarea unui arbore sau a unei axe la semnale de ieșire
analogice sau digitale.

Există două tipuri principale de encoder rotativ: absolut și incremental. Ieșirea unui codificator
absolut indică poziția curentă a arborelui, făcându-i un traductor de unghi. Ieșirea unui encoder
incremental furnizează informații despre mișcarea arborelui, care în mod obișnuit este prelucrată
în altă parte în informații cum ar fi poziția, viteza și distanța.
Aparatele de codificare rotativă sunt utilizate într-o gamă largă de aplicații care necesită
monitorizarea sau controlul sau ambele sisteme mecanice, inclusiv controale industriale,
robotică, lentile fotografice, dispozitive de intrare pe calculator cum ar fi șoareci optomecanici și
mingi de pistă, platforme radar rotative.

 Specificație tehnică
Dispozitivele de codare rotative DIS sunt disponibile cu următoarele specificații generale:
- Interval de măsurare: 0 - 360 ° (este posibilă o subrealizare)
- Alimentarea cu energie: 5 V dc sau 10 - 30 V dc
- Ieșire analogică: 0 - 5 V sau 4 - 20 mA
- Ieșire digitală: puls A / B (31 - 1,024 ppr) împingere, PWM, redundant
- Nivel de protecție: IP67, (QR40: IP66)
- Rezoluția: 0,09 °
 Modul de funcționare

156
Să aruncăm o privire mai apropiată asupra codorului și să vedem principiul său de funcționare.
Iată cum se generează impulsurile de undă pătrate: codificatorul are un disc cu zone de contact
distanțate uniform care sunt conectate la pinul comun C și alte două știfturi de contact separate A
și B, după cum se arată mai jos.

Când discul va începe să se rotească pas cu pas, pinii A și B vor începe să intre în contact
cu pinul comun, iar cele două semnale de ieșire din undă pătrată vor fi generate în mod
corespunzător.

Orice dintre cele două ieșiri poate fi folosit pentru a determina poziția rotită dacă
numărăm doar impulsurile semnalului. Cu toate acestea, dacă vrem să determinăm și direcția de
rotație, trebuie să luăm în considerare ambele semnale în același timp.

Putem observa că cele două semnale de ieșire sunt deplasate la 90 de grade în afara fazei
una de cealaltă. Dacă codorul se rotește în sensul acelor de ceasornic, ieșirea A va fi înaintea
ieșirii B.

Deci, dacă numărăm pașii de fiecare dată când semnalul se schimbă, de la High la Low
sau de la Low la High, putem observa că la acel moment cele două semnale de ieșire au valori
opuse. Dimpotrivă, dacă codorul se rotește în sens invers acelor de ceasornic, semnalele de ieșire
au valori egale. Prin urmare, având în vedere acest lucru, putem programa cu ușurință controlorul
nostru pentru a citi poziția codorului și direcția de rotație.

157
158

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