Aspecte legate de memoria microcontrolerelor - Universitatea din ...
Aspecte legate de memoria microcontrolerelor - Universitatea din ...
Aspecte legate de memoria microcontrolerelor - Universitatea din ...
Transform your PDFs into Flipbooks and boost your revenue!
Leverage SEO-optimized Flipbooks, powerful backlinks, and multimedia content to professionally showcase your products and significantly increase your reach.
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