14.06.2014 Views

Aspecte legate de memoria microcontrolerelor - Universitatea din ...

Aspecte legate de memoria microcontrolerelor - Universitatea din ...

Aspecte legate de memoria microcontrolerelor - Universitatea din ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Investeşte în oameni!<br />

Proiect cofinanţat <strong>din</strong> Fondul Social European prin Programul Operaţional Sectorial pentru<br />

Dezvoltarea Resurselor Umane 2007 – 2013<br />

Axa prioritară: 1 - Educaţia şi formarea profesională în sprijinul creşterii economice şi <strong>de</strong>zvoltării<br />

societăţii bazate pe cunoaştere<br />

Domeniul major <strong>de</strong> intervenţie: 1.3 - Dezvoltarea resurselor umane <strong>din</strong> educaţie şi formare<br />

Titlul proiectului: FLEXFORM - Program <strong>de</strong> formare profesională flexibilă pe platforme mecatronice<br />

Contract POSDRU/87/1.3/S/64069<br />

Beneficiar: <strong>Universitatea</strong> Tehnică <strong>din</strong> Cluj-Napoca<br />

LUCRARE <strong>de</strong> EVALUARE FINALĂ<br />

UNIVERSITATEA DIN CRAIOVA<br />

CENTRUL REGIONAL DE EDUCAŢIE ŞI FORMARE PROFESIONALĂ FLEXIBILĂ -<br />

CRAIOVA<br />

Program <strong>de</strong> formare continuă: Platforme mecatronice pentru educaţie şi<br />

formare flexibilă<br />

Titlul lucrării: Microcontrolere<br />

Cursant: Prof. Florescu Gabriela<br />

Data sustinerii publice: Iunie, 2012<br />

„Această lucrare a beneficiat <strong>de</strong> suport financiar prin proiectul FLEXFORM - Program <strong>de</strong> formare<br />

profesională flexibilă pe platforme mecatronice, contract nr. POSDRU/87/1.3/S/64069, proiect cofinantat<br />

<strong>din</strong> Fondul Social European prin Programul Operational Sectorial Dezvoltarea Resurselor Umane 2007-<br />

2013”.<br />

1


Investeşte în oameni!<br />

CUPRINS<br />

1. INTRODUCERE pg 3<br />

2. CONŢINUT TEHNIC: pg 5<br />

2.1. Microcontrolere pg 5<br />

2.1.1. UNDE SUNT UTILIZATE MICROCONTROLERELE? pg 7<br />

2.1.2. CARACTERISTICI ARHITECTURALE ALE UNITĂŢII CENTRALE pg 8<br />

2.1.3. ASPECTE LEGATE DE MEMORIA MICROCONTROLERELOR pg 11<br />

2.1.4. LIMBAJE DE PROGRAMARE pg 12<br />

2.1.5. DEZVOLTAREA ŞI TESTAREA APLICAŢIILOR pg 14<br />

2.1.6. CRITERII DE ALEGERE A UNUI MICROCONTROLER pg 17<br />

2.1.7. CU CE SI CUM SE POATE PROGRAMA UN MICROCONTROLER? pg 19<br />

2.2. Aplicaţii pg 20<br />

3. CONCLUZII pg 34<br />

4. BIBLIOGRAFIE pg 35<br />

2


Investeşte în oameni!<br />

Capitolul 1. INTRODUCERE<br />

Conceptul <strong>de</strong> mecatronică s-a născut în Japonia la începutul <strong>de</strong>ceniului al VIII-lea<br />

al secolului trecut. Termenul <strong>de</strong> „mecatronică” a fost brevetat <strong>de</strong> către concernul<br />

Yaskawa Electric Co. şi a fost utilizat pentru a <strong>de</strong>scrie fuziunea tehnologicǎ: mecanicǎ –<br />

electronicǎ – informaticǎ. Tot ceea ce numim azi un produs <strong>de</strong> înaltă tehnicitate, este în<br />

sine un produs mecatronic. Automobilul mo<strong>de</strong>rn, maşinile-unelte cu comandă numerică,<br />

echipamentele periferice ale calculatoarelor, tehnica <strong>de</strong> telecomunicaţii, aparatura <strong>de</strong><br />

cercetare, roboţii, aparatura biomedicală, aparatura electrocasnică etc., sunt doar<br />

câteva exemple <strong>de</strong> produse mecatronice.<br />

Practic, mecatronica este prezentă în toate domeniile <strong>de</strong> activitate, inclusiv în<br />

agricultură şi în construcţii.<br />

Mecatronica s-a născut ca tehnologie şi a <strong>de</strong>venit foarte curând filosofie care s-a<br />

răspândit în întreaga lume, valenţele creatoare fiind confirmate în toate domeniile <strong>de</strong><br />

activitate.<br />

Apariţia mecatronicii este rezultatul firesc al evoluţiei în <strong>de</strong>zvoltarea tehnologică.<br />

Coloana vertebrală a mecatronicii o constituie tehnologia mecanică, care s-a<br />

<strong>de</strong>zvoltat către mecanizare. Progresele în domeniul tehnologiei electronice, apariţia<br />

circuitelor integrate, mici ca dimensiuni, ieftine şi fiabile, au permis inclu<strong>de</strong>rea<br />

electronicii în structurile mecanice. Se realizează astfel primul pas către integrare:<br />

integrarea electromecanică.<br />

Următorul pas în integrare a fost <strong>de</strong>terminat <strong>de</strong> apariţia microprocesoarelor. Cu<br />

aceleaşi caracteristici constructive ca şi circuitele integrate, microprocesoarele au<br />

putut fi integrate în structurile electromecanice realizate anterior. Astfel, acestea pot<br />

preleva informaţii privind atât starea externă, a mediului, cât si cea internă, putând<br />

prelucra şi stoca aceste informaţii şi luând <strong>de</strong>cizii în consecinţă privind comportarea<br />

sistemului.<br />

Mecatronica reprezintă o viziune integratoare în domeniul tehnologic, aşa cum<br />

este sugestiv arătat în figura următoare:<br />

3


Investeşte în oameni!<br />

Conceptul <strong>de</strong> mecatronică<br />

Această imagine sugerează că, în activitatea <strong>de</strong> concepţie, abordarea<br />

tradiţională în baza căreia ingineria mecanică studiază probleme specifice mişcării<br />

maselor, ingineria electrică respectiv electronică studiază probleme specifice mişcării<br />

electronilor, iar informaticienii studiază probleme specifice mişcării informaţiei, nu mai<br />

este posibilă. În structura unui produs mecatronic, practic nu se pot separa cele trei<br />

componente.<br />

În opinia japonezilor, mecatronica este tehnologia mecanică cerută <strong>de</strong> societatea<br />

informaţională, diferenţiindu-se net <strong>de</strong> tehnologia tradiţională, în care elementele <strong>de</strong><br />

bază erau materialul şi energia. În mecatronică, acestor două elemente li se adaugă<br />

informaţia.<br />

În tehnologia mecatronică informaţia este componenta dătătoare <strong>de</strong> ton. Această<br />

poziţie a informaţiei în raport cu materialul şi energia este motivată <strong>de</strong> următoarele:<br />

informaţia asigură satisfacerea nevoilor spirituale ale omului;<br />

numai informaţia asigură creşterea valorii nou adăugate a tuturor<br />

lucrurilor;<br />

informaţia înseamnă cultură.<br />

4


Investeşte în oameni!<br />

Capitolul 2. CONŢINUT TEHNIC<br />

2.1. Microcontrolere<br />

Un microcontroler este în esenţă o configuraţie minimală <strong>de</strong> sistem <strong>de</strong><br />

calcul, capabil să execute la o viteză foarte mare instrucţiunile unui program<br />

stocat în memorie; acest program este o secvenţă logică <strong>de</strong> operaţii ce poate<br />

implementa algoritmii necesari pentru controlul proceselor.<br />

Microcontrolerul are integrat pe acelaşi chip: oscilatorul, <strong>memoria</strong> (RAM,<br />

ROM, EEPROM), numărătoare, blocuri analogice, interfeţe <strong>de</strong> comunicaţie şi<br />

porturi <strong>de</strong> intrare-ieşire. Microcontrolerele sunt caracterizate prin: - dimensiune<br />

redusă a memoriei program şi a memoriei <strong>de</strong> date; - conţin module pentru<br />

interfaţarea atât digitală cât şi analogică cu senzori şi actuatori; - răspund rapid<br />

la evenimente externe; - sunt <strong>de</strong> o mare varietate pentru a putea fi satisfăcute<br />

cerinţele diverselor aplicaţii la un raport preţ / performanţă corespunzător.<br />

5


Investeşte în oameni!<br />

Ceea ce <strong>de</strong>osebeşte fundamental un microcontroler <strong>de</strong> un circuit integrat<br />

