Dezvoltarea Automatizării și Robotizării Într–o Serie de Ramuri Industriale
CAPITOLUL I
1.1. SCOPUL LUCRĂRII
Dezvoltarea automatizării și robotizării într–o serie de ramuri industriale importante ca industria constructoare de mașini, industria metalurgică, transporturi, etc. , a fost și este indisolubil legată de dezvoltarea, generalizarea și perfecționarea sistemelor de acționare și măsurare electrică ca forma cea mai eficientă de obținere a energiei mecanice necesare, pe baza conversiei energiei electrice. Se estimează că în prezent peste 50% din energia electrică produsă este consumată în acționări în diferite domenii.
Utilizarea tot mai largă a motoarelor electrice a impus realizarea unor aparate de măsură și sisteme de acționare electrice cât mai performante și mai fiabile cu consum de energie redus și gabarite cât mai mici.
De exemplu, în cazul acționării cu motoare de curent continuu s–a ajuns la game de reglare a turației de 110.000; 130.000 și chiar mai mult, la durate ale regimului tranzitoriu de 30–50ms în întreaga gamă de variație a turației, la precizii ridicate și constanta în timp a mărimii reglate de ordinul 0,1% sau chiar mai restrictivă, la extinderea gamei de putere până la acționări de 10 MW.
Aceste progrese și realizări au fost determinate de cerințele de performanțe tot mai ridicate impuse sistemelor de acționare într–o serie de aplicații: acționările de pe mașini–unelte, roboți industriali, acționări industriale, acționări individuale sau pentru linii tehnologice din industria metalurgică, din industria hârtiei, a fibrelor și firelor sintetice.
Datorită utilizării pe o scară cât mai largă, în orice domeniu, a motoarelor electrice, iar de multe fiind necesară utilizarea unor astfel de motoare pentru comanda unor actionari mecanice, ne-am propus realizarea unui sistem de comanda pentru un troliu actionat la distanta, troliul fiind echipat cu un motor electric.
Pentru aceasta ne propunem realizarea unui circuit cu microcontroler care sa realizeze comanda motorului ce va actiona troliul respectiv; utilizarea unui microcontroler in componenta circuitului poate fi usor dezvoltat ulterior, daca se dorește ca pe o anumită perioadă de timp sau pe parcursul întregii funcționări a motorului sau a mecanismului, turația acestuia să fie înregistrată într–o bază de date, pentru a se ține o statistică a evoluției sistemului din care mecanismul respectiv face parte și pentru o ulterioară corectare a erorilor ce au apărut în proiectarea sistemului de acționare respectiv.
Un factor care a produs mutații marcante în domeniul conducerii și măsurării acționărilor electrice a fost dezvoltarea microelectronicii, care a creat efectiv posibilitatea aplicării extensive a strategiilor moderne de conducere și măsură a căror implementare în tehnica analogică era prohibitivă. Dezvoltarea unor microprocesoare performante pe 16 și 32 biți (8086, 80386 și 80486) a unor coprocesoare aritmetice (8087, 80287 și 80387) ce execută operații de inmulțire pe 32 de biți în mai puțin de 10s, a circuitelor de interfață (de exemplu CAN pe 10–12 biți cu timp de conversie 100 ns–AD7520), constituie baza implementării structurilor și stragediilor moderne de conducere în domeniul sistemelor de acționare electrică.
Trolile
In orice masina de ridicat,indepedenta de modul de actionare sei de felul suspendariisarcini,mecanismul pentru ridicarea sarcinii este neaparat necesar.
Mecanismul de ridicare poate intra ca parte componenta in constructia diverselo feluri de macararele sau este executat ca agregat indepedent,utilizat sau suspendat. La o serie de tipuri de macarale,de exemplu,la podurile rulante,acest mecanism isi pastreaza denumirea sa de mecanism de ridicare a sarcinii pe cand la alte tipuri de macarale (macarale-automobile,pe senile de cale ferata si macarale stationare cu brat),ele se numesc troliu de ridicare montat ca agregat indepedent pe un cadru special.
Trolile se folosesc pe scara larga la lucrari de constructie si montaj,incarcare si descarcare,la plutarit si la corhanit. Utilizare trolilor la corhanitul lemnului a aratat eficitatea lor deosebita in compapratie cu macaralele mobile sau stationare folosite in acelasi scopuri.
Datorita greutati mici,ele sant usor de transportat si de montat direct in parchet si la dispozitivele intermediare si finale
4.1.Clasificarea trolilor
Prin troliu se intelege in general o instalatie de ridicat sau tractiune care consta dintr-un dispozitiv de actionare manual sau mecanic,mecanisme de transmisie si o toba pe care se infasoara cablu (sau lantul). Unele trolii au o roata de cablu in locul tobei.
Varietatea conditilor de expoatare si deosebirile in executia organelor de actionare si de transmisie au dus la aparitia si dezvoltarea unei mari varietatii de trolii.
Troliile pot fi clasificate:dupa felul de actionare,dupa modul de coborare a sarcini,dupa sistemul de transmisie si montare a tobei,dupa felul organului flexibil,dupa numarul tobelor sau dupa modul de amplasare a troliiului.
● Dupa modul actionarii,troliile pot fi manuale sau cu actionare mecanica.
Acestea din urma pot fi actionate electric,cu abursau cu motor cu ardere interna (indepedent,sau de la motorul tractorului sau autocamionului pe care este montat troliul).
● Dupa modul coborari sarcinii,se deosebesc trolile cu coborare libera a sarcinii (neversibil si cu coborarea fortata a sarcini (reversibile). La troliile reversibile,coborarea sarciini se fac cu vitezacostanta,iar la cele nereversibile,cu viteze diferite,cu ajutorul franei.
● Dupa sistemul,troliile se impart in trolii cu transmisie cu roti dintate,cu melc sau cu frictiune,intre toba si motor.
● Dupa felul organului flexibil,troliile pot fi cu cablu sau cu lant. Troliile cu toba cu cablu pot avea cablu fixat pe toba sau nefixat pe toba (toba cu frictiune) sau pot avea toba sau roata de lant.
● Dupa numarul tobelor,troliile pot avea una,doua sau mai multe tobe. Trolile cu o singura toba pot fi orizontale sau verticale (constante).
● Dupa modul de amplasare,troliile pot fi stationare (fixate pe sol sau la perete),deplasabile sau mobile (pe tractor,autocamion sau carucior).
4.2.Troliul manual
Se compune din doua scuturi metalice,solidarizate intre ele prin tiranti. In scuturi se fixeaza lagare in care se sprijina arborii unei transmisii cu rotii dintate ,ce actioneaza tamburul pe care se infasoara cablu de tractiune.
4.3.Troliul mecanic
Destinat deplasari unor sarcini mai mari;are tamburul actionat de un grup motor,alcatuit dintr-un motor electric si un reductor de turatie ca si troliul manual el este prevazut cu organe si mecanisme de siguranta,necesare impiedicari rotiiri tamburului sub actiunea greutati sarcini si derulari cablului cu o anumita viteza.
Orice troliu are doua caracteristicii de baza;
– sarcina maxima pe care o poate ridica direct in tone;
– lungimea cablului infasurat pe tambur in metri (m).
Troliile pot fi utilizate atat pentru ridicarea sarcinilor cat si pentru deplasarea lor pe orizontala. Indiferent de modul de utilizare intodeauna este necesa ca troliul sa se ancoreze prin legarea lui de un stalp sau de un rezem fixat in sol. Cablul troliului este dirijat cu ajutorul unei role de conducere,amplasata in fata troliului,la distanta relativ mare.
4.4. Conditile pe care trebuie sa le indeplineasca troliile avantajele si dezavantajele lor.
Troliile trebuie sa in deplineasca urmatoarele conditii: productivitatea ridicata,posibilitatea de folosire oriunde,greutatea mica,usurinta de transport,simplitate de executie,usurinta la montaj si pret de cost scazut al executiei,montajului si exploatarii.
Fiecare dintre cele doua grupe de trolii (cu frictiune si cu angrenaj),prezinta avantaje si lipsuri,care determina utilizarea lor intr-o anumita directie.
Astfel troliile cu frictiune pot fi utilizate cu un motor cu ardere interna. Din cauza existentei cuplajelor pentru decuplarea tobei de motor,pornirea motorului se poate face fara sarcina. Aceste troli pot fi actionate si de un motor electric in scurtcircuit. In acest caz se asigura o incarcare mai uniforma a retelei electrice,deoarece motorul este conectat permanent si nu este nevoie de conectat de doua ori (la ridicarea si la coborare) in timpul fiecarui ciclu,ca la troliile reversibile.
● Troliile cu frictiune prezinta si dezavantaje astfel la coborare frana se uzeaza mult. Daca mecanicul troliului nu este suficient de atent sarcina poate cadea. Este greu de realizat comanda la distanta sau automata. Afara de acesta,la aceste trolii este greu de obtinut un raport de transmitere exact,decii si o viteza de ridicare asigurata,din cauza ca este posibila alunecarea elementelor,cuplajelor cu frictiune.
● Trolile cu angrenaj prezinta urmatoarele avantaje: lipsa de pericol la coborarea sarcini,simplitatea comenzii,posibilitatea de a obine un raport de transmitere precis,precum si posibilitatea comenzii la distanta.
Dezavantajele pe care le prezinta aceste trolii sant: imposibilitatea coborari accelerate a sarciini si necesita folosirii motoarelor electrice speciale de macara.
Macaralele electrice de macara trebuie folosite deoarece la troliile cu angrenaj ridicarea si coborarea greutati se face in regimul motorului,astfel ca aceasta trebuie sa aiba un cuplu de pornire mare (cam de 2-3 ori mai mare decat cel nominal),un moment de inertie mic,o capacitate ridicata de supraincarcare si,afara de aceasta,trebuie ssa permita un numar mare de cuplari pe ora.
4.5.Organele troliilor
Sasiurile troliilor pot fi de lemn (turnate,sudate sau combinate). Sasiurile sudate necesita metal mai putin decat cele turnate.
Sasiul troliilor se aplica fara fixare pe pastament sau se fixeaza prin suruburi de ancorare,cabluri sau lanturi. La asezarea fara fixare trebuie sa se verifice daca legatura dintre sasiusi baza prezinta un coeficent de siguranta suficient.
Daca stabilitateasasiului este insuficienta aceasta se ingreuneaza dupa asezare prin adaugare de balast,iar in cazul instalari pentru un timp indelungat a troliului intr-un loc,se executa o fixare cu suruburi de ancorare.
Tablele troliilor pot fi asezate pe un ax sau pe un arbore. Ultima varianta este utilizata in cazul instalari unei tobe suplimentare (fig.6.) care serveste la tragerea sarcinii in zona de lucru a macaralei.
Tobele suplimentare au de obicei o forma care sa asigure alunecarea usoarea a ramurii care se desfasoara a cablului.
Dispozitivele de asezare a cablului se utilizeaza in cazul trolilor cu capacitatea de infasurare mare,pentru a evita infasurarea neregulata a cablului pe toba in cazul infasurari in mai multe straturi sau pentru o infasurare precis cablu pe toba cu sant,intr-un singur strat. Aceste dispozitive pot fi deci destinate fie pentru infasurarea intr-un strat pe tobele cu sant,fie pentru infasurarea in mai multe straturi pe tobele netede.
Principlalul element al primului tip de dispozitiv este inelul 1 (fig.7. a.)care se deplaseaza pe filetul tobei 2.
Inelul este condus cu ghidaje fixate pe sasiu sau pe corpul troliului. La rotirea tobei,filetul imprima inelului o miscare de translatie;in acest timp,arcul plat sau cilindric 3 apasa pe toba spirele de cablu cu ajutorul paharului 4. Ineleu 1 se misca inaintea spirei care se infasoara. La slabirea cablului (dupa indepartatrea sarcinii),arcul 3 impiedica inodarea si incrucisarea cablului. Dispozitivele de tip al doilea este aratat in (fig.7. b.),
iar un troliu cu dispozitiv cu un singur surub,in (fig.8 A I si II).
Dispozitivele de asezare a cablului araatat in (fig.81 A)consta din doua ghidaje 1,pe care se deplaseaza cadrul 2 legat prin suveica 3 cu surubul 4. Surubul are filete pe dreapta si pe stanga,taiate suprapus.
Surubul 4,prin roata 5 si transmisia cu lant 6,este rotit de mecanismul de actionare a troliului.
La rotirea surubului,suveica 3,care se deplaseaza in adanciturile filetului,deplaseaza cadrul 2 impreuna cu scripetele,de ghidare 7 al cablului care se infasoara.
Dupa ce a trecut printr-un strat,suveica,prin gaura de capat a surubului 4,merge in sens invers de-a lungul filetului,astfel incat scripetele 7 se deplaseaza in sens invers.
La dispozitivele cu doua suruburi (fig.8 B) principalul este intrun totul asemanataor celui descris mai sus;in acest caz,in locul a doua ghidaje si a unui surub,pentru aigurarea unei stabilitati suficiente,se utilizeaza doua suruburi. Turatia si pasul surubului le dispozitivele de asezare a cablului corespund pasului de infasurar a cablului si turatiei tobei.
Din punct de vedere al modului de actionare, troliile pot fi manuale – actionate manual printr-o manivela cu demultiplicare, mecanice – actionate de un arbore motor/priza de putere de la motorul vehiculului, hidraulice – actionate de un motor hidraulic cuplat la instalatia de presiune hidraulica a vehiculului, si electrice – actionate, evident, de un motor electric.
Deoarece troliile mecanice sunt specifice unui anumit tip de vehicul, neputind fi adaptate pe orice masina, iar troliile manuale sufera de un disconfort evident in utilizare, este clar de ce piata este dominata de oferta de trolii hidraulice si electrice.
Din punct de vedere constructiv, un troliu electric, cel mai reprezentativ, se compune din :
• motor de actionare, electric, la 12V sau 24V, curent continuu. Principalele probleme la aceste motoare apar din cauza incalzirii in timpul functionarii, datorita curentilor foarte mari absorbiti (chiar sute de amperi).
• cutia de comanda, in interiorul careia se afla bobinele ce comanda pornirea-oprirea troliului (motorului). In mod normal se folosesc aici doua solenoide contactoare, datorita curentilor foarte mari de trecere, unul pentru pornire si celalalt pentru oprire.
• tamburul, din otel special, pe care se infasoara cablul de tractiune. Exista in doua variante constructive, "scurt" si "lung", permitind folosirea unui cablu mai lung sau mai gros.
• frina, ce actioneaza pe interiorul tamburului, are rolul de a se cupla automat imediat ce actionarea tamburului a incetat, blocindu-l pe acesta. Buna sa functionare si eficienta constituie componenta esentiala a securitatii, deoarece asigura blocarea sub sarcina in caz de accidente : oprirea motorului prin defectiune sau pana de curent, socuri in timpul tractarii, scaparea in gol a sarcinii, etc.
• cutia angrenajelor, cuprinzind ansamblul de roti dintate si ambreiajul, actionat de un levier. In pozitia "decuplat", acesta permite derularea libera, cu mina, a cablului, fara a antrena transmisia.
• telecomanda prin cablu, un dispozitiv deosebit de important, pentru comanda de la distanta a troliului, atit din cabina autovehiculului cit si din afara acestuia.
• ghidajul cablului, pentru limitarea unghiurilor in cazul in care tractiunea nu se executa coaxial cu axa vehiculului si pentru a usura infasurarea uniforma a cablului.
• cablul, cel din urma dar nu si cel mai putin important element, este un cablu clasic din fire de otel, dimensionat dupa sarcina prescrisa. Lungimea si grosimea sa sunt deosebit de importante nu numai din calcule de rezistenta, ci si ca potrivire la dimensiunile tamburului (lungime, numar de straturi de infasurari,etc.), ceea ce face ca in general fiecare troliu sa admita propriile sale cabluri.
Montarea unui troliu este o operatie de extrema importanta si trebuie executata cu profesionalism si responsabilitate. Sa ne oprim citeva clipe asupra ei.
Troliul este destinat prin conceptie pentru actiuni de recuperare in pozitia frontala (fata) a vehiculului. (Desigur, pentru utilizari usoare sau pentru modele speciale exista si alte posibilitati de montaj). Prin urmare, el trebuie montat in fata si atasat cit mai solid de sasiu. O pozitionare cit mai aproape de axa longitudinala care trece prin centrul de greutate al masinii este ideala. De multe ori insa acest lucru nu este posibil din cauza barei de soc. O montare prea joasa (sub bara) expune troliul in mod inutil la intemperii si riscuri de accidente prin lovire, iar prea sus (deasupra barei) fiind introduce mari momente de torsiune, incovoiere si chiar rasturnare. Cele mai avantajoase sisteme de montaj sunt pe barele de protectie special concepute pentru masinile de teren ( winch-bars si bullbars), care sunt proiectate pentru fiecare model de vehicul in parte si care nu au deci numai rolul banal de a proteja fata de obstacole. Indiferent de vehicul si de sistem, troliul se fixeaza de lonjeroanele sasiului pe o placa de montaj, iar ghidajul de cablu pe un alt suport in fata sa.
CAPITOLUL II
Descrierea circuitului cu microcontroler
Introducere
Istorie
Microcontrolere contra microprocesoare
2.1 Unitatea de memorie
2.2 Unitatea de procesare
2.3 Bus-ul
2.4 Unitatea intrare-ieșire
2.5 Comunicație serială
2.6 Unitatea de timer
2.7 Watchdog-ul
2.8 Convertorul Analog-Digital
2.9 Programul
Introducere
Circumstanțele în care ne găsim astăzi în domeniul microcontrolerelor și-au avut începuturile în dezvoltarea tehnologiei circuitelor integrate. Această dezvoltare a făcut posibilă înmagazinarea a sute de mii de tranzistoare într-un singur cip. Aceasta a fost un prerechizit pentru producția de microprocesoare, și primele computere au fost făcute prin adăugarea perifericelor ca memorie, linii intrare-ieșire, timeri și altele. Următoarea creștere a volumului capsulei a dus la crearea circuitelor integrate. Aceste circuite integrate conțin atât procesorul cât și perifericele. Așa s-a întâmplat cum primul cip conținând un microcomputer, sau ce va deveni cunoscut mai târziu ca microcontroler a luat ființă.
Istorie
Este anul 1969, și o echipă de ingineri japonezi de la compania BUSICOM sosesc în Statele Unite cu cererea ca unele circuite integrate pentru calculatoare să fie făcute folosind proiectele lor. Propunerea a fost făcută către INTEL, iar Marcian Hoff a fost desemnat responsabil cu acest proiect. Pentru că el era cel ce avea experiență în lucrul cu un calculator ( PC) PDP8, i-a venit să sugereze o soluție diferită fundamental în locul construcției propuse. Această soluție presupunea că funcționarea circuitului integrat este detrminată de un program memorat în el. Aceasta a însemnat că configurația ar fi fost mult mai simplă, dar aceasta ar fi cerut mult mai multă memorie decât ar fi cerut proiectul propus de inginerii japonezi. După un timp, cu toate că inginerii au căutat să caute o soluție mai simplă, ideea lui Marcian a câștigat, și aluat naștere primul microcontroler. În transformarea unei idei într-un produs finit, Frederico Faggin a fost de un ajutor major pentru INTEL. El s-a transferat la INTEL, și doar în 9 luni a reușit să scoată un produs din prima sa concepție. INTEL a obținut drepturile de a vinde acest bloc integral în 1971. În primul rând ei au cumpărat licența de la compania BUSICOM care nu au avut idee ce comoară avuseseră. În timpul acelui an a apărut pe piață un microprocesor numit 4004. Acela a fost primul microprocesor de 4 biți cu viteză 6000 operații pe secundă. Nu mult după aceea, compania americană CTC a cerut de la INTEL și de la Texas Instruments să facă un microprocesor pe 8 biți pentru folosință în terminale. Cu toate că CTC a renunțat la această idee până la sfârșit, INTEL și Texas Instruments au continuat să lucreze la microprocesor și în aprilie 1972 a apărut pe piață primul microprocesor de 8 biți sub numele de 8008. Putea să adreseze 64Kb de memorie și avea 45 de instrucțiuni și viteza de 300.000 de operații pe secundă. Acel microprocesor a fost predecesorul tuturor microprocesoarelor de astăzi. INEL au continuat dezvoltările lor până în aprilie 1974 și au lansat pe piață microprocesorul de 8 biți sub numele de 8080 ce putea adresa 64Kb de memorie și avea 75 de instrucțiuni, iar prețul începuse de la 360$.
Într-o altă companie americană Motorola, și-au dat seama repede ce se întâmpla, așa că au lansat pe piață un microprocesor de 8 biți 6800. Costructor șef era Chuck Peddle și pe lângă microprocesorul propriu-zis, Motorola a fost prima companie care să facă alte periferice ca 6820 și 6850. La acel timp multe companii au recunoscut marea importanță a microprocesoarelor și au început propriile lor dezvoltări. Chuck Peddle părăsește Motorola pentru a se muta la MOS Technology și continuă să lucreze intensiv la dezvoltarea microprocesoarelor.
La expoziția WESCON din Statele Unite din 1975 a avut loc un eveniment critic în istoria microprocesoarelor. MOS Technology a anunțat că produce microprocesoarele 6501 și 6502 la 25$ bucata pe care cumpărătorii le puteau cumpăra imediat. Aceasta a fost atât de senzațional încât au crezut că este un fel de înșelăciune, gândind că competitorii vindeau 8080 și 6800 la 179$. Ca un răspuns la competitorii lor atât INTEL cât și Motorola au scăzut prețurile lor în prima zi a expoziției până la 69.95$ pe microprocesor. Motorola intentează repede proces contra lui MOS Technology și contra lui Chuck Peddle pentru copierea protejatului 6800. MOS Technology încetează de a mai produce 6501 dar continuă să producă 6502. 6502 este un microcontroler pe 8 biți cu 56 de instrucțiuni și o capabilitate de adresare directă de 64Kb de memorie. Datorită costului scăzut, 6502 devine foarte popular, așa că este instalat în computere ca :KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb, Orao, Ultra și multe altele. Curând apar câțiva producători de 6502 (Rockwell, Sznertek, GTE, NCR, Ricoh și Comodore preiau MOS Technology) ce era în momentul prosperității sale vândut la o rată de 15 milioane de microprocesoare pe an!
Alții totuși nu au cedat. Federico Faggin părăsește INTEL, și își pornește propria sa companie Zilog Inc.
În 1976 Zilog anunță Z80. În timpul creării acestui microprocesor, Faggin face o decizie crucială. Știind că un mare număr de programe fuseseră dezvoltate pentru 8080, Faggin își dă seama că mulți vor rămâne fideli acelui microprocesor din cauza marii cheltuieli care ar rezula în urma refacerii tuturor programelor. Astfel el decide că un nou microprocesor trebuie să fie compatibil cu 8080, sau că trebuie să fie capabil să execute toate programele care deja fusese scrise pentru 8080. Înafara acestor caracteristici, multe altele noi au fost adăugate, așa că Z80 a fost un microprocesor foarte puternic la vremea lui. Se putea adresa direct la 64Kb de memorie, avea 176 instrucțiuni, o singură sursă,mult mai mare viteză de lucru etc. Z80 a fost un succes mare și toată lumea a făcut conversia de 8080 la Z80. Se poate spune că Z80 a fost fără nici o îndoială comercial, cel mai de succes microcontroler de 8 biți a acelui timp. Înafară de Zilog, alți noi producători apar de asemenea ca :Mostek, NEC, SHARP și SGS. Z80 a fost inima a multor computere ca :Spectrum, Partner, TRS703, Z-3 și Galaxi aici acasă.
În 1976, INTEL iese pe piață cu o versiune îmbunătățită de microprocesor pe 8 biți numit 8085. Totuși, Z80 era cu mult mai bun încât INTEL a apierdut bătălia. Chiar dacă încă câteva microprocesoare au apărut pe piață (6809,2650,SC/MP etc.), totul fusese de fapt deja hotărât. Nu mai erau de făcut îmbunătățiri importante ca să-i facă pe producători să se convertească spre ceva nou, așa că 6502 și Z80 împreună cu 6800 au rămas ca cei mai reprezentativi ai microprocesoarelor de 8 biți a acelui timp.
Microcontrolere contra Microprocesoare
Microcontrolerul diferă de un microprocesor în multe feluri. În primul rând și cell mai important este funcționalitatea sa. Pentru a fi folosit, unui microprocesor trebuie să i se adauge alte componente ca memorie, sau componente pentru primirea și trimiterea de date. Pe scurt, aceasta înseamnă că microprocesorul este inima computerului. Pe de altă parte, microcontrolerul este proiectat să fie toate acestea într-unul singur. Nu sunt necesare alte componente externe pentru aplicarea sa pentru că toate perifericele necesare sunt deja incluse în el.
Astfel, economisim timpul și spațiul necesare pentru construirea de aparate.
2.1 Unitatea de memorie
Memoria este o parte a microcontrolerului a cărei funcție este de a înmagazina date.
Cel mai ușor mod de a explica este de a-l descrie ca un dulap mare cu multe sertare. Dacă presupunem că am marcat sertarele într-un asemenea fel încât să nu fie confundate, oricare din conținuturile lor vor fi atunci ușor accesibile. Este suficient să se știe desemnarea sertarului și astfel conținuturile lui ne vor fi cunoscute în mod sigur.
Componentele de memorie sunt exact așa. Pentru o anumită intrare obținem conținuturile unei anumite locații de memorie adresate și aceasta este totul. Două noi concepte ne sunt aduse :adresarea și locația de memorie. Memoria constă din toate locațiile de memorie, și adresarea nu este altceva decât selectarea uneia din ele. Aceasta înseamnă că noi trebuie să selectăm locația de memorie la un capăt, și la celălalt capăt trebiue să așteptăm conținuturile acelei locații. Înafară de citirea dintr-o locație de memorie, memoria trebuie de asemenea să permită scrierea în ea. Aceasta se face asigurarea unei linii adiționale numită linie de control. Vom desemna această linie ca R/W (citește /scrie). Linia de control este folosită în următorul fel : dacă r/w=1, se face citirea, și dacă opusul este adevărat atunci atunci se face scrierea în locația de memorie. Memoria este primul element, dar avem nevoie și de altele pentru ca microcontrolerul nostru să funcționeze.
2.2 Unitatea centrală de procesare
Să adăugăm alte 3 locații de memorie pentru un bloc specific ce va avea o capabilitate incorporată de înmulțire, împărțire, extragere și să-i mutăm conținuturile dintr-o locație de memorie în alta. Partea pe care tocmai am adăugat-o este numită "unitatea de procesare centrală" (CPU). Locațiile ei de memorie sunt numite regiștri.
Regiștrii sunt deci locații de memorie a căror rol este de a ajuta prin executarea a variate operații matematice sau a altor operații cu date oriunde se vor fi găsit datele. Să privim la situția curentă. Avem două entități independente (memoria și CPU) ce sunt interconectate, șI astfel orice schimb de informații este ascuns, ca și funcționalitatea sa. Dacă, de exemplu, dorim să adăugăm conținuturile a două locații de memorie și întoarcem rezultatul înapoi în memorie, vom avea nevoie de o conexiune între menmorie și CPU. Mai simplu formulat, trebuie să avem o anumită "cale" prin care datele circulă de la un bloc la altul.
2.3. Bus-ul
Calea este numită "bus"-magistrală. Fizic, el reprezintă un grup de 8, 16, sau mai multe fire. Sunt două tipuri de bus-uri : bus de adresă și bus de date. Primul constă din atâtea linii cât este cantitatea de memorie ce dorim să o adresăm, iar celălalt este atât de lat cât sunt datele, în cazul nostru 8 biți sau linia de conectare. Primul servește la transmiterea adreselor de la CPU la memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.
În ceea ce privește funcționalitatea, situația s-a îmbunătățit, dar o nouă problemă a apărut de asemenea: avem o unitate ce este capabilă să lucreze singură, dar ce nu are nici un contact cu lumea de afară, sau cu noi ! Pentru a înlătura această deficiență, să adăugăm un bloc ce conține câteva locații de memorie a căror singur capăt este conectat la busul de date, iar celălat are conexiune cu liniile de ieșire la microcontroler ce pot fi văzute cu ochiul liber ca pini la componenta electronică.
2.4. Unitatea intrare-ieșire
Aceste locații ce tocmai le-am adăugat sunt numite "porți".Sunt diferite tipuri de porți :intrare, ieșire sau porți pe două-căi. Când se lucrează cu porți, mai întâi de toate este necesar să se aleagă cu ce pot urmează să se lucreze, și apoi să se trimită date la, sau să se ia date de la port.
Când se lucrează cu el portul se comportă ca o locație de memorie. Ceva este pur și simplu scris în sau citit din el, și este posibil de a remarca ușor aceasta la pinii microcontrolerului.
2.5. Comunicația serială
Cu aceasta am adăugat la unitatea deja existentă posibilitatea comunicării cu lumea de afară. Totuși, acest mod de comunicare are neajunsurile lui. Unul din neajunsurile de bază este numărul de linii ce trebuie să fie folosite pentru a transfera datele. Ce s-ar întâmpla dacă acestea ar trebui transferate la distanță de câțiva kilometri? Numărul de linii și numărul de kilometri nu promite costuri eficiente pentru proiect. Nu ne rămâne decât să reducem numărul de linii într-un așa fel încât să nu afectăm funcționalitatea. Să presupunem că lucrăm doar cu 3 linii, și că o linie este folosită pentru trimiterea de date, alta pentru recepție și a treia este folosită ca o linie de referință atât pentru partea de intrare cât și pentru partea de ieșire. Pentru ca aceasta să funcționeze, trebuie să stabilim regulile de schimb ale datelor. Aceste reguli sunt numite protocol. Protocolul este de aceea definit în avans ca să nu fie nici o neîțelegere între părțile ce comunică una cu alta. De exemplu, dacă un om vorbește în franceză, și altul vorbește în engleză, este puțin probabil că ei se vor înțelege repede și eficient unul cu altul. Să presupunem că avem următorul protocol. Unitatea logică "1" este setată pe linia de transmisie până ce incepe transferul. Odată ce începe transferul, coborâm linia de transmisie la "0" logic pentru o perioadă de timp (pe care o vom desemna ca T), așa că partea receptoare va ști că sunt date de primit, așa că va activa mecanismul ei de recepție. Să ne întoarcem acum la partea de transmisie și să începem să punem zero-uri și unu-uri pe linia de transmisie în ordinea de la un bit a celei mai de jos valori la un bit a celei mai de sus valori. Să lăsăm ca fiecare bit să rămână pe linie pentru o perioadă de timp egală cu T, și la sfârșt, sau după al 8-lea bit, să aducem unitatea logică "1" înapoi pe linie ce va marca sfârșitul transmisiei unei date. Protocolul ce tocmai l-am descris este numit în literatura profesională NRZ (Non-Return to Zero).
Pentru că aven linii separate de recepție și de transmitere, este posibil să recepționăm și să transmitem date (informații) în același timp. Blocul ce permite acest mod de comunicare este numit blocul de comunicare serială. Spre deosebire de transmisia paralelă, datele sunt mutate aici bit cu bit, sau într-o serie de biți, de unde vine și numele de comunicație serială. După recepția de date trebuie să le citim din locația de transmisie și să le înmagazinăm în memorie în mod opus transmiterii unde procesul este invers. Datele circulă din memorie prin bus către locația de trimitere, și de acolo către unitatea de recepție conform protocolului.
2.6. Unitatea de timer
Acum că avem comunicația serială, putem recepționa, trimite și procesa date.
Totuși, pentru noi ca să putem să îl folosim în industrie mai avem nevoie de câteve blocuri. Unul din acestea este blocul de timer care este important pentru noi pentru că ne dă informația de timp, durată, protocol etc. Unitatea de bază a timer-ului este un contor liber care este de fapt unregistru a cărui valoare numerică crește cu intervale egale, așa încât luându-i valoarea după intervalele T1 și T2 și pe baza diferenței lor să putem determina cât timp a trecut. Acesta este o parte foarte importantă a microcontrolerului a cărui control cere cea mai mare parte a timpului nostru.
2.7. Watchdog-ul
Încă un lucru ce necesită atenția noastră este funcționarea fără defecte a microcontrolerului în timpul funcționării. Să presupunem că urmare a unei
anumite interferențe (ce adesea se întâmplă în industrie) microcontrolerul nostru se oprește din executarea programului, sau și mai rău, începe să funcționeze incorect.
Bineânțeles, când aceasta se întâmplă cu un computer, îl resetăm pur și simplu și va continua să lucreze. Totuși, nu există buton de resetare pe care să apăsăm în cazul microcontrolerului care să rezolve astfel problema noastră. Pentru a depăși acest obstacol, avem nevoie de a introduce încă un bloc numit watchdog-câinele de pază. Acest bloc este de fapt un alt contor liber unde programul nostru are nevoie să scrie un zero ori de câte ori se execută corect. În caz că programul se "înțepenește", nu se va mai scrie zero, iar contorul se va reseta singur până la obținerea valorii sale maxime. Aceasta va duce la rularea programului din nou, și corect de această dată pe toată durata. Acesta este un element important al fiecărui program ce trebuie să fie fiabil fără supravegherea omului.
2.8. Converterul Analog-Digital
Pentru că semnalele de la periferice sunt substanțial diferite de cele pe care le poate înțelege (zero și unu), ele trebuie convertite într-un mod care să fie înțeles de microcontroler. Această sarcină este îndeplinită de un bloc pentru conversia analog-digitală sau de un convertor AD. Acest bloc este responsabil pentru convertirea unei informații despre o anumită valoare analogă într-un număr binar și pentru a o urmări pe tot parcursul la un bloc CPU așa ca blocul CPU să o poată procesa.
Astfel microcontrolerul este acum terminat, și tot ce mai rămâne de făcut este de a-l pune într-o componentă electronică unde va accesa blocurile interioare prin pinii acestei componente. Imaginea de mai jos arată cum arată un microcontroler în interior.
Cofigurația fizică a interiorului unui microcontroler
Liniile subțiri ce merg din interior către părțile microcontrlerului reprezintă fire conectând blocurile interioare cu pinii capsulei microcontrolerului. Schema următoare reprezintă secțiunea centrală a microcontrolerului.
Pentru o aplicație reală, un microcontroler singur nu este de ajuns. Înafară de microcontroler, avem nevoie de un program pe care să-l execute, și alte câteva elemente ce constituie o interfață logică către elementele de stabilizare (ce se va discuta în capitolele următoare).
2.9. Programul
Scrierea programului este un domeniu special de lucru al microcontolerului și este denumit "programare". Să încercăm să scriem un mic program ce îl vom crea singuri și pe care oricine va fi în stare să-l înțeleagă.
START
REGISTER1=MEMORY LOCATION_A
REGISTER2=MEMORY LOCATION_B
PORTA=REGISTER1 + REGISTER2
END
Programul adaugă conținuturile a două locații de memorie, și vede totalul lor la portul A. Prima linie a programului este pentru mutarea conținuturilor locației de memorie "A" într-unul din regiștri unității centrale de procesare. Pentru că avem nevoie și de celelalte date de asemenea, le vom muta de asemenea în celălalt registru al unității centrale de procesare. Următoarea instrucțiune instruiește unitatea centrală de procesare să adauge conținuturile celor doi regiștri șă să trimită un rezultat obținut la portul A, încât suma acestei adăugări să fie vizibilă pentru toată lumea de afară. Pentru o problemă mai complexă, programul care să lucreaze la rezolvarea ei va fi mai mare.
Programarea poate fi făcută în câtava limbaje ca Assembler, C și Basic care sunt cele mai folosite limbaje. Assembler aparține limbajelor de nivel scăzut ce sunt programate lent, dar folosesc cel mai mic spațiu în memorie și dă cele mai bune rezultate când viteza de execuție a programului se are în vedere. Pentru că este cel mai folosit limbaj în programarea microcontrolerelor va fi discutat într-un capitol ulterior. Programele în limbajul C sunt mai ușor de scris, mai ușor de înțeles, dar sunt mai lente în executare decât programele în Assembler. Basic este cel mai uțor de învățat, și instrucțiunile sale sunt cele mai aproape de modul de gândire a omului, dar ca și limbajul de programare C este de asemenea mai lent decât Assembler-ul. În orice caz, înainte de a ne hotărî în privința unuia din aceste limbaje trebuie să studiem cu atenție cerințele privind viteza de execuție, mărimea memoriei și timpul disponibil pentru asamblarea sa.
După ce este scris programul, trebuie să instalăm microcontrolerul într-un aparat și să-l lăsăm să lucreze. Pentru a face aceasta trebuie să adăugăm câteva componente externe necesare pentru funcționarea sa. Mai întâi trebuie să dăm viață microcontrolerului prin conectarea sa la o sursă (tensiune necesară pentru operarea tuturor instrumentelor electronice) și un oscilator a cărui rol este similar inimii din corpul uman. Bazat pe ceasul său microcontrolerul execută instrucțiunile programului.
Îndată ce este alimentat microcontrolerul va executa un scurt control asupra sa, se va uita la începutul programului și va începe să-l execute. Cum va lucra aparatul depinde de mulți parametri, cel mai important fiind priceperea dezvoltatorului de hardware, și de expertiza programatorului în obținerea maximului din aparat cu programul său.
În cele ce urmează voi prezenta microcontrolerul PIC16F84, microcontroler uzual ce doresc sa îl utilizez la dezvoltarea aplicației ulterior.
MICROCONTROLERUL PIC 16F84
1. Descriere generală
Microcontrolerul (μC) PIC 16F84 face parte din familia de microprocesoare PIC 16 CXX, μC de cost redus, performanțe deosebite, tehnologie CMOS, 8 biți.
Toate tipurile de μC PIC microTM beneficiază de o arhitectură RISC avansată. Dispozitivele PIC 16F8X au o stivă pe 8 nivele și surse de întrerupere interne și externe multiple. Magistralele separate pentru date și instrucțiuni ale arhitecturii de tip Harvard permit cuvinte de instrucțiuni pe 14 biți și separat cuvinte de date pe 8 biți. Instrucțiunile se execută într-un singur ciclu, exceptând ramificațiile de program care necesită două cicluri. Este disponibil un set de 35 de instrucțiuni. În plus, se folosește un set de registre pentru a realiza un nivel de performanță ridicat.
Microcontrolerele PIC 16F8X au 68 byte de RAM, 64 byte de memorie EEPROM de date și 13 pini de intrare/ieșire precum și un timer/counter.
Familia PIC 16F8X are facilități speciale pentru a reduce componentele externe, reducând astfel costurile, crescând fiabilitatea și reducând puterea consumată.
Există patru opțiuni pentru oscilator: oscilator RC care este o soluție pentru cost redus, oscilator LP care minimizează puterea consumată, oscilator XT care folosește un cristal de cuarț standard și oscilator HS pentru cristale de viteză mare.
Modul de funcționare SLEEP oferă posibilitatea economiei de energie.
Utilizatorul poate determina scoaterea dispozitivului din modul SLEEP prin câteva întreruperi interne sau externe sau prin resetare.
Timer-ul Watchdog, împreună cu propriul oscilator din cip, asigură protecția împotriva blocărilor software.
Dispozitivele cu memorie de program Flash permit folosirea aceluiași cip să fie folosit ca prototip și ca produs de serie.
Reprogramarea în circuit permite programului să fie modificat fără ca dispozitivul să fie scos din aplicația finală. Acest lucru este folositor în dezvoltarea multor aplicații unde dispozitivul nu este ușor accesibil, dar programul de aplicație necesită modificări.
Microcontrolerului PIC 16F84X se potrivește perfect în aplicații din industria automobilelor, comanda motoarelor, senzori pentru telecomandă, încuietori electronice etc.
2. Tipuri de microcontrolere PIC 16F8X
Sunt disponibile dispozitive într-o mare varietate de domenii de frecvență și tipuri de capsule. În funcție de aplicație se poate selecta tipul de circuit potrivit.
Există patru tipuri de circuite după cum se indică mai jos:
F, cum ar fi PIC 16F84. Acest circuit are memorie de program flash și funcționează în gama de tensiune standard.
LF, cum ar fi PIC 16LF84. Acest circuit are memorie de program flash și funcționează într-o gamă extinsă de tensiune.
CR, cum ar fi PIC 16CR83. Acest circuit are memorie de program ROM și funcționează în gama de tensiune standard.
LCR, cum ar fi PIC 16LCR84. Acest circuit are memorie de program ROM și funcționează într-o gamă extinsă de tensiune.
2.1. Circuite Flash
Aceste circuite au o memorie care poate fi ștearsă și reprogramată. Acest lucru permite ca același circuit să fie folosit atât pentru dezvoltarea de prototip sau program pilot, cât și pentru aplicații.
2.2. Circuite QTP (Quick-Turnaround-Production)
Aceste circuite au toate locațiile FLASH și opțiunile de configurare deja programate de către fabricant.
2.3. Circuite SQTP (Serialized Quick-Turnaround-Production)
Aceste circuite posedă câteva locații definite de utilizator care pot fi programate cu numere de serie diferite. Numerele de serie pot fi aleatoare, pseudo-aleatoare, sau secvențiale.
Programarea serială permite fiecărui circuit să aibă un număr unic care servește ca un cod de intrare, parolă sau număr ID.
2.4. Circuite ROM
Acest tip de circuite au memoria de program de tip ROM.
3. Descrierea arhitecturii
Performanțele deosebite ale familiei de μC PIC 16CXX pot fi atribuite unor facilități arhitecturale aflate în microprocesoarele RISC. Microcontrolerele PIC 16CXX folosesc o arhitectură Harvard. Această arhitectură are memoria de date accesată separat față de memoria de program. Astfel circuitul are o magistrală pentru memoria de date spre deosebire de circuitele cu arhitectură von Neumann, unde datele și programele se extrag din aceeași memorie, accesată pe o singură magistrală.
Separarea memoriei de date față de memoria de program permite ca dimensiunea cuvintelor de instrucțiune să fie diferită de cea a cuvintelor de date de 8 bit. Acest lucru înseamnă o îmbunătățire față de arhitectura von Neumann, unde datele și programele sunt extrase din aceeași memorie (deci sunt vehiculate pe aceeași magistrală).
Codul operațiilor μC PIC 16CXX are o dimensiune de 14 biți, permițând instrucțiuni pe un singur cuvânt. Magistrala memoriei de program de 14 biți extrage instrucțiuni pe 14 biți într-un singur ciclu. Toate instrucțiunile se execută într-un singur ciclu, exceptând ramificațiile de program care se execută în două cicluri. Microcontrolerele PIC 16F83 și PIC 16CR3 adresează o memorie de 512 x 14 biți, iar PIC 16F84 și PIC 16CR84 adresează o memorie de program de 1k x 14. Memoria de program este internă.
Microcontrolerul PIC 16CXX poate adresa direct sau indirect fișierele de tip registru sau memoria de date. Toate registrele de funcțiuni speciale incluzând numărătorul de program se află în memoria de date. Un set de instrucțiuni ortogonal (simetric) realizează orice operație în orice registru folosind oricare mod de adresare.
ALU are 8 biți și poate face operații aritmetice de adunare, scădere și deplasare precum și operații logice. Operațiile aritmetice sunt realizate în complement față de 2.
În instrucțiunile cu doi operanzi, tipic un operand este în registrul de lucru (registrul w) și celălalt operand este un registru fișier sau o constantă.
În instrucțiunile cu un singur operand, operandul este fie în registrul w, fie într-un registru fișier.
Registrul w este un registru de lucru de 8 biți, folosit pentru operațiile ALU. El nu este un registru adresabil.
Depinzând de instrucțiunea executată, ALU poate afecta biții Carry (C), Digit Carry (DC) și Zero (Z) din registrul STATUS. Biții C și DC operează ca biți de ieșire și , respectiv, la scădere. Vezi instrucțiunile SUBLW și SUBWF ca exemplu.
Descrierea pinilor este arătată în tabelul 3.1. iar o diagramă bloc simplificată pentru PIC 16F8X este indicată în fig. 3.1.
Tabelul 3.1.
Fig. 3.1.
3.1. Schema de ceas / ciclu instrucțiune
Intrarea de ceas (de la OSC1) este divizată intern cu patru pentru a genera patru impulsuri de ceas denumite Q1, Q2, Q3 și Q4. Intern, numărătorul de program Program Counter (PC) este incrementat la fiecare impuls Q1, instrucțiunea este extrasă din memoria de program și depusă în registrul de instrucțiuni la fiecare impuls Q4. Instrucțiunea este decodată și executată în timpul următoarelor impulsuri de ceas: Q1, Q2, Q3, Q4. Impulsurile și modalitatea de executare a instrucțiunilor sunt indicate în fig. 3.2.
Fig. 3.2.
3.2. Execuția instrucțiunilor
Un ciclu de instrucțiune constă din patru cicluri Q (Q1, Q2, Q3 și Q4). Extragerea instrucțiunii și execuția ei se face secvențial astfel că extragerea durează un ciclu instrucțiune în timp ce decodarea și execuția ocupă ciclul următor. Datorită funcționării secvențiale, fiecare instrucțiune se execută efectiv într-un singur ciclu. Dacă o instrucțiune determină schimbarea numărătorului de program (de exemplu GO TO), atunci sunt necesari doi cicli pentru execuția instrucțiunii. (Ex. 3.1.)
Exemplul 3.1
Operația de extragere a instrucțiunii din memoria de program începe cu incrementarea numărătorului de program (PC) în ciclul Q1.
În ciclul de execuție, instrucțiunea extrasă se află în registrul de instrucțiuni (Instruction Register) în ciclul Q1. Această instrucțiune este apoi decodată și executată în ciclii Q2, Q3 și Q4. Memoria de date este citită în ciclul Q2 (citire operand) și scrisă în timpul ciclului Q4 (scriere la destinație).
4. Organizarea memoriei
Există două blocuri de memorie în PIC 16F8X. Acestea sunt memoria de program și memoria de date. Fiecare bloc are propriul „bus”, astfel că accesul la fiecare bloc se face în același ciclu oscilator.
Memoria de date poate fi împărțită în registre generale RAM (General purpose RAM) și registre pentru funcțiuni speciale (Special Function Registers – SFRs).
Funcționarea SFRs-urilor care controlează „miezul” μC este descrisă în continuare. SFRs-urile folosite la controlul modulelor periferice sunt descrise în secțiunea specifică fiecărui modul în parte.
Memoria de date conține de asemenea memoria EEPROM de date, care este o zonă de memorie cu adresare indirectă. Aceasta înseamnă că un indicator de adresare indirectă specifică adresa memoriei EEPROM de date pentru citire/scriere. Cei 64 octeți ai memoriei EEPROM de date au domeniul de adresare 0h – 3Fh. Mai multe detalii despre memoria EEPROM pot fi găsite în secțiunea 7.0.
4.1. Organizarea memoriei de program
PIC 16FXX are un numărător de program capabil să adreseze un spațiu de memorie de 8k x 14. Pentru PIC 16F83 și PIC 16CR83 este implementată fizic zona 0000h – 01FFh, adică primele 512 x 14 locații. (fig. 4.1.)
Fig. 4.1.
Pentru PIC 16F84 și PIC 16CR84 este implementată fizic zona (000h ÷ 03FFh), adică primele 1k x 14 locații de memorie. (fig. 4.2.)
.
Fig. 4.2
Accesarea unei locații din afara zonei implementate fizic va cauza o suprapunere. Adică, pentru PIC 16F84, de exemplu, locațiile 20h, 420h, 820h, C20h, 1020h, 1420h, 1820h și 1C20h vor genera aceeași instrucțiune.
Vectorul de reset este la locația 0000h, iar vectorul de întrerupere este la locația 0004h.
4.2. Organizarea memoriei de date
Memoria de date cuprinde două zone. Prima este a Registrelor de funcțiuni speciale (Special Function Register – SFR), iar a doua a Registrelor pentru scopuri generale (General Purpose Registers – GPR).
SFR-urile controlează funcționarea dispozitivului.
Memoria de date este împărțită în bancuri. Acest lucru este valabil și pentru zona SFR și pentru zona GPR. Zona GPR este împărțită în bancuri pentru a permite mai mult de 116 octeți RAM în scopuri generale. Zona SFR este împărțită în bancuri pentru registrele care controlează funcțiile periferice. Împărțirea în bancuri necesită folosirea unor biți de control pentru selecția bancului. Acești biți de control sunt localizați în registrul STATUS. Fig. 4.1. și fig. 4.2. indică organizarea memoriei de date.
Instrucțiunile MOVWF și MOVF pot muta valori din registrul w în orice locație de fișier registru (F) și vice-versa.
Memoria de date de intrare poate fi adresată fie direct folosind adresarea absolută a fiecărui fișier din registru, fie indirect prin Registru de selectare fișier (File Select Register – FSR, secțiunea 4.5.). Adresarea indirectă folosește valoarea actuală a biților RP1, RP0 pentru a accesa bancul memoriei de date.
Memoria de date este împărțită în două bancuri care conțin registrele GPR și registrele SFR. Bancul 0 este selectat prin ștergerea bitului RP0 (STATUS <5>). Setarea bitului RP0 selectează bancul 1. Fiecare banc se extinde până la adresa 7Fh. Primele 12 locații ale fiecărui banc sunt rezervate pentru registrele SFR.
Restul sunt registre GPR implementate ca RAM static.
4.2.1. Registrele GPR
Toate dispozitivele au un anumit număr de registre GPR. Fiecare registru GPR are 8 biți și este accesat fie direct fie indirect prin registrul FSR (Secțiunea 4.5.).
Registrele GPR adresate în bancul 1 se suprapun peste cele din bancul 0. Ca exemplu, locația de adresă 0Ch (banc 0) accesează același registru GPR ca și locația 8Ch (banc 1).
4.2.2. Registrele SFR
Registrele SFR (fig. 4.3., fig. 4.4. și tabelul 4.1.) sunt folosite de CPU să controleze funcționarea dispozitivului. Aceste registre sunt de tip RAM static.
Registrele SFR pot fi împărțite în două categorii: cele care controlează „miezul” μC și cele care controlează perifericele. În această secțiune sunt tratate primele. Celelalte sunt descrise în secțiunea specifică fiecărui periferic.
Fig. 4.3. Fig. 4.4.
Tabelul 4.1.
Registrul STATUS
Acesta conține starea aritmetică pentru ALU, starea RESET și biții de selecție ai bancului pentru memoria de date (fig. 4.5.).
Ca orice registru, registrul STATUS poate fi destinație pentru oricare instrucțiune. Dacă STATUS este destinație pentru o instrucțiune care
afectează biții Z, DC sau C, atunci scrierea acestor trei biți nu este permisă. Acești biți sunt setați sau șterși în acord cu logica dispozitivului.
Mai mult, biții și nu sunt accesibili pentru scriere.
De aceea, rezultatul unei instrucțiuni cu registrul STATUS ca destinație poate fi diferit față de cel intenționat.
De exemplu instrucțiunea CLRF STATUS va șterge cei trei biți mai semnificativi și va seta bitul Z. Rezultatul va fi 000u u1uu (unde u = neschimbat).
Numai instrucțiunile BCF, BSF, SWAPF și MOVWF pot fi folosite să modifice registrul STATUS (Tabelul 9.2.) deoarece aceste instrucțiuni nu afectează biții de stare.
Fig. 4.5.
R – bit ce se poate citi
W – bit ce se poate scrie
U – bit neimplementat, citit ca 0
– n – valoare la reset la alimentare
Bit 7: bit IRP – bit de selecție a bancului de registre (folosit pentru adresare indirectă);
0 = banc 0, 1 (00h – FFh);
1 = banc 2, 3 (100h – 1FFh).
Bitul IRP nu este folosit pentru μC PIC 16F8X. IRP trebuie menținut 0.
Bit 6, 5: RP1, RP0 – biți de selecție a bancului de registre (folosit pentru adresare directă);
00 – banc 0 (00h – 7Fh);
01 – banc 1 (80h – FFh);
10 – banc 2 (100h – 17Fh);
11 – banc 3 (180h – 1FFh).
Fiecare banc are 128 octeți. Pentru PIC 16F8X este folosit numai bitul RP0.
Bit 4: – bit de Time-out;
1 = după alimentare, instrucțiunea CLRWDT, sau după instrucțiunea SLEEP;
0 = a avut loc trecerea timpului WDT.
Bit 3: – bit de oprire a alimentării;
1 = după alimentare sau instrucțiunea CLRWDT;
0 = determinat de execuția instrucțiunii SLEEP.
Bit 2: Z – bit zero;
1 = rezultatul unei operații aritmetice sau logice este zero;
0 = rezultatul unei operații aritmetice sau logice nu este zero.
Bit 1: DC – bit „digit carry/” (pentru instrucțiunile ADDWF și ADDLW; pentru borrow, polaritatea este inversată);
1 = a avut loc o depășire la bitul de ordinul 4 al rezultatului;
0 = nu a avut loc o depășire la bitul de ordinul 4 al rezultatului.
Bit 0: C – bit de împrumut (pentru instrucțiunile ADDWF și ADDLW);
1 = a avut loc o depășire la bitul cel mai semnificativ al rezultatului;
0 = n-a avut loc o depășire la bitul cel mai semnificativ al rezultatului.
Notă: Pentru polaritatea este inversată. O scădere este executată adăugând complementul în bază 2 al celui de-al doilea operand. Pentru instrucțiunile de rotire (RRF, RLF), acest bit este încărcat fie cu bitul de rang cel mai înalt fie cu cel de rang cel mai mic al registrului sursă.
4.2.2.2. Registrul OPTION – REG
OPTION – REG este un registru care poate fi atât scris cât și citit și care conține diferiți biți de control pentru configurare prescaler pentru TMRO sau WDT, întreruperi externe și interne, TMRO și „pull-up” la portul PORTB. (fig. 4.6.)
Bit 7: – bit ce permite „pull-up” la PORTB;
1 = nu este permis „pull-up” la PORTB;
0 = este permis „pull-up” la PORTB.
Bit 6: INTEDG – bit de selecție a marginii de întrerupere;
1 – întrerupere pe frontul crescător al semnalului la pinul RBO/INT;
0 – întrerupere pe frontul descrescător al semnalului la pinul RBO/INT.
Bit 5: TOCS – bit de selecție a sursei de ceas pentru TMRO;
1 = tranziție la pinul RA4/TOCKI;
0 = ceasul intern (CLKOUT).
Bit 4: TOSE – bit de selecție a frontului sursei de ceas pentru TMRO;
1 = incrementarea pe tranziția 1→0 a semnalului la pinul RA4/TOCKI;
0 = incrementarea pe tranziția 0→1 a semnalului la pinul RA4/TOCKI.
Bit 3: PSA – bit de conectare a prescalerului;
1 = prescaler conectat la WDT;
0 = prescaler conectat la TMRO.
Bit 2-0: PS2, PS0 – bit de selecție a ratei prescalerului.
Notă: Când prescalerul este conectat la WDT (PSA = „1”), TMRO are desemnat un prescaler de 1:1.
4.2.2.3. Registrul INTCON
Registrul INTCON este un registru care poate fi atât scris cât și citit și care conține biți de control pentru diferitele surse de întrerupere. (fig. 4.7.)
Fig. 4.7.
R – bit ce se poate citi
W – bit ce se poate scrie
U – bit neimplementat, citit ca 0
– n – valoare la reset la alimentare
Bit 7: GIE – bit pentru permiterea întreruperilor globale;
1 = permite toate întreruperile nemascate;
0 = nu permite nici o întrerupere.
Bit 6: EEIE – bit de permitere a întreruperii la scrierea completă a memoriei EEPROM de date;
1 – permite întreruperea la scrierea completă a memoriei EEPROM de date;
0 – nu permite întreruperea la scrierea completă a memoriei EEPROM de date.
Bit 5: TOIE – bit de permitere a întreruperii datorate depășirii TMRO;
1 = permite întreruperea TMRO;
0 = nu permite întreruperea TMRO.
Bit 4: INTE – bit de permitere a întreruperii externe RBO/INT;
1 = permite întreruperea RBO/INT;
0 = nu permite întreruperea RBO/INT.
Bit 3: RBIE – bit ce permite întreruperea la schimbarea stării portului B;
1 = permite întreruperea la schimbarea stării portului B;
0 = nu permite întreruperea la schimbarea stării portului B.
Bit 2: TOIF – bitul flagului de întrerupere la depășire TMRO;
1 = TMRO a dat depășire (trebuie șters prin soft);
0 = TMRO n-a dat depășire.
Bit 1: INTF – bit de flag pentru întrerupere externă RBO/INT;
1 = a avut loc o întrerupere externă RBO/INT;
0 = n-a avut loc o întrerupere externă RBO/INT.
Bit 0: RBIF – bit de flag pentru întrerupere datorată schimbării stării portului B;
1 = când cel puțin unul din pinii RB7÷RB4 și-a schimbat starea (trebuie șters prin soft);
0 = nici unul din pinii RB7÷RB4 nu și-a schimbat starea.
4.3. Numărătorul de program: PCL și PCLATH
Numărătorul de program (PC) este un registru pe 13 biți. Octetul inferior este în registrul PCL, care poate fi atât scris cât și citit. Octetul superior al PC (PC <12:8>) nu se poate citi sau scrie direct și provine de la registrul PCLATH. Registrul PCLATH (latch-ul superior al PC) este un registru care reține biții PC <12:8>. Conținutul PCLATH este transferat în octetul superior al PC când PC este încărcat cu o valoare nouă. Acest lucru are loc în timpul instrucțiunilor CALL, GO TO sau când se scrie în PCL.
Biții superiori ai PC sunt încărcați din PCLATH așa cum se indică în fig. 4.8.
Fig. 4.8.
4.3.1. Instrucțiunea GO TO calculat
Această instrucțiune este efectuată prin adăugarea unui offset la PC (ADDWF PCL). Când se execută o citire de tabel folosind metoda GO TO calculat, trebuie avut grijă ca locația din tabel să nu depășească capacitatea memoriei PCL (bloc de 256 cuvinte).
4.3.2. Paginarea memoriei de program
PIC 16F83 și PIC 16CR83 au 512 cuvinte de memorie de program. PIC 16F84 și PIC 16CR84 au 1k de memorie de program. Instrucțiunile CALL și GO TO au o marjă de adresare de 11 bit. Aceasta permite o pagină de memorie de program de 2k. Trebuie să existe doi biți care să specifice pagina memoriei de program. Acești biți de paginare provin de la PCLATH și anume biții 4 și 3. (fig. 4.9.)
Când se execută o instrucțiune CALL sau GO TO, utilizatorul trebuie să se asigure că acești biți de paginare sunt programați pentru pagina de memorie de program dorită. Când este executată o instrucțiune CALL (sau întrerupere), conținutul PC (toți cei 13 biți) este depus în stivă (vezi secțiunea următoare). De aceea, transferul biților PCLATH <4:3> nu este necesar pentru instrucțiunea de revenire (care readuce conținutul PC din stivă).
Notă: PIC 16F8X nu folosește biții PCLATH <4:3>, care sunt utilizați pentru paginile 1, 2 și 3 (0800h÷1FFFh).
4.4. Stiva
PIC 16FXX are o stivă de 8 cuvinte x 13 biți. Spațiul stivei nu face parte din memoria de date sau de program și pointerul stivei nu poate fi citit sau scris.
Toți cei 13 biți ai PC sunt puși în stivă când se execută o instrucțiune CALL sau se recunoaște o întrerupere. Conținutul stivei este trecut în PC când se execută una din instrucțiunile RETURN, RETLW sau RETFIE. PCLATH nu este afectat de operațiile de depunere sau extragere din stivă.
Nu există mnemonici de instrucțiuni numite PUSH sau POP. Există acțiuni (push sau pop) care au loc datorită execuției instrucțiunilor CALL, RETURN, RETLW și RETFIE sau execuției unei întreruperi.
Stiva operează ca un buffer circular. Asta înseamnă că dacă stiva a fost scrisă de 8 ori, o nouă înscriere se va face peste valoarea care a fost memorată la prima scriere. A zecea scriere are loc peste valoarea de la a doua scriere și așa mai departe.
Dacă stiva este citită de 9 ori, conținutul PC este același ca la prima citire.
Nu există biți de stare care să indice depășirea capacității stivei.
4.5. Adresarea indirectă; Registrele INDF și FSR
Registrul INDF nu este un registru implementat fizic. Adresând INDF de fapt se adresează registrul a cărui adresă este conținută în registrul FSR (FSR este un indicator). Aceasta este adresare indirectă.
Exemplul 4.1.
Registrul fișier 05 conține valoarea 10h;
Registrul fișier 06 conține valoarea 0Ah;
Se încarcă valoarea 05 în registrul FSR;
O citire a registrului INDF va returna valoarea 10h;
Se incrementează valoarea registrului FSR cu 1 (FSR = 6);
O citire a registrului INDF va returna acum valoarea 0Ah.
Citirea indirectă a registrului INDF va furniza valoarea 00h. Scrierea indirectă a registrului INDF nu determină nici o acțiune (no operation, deși biții de stare din registrul STATUS pot fi afectați).
5. Porturile I/O
PIC 16F8X are două porturi, PORTA și PORTB. Unii dintre pinii porturilor sunt prevăzuți cu funcții alternative pentru alte facilități ale dispozitivului.
5.1. Registrele PORTA și TRISA
Portul A este un latch de 5 bit. RA4 poate fi atât intrare Trigger Schmitt cât și o ieșire cu drena în gol (fig. 5.2.). Toți ceilalți pini ai portului au nivele de intrare TTL și drivere de ieșire CMOS (fig. 5.1.).
Fig. 5.1
Fig. 5.2.
Toți pinii au biți de direcționare pentru date (Registrele TRIS) care pot configura acești pini ca intrări sau ieșiri. Setând un bit TRISA se va impune pinului corespunzător din PORTA să fie pin de intrare, adică, driverul de ieșire corespunzător se fixează în modul hi-Z. Ștergând un bit TRISA se va impune pinului corespunzător din PORTA să fie pin de ieșire, adică, se transferă conținutul latch-ului de ieșire la pinul
selectat.
Citirea registrului PORTA înseamnă citirea stării pinilor, în timp ce scrierea lui înseamnă scrierea în latch-ul de port. Toate operațiile de scriere sunt operații de citire-modificare-scriere. Astfel că o scriere la un port implică că pinii portului sunt mai întâi citiți, apoi această valoare este modificată și scrisă în latch-ul portului.
Pinul RA4 este multiplexat cu intrarea de ceas pentru TMRO.
Exemplul 5.1. Inițializarea PORTA
CLRF PORTA ; se inițializează PORTA
BSF STATUS, RP0 ; selectare banc1
MOVLW 0X0F ; valoare de selectare intrări/ieșiri
MOVWF TRISA ; RA < 3:0 > intrări, RA4 ieșire.
Tabelul 5.1. Funcțiile PORTA
Tabelul 5.2. Registrele asociate cu PORTA
x = necunoscut; u = neschimbat; – = neimplementat, citit ca 0.
5.2. Registrele PORTB și TRISB
PORTB este un port bidirecțional de 8 bit. Registrul de direcționare de date corespunzător este TRISB. „1” pe orice bit al registrului TRISB pune driverul de ieșire corespunzător în modul hi-Z (mare impedanță). „0” pe orice bit al registrului TRISB pune conținutul latch-ului de ieșire la pinul selectat al portului PORTB (fig. 5.3. și fig. 5.4.).
Fig. 5.3.
Fig. 5.4.
Fiecare dintre pinii PORTB au „pull-up” intern. Un bit de control poate activa „pull-up”-ul la toți pinii. Acest lucru se face prin ștergerea bitului (OPTION_REG < 7 >). „Pull-up”-ul este automat dezactivat când pinul portului este configurat ca ieșire. „Pull-up”-ul este dezactivat la reset la alimentare.
Patru dintre pinii PORTB , RB7:RB4, pot determina întrerupere în program la schimbarea stării. Numai pinii configurați ca intrări pot determina întreruperea.
Valorile pinilor în modul input sunt comparate cu valorile vechi, de la ultima citire a portului, memorate în latch. Orice schimbare generează întrerupere datorată schimbării stării portului PORTB.
Această întrerupere poate scoate dispozitivul din modul SLEEP. Utilizatorul, în rutina de servire a întreruperii, poate șterge întreruperea în următoarea manieră:
citește (sau scrie) PORTB. Acest lucru elimină condiția de modificare a stării portului.
Șterge bitul RBIF din registrul INTCON.
Această facilitate de întrerupere la schimbarea stării portului B, împreună cu „pull-up”-ul configurat prin soft permite o interfațare ușoară între μC și o tastatură.
Exemplul 5.2. Inițializare PORTB
CLRF PORTB ; se inițializează PORTB
BSF STATUS, RP0 ; se selectează banc1
MOVLW 0XCF ; valoare de configurare I/O pentru pini
MOVWF TRISB ; RB < 3:0 > intrări;
RB < 5:4 > ieșiri;
RB < 7:6 > intrări.
Tabelul 5.3. – Funcțiile PORTB
TTL – intrare TTL; ST – Trigger Schmitt.
Tabelul 5.4. Registre asociate cu PORTB
x = necunoscut; u = neschimbat; Celulele umbrite nu sunt folosite de PORTB.
5.3. Considerații de programare I/O
5.3.1. Porturi I/O bidirecționale
Orice instrucțiune care scrie, operează intern ca o operație de citire urmată de una de scriere. Instrucțiunile BCF și BSF, de exemplu, scriu conținutul registrului în CPU, execută operația asupra bitului respectiv și scriu rezultatul înapoi în registru. Trebuie acordată atenție când aceste instrucțiuni sunt aplicate unui port cu unele intrări definite ca intrări și altele ca ieșiri. De exemplu, o operație BSF asupra bitului 5 al portului B, va determina ca toți cei 8 biți ai portului B să fie citiți în CPU. Apoi operația BSF are loc asupra bitului 5 și PORTB este rescris în latch-urile de ieșire. Dacă un alt bit al portului B este folosit ca pin I/O bidirecțional (de exemplu bitul 0) și este definit ca intrare, semnalul de intrare prezent la pinul 0 va fi citit în CPU și rescris în latch-ul de date al acestui pin peste valoarea anterioară. Atât timp cât pinul este folosit ca intrare, nu sunt probleme. Dacă pinul este folosit ca ieșire, ulterior, conținutul latch-ului este necunoscut.
Citirea portului B presupune citirea valorilor pinilor portului. Scrierea portului B presupune scrierea valorilor în latch-ul portului. Când se folosesc instrucțiuni de citire-modificare-scriere (de exemplu BCF sau BSF) la un port, este citită valoarea pinilor portului, este făcută operația dorită asupra acestor valori și noile valori sunt înscrise apoi în latch-ul portului.
Un pin care are prezent un semnal 1 sau 0 din exterior nu trebuie să fie comandat din latch-ul portului în același timp (conectare „or”, sau conectare „and”) deoarece curentul mare de ieșire rezultat poate distruge dispozitivul.
5.3.2. Operații succesive la porturile I/O
Scrierea la un port I/O are loc la finalul ciclului instrucțiune, în timp ce pentru operația de citire datele trebuie să fie valide la începutul ciclului instrucțiune (fig. 5.5.). De aceea, trebuie avut grijă atunci când o operație de scriere este urmată de o operație de citire la același port. Tensiunea aplicată unui pin trebuie să se stabilizeze înainte ca instrucțiunea următoare să determine citirea portului și înscrierea valorilor în CPU. Altfel, starea anterioară a pinului poate fi citită în CPU în locul celei noi. Când există dubii, este mai bine să se separe aceste instrucțiuni cu o instrucțiune NOP sau altă instrucțiune care nu accesează acest port.
Fig. 5.5.
Exemplul 5.3. Instrucțiuni de citire-modificare-scriere la un port I/O
Portul B este setat astfel: PORTB < 7:4 > intrări, PORTB < 3:0 > ieșiri, PORTB < 7:6 > au „pull-up” extern și nu sunt conectați la alte circuite.
Ar fi fost de așteptat ca valorile pinilor să fie 00pp pppp, dar datorită ciclurilor citire-modificare-scriere, valorile pinilor sunt în realitate 10pp pppp.
6. Modulul TMRO și Registrul TMRO
Modulul TMRO are următoarele facilități (fig. 6.1.):
timer/counter de 8 bit;
se poate citi și scrie;
prescaler programabil prin soft;
selectare ceas intern sau extern;
întrerupere la trecere din FFh la 00h;
selectare front pentru semnal de ceas extern;
Fig. 6.1.
Modul Timer este selectat prin ștergerea bitului TOCS (OPTION_REG <5>). În modul timer, registrul TMRO se va incrementa la fiecare ciclu instrucțiune (fără prescaler). Dacă registrul TMRO este înscris, incrementarea este inhibată pentru următoarele două cicluri instrucțiune (fig. 6.2. și fig. 6.3.). Utilizatorul poate corecta acest lucru scriind o valoare ajustată în registrul TMRO.
Fig. 6.2.
Fig. 6.3.
Modul Counter este selectat prin setarea bitului TOCS (OPTION_REG <5>). În acest mod TMRO va fi incrementat fie pe frontul crescător, fie pe cel descrescător al semnalului de ceas extern prezent la pinul RA4/TOCKI. Frontul de incrementare este determinat de bitul TOSE (OPTION_REG <4>). Ștergerea bitului TOSE selectează frontul crescător. Restricțiile privind intrarea de ceas externă sunt discutate în Secțiunea 6.2.
Prescalerul poate fi comutat între modulul TMRO și modulul WDT (Watchdog Timer). Conectarea prescalerului este controlată prin soft prin bitul PSA (OPTION_REG <3>). Ștergerea bitului PSA conectează prescalerul la modulul TMRO. Prescalerul nu se poate scrie sau citi. Când prescalerul este conectat la modulul TMRO, valoarea prescalerului (1:2, 1:4, … 1:256) este selectată prin soft.
6.1. Întreruperi
Întreruperea este generată când registrul TMRO trece de la valoarea maximă FFh la 00h. Această trecere setează bitul TOIF (INTCON <2>). Întreruperea poate fi mascată prin ștergerea bitului TOIE (INTCON <5>). Bitul TOIF trebuie să fie șters prin soft în rutina de servire a întreruperilor a modulului TMRO. Acest tip de întrerupere nu poate scoate μC din modul SLEEP deoarece timerul este oprit în modul SLEEP.
6.2. Folosirea TMRO cu ceas extern
Când se folosește semnal de ceas extern pentru TMRO, trebuie îndeplinite anumite cerințe impuse de sincronizarea cu semnalul de ceas intern (TOSC). Astfel apare o întârziere a incrementării efective a registrului TMRO după sincronizare.
6.2.1. Sincronizarea ceasului extern
Când nu este folosit prescaler, intrarea de ceas extern corespunde cu ieșirea prescalerului. Sincronizarea semnalului de ceas extern de la pinul RA4/TOCKI cu semnalul de ceas intern este realizată prin eșantionarea ieșirii prescalerului în ciclii Q2 și Q4 ai semnalului de ceas intern . De aceea este necesar pentru semnalul TOCKI să fie „1” pentru cel puțin 2TOSC (plus o mică întârziere RC), și „0” pentru cel puțin 2TOSC (plus o mică întârziere RC).
Când este folosit prescalerul, intrarea de ceas extern este divizată de un numărător asincron astfel încât semnalul de ieșire al prescalerului este simetric. Pentru ca semnalul de ceas extern să întrunească cerințele de eșantionare, numărătorul asincron trebuie luat în considerație. De aceea este necesar pentru TOCKI să aibă o perioadă de cel puțin 4TOSC (plus o mică întârziere RC) divizată de valoarea prescalerului.
6.2.2. Întârzierea de incrementare a TMRO
Deoarece ieșirea prescalerului este sincronizată cu semnalul intern de ceas, există o mică întârziere între frontul ceasului extern și momentul când TMRO este incrementat.
6.3. Prescalerul
Un numărător de 8 bit este disponibil ca prescaler pentru modul TMRO sau ca postscaler pentru WDT (fig. 6.4.). Pentru simplitate, acest numărător este denumit peste tot „prescaler” în acest material.
Fig. 6.4.
Notează că există numai un prescaler disponibil care este comutat între TMRO și WDT prin soft. Astfel, conectarea prescalerului la TMRO înseamnă că WDT nu are prescaler și invers.
Biții PSA și PS2:PS0 (OPTION_REG < 3:0 >) determină conectarea prescalerului și raportul de prescalare.
Când prescalerul este conectat la modulul TMRO, toate instrucțiunile care scriu în TMRO (exemplu: CLRF1, MOVF1, BSF1, X…) vor șterge prescalerul. Când prescalerul este conectat la WDT, instrucțiunea CLRWDT va șterge prescalerul împreună cu WDT. Prescalerul nu poate fi scris și nici citit.
6.3.1. Comutarea conectării prescalerului
Conectarea prescalerului este în întregime sub control soft. Această conectare poate fi schimbată în timpul execuției programului.
Pentru a comuta prescalerul între TMRO și WDT trebuie executată următoarea secvență de instrucțiuni (Exemplul 6.1.)
Exemplul 6.1. Schimbare prescaler (TMRO → WDT)
BCF STATUS, RP0 ; selectează banc 0
CLRF TMRO ; șterge TMRO și prescaler
BSF STATUS, RP0 ; selectează banc 1
CLRWDT ; șterge WDT
MOVLW b`xxxx1xxx` ; selectează noua valoare a prescalerului
MOVWF OPTION_REG
BCF STATUS, RP0
Pentru a schimba prescalerul de la WDT la TMRO se execută secvența de instrucțiuni din Exemplul 6.2.
Exemplul 6.2. Schimbare prescaler (WDT → TMRO)
CLRWDT ; șterge WDT și prescaler
BSF STATUS, RP0 ; banc 1
MOVLW b`xxxx0xxx` ; selectează TMRO, noua valoare de prescaler și sursa de ceas
MOVWF OPTION_REG
BCF STATUS, RP0
Tabelul 6.1.
x – necunoscut; u – neschimbat; „-” neimplementat, citit ca 0.
Celulele umbrite nu sunt asociate cu TMRO.
7. Memoria EEPROM de date
Memoria de date EEPROM poate fi citită și scrisă în timpul funcționării normale (alimentare VDD normală). Această zonă de memorie nu este direct marcată în spațiul registrelor fișier. Ea poate fi însă adresată indirect prin registrele SFR. Există patru SFR-uri folosite la scrierea și citirea acestei memorii:
EECON1, EECON2, EEDATA, EEADR.
Registrul EEDATA păstrează cei 8 biți de date pentru citire/scriere, și EEADR păstrează adresa locației de memorie care trebuie accesată. PIC 16F8X are 64 octeți de date cu adresele 0h până la 3Fh.
Memoria EEPROM de date permite citire și scriere pe octet. O scriere de octet, automat șterge locația și scrie noul octet. Memoria EEPROM de date permite multe cicluri de ștergere/scriere. Timpul de scriere este controlat de un timer „on chip”. Acest timp variază cu tensiunea și temperatura și de la cip la cip.
Când dispozitivul este prevăzut cu cod de protecție, CPU continuă să citească și să scrie memoria EEPROM. Programatorul dispozitivului nu mai poate accesa această memorie.
Pentru informații suplimentare cu privire la memoria EEPROM se va consulta foaia de catalog a μC PIC 16FXX.
8. Facilități speciale ale CPU
Aceste facilități sunt:
Selectare oscilator;
Reset – la alimentare POR;
– timp de stabilizare a tensiunii PWRT;
– timp de pornire a oscilatorului OST;
Întreruperi;
WDT;
SLEEP;
Protecție prin cod;
Programare serială în circuit.
PIC 16F8X are un registru „Watchdog Timer” (WDT) care poate fi blocat numai prin biți de configurare. El lucrează cu un oscilator propriu pentru creșterea fiabilității în funcționare. Există două timere care asigură întârzierile necesare la activare. Unul este „Oscilator Start-up Timer” (OST) care are rolul de a ține dispozitivul în RESET până ce oscilatorul este stabil. Celălalt este „Power-up Timer” (PWRT), care asigură o întârziere de 72 ms la alimentarea dispozitivului până ce tensiunea de alimentare se stabilizează.
Modul SLEEP oferă o modalitate de funcționare ieftină la curent scăzut. Utilizatorul poate scoate μC din modul SLEEP prin reset extern, „time-out” la registrul WDT, sau întrerupere. Dispozitivul poate accepta câteva tipuri de oscilatoare. Un oscilator RC este o variantă de cost redus, iar un oscilator LP este o variantă de consum redus.
8.1. Biți de configurare
Biții de configurare pot fi programați (citiți ca „0”) sau pot fi lăsați neprogramați (citiți ca „1”) pentru a selecta diferite configurații ale dispozitivului.
Acești biți se găsesc în locația memoriei de program 2007h (Fig. 8.1.).
Acest spațiu poate fi accesat numai în timpul programării.
Fig. 8.1. – Cuvânt de configurare
8.2. Configurații pentru oscilator
8.2.1. Tipuri de oscilatoare
PIC 16F8X poate funcționa în patru moduri diferite de oscilație:
LP: Cristal consum redus;
XT: Cristal / Rezonator;
HS: Cristal / Rezonator la frecvență mare;
RC: Rezistor / Capacitate.
8.2.2. Oscilator cu cristal / Rezonator ceramic
În modurile XT, LP sau HS un rezonator ceramic sau cu cristal este conectat la pinii OSC1/CLKIN și OSC2/CLKOUT pentru a fixa oscilația (fig. 8.2.).
Fig. 8.2.
Se recomandă folosirea unui cristal paralel. Folosirea unui cristal serie poate genera frecvențe în afara gamei de lucru a dispozitivului.
În modurile XT, LP sau HS, dispozitivul poate avea sursă de ceas externă conectată la pinul OSC1/CLKIN (fig. 8.3.).
Fig. 8.3.
Pentru detalii suplimentare se va consulta foaia de catalog pentru PIC 16FXX.
8.3. Resetul
Microcontrolerul PIC 16F8X are mai multe tipuri de reset:
reset la alimentare (POR);
reset la funcționare normală ();
reset în timpul modului SLEEP ();
reset WDT (în timpul funcționării normale);
reset WDT (în timpul modului SLEEP).
Pentru detalii suplimentare se va consulta foaia de catalog pentru PIC 16 FXX.
8.4. Întreruperile
PIC 16F8X are 4 surse de întrerupere:
întrerupere externă la pinul RBO / INT;
întrerupere de depășire la TMRO;
întrerupere la schimbarea stării portului B (pinii RB7:RB4);
întrerupere la scrierea completă a memoriei EEPROM.
Registrul de control al întreruperilor (INTCON) înregistrează cererile individuale de întrerupere în biți flag. De asemenea, el conține biții de validare a întreruperilor individuale și globale.
Bitul de validare a întreruperii globale, GIE (INTCON <7>) permite (dacă este 1) toate întreruperile nemascate sau nu permite (dacă este 0) nici o întrerupere. Întreruperile individuale pot fi invalidate prin biții lor de invalidare corespunzători din registrul INTCON. Bitul GIE se șterge la reset.
Instrucțiunea „întoarcere din întrerupere”, RETFIE, dictează atât ieșire din rutina de întrerupere cât și setează bitul GIE, care revalidează întreruperile.
Când se dă curs unei cereri de întrerupere, bitul GIE este șters pentru a nu mai permite altă întrerupere, adresa la care se va reveni este depusă în stivă iar PC se încarcă cu 0004h. Pentru evenimentele de întrerupere externă, cum ar fi cele de la pinul RBO/INT sau schimbarea stării portului B, întârzierea va fi de trei sau patru cicluri instructive. Întârzierea depinde de momentul când are loc evenimentul de întrerupere (vezi foaia de catalog pentru PIC 16FXX).
8.4.1. Întreruperea INT
Întreruperea externă la pinul RBO/INT are loc pe front: fie pe frontul crescător dacă bitul INTDEG (OPTION_REG <6>) este setat, fie pe frontul descrescător dacă bitul INTDEG este șters.
Dacă apare un front valid la pinul RBO/INT, bitul INTF (INTCON <1>) este setat. Întreruperea poate fi dezactivată prin ștergerea bitului de control INTE (INTCON <4>). Flagul INTF trebuie șters prin soft în rutina de servire a întreruperii înainte de a revalida această întrerupere.
Întreruperea INT poate scoate procesorul din modul SLEEP numai dacă bitul INTE a fost setat înainte de intrarea în modul SLEEP. Setarea bitului GIE decide dacă se intră în subrutina de întrerupere la ieșire din modul SLEEP.
8.4.2. Întrerupere TMRO
O depășire (FFh→00h) la TMRO va seta flagul TOIF (INTCON<2>). Întreruperea poate fi validată/invalidată prin setarea/ștergerea bitului TOIE (INTCON <5>).
8.4.3. Întrerupere PORT RB
O întrerupere la schimbarea stării portului B (PORT B <7:4>) setează flagul RBIF (INTCON <0>).
Întreruperile pot fi validate/invalidate prin setarea/ștergerea bitului RBIE (INTCON <3>).
8.5. Watchdog Timer (WDT)
WDT este un oscilator RC „on-clip” care nu necesită componete externe (fig. 8.4). Acest oscilator este separat de oscilatorul RC al pinului OSC1/CLKIN. Aceasta înseamnă că WDT va funcționa chiar dacă ceasul de la pinii OSC1/CLKIN și OSC2/CLKOUT a fost oprit, de exemplu, prin execuția unei instrucțiuni SLEEP. În timpul funcționării normale „WDT-time-out ” generează un RESET al dispozitivului. Dacă μC funcționează în modul SLEEP, „WDT-time-out” determină trecerea μC din modul SLEEP în funcționare normală. WDT poate fi dezactivat permanent dacă bitul de configurare WDTE ia valoarea 0.
Fig. 8.4.
8.5.1. Perioada WDT
WDT are perioada de „time-out” de 18 ms (fără prescaler). Această perioadă variază cu temperatura, cu VDD și cu alte cauze de la cip la cip. Dacă e necesară o perioadă mai mare de „time-out” poate fi conectat un prescaler cu un raport de divizare de până la 1:128 la WDT, conectare ce se face prin soft în registrul OPTION_REG. Astfel se poate realiza un timp de întârziere de până la 2,3 secunde.
Instrucțiunile CLR WDT și SLEEP șterg WDT și prescalerul (dacă e conectat la WDT) și evită „time-out”-ul și generarea condiției de reset.
Bit din registrul STATUS va fi șters dacă se realizează condiția de „time-out”.
8.5.2. Condiții de programare
Trebuie remarcat că sub condiții dificile (VDD = Min, Temperetura = Max, prescaler WDT maxim) poate dura câteva secunde până să aibă loc „time-out”-ul.
8.6. Modul SLEEP
Dispozitivul poate avea două stări: consum redus (SLEEP) și consum normal.
8.6.1. SLEEP
Modul SLEEP se declanșează prin execuția instrucțiunii SLEEP.
Dacă este validat, WDT este șters (dar menținut în funcțiune), bitul (STATUS <3>) este șters, bitul (STATUS <4>) este setat și driverul oscilatorului μC este blocat. Porturile I/O mențin starea μC care au avut-o înainte de instrucțiunea SLEEP („1” logic, „0” logic sau hi-Z).
8.6.2. Ieșirea din modul SLEEP
Microcontrolerul poate fi scos din modul SLEEP prin unul din următoarele evenimente:
Reset extern la pinul ;
WDT „time-out” (dacă WDT a fost validat);
Întrerupere de la pinul RBO/INT, schimbare de stare la portul B sau scriere completă a memoriei EEPROM. Perifericele nu pot genera întreruperi în modul SLEEP deoarece oscilatorul μC este blocat.
Pentru primul eveniment, determină un reset al μC. Următoarele două evenimente sunt considerate o continuare a execuției programului. Biții și pot fi folosiți la determinarea cauzei resetului μC. Bitul , care este setat la alimentare, este șters când se execută instrucțiunea SLEEP. Bitul se șterge când are loc „time-out”-ul la WDT (și determină ieșirea din modul SLEEP).
În timpul ce se execută instrucțiunea SLEEP, se extrage următoarea instrucțiune. Pentru ca μC să fie scos din modul SLEEP de un eveniment tip întrerupere, bitul care validează întreruperea respectivă trebuie să fie setat (pentru a valida întreruperea). Ieșirea din SLEEP are loc datorită stării bitului GIE. Dacă bitul GIE este șters (invalidare), μC continuă programul cu execuția instrucțiunii ce urmează după SLEEP. Dacă bitul GIE este setat (validare), μC execută instrucțiunea ce urmează după SLEEP și apoi trece la adresa de întrerupere (0004h).
8.6.3. Ieșirea din SLEEP folosind întreruperi
Când întreruperile sunt dezactivate (GIE șters) și orice sursă de întreruperi are atât bitul de validare întreruperi setat cât și flagul corespunzător setat, are loc unul din următoarele evenimente:
Dacă întreruperea are loc înainte de execuția instrucțiunii SLEEP, instrucțiunea SLEEP va fi completată ca o instrucțiune NOP.
De aceea WDT și prescalerul WDT nu vor fi șterse, bitul nu va fi setat și bitul nu va fi șters.
Dacă întreruperea are loc în timpul sau după executarea instrucțiunii SLEEP, μC va fi scos imediat din modul SLEEP. Instrucțiunea SLEEP va fi însă complet executată. De aceea WDT și prescalerul WDT vor fi șterși, bitul va fi setat, iar bitul va fi șters.
Pentru a se determina dacă instrucțiunea SLEEP a fost executată complet, se testează bitul . Dacă acest bit este setat, instrucțiunea SLEEP a fost executată ca NOP.
Pentru a fi siguri că WDT este șters, ar trebui executată o instrucțiune CLRWDT înaintea instrucțiunii SLEEP.
8.7. Verificare program / Protecție cod
Dacă biții de protecție prin codare n-au fost programați, memoria de program din μC poate fi citită pentru a fi verificată.
8.8. Locații ID
Sunt desemnate patru locații de memorie (2000h-2003h) ca locații ID pentru a stoca „check-sum” sau alte numere pentru identificare cod. Aceste locații nu sunt accesibile în timpul procesului de programare.
Numai cei mai puțin semnificativi 4 biți ai locației ID sunt utilizabili.
8.9. Programare serială „in-circuit”
Microcontrolerele PIC 16F8X pot fi programate serial chiar în circuitul de aplicație. Acest lucru este făcut cu două linii pentru date și ceas și alte trei linii pentru alimentare, masă și tensiunea de programare (fig. 8.5.).
Fig. 8.5.
Dispozitivul este plasat în modul programare/verificare prin punerea la masă a pinilor RB6 și RB7 în timp ce trece de la VIL la VIH. RB6 primește ceasul pentru programare și RB7 primește datele.
RB6 și RB7 sunt intrări Trigger Schmitt în acest mod.
După reset, pentru a plasa μC în modul programare/verificare, PC trece la locația 00h.
CAPITOLUL III
Schema de Comanda si Simulare
COMANDA TROLIU
REZULTATE EXPERIMENTALE. CONCLUZII
În urma unei munci laborioase am reușit simularea plăcii de comanda a unui afisaj grafic propuse. Am realizat programul ce rulează în microcontrolerul PIC16F84 cu ajutorul mediului de dezvoltare MPLAB, a cărui interfață arată ca în figura următoare, figură în care am exemplificat interfața de lucru în MPLAB atunci cand se încarcă proiectul de lucru.
Incarcare proiect in MPLAB
Desenare schema in vederea simularii in PROTEUS
Se observa aici ca m folosit un microcontroler PIC16F84, pe ale carui iesiri am conectat 2 relee de comanda cu menirea de a comanda partea de forta de pe platforma, aceasta avand posibilitatea de lucru atat in modul manual cat si in modul controlat.
In functie de timpii ce vor fisetati in microcontroler, releele vor sta aclansate sau nu si astfel se va comanda exact troliul sa urmeze secvente exacte de functionare.
In figura urmatoare se vede cum functioneaza celalalt releu.
Pentru simularea funcționării schemei desenate în PROTEUS, după desenare se dă dublu click pe microcontroler si se incarcă fișierul HEX generat de către MPLAB, ca în figura următoare.
Modalitate încărcare fișier HEX în microcontroler.
Pornirea modului de lucru independent (cotrolat se face prin apasarea butonului plasat la pinul RB5 al microcontrolerului iar iesirea din acest mod se face prin apasarea butonului plasat la pinul RB6 al microcontrolerului.
Contactele normal deschise ale releelor de comanda vor fi plasate in paralel cu contactele normal deschise C1 si C2 de pe schema de comanda manuala.
Odată trecute toate aceste teste se poate trece la realizarea fizică a circuitului cu microcontroler.
Punerea in practica a actionarii unui troliu in urma simularilor facute.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Dezvoltarea Automatizării și Robotizării Într–o Serie de Ramuri Industriale (ID: 113871)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