analogic sau digital, este faptul că el nu poate face nimic dacă nu este<br />

programat. Programul software conferă microcontrolerului, abilitatea <strong>de</strong> a realiza<br />

funcţii diferite cu aceeaşi configuraţie hardware .<br />

Scrierea programului se realizează <strong>de</strong> obicei intr-un editor ce permite<br />

salvarea liniilor <strong>de</strong> comandă introduse. Există mai multe opţiuni pentru scrierea<br />

programului <strong>de</strong> control al aplicatiei şi anume:<br />

• cod masină (cod hexa<strong>de</strong>cimal)<br />

• limbaj <strong>de</strong> asamblare,<br />

• limbaj <strong>de</strong> nivel inalt (C, Pascal, Basic etc)<br />

Comenzile recunoscute <strong>de</strong> microcontroler sunt cele scrise în cod masină.<br />

Limbajul <strong>de</strong> asamblare şi limbajele <strong>de</strong> nivel înalt sunt mai evoluate, contin<br />

instructiuni ce sunt usor <strong>de</strong> retinut, dar pentru transformarea acestora in cod<br />

masină avem nevoie <strong>de</strong> un compilator. Compilatorul este program software, <strong>de</strong><br />

obicei oferit gratuit <strong>de</strong> producătorii <strong>microcontrolerelor</strong>. Pentru a transfera codul<br />

hexa<strong>de</strong>cimal rezultat în urma compilării, în <strong>memoria</strong> ROM (<strong>memoria</strong> program) a<br />

microcontrolerului este nevoie <strong>de</strong> un programator. Programatorul este compus<br />

<strong>din</strong>tr-un modul electronic care asigură interfaţarea între aplicaţia ce conţine<br />

microcontrolerul şi calculator (PC), şi un program software ce rulează pe PC<br />

Resursele integrate la nivelul microcircuitului ar trebui să includă, cel<br />

puţin, următoarele componente:<br />

1. o unitate centrală (CPU), cu un oscilator intern pentru ceasul <strong>de</strong> sistem<br />

2. o memorie locală tip ROM/PROM/EPROM/FLASH şi eventual una <strong>de</strong> tip RAM<br />

3. un sistem <strong>de</strong> întreruperi<br />

4. I/O - intrări/ieşiri numerice<br />

5. un port serial <strong>de</strong> tip asincron şi/sau sincron, programabil<br />

6. un sistem <strong>de</strong> timere-temporizatoare/numărătoare programabile<br />

Este posibil ca la acestea să fie adăugate, la un preţ <strong>de</strong> cost avantajos,<br />

caracteristici specifice sarcinii <strong>de</strong> control care trebuie în<strong>de</strong>plinite:<br />

7. un sistem <strong>de</strong> conversie analog numerică(una sau mai multe intrari analogice)<br />

8. un sistem <strong>de</strong> conversie numeric analogic şi/sau ieşiri PWM (cu modulare în<br />

durată)<br />

9. un comparator analogic<br />

10. o memorie <strong>de</strong> date nevolatilă <strong>de</strong> tip EEPROM<br />

6


Investeşte în oameni!<br />

11. facilităţi suplimentare pentru sistemul <strong>de</strong> temporizare/numărare (captare şi<br />

comparare)<br />

12. un ceas <strong>de</strong> gardă (timer <strong>de</strong> tip watchdog)<br />

13. un RTC(Real Time Clock – ceas,data,calendar)<br />

14. alte protocoale <strong>de</strong> transmisie seriala sau paralela (I2C,SPI, 1WIRE, CAN...)<br />

15. facilităţi pentru optimizarea consumului propriu.<br />

Un microcontroler tipic mai are, la nivelul unităţii centrale, facilităţi <strong>de</strong><br />

prelucrare a informaţiei la nivel <strong>de</strong> bit, <strong>de</strong> acces direct şi uşor la intrări/ieşiri şi<br />

un mecanism <strong>de</strong> prelucrare a intreruperilor rapid si eficient.<br />

Utilizarea unui microcontroler constituie o soluţie prin care se poate<br />

reduce dramatic numărul componentelor electronice precum şi costul<br />

proiectării şi al <strong>de</strong>zvoltării unui produs.<br />

OBSERVAŢIE Utilizarea unui microcontroler, oricât <strong>de</strong> evoluat, nu elimină<br />

unele componente ale interfeţei cu mediul exterior (atunci când ele sunt chiar<br />

necesare): subsisteme <strong>de</strong> prelucrare analogică (amplificare, redresare, filtrare,<br />

protecţie-limitare), elemente pentru realizarea izolării galvanice (optocuploare,<br />

transformatoare), elemente <strong>de</strong> comutaţie <strong>de</strong> putere (tranzistoare <strong>de</strong> putere,<br />

relee electromecanice sau statice).<br />

2.2. UNDE SUNT UTILIZATE MICROCONTROLERELE?<br />

Toate aplicaţiile în care se utilizează microcontrolere fac parte <strong>din</strong><br />

categoria aşa ziselor sisteme încapsulate-integrate (“embed<strong>de</strong>d systems”), la<br />

care existenţa unui sistem <strong>de</strong> calcul incorporat este (aproape) transparentă<br />

pentru utilizator.<br />

Printre multele domenii un<strong>de</strong> utilizarea lor este practic un standard<br />

industrial se pot menţiona: în industria <strong>de</strong> automobile (controlul<br />

aprin<strong>de</strong>rii/motorului, climatizare, diagnoză, sisteme <strong>de</strong> alarmă, etc.), în aşa zisa<br />

electronică <strong>de</strong> consum (sisteme audio, televizoare, camere vi<strong>de</strong>o şi<br />

vi<strong>de</strong>ocasetofoane, telefonie mobilă, GPS-uri, jocuri electronice, etc.), în<br />

aparatura electrocasnică (maşini <strong>de</strong> spălat, frigi<strong>de</strong>re, cuptoare cu microun<strong>de</strong>,<br />

aspiratoare), în controlul mediului şi climatizare (sere, locuinţe, hale industriale),<br />

în industria aerospaţială, în mijloacele mo<strong>de</strong>rne <strong>de</strong> măsurare - instrumentaţie<br />

7


Investeşte în oameni!<br />

(aparate <strong>de</strong> măsură, senzori şi traductoare inteligente), la realizarea <strong>de</strong><br />

periferice pentru calculatoare, în medicină.<br />

Există la ora actuală un număr extrem <strong>de</strong> mare <strong>de</strong> tipuri constructive <strong>de</strong><br />

microcontrolere. Un criteriu <strong>de</strong> clasificare care se poate aplica întot<strong>de</strong>auna este<br />

lungimea (dimensiunea) cuvântului <strong>de</strong> date. Funcţie <strong>de</strong> puterea <strong>de</strong> calcul dorită<br />

şi <strong>de</strong> alte caracteristici se pot alege variante având dimensiunea cuvântului <strong>de</strong><br />

date <strong>de</strong> 4, 8,16 sau 32 <strong>de</strong> biţi (există chiar şi variante <strong>de</strong> 64 <strong>de</strong> biţi!). Nu este<br />

obligatoriu ca dimensiunea cuvântului <strong>de</strong> date să fie egală cu dimensiunea unui<br />

cuvânt maşină (cuvânt program). Există şi multe variante zise <strong>de</strong>dicate,<br />

neprogramabile <strong>de</strong> utilizator la nivel <strong>de</strong> cod maşină, strict specializate pe o<br />

anumită aplicaţie, prin intermediul codului preprogramat şi al resurselor<br />

hardware, utilizate pentru comunicaţii, controlul tastaturilor, controlul aparaturii<br />

audio/vi<strong>de</strong>o, prelucrarea numerică a semnalului, etc.<br />

Practic, toate microcontrolerele se realizează la ora actuală în tehnologie<br />

CMOS. Se pot realiza astfel structuri cu o mare <strong>de</strong>nsitate <strong>de</strong> integrare, cu un<br />

consum redus (care va <strong>de</strong>pin<strong>de</strong> <strong>de</strong> frecvenţa <strong>de</strong> lucru).Logica internă este<br />

statică (total sau în cea mai mare parte) permiţând astfel, în anumite condiţii,<br />

micşorarea frecvenţei <strong>de</strong> ceas sau chiar oprirea ceasului în i<strong>de</strong>ea optimizării<br />

consumului.Tehnologia este caracterizată şi <strong>de</strong> o imunitate mai mare la<br />

perturbaţii, esenţială într-un mare număr <strong>de</strong> aplicaţii specifice. Se realizează<br />

variante pentru domeniu extins al temperaturii <strong>de</strong> funcţionare (<strong>de</strong> ex. - 40 la +135<br />

C).<br />

Există foarte multe variante <strong>de</strong> încapsulare (capsule <strong>de</strong> plastic şi mai rar <strong>de</strong><br />

ceramică),multe <strong>din</strong> ele <strong>de</strong>stinate montării pe suprafaţă (SMD): SOIC, PLCC,<br />

PQFP, TQFP (x100pini), etc., dar şi variante clasice cu pini tip DIP/DIL (tipic <strong>de</strong><br />

la 8 la 68 pini).<br />

2.3. CARACTERISTICI ARHITECTURALE ALE UNITĂŢII CENTRALE<br />

Arhitectura unităţii centrale <strong>de</strong> calcul (CPU) este unul <strong>din</strong> elementele cele<br />

mai importante care trebuie avut în ve<strong>de</strong>re în analiza oricărui sistem <strong>de</strong> calcul.<br />

Principalele concepte luate în consi<strong>de</strong>rare şi întâlnite aici sunt următoarele:<br />

8


Investeşte în oameni!<br />

a. Arhitecturi <strong>de</strong> tip " von Neumann "<br />

Cele mai multe microcontrolere sunt realizate pe baza acestei arhitecturi <strong>de</strong><br />

sistem.<br />

Microcontrolerele bazate pe această arhitectură au o unitate centrală<br />

(CPU) caracterizată <strong>de</strong> existenţa unui singur spaţiu <strong>de</strong> memorie utilizat pentru<br />

memorarea atât a codului instrucţiunilor cât şi a datelor ce fac obiectul<br />

prelucrării. Există <strong>de</strong>ci o singură magistrală internă (bus) care este folosită<br />

pentru preluarea a instrucţiunilor (fetch opcod) şi a datelor; efectuarea celor<br />

două operaţii separate, în mod secvenţial, are ca efect, cel puţin principial,<br />

încetinirea operaţiilor. Este arhitectura standard (cea mai <strong>de</strong>s întâlnită) şi pentru<br />

microprocesoarele <strong>de</strong> uz general.<br />

b. Arhitecturi <strong>de</strong> tip " Harvard "<br />

La această arhitectură există spaţii <strong>de</strong> memorie separate pentru program şi<br />

date. În consecinţă ar trebui să existe şi magistrale separate (<strong>de</strong> adrese şi date)<br />

pentru codul instrucţiunilor şi respectiv pentru date. Principial există astfel<br />

posibilitatea execuţiei cvasiparalele (suprapunerii) a celor două operaţii<br />

menţionate anterior. Codul unei instrucţiuni poate fi preluat <strong>din</strong> memorie în timp<br />

ce se execută operaţiile cu datele aferente instrucţiunii anterioare. Este posibilă<br />

9


Investeşte în oameni!<br />

(cel puţin teoretic) o execuţie mai rapidă, pe seama unei complexităţi sporite a<br />

microcircuitului, mai ales atunci când există şi un pipeline. Este arhitectura<br />

standardpentru procesoarele numerice <strong>de</strong> semnal (DSP). Datorită costului mare<br />

al implementării uneiastfel <strong>de</strong> arhitecturi, în cazul <strong>microcontrolerelor</strong> se<br />

întâlneşte mai ales o arhitectură Harvard modificată, cu spaţii <strong>de</strong> memorie<br />

separate pentru program şi date, dar cu magistrale comune pentru adrese şi<br />

date.<br />

c. CISC<br />

Aproape toate microcontrolerele au la baza realizării CPU conceptul CISC<br />

(Complex Instruction Set Computer). Aceasta înseamnă un set uzual <strong>de</strong> peste<br />

80 instrucţiuni, multe <strong>din</strong> ele foarte puternice şi specializate. De obicei multe <strong>din</strong><br />

aceste instrucţiuni sunt foarte diferite între ele: unele operează numai cu<br />

anumite spaţii <strong>de</strong> adrese sau registre, altele permit numai anumite moduri <strong>de</strong><br />

adresare, etc. Pentru programatorul în limbaj <strong>de</strong> asamblare există unele<br />

avantaje prin utilizarea unei singure instrucţiuni complexe în locul mai multor<br />

instrucţiuni simple (analog macroinstrucţiunilor clasice <strong>din</strong>tr-un limbaj <strong>de</strong><br />

asamblare) .<br />

10


Investeşte în oameni!<br />

d. RISC<br />

RISC (Reduced Instruction Set Computer) este un concept <strong>de</strong> realizare a<br />

CPU care a început să fie utilizat cu succes <strong>de</strong> ceva timp şi la realizarea<br />

<strong>microcontrolerelor</strong>. Prin implementarea unui set redus <strong>de</strong> instrucţiuni care se pot<br />

executa foarte rapid şi eficient, se obţine o reducere a complexităţii<br />

microcircuitului, suprafaţa disponibilizată putând fi utilizată în alte scopuri.<br />

Printre caracteristicile asociate <strong>de</strong> obicei unui CPU RISC se pot menţiona:<br />

- arhitectură Harvard modificată sau von Neumann<br />

- viteză sporită <strong>de</strong> execuţie prin implementarea unui pipeline pentru instrucţiuni<br />

- set <strong>de</strong> instrucţiuni ortogonal (simetric): orice instrucţiune operează cu orice<br />

spaţiu <strong>de</strong> adrese (<strong>de</strong> memorie) sau orice registru, instrucţiunile nu prezintă<br />

combinaţii speciale, excepţii, restricţii sau efecte colaterale.<br />

2.4. ASPECTE LEGATE DE MEMORIA MICROCONTROLERELOR<br />

În afară <strong>de</strong> <strong>memoria</strong> locală <strong>de</strong> tip RAM, <strong>de</strong> dimensiuni relativ reduse (<strong>de</strong> la<br />

x10 octeţi la x1k), implementată ca atare sau existentă sub forma unui set <strong>de</strong><br />

registre şi <strong>de</strong>stinată memorării datelor (variabilelor), mai există o serie <strong>de</strong><br />

aspecte specifice, marea majoritate a acestora fiind legată <strong>de</strong> implementarea<br />

fizică a memoriei <strong>de</strong> program (şi eventual a unei părţi a memoriei <strong>de</strong> date) cu<br />

ajutorul unor memorii nevolatile. Clasic, <strong>memoria</strong> <strong>de</strong> program era implementată<br />

într-o variantă <strong>de</strong> tip ROM : EPROM pentru <strong>de</strong>zvoltare şi producţie pe scară<br />

mică/medie sau mask-ROM pentru producţia <strong>de</strong> masă.<br />

Principalele concepte noi apărute <strong>de</strong> a lungul timpului în legătură cu<br />

implementarea memoriei <strong>de</strong> program sau date sunt enumerate în continuare.<br />

a. OTP - majoritatea producătorilor oferă variante <strong>de</strong> microcontrolere la care<br />

<strong>memoria</strong> locală <strong>de</strong> program este <strong>de</strong> tip OTP (One Time Programmable), practic<br />

o memorie PROM i<strong>de</strong>ntică intern cu varianta EPROM, dar fără fereastra <strong>de</strong> cuarţ<br />

pentru ştergere (<strong>de</strong>ci şi mai ieftine); aceste variante pot fi utilizate ca o<br />

alternativă pentru o producţie limitată, până în momentul testării şi validării<br />

finale a codului, moment în care pot fi comandate variantele (mask) ROM<br />

propriu-zise, cele mai economice pentru o producţie <strong>de</strong> masă<br />

11


Investeşte în oameni!<br />

b. FLASH EPROM - este o soluţie mai bună <strong>de</strong>cât EPROM-ul propriu-zis atunci<br />

când este necesar un volum mare <strong>de</strong> memorie program (nevolatilă); mai rapidă<br />

şi cu un număr garantat suficient <strong>de</strong> mare (x10000) <strong>de</strong> cicluri <strong>de</strong> programare (<strong>de</strong><br />

ştergere/scriere), este caracterizată şi prin modalităţi mai flexibile <strong>de</strong><br />

programare; este utilizată numai ca memorie <strong>de</strong> program.<br />

c. EEPROM - multe microcontrolere au şi o memorie <strong>de</strong> acest tip, <strong>de</strong><br />

dimensiune limitată (<strong>de</strong> la x10 octeţi la x K octeţi), <strong>de</strong>stinată memorării unui<br />

număr limitat <strong>de</strong> parametrii (memorie <strong>de</strong> date) care eventual trebuie modificaţi<br />

<strong>din</strong> timp în timp; este o memorie relativ lentă (la scriere), dar cu un număr <strong>de</strong><br />

cicluri <strong>de</strong> ştergere/scriere mai mare ca FLASH-ul<br />

d. NOVRAM (RAM nevolatil) - realizat prin alimentarea locală (baterie,<br />

acumulator) a unui masiv RAM CMOS atunci când este necesar un volum mare<br />

<strong>de</strong> memorie <strong>de</strong> program şi date nevolatilă; mult mai rapidă <strong>de</strong>cât toate celelalte<br />

tipuri şi fără limitări ca număr <strong>de</strong> cicluri.<br />

e. Memoria externă <strong>de</strong> program sau date.Marea majoritate a familiilor <strong>de</strong><br />

microcontrolere permit si utilizarea <strong>de</strong> memorie externă <strong>de</strong> program (tipic ROM)<br />

sau date (tipic RAM). Aceasta presupune existenta si utilizarea unor magistrale<br />

externe <strong>de</strong> adrese si date. Conexiunile externe necesare pentru acestea sunt<br />

disponibile ca funcţii alternative ale pinilor. Din păcate, in această situaţie<br />

numărul <strong>de</strong> conexiuni exterioare disponibile pentru interfaţa cu exteriorul se<br />

reduce dramatic, reducând mult <strong>din</strong> versatilitatea microcontrolerului. Mai mult la<br />

variantele constructive cu un număr mic <strong>de</strong> pini (conexiuni externe) nu este<br />

posibilă utilizarea <strong>de</strong> memorie externă, <strong>de</strong>cât, eventual, intr-o variantă cu<br />

interfaţă serială (memorie RAM, FLASH sau EEPROM cu interfaţă I2C, SPI,<br />

etc.) si numai ca memorie <strong>de</strong> date.<br />

2.5. LIMBAJE DE PROGRAMARE<br />

Limbajul maşină şi cel <strong>de</strong> asamblare<br />

Limbajul maşină (instrucţiunile maşină) este singura formă <strong>de</strong> reprezentare<br />

a informaţiei pe care un microcontroler o "înţelege".Din păcate această formă <strong>de</strong><br />

reprezentare a informaţiei este total nepractică pentru un programator, care va<br />

12


Investeşte în oameni!<br />

utiliza cel puţin un limbaj <strong>de</strong> asamblare, în care o instrucţiune are drept<br />

corespon<strong>de</strong>nt o instrucţiune în limbaj maşină.<br />

Un program în limbaj <strong>de</strong> asamblare este rapid şi compact. Aceasta nu<br />

înseamnă că un astfel <strong>de</strong> program, prost scris, nu poate fi lent şi <strong>de</strong> mari<br />

dimensiuni, programatorul având ontrolul total pentru execuţia programului şi<br />

gestiunea resurselor. Utilizarea numai a limbajului <strong>de</strong> asamblare pentru<br />

<strong>de</strong>zvoltarea unei aplicaţii complexe este neproductivă <strong>de</strong> multe ori, <strong>de</strong>oarece<br />

există şi familii <strong>de</strong> microcontrolere cu CPU <strong>de</strong> tip CISC care au un număr foarte<br />

mare <strong>de</strong> instrucţiuni (x100) combinate cu moduri <strong>de</strong> adresare numeroase şi<br />

complicate.<br />

Totuşi, nu trebuie uitat că la ora actuală mulţi <strong>din</strong> producătorii mari <strong>de</strong><br />

microcontrolere oferă medii <strong>de</strong> <strong>de</strong>zvoltare software gratuite care includ<br />

programe asambloare gratuite. De asemenea, comunitatea utilizatorilor<br />

diverselor familii <strong>de</strong> microcontrolere a <strong>de</strong>zvoltat şi ea, în timp, multe astfel <strong>de</strong><br />

asambloare, care sunt disponibile ca freeware.<br />

Interpretere<br />

Un interpreter este o implementare a unui limbaj <strong>de</strong> nivel înalt, mai apropiat<br />

<strong>de</strong> limbajul natural. Caracteristic pentru execuţia unui program interpretat, este<br />

citirea şi executarea secvenţială a instrucţiunilor (instrucţiune cu instrucţiune).<br />

De fapt fiecare instrucţiune <strong>de</strong> nivel înalt este interpretată într-o secvenţă <strong>de</strong><br />

instrucţiuni maşină care se execută imediat.<br />

Cele mai răspândite interpretere sunt cele pentru limbajele C++,BASIC şi<br />

JAVA .<br />

Marele avantaj al utilizării unui interpreter este <strong>de</strong>zvoltarea interactivă şi<br />

incrementală a aplicaţiei: se scrie o porţiune <strong>de</strong> cod care poate fi testată<br />

imediat, instrucţiune cu instrucţiune; dacă rezultatele sunt satisfăcătoare se<br />

poate continua cu adăugarea <strong>de</strong> astfel <strong>de</strong> porţiuni până la finalizarea aplicaţiei.<br />

Compilatoare<br />

Un compilator combină uşurinţa în programare oferită <strong>de</strong> un interpreter (<strong>de</strong><br />

fapt <strong>de</strong> limbajul <strong>de</strong> nivel înalt) cu o viteză mai mare <strong>de</strong> execuţie a codului.<br />

Pentru aceasta programul, în limbaj <strong>de</strong> nivel înalt, este translatat (tradus) direct<br />

în limbaj maşină sau în limbaj <strong>de</strong> asamblare . Codul maşină rezultat are<br />

13


Investeşte în oameni!<br />

dimensiuni relativ mari (dar mai mici <strong>de</strong>cât cel interpretat) şi este executat<br />

direct, ca un tot, <strong>de</strong> microcontroler. De regulă codul generat poate fi optimizat<br />

fie ca dimensiune, fie ca timp <strong>de</strong> execuţie.<br />

Cele mai populare şi utilizate sunt cele pentru limbajul C.<br />

Deci codul este obţinut cu ajutorul unui mediu integrat <strong>de</strong> <strong>de</strong>zvoltare a<br />

programelor (IDE-Integrated Development Environment) care conţine în mod<br />

tipic următoarele componente software:<br />

- un editor specializat (orientat pe codul sursă),<br />

- un asamblor/compilator,<br />

- un editor <strong>de</strong> legături/locator ("link-editor/locator"),<br />

- programe <strong>de</strong> gestiune a unor biblioteci <strong>de</strong> cod ("librarians"),<br />

- programe <strong>de</strong> conversie a formatelor <strong>de</strong> reprezentare a codului (<strong>de</strong> exemplu <strong>din</strong><br />

binar în format Intel HEX )<br />

- un simulator şi/sau <strong>de</strong>panator ("<strong>de</strong>bugger")<br />

- posibilitatea <strong>de</strong> atasare a unui programator ICSP<br />

2.6. DEZVOLTAREA ŞI TESTAREA APLICAŢIILOR<br />

Cele mai răspândite mijloace hardware/software utilizate în <strong>de</strong>zvoltarea şi<br />

testarea aplicaţiilor sunt enumerate în continuare.<br />

a. Simulatoarele .<br />

Un simulator este un program care rulează programul microcontrolerului -<br />

implementează un microcontroler virtual - folosind un sistem <strong>de</strong> calcul gazdă un<br />

PC. Programul se poate executa pas cu pas, conţinutul variabilelor şi registrelor<br />

poate fi vizualizat şi modificat. Reprezintă un punct <strong>de</strong> plecare atunci când se<br />

abor<strong>de</strong>ază un microcontroler, pentru familiarizarea cu resursele lui şi cu limbajul<br />

<strong>de</strong> asamblare. Nu permite simularea în timp real a întreruperilor şi, <strong>de</strong> regulă,<br />

programul rulează mai încet <strong>de</strong>cât pe maşina reală. De regulă există mijloace<br />

pentru evaluarea vitezei <strong>de</strong> execuţie a codului simulat (ca număr <strong>de</strong> cicluri<br />

maşină sau <strong>de</strong> stări). I<strong>de</strong>al, un simulator ar trebui să permită şi simularea<br />

completă a interacţiunii, cel putin <strong>din</strong> punct <strong>de</strong> ve<strong>de</strong>re logic, cu toate perifericele<br />

disponibile.<br />

14


Investeşte în oameni!<br />

b. Programele <strong>de</strong> <strong>de</strong>panare ("<strong>de</strong>bbugers").<br />

Sunt programe "monitor" care pe maşina ţintă (microcontrolerul) oferind<br />

facilităţi <strong>de</strong> <strong>de</strong>panare similare simulatorului. Interfaţa cu utilizatorul este<br />

realizată prin intermediul unui sistem gazdă (PC) şi/sau a unui terminal<br />

alfanumeric, conectate prin intermediul unui port serial. Utilizează o parte <strong>din</strong><br />

resursele microcontrolerului : memorie <strong>de</strong> program pentru el însuşi (<strong>de</strong> tip ROM)<br />

şi memorie <strong>de</strong> date (RAM) pentru variabile proprii, memorie pentru programul ce<br />

se <strong>de</strong>panează, un port serial pentru comunicaţia cu sistemul gazdă, eventual<br />

întreruperi, etc. Se utilizează <strong>de</strong> regulă împreună cu un sistem <strong>de</strong> <strong>de</strong>zvoltare<br />

(sau evaluare), care este un sistem minimal realizat în jurul microcontrolerului<br />

pe care rulează <strong>de</strong>panatorul, dar având resurse suficiente pentru a permite<br />

testarea şi <strong>de</strong>panarea aplicaţiilor uzuale.<br />

c. Emulatoarele In Circuit (ICE-In Circuit Emulators).<br />

Sunt cele mai eficiente mijloace <strong>de</strong> testare şi <strong>de</strong>zvoltare şi au fost mult timp<br />

cele mai complexe şi mai costisitoare. Presupun existenţa unui hardware<br />

<strong>de</strong>dicat care înlocuieşte practic microcontrolerul (se conectează în locul<br />

acestuia în sistemul pentru care se <strong>de</strong>zvoltă aplicaţia), în acelaşi timp fiind<br />

disponibile toate facilităţile <strong>de</strong>scrise anterior şi altele suplimentare. Permit un<br />

control total al maşinii ţintă (în timp real), fără a folosi nimic <strong>din</strong> resursele. Ele<br />

sunt realizate <strong>de</strong> cele mai multe ori ca un mijloc <strong>de</strong> testare şi <strong>de</strong>panare <strong>de</strong> sine<br />

stătător, conectat la un PC prin intermediul unui port paralel, serial sau USB. Nu<br />

este necesară înlocuirea microcontrolerului <strong>de</strong> pe sistemul ţintă, conectarea cu<br />

acesta făcându-se printr-un număr minim <strong>de</strong> interconexiuni. Exemple <strong>de</strong> astfel<br />

<strong>de</strong> interfeţe ar fi: JTAG/ICE – In Circuit Emulation - la multe familii <strong>de</strong><br />

microcontrolere, BDM (Background Debug Monitor) – pentru<br />

Freescale/Motorola. Existenţa acestui tip <strong>de</strong> interfeţe face posibilă realizarea <strong>de</strong><br />

emulatoare cu un preţ <strong>de</strong> cost mult mai mic <strong>de</strong>cât cele clasice.<br />

d. Simulatoarele <strong>de</strong> sistem<br />

Reprezintă o categorie aparte <strong>de</strong> simulatoare <strong>de</strong>stinate simulării cat mai<br />

complete a sistemului şi a aplicaţiei în ansamblu, cu alte cuvinte a<br />

microcontrolerului împreuna cu o dispozitivele hardware externe. Ele integrează<br />

<strong>de</strong> regula şi un simulator SPICE. Cele mai cunoscute sunt Proteus VSM (Virtual<br />

15


Investeşte în oameni!<br />

System Mo<strong>de</strong>lling) al firmei Labcenter Electronics . Un astfel <strong>de</strong> simulator<br />

permite rularea aplicaţiei (codului), în mod continuu sau pas cu pas şi evaluarea<br />

în <strong>de</strong>taliu a modului cum aceasta (si microcontrolerul) interacţionează cu<br />

hardware-ul extern. El permite ceea ce se numeşte co-simularea (Cosimulation):<br />

interacţiunea <strong>din</strong>tre software-ul microcontrolerului şi dispozitivele<br />

electronice analogice sau numerice conectate cu acesta. Sunt bazate pe<br />

utilizarea unor mo<strong>de</strong>le avansate ale unor familii <strong>de</strong> microcontrolere precum şi pe<br />

mo<strong>de</strong>lele SPICE ale dispozitivelor electronice. Pentru fiecare mo<strong>de</strong>l <strong>de</strong><br />

microcontroler există un asamblor şi un editor <strong>de</strong> legături integrat astfel că se<br />

poate face, în anumite limite, şi <strong>de</strong>zvoltarea codului în asamblare. Pe lângă<br />

aceasta ele au asigurate şi interfeţe corespunzătoare pentru a se putea <strong>de</strong>zvolta<br />

codul cu medii <strong>de</strong> programare consacrate pentru familia respectivă <strong>de</strong><br />

microcontrolere, folosind <strong>de</strong> exemplu un compilator C. Facilităţile <strong>de</strong> simulare a<br />

codului sunt similare celor întâlnite la simulatoarele <strong>de</strong>ja menţionate. Pe lângă<br />

numeroasele dispozitive electronice discrete, circuite integrate analogice sau<br />

numerice, circuite <strong>de</strong> memorie sau periferice,în categoria dispozitivelor externe<br />

se mai pot menţiona şi sisteme <strong>de</strong> afişare (LED, LCD),tastaturi matriciale sau<br />

butoane, relee, etc.<br />

e. Nucleele (sistemele <strong>de</strong> operare) <strong>de</strong> timp real (Real Time kernel, Real Time<br />

Operating System-RTOS)<br />

Pe piaţa <strong>de</strong> software pentru microcontrolere exista şi componente numite<br />

nuclee <strong>de</strong> timp real sau sisteme <strong>de</strong> operare în timp real (RTOS). Un astfel<br />

program <strong>de</strong> sistem <strong>de</strong> nivel profesional este o componenta software scumpă sau<br />

foarte scumpă, funcţie <strong>de</strong> complexitatea lui, <strong>de</strong> accesibilitatea surselor<br />

programului, <strong>de</strong> familia <strong>de</strong> microprocesoare căreia ii este adresat, <strong>de</strong> modul in<br />

care va fi distribuit împreuna cu aplicaţia. Există insă şi variante <strong>de</strong> RTOS, <strong>de</strong><br />

mai mică complexitate, <strong>din</strong> categoria freeware sau shareware, care pot fi<br />

utilizate cu performante mulţumitoare.<br />

Un sistem <strong>de</strong> operare în timp real facilitează crearea aplicaţiilor aşa zise <strong>de</strong><br />

timp real,dar nu garantează şi faptul ca ele chiar se vor executa în timp real,<br />

aceasta <strong>de</strong>pinzând <strong>de</strong> modul în care este utilizat acest software la nivel <strong>de</strong><br />

sistem.<br />

16


Investeşte în oameni!<br />

Spre <strong>de</strong>osebire <strong>de</strong> un calculator cum este PC-ul, un sistem integrat<br />

(embed<strong>de</strong>d system) este proiectat întot<strong>de</strong>auna într-un anumit scop şi are un cod<br />

care se execută aproape întot<strong>de</strong>auna <strong>din</strong>tr-o memorie ROM, fiind <strong>de</strong> presupus<br />

că nu se modifică pe parcursul execuţiei aplicaţiei. Astfel lucrurile sunt uşurate<br />

<strong>de</strong>oarece comportarea sistemului poate specificată complet încă <strong>din</strong> faza <strong>de</strong><br />

proiectare. Din aceasta cauza, în cazul multora <strong>din</strong> aplicaţii, multe probleme se<br />

pot rezolva în timp real şi fără să se utilizeze un RTOS. Esenţială este pană la<br />

urmă calitatea şi competenţa celui care programează aplicaţia !<br />

2.7. CRITERII DE ALEGERE A UNUI MICROCONTROLER<br />

În momentul în care se doreşte alegerea unui microcontroler (sau mai bine<br />

zis a unei familii <strong>de</strong> microcontrolere) pentru <strong>de</strong>zvoltarea unei aplicaţii <strong>de</strong> tip<br />

“embed<strong>de</strong>d system” există mai multe criterii care trebuie luate în consi<strong>de</strong>rare,<br />

ţinând cont <strong>de</strong> implicaţiile multiple ale acestei alegeri. Vom încerca să grupăm<br />

aceste criterii după cerinţele impuse aplicaţiei şi să prezentăm câteva <strong>din</strong><br />

întrebările rezultate, la care trebuie dat un răspuns.<br />

a. Costurile aplicaţiei<br />

• Care va fi scara <strong>de</strong> producţie: prototip, producţie mică/medie sau <strong>de</strong> masă?<br />

• Care sunt costurile permise pentru microcontroler?<br />

• Care sunt costurile permise pentru mediul <strong>de</strong> programare şi <strong>de</strong>zvoltare?<br />

b. Timpul <strong>de</strong> <strong>de</strong>zvoltare al aplicaţiei<br />

• Ce limbaj <strong>de</strong> programare să aleg?<br />

• Ce limbaje <strong>de</strong> programare cunosc bine şi ce medii <strong>de</strong> <strong>de</strong>zvoltare am utilizat?<br />

• Ce modalitate <strong>de</strong> testare şi <strong>de</strong>panare folosesc: simulator, sistem <strong>de</strong><br />

<strong>de</strong>zvoltare, emulator?<br />

c. Caracteristicile fizice<br />

• Care este viteza <strong>de</strong> prelucrare (<strong>de</strong> calcul) necesară?<br />

• De câtă memorie am nevoie pentru program şi respectiv date?<br />

• Va fi necesară si o memorie externă?<br />

• Ce fel <strong>de</strong> alimentare este disponibilă şi care sunt limitările acesteia?<br />

• De câte intrări şi/sau ieşiri am nevoie?<br />

• Ce fel <strong>de</strong> intrări şi/sau ieşiri sunt necesare: intrări/ieşiri analogice, ieşiri<br />

numerice <strong>de</strong> curent mai mare?<br />

17


Investeşte în oameni!<br />

• Care sunt resursele necesare în materie <strong>de</strong> temporizare/numărare si care ar fi<br />

caracteristicile<br />

• lor cele mai importante (rezoluţie, frecventa maxima <strong>de</strong> numărare) ?<br />

• Ce tip <strong>de</strong> capsulă, ce dimensiuni fizice şi număr <strong>de</strong> pini ar trebui să aibă?<br />

• Care este gama temperaturilor <strong>de</strong> lucru necesare?<br />

• Aplicaţia va funcţiona într-un mediu cu caracteristici speciale, <strong>de</strong> exemplu în<br />

care există perturbaţii electromagnetice puternice?<br />

d. Conectivitatea<br />

• Care sunt resursele <strong>de</strong> comunicaţie necesare: câte porturi seriale asincrone şi<br />

cu ce caracteristici, ce tipuri <strong>de</strong> magistrale seriale sincrone sunt disponibile?<br />

• Este necesară o conectivitate Ethernet (o stivă TCP/IP), USB sau wireless<br />

(stive Bluetooth, Zigbee, etc.)?<br />

e. Compatibilitate, scalabilitate şi <strong>de</strong>zvoltarea ulterioară<br />

• Cu ce tipuri <strong>de</strong> circuite se poate interfaţa cât mai simplu: sisteme <strong>de</strong> afişare,<br />

senzori, elemente <strong>de</strong> comandă şi execuţie (relee, motoare <strong>de</strong> cc, motoare pas<br />

cu pas, etc.)?<br />

• Cum se poate realiza extin<strong>de</strong>rea ulterioară, atunci când este necesară?<br />

• Există mai multe variante în familia respectivă <strong>de</strong> microcontrolere, care să<br />

acopere eventualele cerinţe suplimentare în materie <strong>de</strong> viteză <strong>de</strong> lucru,<br />

resurse periferice sau <strong>de</strong> memorie?<br />

f. Alte aspecte<br />

• Ce distribuitori există şi cât sunt <strong>de</strong> accesibili pentru mine?<br />

• Care este suportul oferit <strong>de</strong> fabricant sau distribuitor şicare este baza <strong>de</strong><br />

cunostinţe existentă:site-uri web, documentaţie on-line sau pe CD-uri, note <strong>de</strong><br />

aplicaţii, exemple <strong>de</strong> proiectare (reference <strong>de</strong>signs), software <strong>din</strong> categoria<br />

freeware/shareware si, nu în ultimul rând, forumuri <strong>de</strong> discuţii pentru<br />

utilizatori?<br />

• Din păcate răspunsurile la multe <strong>din</strong> aceste întrebări sunt corelate între ele.<br />

Un exemplu este legătura care există între criteriile <strong>de</strong> cost şi cele <strong>de</strong> timp <strong>de</strong><br />

<strong>de</strong>zvoltare.<br />

• Principial, utilizarea unui limbaj <strong>de</strong> nivel înalt împreună cu un emulator pentru<br />

testare şi <strong>de</strong>panare poate duce la scurtarea consistentă a timpului <strong>de</strong><br />

<strong>de</strong>zvoltare. Dar preţul unui compilator este întot<strong>de</strong>auna mai mare <strong>de</strong>cât cel al<br />

18


Investeşte în oameni!<br />

unui asamblor, iar preţul unui emulator este şi el mai mare <strong>de</strong>cât cel al unor<br />

mijloace mai simple <strong>de</strong> testare şi <strong>de</strong>panare.<br />

În practică, <strong>de</strong> cele mai multe ori, alegerea unui microcontroler pentru a<br />

anumită aplicaţie este şi trebuie să fie rezultatul unui compromis.<br />

2.8. CU CE SI CUM SE POATE PROGRAMA UN MICROCONTROLER?<br />

a. Programator specializat extern.(ex.STK200)- este un circuit electronic care<br />

conecteaza un port al PC-ul ( serial,paralel sau USB ) cu pinii <strong>de</strong> programare ai<br />

microcontrolerului. Programatoarele acestea au <strong>de</strong> obicei un soclu ZIP in care<br />

se pot conecta mai multe tipuri <strong>de</strong> microcontrolere in diferite pozitii,pentru ca<br />

pinii <strong>de</strong> programare difera ca pozitie <strong>de</strong> la familie la familie . Unele<br />

programatoare pot programa chiar si diferite familii <strong>de</strong> microcontrolere.<br />

b. Programarea "In System" (ISP-In System Programming) - folosirea unor<br />

memorii nevolatile <strong>de</strong> tip FLASH face posibilă şi "programarea" unui astfel <strong>de</strong><br />

microcontroler fără a-l scoate <strong>din</strong> sistemul în care este încorporat (programare<br />

on-line, In System Programming) ; programarea se face <strong>de</strong> regulă prin<br />

intermediul unei interfeţe seriale <strong>de</strong>dicate <strong>de</strong> tip ISP (poate avea nume diferite)<br />

sau a unei interfeţe standard JTAG.<br />

c. Bootloa<strong>de</strong>r – multe <strong>din</strong> microcontrolerele recente la care <strong>memoria</strong> <strong>de</strong><br />

program este <strong>de</strong> tip FLASH au şi facilitatea (au <strong>de</strong> fapt instrucţiuni <strong>de</strong>dicate<br />

acestui scop) <strong>de</strong> a putea şi scrie în această memorie <strong>de</strong> program fără a utiliza<br />

un circuit <strong>de</strong> programare extern. Astfel în microcontroler poate exista permanent<br />

(rezi<strong>de</strong>nt) un cod <strong>de</strong> mici dimensiuni (<strong>de</strong>numit şi bootloa<strong>de</strong>r) care pur şi simplu<br />

va încărca prin intermediul portului serial (este doar un exemplu) codul utilizator<br />

sau constantele pe care acesta vrea eventual să le actualizeze. Bootloa<strong>de</strong>r-ul<br />

este şi cel care lansează în execuţie programul utilizator după încărcarea<br />

acestuia.<br />

19


Investeşte în oameni!<br />

2.2. Aplicaţii<br />

1. Aprin<strong>de</strong>rea LED-urilor impare<br />

Stuctura programului :<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

output_B(0xAA);<br />

}<br />

void main()<br />

{<br />

output_high (PIN_B7);<br />

output_high (PIN_B5);<br />

output_high (PIN_B3);<br />

output_high (PIN_B1);<br />

}<br />

2. LED care pulsează<br />

Scopul aplicaţiei este aprin<strong>de</strong>rea intermitentă la un anumit interval <strong>de</strong> timp a unui<br />

LED.<br />

Stuctura programului:<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

while(1)<br />

{<br />

output_high (PIN_B0);<br />

<strong>de</strong>lay_ms(500);<br />

output_low(PIN_B0);<br />

<strong>de</strong>lay_ms(500);<br />

}}<br />

3. Trimiterea unui caracter cu ajutorul interfeţei seriale<br />

Aplicatia are drept scop realizarea comunicatiei seriale între PC si microcontroler.<br />

La apăsarea unui buton microcontrolerul va trimite pe serial cifra 1. La eliberarea<br />

butonului va fi trimisă cifra 0.<br />

- la inceputul programului se initializează controlerul AUSART si se stabileste<br />

viteza <strong>de</strong> comunicatie la 9600 bps.<br />

20


Investeşte în oameni!<br />

- Dacă este apăsat butonul conectat la pinul 0 al portului A se trimite caracterul 0<br />

- Dacă butonul nu este apăsat atunci se trimite caracterul 1<br />

Stuctura programului:<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)<br />

void main()<br />

{<br />

while (1)<br />

{<br />

if (!input(PIN_A0))putc(`0`);<br />

else putc(`1`);<br />

<strong>de</strong>lay_ms(20);<br />

}<br />

}<br />

4. Recepţionarea unui octet cu ajutorul interfeţei seriale<br />

Aplicatia are drept scop realizarea comunicaiei seriale intre PC si microcontroler si<br />

afisarea octetului recepionat pe 8 LED-uri.<br />

Pentru transmiterea caracterelor se va utiliza aplicatia creată în acest scop în<br />

mediul LabVIEW.<br />

Stuctura programului :<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)<br />

void main()<br />

{<br />

int1 s=0;<br />

int c=0;<br />

while (!s)<br />

{<br />

c=getc();<br />

output_B(c);<br />

}<br />

}<br />

5. Afişarea pe LCD a unui text<br />

Datorită modului în care este organizat afisajul LCD (<strong>din</strong> digiti), afisarea literelor<br />

este o operatie <strong>de</strong>stul <strong>de</strong> greoaie si restritivă (în sensul că numai anumite litere<br />

care pot fi formate prin dispunerea segmentelor se pot afisa). Pasii care trebuiesc<br />

urmati în acest sens sunt următorii:<br />

- Se va crea octetul <strong>de</strong> date pentru afisarea fiecărei cifre:<br />

- Se vor activa elementele vectorului <strong>de</strong>finit în DigMap<br />

corespunzător literei dorite:<br />

21


Investeşte în oameni!<br />

Programul isi propune să afiseze pe LCD literele „PIC”.<br />

Stuctura programului :<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

#<strong>de</strong>fine DIG1 COM0+22, COM0+23, COM2+23, COM3+22, COM2+22,<br />

COM1+22, COM1+23<br />

#<strong>de</strong>fine DIG2 COM0+06, COM0+21, COM2+21, COM3+6, COM2+6, COM1+6,<br />

COM1+21<br />

#<strong>de</strong>fine DIG3 COM0+03, COM0+11, COM2+11, COM3+03, COM2+03,<br />

COM1+03, COM1+11<br />

void main()<br />

{<br />

int8 n;<br />

setup_lcd (LCD_MUX14,0);<br />

while (1)<br />

{<br />

lcd_symbol(0x9C, DIG1);<br />

lcd_symbol(0x60, DIG2);<br />

lcd_symbol(0xCE, DIG3);<br />

}}<br />

APLICAŢII - INTERFAŢAREA DISPOZITIVELOR PERIFERICE<br />

Aplicaţia 1<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

while(1)<br />

{<br />

output_high (PIN_B1);<br />

<strong>de</strong>lay_ms(500);<br />

output_low(PIN_B1);<br />

<strong>de</strong>lay_ms(500);<br />

}}<br />

Aplicaţia 2<br />

#inclu<strong>de</strong> "16F917.h"<br />

22


Investeşte în oameni!<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

while (1)<br />

{<br />

output_high (PIN_B2);<br />

<strong>de</strong>lay_ms(500);<br />

output_low(PIN_B2);<br />

<strong>de</strong>lay_ms(500);<br />

}}<br />

Aplicaţia 3<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

while(1)<br />

{<br />

output_B (0x01);<br />

<strong>de</strong>lay_ms(500);<br />

output_B(0x00);<br />

<strong>de</strong>lay_ms(500);<br />

}}<br />

Aplicaţia 4<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

while(1)<br />

{<br />

output_B (0x18);<br />

<strong>de</strong>lay_ms(500);<br />

output_B(0x00);<br />

23


Investeşte în oameni!<br />

<strong>de</strong>lay_ms(500);<br />

}}<br />

Aplicaţia 5<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

while(1)<br />

{<br />

output_B (0x18);<br />

<strong>de</strong>lay_ms(500);<br />

output_B(0x42);<br />

<strong>de</strong>lay_ms(500);<br />

}}<br />

Aplicaţia 6<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

while(1)<br />

{<br />

output_B (0x01);<br />

<strong>de</strong>lay_ms(1000);<br />

output_B(0x02);<br />

<strong>de</strong>lay_ms(1000);<br />

output_B(0x04);<br />

<strong>de</strong>lay_ms(2700);<br />

}}<br />

Aplicaţia 7<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

24


Investeşte în oameni!<br />

/*Numeral: 0 1 2 3 4 5 6 7 8 9 blank*/<br />

byte const<br />

digmap[11]={0xFD,0x60,0xDB,0xF3,0x66,0xB7,0xBF,0xE0, 0xFF,oxE7,0x00};<br />

#<strong>de</strong>fine DIG1 COM0+22, COM0+23, COM2+23, COM3+22, COM2+22,<br />

COM1+22, COM1+23<br />

void main()<br />

{<br />

int8 n;<br />

setup_lcd (LCD_MUX14,0);<br />

for(n=0;n


Investeşte în oameni!<br />

APLICAŢII - INTERFAŢAREA SENZORILOR ŞI COMUNICAŢII DE DATE<br />

Aplicaţia 1 – Trimiterea unui caracter cu ajutorul interfeţei seriale<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)<br />

void main()<br />

{<br />

while (1)<br />

{<br />

if (!input(PIN_A0))putc(`0`);<br />

else putc(`1`);<br />

<strong>de</strong>lay_ms(20);<br />

}<br />

}<br />

Aplicaţia 2 – Recepţionarea unui octet cu ajutorul interfeţei seriale<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)<br />

void main()<br />

{<br />

int1 s=0;<br />

int c=0;<br />

while (!s)<br />

{<br />

c=getc();<br />

output_B(c);<br />

}<br />

}<br />

26


Investeşte în oameni!<br />

Aplicaţia 3 – Afişarea pe LCD a unui text<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

#<strong>de</strong>fine DIG1 COM0+22, COM0+23, COM2+23, COM3+22, COM2+22,<br />

COM1+22, COM1+23<br />

#<strong>de</strong>fine DIG2 COM0+06, COM0+21, COM2+21, COM3+6, COM2+6, COM1+6,<br />

COM1+21<br />

#<strong>de</strong>fine DIG3 COM0+03, COM0+11, COM2+11, COM3+03, COM2+03,<br />

COM1+03, COM1+11<br />

void main()<br />

{<br />

int8 n;<br />

setup_lcd (LCD_MUX14,0);<br />

while (1)<br />

{<br />

lcd_symbol(0x9C, DIG1);<br />

lcd_symbol(0x60, DIG2);<br />

lcd_symbol(0xCE, DIG3);<br />

}}<br />

Aplicaţia 4 – Afișarea pe LCD a unei litere recepţionată pe serial<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)<br />

#<strong>de</strong>fine DIG1 COM0+22, COM0+23, COM2+23, COM3+22, COM2+22,<br />

COM1+22, COM1+23<br />

int a;<br />

int s;<br />

void afisare ()<br />

{<br />

if (a=67) lcd_symbol(0x9C, DIG1);<br />

if (a=73) lcd_symbol(0x60, DIG1);<br />

27


Investeşte în oameni!<br />

if (a=80) lcd_symbol(0xCE, DIG1);<br />

}<br />

void main ()<br />

{<br />

setup_lcd (LCD_MUX14,0);<br />

s=kbhit();<br />

while (!s)<br />

{<br />

a=getc();<br />

afisare ();<br />

}}<br />

Aplicaţia 6 – Citirea ADC-ului şi afişarea valorii pe LCD<br />

#inclu<strong>de</strong> "16F917.h"<br />

#<strong>de</strong>vice ADC=10<br />

#<strong>de</strong>fine DIG0 COM2+02<br />

#<strong>de</strong>fine DIG1 COM0+22, COM0+23, COM2+23, COM3+22, COM2+22,<br />

COM1+22, COM1+23<br />

#<strong>de</strong>fine DIG2 COM0+06, COM0+21, COM2+21, COM3+6, COM2+6, COM1+6,<br />

COM1+21<br />

#<strong>de</strong>fine DIG3 COM0+03, COM0+11, COM2+11, COM3+3, COM2+3, COM1+3,<br />

COM1+11<br />

byte const DigMap [10]={0xFD, 0x60, 0xDB, 0xF3, 0x66, 0xB7, 0xBF, 0xE0, 0xFF,<br />

0xE7};<br />

void main()<br />

{<br />

int16 valoare;<br />

float citire;<br />

int mi, hundred, tens, ones;<br />

setup_lcd (LCD_MUX14,0);<br />

setup_adc (ADC_CLOCK_INTERNAL);<br />

setup_adc_ports (sAN0);<br />

set_adc_channel (0);<br />

28


Investeşte în oameni!<br />

while (1)<br />

{<br />

citire=read_adc();<br />

valoare=citire;<br />

hundred=tens=ones=0;<br />

if (valoare>999)<br />

{valoare=valoare-1000; lcd_symbol (0xFF, DIG0);}<br />

else lcd_symbol(0x00, DIG0);<br />

while (valoare>99)<br />

{valoare=valoare-100; hundred++;}<br />

while (valoare>9)<br />

{valoare=valoare-10; tens++;}<br />

ones=valoare;<br />

lcd_symbol(DigMap[ones],DIG1);<br />

lcd_symbol(DigMap[tens],DIG2);<br />

lcd_symbol(DigMap[hundred],DIG3);<br />

}}<br />

29


Investeşte în oameni!<br />

APLICATII MCC<br />

Aplicaţia 1<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

output_D(0x00);<br />

while(1)<br />

{<br />

if (!input(PIN_A0)) output_D (0x80);<br />

else output_D(0x00);<br />

}<br />

}<br />

Aplicaţia 2<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

output_D(0x00);<br />

while(1)<br />

{<br />

if (!input(PIN_A0)) output_D (0x80);<br />

else output_D(0x40);<br />

}<br />

}<br />

Aplicaţia 3<br />

#inclu<strong>de</strong> "16F917.h"<br />

#use <strong>de</strong>lay(clock=8000000)<br />

void main()<br />

{<br />

while(1)<br />

30


Investeşte în oameni!<br />

{<br />

output_high(PIN_D7);<br />

output_low(PIN_D6);<br />

while (!input(PIN_A0))<br />

{<br />

output_low(PIN_D7);<br />

setup_ccp1(ccp_pwm);<br />

set_pwm1_duty(10);<br />

setup_timer_2(T2_DIV_BY_16,250,1);<br />

output_high(PIN_D6);<br />

}<br />

}<br />

}<br />

Aplicaţia 4<br />

#inclu<strong>de</strong> "16F917.h"<br />

#<strong>de</strong>vice ADC=10<br />

#use <strong>de</strong>lay(clock=8000000)<br />

int16 c,d;<br />

viteza (c)<br />

{<br />

setup_ccp1(ccp_pwm);<br />

set_pwm1_duty(c);<br />

setup_timer_2(T2_DIV_BY_16,500,1);<br />

}<br />

void main()<br />

{<br />

setup_adc(ADC_CLOCK_INTERNAL);<br />

setup_adc_ports (sAN0);<br />

set_adc_channel(0);<br />

while(1)<br />

{<br />

31


Investeşte în oameni!<br />

c=read_adc();<br />

if(c512)<br />

{<br />

d=c-512;<br />

viteza(d);<br />

output_D(0x40);<br />

}<br />

}<br />

}<br />

Aplicaţia 5<br />

#inclu<strong>de</strong> "16F917.h"<br />

#<strong>de</strong>vice ADC=10<br />

#use <strong>de</strong>lay(clock=8000000)<br />

int16 c;<br />

int1 d=0;<br />

void inainte()<br />

{<br />

output_D(0x80);<br />

<strong>de</strong>lay_ms(c);<br />

output_D(0x10);<br />

<strong>de</strong>lay_ms(c);<br />

output_D(0x40);<br />

<strong>de</strong>lay_ms(c);<br />

output_D(0x20);<br />

<strong>de</strong>lay_ms(c);<br />

}<br />

void inapoi()<br />

{<br />

output_D(0x20);<br />

32


Investeşte în oameni!<br />

<strong>de</strong>lay_ms(c);<br />

output_D(0x40);<br />

<strong>de</strong>lay_ms(c);<br />

output_D(0x10);<br />

<strong>de</strong>lay_ms(c);<br />

output_D(0x80);<br />

<strong>de</strong>lay_ms(c);<br />

}<br />

void main()<br />

{<br />

setup_adc(ADC_CLOCK_INTERNAL);<br />

setup_adc_ports (sAN0);<br />

set_adc_channel(0);<br />

while(1)<br />

{<br />

c=read_adc();<br />

c=5+c/4;<br />

if(!input(PIN_A1)) d=!d;<br />

<strong>de</strong>lay_ms(5);<br />

if (d==1) inainte ();<br />

else inapoi();<br />

}<br />

}<br />

33


Investeşte în oameni!<br />

Capitolul 3. CONCLUZII<br />

Ca o concluzie, se poate spune ca mecatronica este o sfera interdisciplinara a<br />

stiintei si tehnicii care se ocupa in general <strong>de</strong> problemele mecanicii, electronicii si<br />

informaticii. Totusi, in ea sunt incluse mai multe domenii, care formeaza baza<br />

mecatronicii, si care acopera multe discipline cunoscute, cum ar fi: electrotehnica,<br />

energetica, tehnica <strong>de</strong> cifrare, tehnica microprocesarii informatiei, tehnica reglarii si<br />

altele.<br />

Pentru ca utilizarea lor este <strong>de</strong> foarte ori sinonimă cu i<strong>de</strong>ea <strong>de</strong> control,<br />

microcontrolerele sunt utilizate masiv în robotică şi mecatronică. Conceptul <strong>de</strong><br />

mecatronică este pană la urmă indisolubil legat <strong>de</strong> utilizarea <strong>microcontrolerelor</strong>.<br />

Printre multele domenii un<strong>de</strong> utilizarea lor este practic un standard industrial se<br />

pot menţiona: în industria <strong>de</strong> automobile (controlul aprin<strong>de</strong>rii/motorului, climatizare,<br />

diagnoză, sisteme <strong>de</strong> alarmă, etc.), în aşa zisa electronică <strong>de</strong> consum (sisteme audio,<br />

televizoare, camera vi<strong>de</strong>o şi vi<strong>de</strong>ocasetofoane, telefonie mobilă, GPS-uri, jocuri<br />

electronice, etc.), în aparatura electrocasnică (maşini <strong>de</strong> spălat, frigi<strong>de</strong>re, cuptoare cu<br />

microun<strong>de</strong>, aspiratoare), în controlul mediului şi climatizare (sere, locuinţe, hale<br />

industriale), în industria aerospaţială, în mijloacele mo<strong>de</strong>rne <strong>de</strong> măsurare -<br />

instrumentaţie (aparate <strong>de</strong> măsură, senzori şi traductoare inteligente), la realizarea <strong>de</strong><br />

periferice pentru calculatoare, în medicină - „Johnnie” un robot umanoid <strong>de</strong>stul <strong>de</strong><br />

simplu.<br />

Un număr foarte mare <strong>de</strong> microcontrolere sunt folosite şi <strong>de</strong> aşa zisele jucării<br />

inteligente, <strong>din</strong> care „capetele <strong>de</strong> serie” cele mai cunoscute sunt cei doi roboţi, unul<br />

canin şi altul umanoid: AIBO şi ASIMO.<br />

ASIMO foloseşte 26 <strong>de</strong> microcontrolere numai pentru controlul individual al celor<br />

26 <strong>de</strong> elemente <strong>de</strong> acţionare inteligente (motoare). Tot în categoria roboţilor umanoizi<br />

intra şi QRIO sau HOAP-1. Roboţii respectivi sunt produşi în serie, unii <strong>din</strong>tre ei chiar la<br />

un preţ „accesibil”.<br />

Ca un exemplu <strong>din</strong> industria <strong>de</strong> automobile (automotive industry), un<strong>de</strong> numai la<br />

nivelul anului 1999, un BMW seria 7 utiliza 65 <strong>de</strong> microcontrolere, iar un Merce<strong>de</strong>s <strong>din</strong><br />

clasa S utiliza 63 <strong>de</strong> microcontrolere.<br />

Practic, este foarte greu <strong>de</strong> găsit un domeniu <strong>de</strong> aplicaţii în care să nu se utilizeze<br />

microcontrolerele.<br />

34


Investeşte în oameni!<br />

Capitolul 4. BIBLIOGRAFIE<br />

1. Mircea Niţulescu, Dorian Cojocaru, Cristian Vladu, Sorin Dumitru, Tehnologie şi<br />

educaţie mecatronică. Dezvoltare durabilă. Modul 2 Platforme mecatronice pentru<br />

educaţie şi formare flexibilă, FlexFORM, notiţe <strong>de</strong> curs şi laborator, Craiova, 2011<br />

2. Mircea Ivănescu, Dorian Cojocaru, Ilie Diaconu, Introducere în mecatronică – Editura<br />

Universitaria 2002<br />

3. Constantin Ghiţă – Maşini electrice, Ed Matrix Rom, Bucureşti, 2005<br />

4. Câmpeanu, A., Vlad, I.: Maşini electrice II. Maşina sincronă şi Maşina <strong>de</strong> current<br />

continuu. Craiova, Reprografia Universitatii <strong>din</strong> Craiova, 2003.<br />

5. M. Ganea, T. Barabas, Sisteme Flexibile Roboţi şi linii flexibile, Editura Universităţii<br />

<strong>din</strong> Ora<strong>de</strong>a, 2003.<br />

6. M. Ganea, Maşini Unelte şi Sisteme Flexibile, Editura Universităţii <strong>din</strong> Ora<strong>de</strong>a, 2001.<br />

7. Cursul „Dezvoltare tehnologică şi tehnologii educaţionale”<br />

8. http://facultate.regielive.ro/cursuri/electronica/curs-microcontrollere-35709.html<br />

35

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!