You are on page 1of 126

Masurarea inductantei bobinelor: L-metru

Introducere
Acest aparat masoara inductanta bobinelor in gamele: 100nH - 5 μH si 5 μH - 500mH fara a masura insa factorul de calitate. Masurarea inductantei este

posibila pentru bobine care au factorul de calitate mare respective rezistenta serie mai mica maxim 2 ohmi. Masurarea se face utilizand 2 oscilatoare: de joasa frecventa construit cu LM339, in gama 100nH < L < 5 μH; de inalta frecventa construit cu tranzitorul FET, BF256, in gama 100nH < L <5 μH. Afisarea valorii inductantei se face pe un afisaj LCD 2 x 16 caractere. Simultan cu afisarea valorii inductantei se indica si valoarea frecventei oscilatorului. Functionarea aparatului este gestionata de microcontrolerul PIC

16F84 care calculeaza valoarea inductantei dupa formula L= LCD.

si comanda

Schimbarea gamei de masura se face cu ajutorul butonului ”selectie gama ”. Masurarea cu acest aparat se face cu o eroare in medie de 10%.

Cuprins
Introducere Cap.1 Partea teoretica 1.1 1.2 1.3 1.4 Cap.2 Introducere in microcontrolere Bobina:parametrii, caracteristici Afisarea LCD.Principii de functionare Metode de programare a Pic-ului pag. 5 pag.24 pag.35 pag.39

Partea tehnica 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Scheme bloc Blocul(oscilator cu bobina:LM,FET) Divizorul de frecventa Multiplexorul PIC16F84 LCD(Initializare LCD) Schema logica a programului Sursa de alimentare A.1. Schema electronica A.2. Cablaje A.3. Lista componenete A.4. Listarea programului si limbajului de asamblare pag.44 pag.45 pag.51 pag.54 pag.56 pag.59 pag.63 pag.68 pag.70 pag.71 pag.72 pag.73

ANEXE :

BIBLIOGRAFIE

Mihu P.Ioan - Dispozitive si circuite electronice,vol I.-Editura Alma Mater 2002 Ciugudean Marian - Proiectarea unor circuite electrice,Editura Facla 1983 Badea M,Ristea.I - Tranzistoare cu efect de camp-Editura Tehnica 1982 Edmund Nicolau - Masurari electrice,Editura Tehnica 1989 Vintan Lucian - Exploatarea paralelismului in microprocesoarele avansate,Alma Mater 2001 www.microchip.com www.electronica.ro www.elektronikladen.de

Cap. 1 Partea teoretica
1.1 Introducere in microcontrolere
Istoria microcontrolelor Este anul 1969, si o echipa de ingineri japonezi de la compania BUSICOM sosesc in Statele Unite cu cerer ea ca unele circuite integrate pentru calculatoare sa fie facute folosind proiectele lor. Propunerea a fost facuta catre INTEL, iar Marcian Hoff a fost desemnat responsabil cu acest proiect. Pentru ca el era cel ce avea experienta in lucrul cu un calculator ( PC) PDP8, i-a venit sa sugereze o solutie diferita fundamental in locul constructiei propuse. Aceasta solutie presupunea ca functionarea circuitului integrat este determinata de un program memorat in el. Aceasta a insemnat ca configuratia ar fi fost mult mai simpla, dar aceasta ar fi cerut mult mai multa

Nu mult dupa aceea. si aluat nastere primul microcontroler. iar pretul incepuse de la 360$. ideea lui Marcian a castigat. In primul rand ei au cumparat licenta de la compania BUSICOM care nu au avut idee ce comoara avusesera. INTEL si Texas Instruments au continuat sa lucreze la microprocesor si in aprilie 1972 a aparut pe piata primul microprocesor de 8 biti sub numele de 8008. Chuck Peddle paraseste Motorola pentru a se muta la MOS Technology si continua sa lucreze intensiv la dezvoltarea microprocesoarelor. Frederico Faggin a fost de un ajutor major pentru INTEL.memorie decat ar fi cerut proiectul propus de inginerii japonezi. gandind ca competitorii vindeau 8080 si 6800 la 179$. Costructor sef era Chuck Peddle si pe langa microprocesorul propriu-zis. In timpul acelui an a aparut pe piata un microprocesor numit 4004. Motorola intenteaza repede proces contra lui MOS Technology si contra lui Chuck Peddle pentru copierea protejatului 6800. si doar in 9 luni a reusit sa scoata un produs din prima sa conceptie. El s-a transferat la INTEL. 6502 este un microcontroler pe 8 biti cu 56 de instructiuni si o capabilitate de adresare directa de 64Kb de . Aceasta a fost atat de senzational incat au crezut ca este un fel de inselaciune. Motorola a fost prima companie care sa faca alte periferice ca 6820 si 6850. Putea sa adreseze 64Kb de memorie si avea 45 de instructiuni si viteza de 300. Acela a fost primul microprocesor de 4 biti cu viteza 6000 operatii pe secunda. Cu toate ca CTC a renuntat la aceasta idee pana la sfarsit. INEL au continuat dezvoltarile lor pana in aprilie 1974 si au lansat pe piata microprocesorul de 8 biti sub numele de 8080 ce putea adresa 64Kb de memorie si avea 75 de instructiuni. MOS Technology inceteaza de a mai produce 6501 dar continua sa produca 6502. asa ca au lansat pe piata un microprocesor de 8 biti 6800.000 de operatii pe secunda. Intr-o alta companie americana Motorola. La acel timp multe companii au recunoscut marea importanta a microprocesoarelor si au inceput propriile lor dezvoltari.95$ pe microprocesor. si-au dat seama repede ce se intampla. In transformarea unei idei intr-un produs finit. Acel microprocesor a fost predecesorul tuturor microprocesoarelor de astazi. compania americana CTC a cerut de la INTEL si de la Texas Instruments sa faca un microprocesor pe 8 biti pentru folosinta in terminale. cu toate ca inginerii au cautat sa caute o solutie mai simpla. INTEL a obtinut drepturile de a vinde acest bloc integral in 1971. Dupa un timp. Ca un raspuns la competitorii lor atat INTEL cat si Motorola au scazut preturile lor in prima zi a expozitiei pana la 69. MOS Technology a anuntat ca produce microprocesoarele 6501 si 6502 la 25$ bucata pe care cumparatorii le puteau cumpara imediat. La expozitia WESCON din Statele Unite din 1975 a avut loc un eveniment critic in istoria microprocesoarelor.

Se poate spune ca Z80 a fost fara nici o indoiala comercial. Partner. Z80 a fost un succes mare si toata lumea a facut conversia de 8080 la Z80. Oric. In 1976. Federico Faggin paraseste INTEL. sau ca trebuie sa fie capabil sa execute toate programele care deja fusese scrise pentru 8080. Ultra si multe altele. In 1976 Zilog anunta Z80. Sznertek. Galeb. microcontrolerul este . Pe scurt. Inafara de Zilog. aceasta inseamna ca microprocesorul este inima computerului. Faggin face o decizie cruciala. Z80 era cu mult mai bun incat INTEL a apierdut batalia. Nu mai erau de facut imbunatatiri importante ca sa-i faca pe producatori sa se converteasca spre ceva nou. asa ca 6502 si Z80 impreuna cu 6800 au ramas ca cei mai reprezentativi ai microprocesoarelor de 8 biti a acelui timp.mult mai mare viteza de lucru etc. asa ca este instalat in computere ca :KIM-1. In timpul crearii acestui microprocesor. multe altele noi au fost adaugate. Faggin isi da seama ca multi vor ramane fideli acelui microprocesor din cauza marii cheltuieli care ar rezula in urma refacerii tuturor programelor. Pentru a fi folosit. GTE. Z80 a fost inima a multor computere ca :Spectrum. Deosebirea dintre microprocesoare si microcontrolere Microcontrolerul difera de un microprocesor in multe feluri. Totusi. Apple I. Acorn.memorie. Astfel el decide ca un nou microprocesor trebuie sa fie compatibil cu 8080. si isi porneste propria sa companie Zilog Inc. avea 176 instructiuni. NEC. INTEL iese pe piata cu o versiune imbunatatita de microprocesor pe 8 biti numit 8085. Se putea adresa direct la 64Kb de memorie. Orao. alti noi producatori apar de asemenea ca :Mostek. totul fusese de fapt deja hotarat. Apple II. Curand apar cativa producatori de 6502 (Rockwell. Stiind ca un mare numar de programe fusesera dezvoltate pentru 8080.). Atari.2650. SHARP si SGS.SC/MP etc. unui microprocesor trebuie sa i se adauge alte componente ca memorie. Chiar daca inca cateva microprocesoare au aparut pe piata (6809. cel mai de succes microcontroler de 8 biti a acelui timp. TRS703. NCR. Pe de alta parte. Inafara acestor caracteristici. Ricoh si Comodore preiau MOS Technology) ce era in momentul prosperitatii sale vandut la o rata de 15 milioane de microprocesoare pe an! Altii totusi nu au cedat. Z-3 si Galaxi aici acasa. o singura sursa. Comodore. asa ca Z80 a fost un microprocesor foarte puternic la vremea lui. 6502 devine foarte popular. sau componente pentru primirea si trimiterea de date. Datorita costului scazut. In primul rand si cel mai important este functionalitatea sa.

modemuri. matematice si de curgere a informatiei. interfete de intrare-iesire (I/O) pentru conectarea dispozitivelor externe cum ar fi tastatura sau monitorul. Pentru a construi un calculator complet. Un microcontroler este similar unui microprocesor. Un microcontroler este un 'calculator pe un chip'. video recorderele. Produsele de larg consum care includ microcontrolere sunt camerele video. calculeaza sau afiseaza informatii este o potentiala gazda pentru un microcontroler. procese sau evenimente. oricare din . Nu sunt necesare alte componente externe pentru aplicarea sa pentru ca toate perifericele necesare sunt deja incluse in el. imprimante si alte periferice. afisarea mesajelor si formelor de unda. Astfel. CPU executa instructiuni care indeplinesc operatiile de baza logice. comanda. Orice aparat care masoara. compact-disk (CD) playere si altele. Ambele contin o unitate centrala de prelucrare sau UCP (cenral processing unit). microcontrolerul este un calculator pe un chip deorece el contine si memorie si interfete de intrare-iesire pe langa CPU. microprocesorul necesita memorie pentru pastrarea datelor si programelor. Cel mai usor mod de a explica este de a-l descrie ca un dulap mare cu multe sertare. Daca presupunem ca am marcat sertarele intr-un asemenea fel incat sa nu fie confundate. stocheaza. Deoarece memoria si interfetele care incap pe un chip sunt limitate. microcontrolerele tind sa fie utilizate in sisteme mai mici care necesita doar un microcontroler si cateva elemente aditionale Blocurile de baza a microcontrolerului Unitatea de memorie Memoria este o parte a microcontrolerului a carei functie este de a inmagazina date. Spre diferenta de microprocesor. In calculatoare de birou (PC) se pot gasi microcontrolere in tastatura. Cuvantul 'micro' sugereaza marimea redusa a dispozitivului iar 'controler' ne spune ca dispozitivul poate fi folosit pentru a controla obicte. Microcontrolerele pot fi gasite in componenta oricarui tip de aparat.De exemplu orice automobil fabricat astazi este echipat cu cel putin un microcontroler care comanda motorul masinii si adesea chiar cu mai multe pentru comanda sistemelor aditionale din automobil.proiectat sa fie toate acestea intr-unul singur. In echipamentele de testare fac posibila adaugarea unor facilitati ca de exemplu memorarea rezultatelor masurarii. economisim timpul si spatiul necesare pentru construirea de aparate.

Aceasta se face asigurarea unei linii aditionale numita linie de control. Aceasta inseamna ca noi trebuie sa selectam locatia de memorie la un capat. Unitatea centrala de procesare Sa adaugam alte 3 locatii de memorie pentru un bloc specific ce va avea o capabilitate incorporata de inmultire. se face citirea. Fig. dar avem nevoie si de altele pentru ca microcontrolerul nostru sa functioneze.continuturile lor vor fi atunci usor accesibile. Vom desemna aceasta linie ca R/W (citeste /scrie).1. memoria trebuie de asemenea sa permita scrierea in ea. extragere si sa-i mutam continuturile dintr-o locatie de .1. Doua noi concepte ne sunt aduse :adresarea si locatia de memorie. si adresarea nu este altceva decat selectarea uneia din ele. Linia de control este folosita in urmatorul fel : daca r/w=1. In afara de citirea dintr-o locatie de memorie. impartire. si daca opusul este adevarat atunci se face scrierea in locatia de memorie. Este suficient sa se stie desemnarea sertarului si astfel continuturile lui ne vor fi cunoscute in mod sigur. Pentru o anumita intrare obtinem continuturile unei anumite locatii de memorie adresate si aceasta este totul. Memoria este primul element. Memoria consta din toate locatiile de memorie. si la celalalt capat trebuie sa asteptam continuturile acelei locatii.1 Componentele de memorie sunt exact asa.

Fig. dorim sa adaugam continuturile a doua locatii de memorie si intoarcem rezultatul inapoi in memorie.1. vom avea nevoie de o conexiune intre menmorie si CPU. Bus-ul de date Calea este numita 'bus'-magistrala. 16. ca si functionalitatea sa. Locatiile ei de memorie sunt numite registri. sI astfel orice schimb de informatii este ascuns. de exemplu. Sa privim la situtia curenta. in cazul nostru 8 biti sau linia de conectare. Partea pe care tocmai am adaugat-o este numita 'unitatea de procesare centrala' (CPU). Daca.2 Registrii sunt deci locatii de memorie a caror rol este de a ajuta prin executarea a variate operatii matematice sau a altor operatii cu date oriunde se vor fi gasit datele. el reprezinta un grup de 8. iar celalalt este atat de lat cat sunt datele. . trebuie sa avem o anumita 'cale' prin care datele circula de la un bloc la altul. sau mai multe fire. Primul serveste la transmiterea adreselor de la CPU la memorie.memorie in alta. Avem doua entitati independente (memoria si CPU) ce sunt interconectate. iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului. Mai simplu formulat. Primul consta din atatea linii cat este cantitatea de memorie ce dorim sa o adresam.1. Fizic. Sunt doua tipuri de bus-uri : bus de adresa si bus de date.

3 In ceea ce priveste functionalitatea. sau sa se ia date de la port.1. Unitatea de intrare-iesire Aceste locatii ce tocmai le-am adaugat sunt numite 'porti'. Cand se lucreaza cu porti. sau cu noi ! Pentru a inlatura aceasta deficienta.1. mai intai de toate este necesar sa se aleaga cu ce pot urmeaza sa se lucreze. situatia s-a imbunatatit. dar o noua problema a aparut de asemenea: avem o unitate ce este capabila sa lucreze singura.1. Fig.1. iesire sau porti pe doua-cai.Fig. iar celalat are conexiune cu liniile de iesire la microcontroler ce pot fi vazute cu ochiul liber ca pini la componenta electronica. si apoi sa se trimita date la.4 . dar ce nu are nici un contact cu lumea de afara.Sunt diferite tipuri de porti :intrare. sa adaugam un bloc ce contine cateva locatii de memorie a caror singur capat este conectat la busul de date.

Porturi de comunicatie Cu aceasta am adaugat la unitatea deja existenta posibilitatea comunicarii cu lumea de afara. Totusi. Unul din neajunsurile de baza este numarul de linii ce trebuie sa fie folosite pentru a transfera datele. Sa presupunem ca avem urmatorul protocol. Aceste reguli sunt numite protocol. trebuie sa stabilim regulile de schimb ale datelor. De exemplu. asa ca va activa mecanismul ei de receptie. sau dupa al 8-lea bit. este putin probabil ca ei se vor intelege repede si eficient unul cu altul.Cand se lucreaza cu el portul se comporta ca o locatie de memorie. alta pentru receptie si a treia este folosita ca o linie de referinta atat pentru partea de intrare cat si pentru partea de iesire. Pentru ca aceasta sa functioneze. si ca o linie este folosita pentru trimiterea de date. Protocolul este de aceea definit in avans ca sa nu fie nici o neitelegere intre partile ce comunica una cu alta. si este posibil de a remarca usor aceasta la pinii microcontrolerului. Protocolul ce tocmai l-am descris este numit in literatura profesionala NRZ (Non-Return to Zero). Sa lasam ca fiecare bit sa ramana pe linie pentru o perioada de timp egala cu T. daca un om vorbeste in franceza. acest mod de comunicare are neajunsurile lui. Ce s-ar intampla daca acestea ar trebui transferate la distanta de cativa kilometri? Numarul de linii si numarul de kilometri nu promite costuri eficiente pentru proiect. asa ca partea receptoare va sti ca sunt date de primit. sa aducem unitatea logica '1' inapoi pe linie ce va marca sfarsitul transmisiei unei date. Sa ne intoarcem acum la partea de transmisie si sa incepem sa punem zero-uri si unu-uri pe linia de transmisie in ordinea de la un bit a celei mai de jos valori la un bit a celei mai de sus valori. coboram linia de transmisie la '0' logic pentru o perioada de timp (pe care o vom desemna ca T). Sa presupunem ca lucram doar cu 3 linii. si altul vorbeste in engleza. Unitatea logica '1' este setata pe linia de transmisie pana ce incepe transferul. Ceva este pur si simplu scris in sau citit din el. Nu ne ramane decat sa reducem numarul de linii intr- un asa fel incat sa nu afectam functionalitatea. Odata ce incepe transferul. si la sfarst. .

1. trimite si procesa date.1. si de acolo catre unitatea de receptie conform protocolului. Dupa receptia de date trebuie sa le citim din locatia de transmisie si sa le inmagazinam in memorie in mod opus transmiterii unde procesul este invers.6 Watchdog-ul Inca un lucru ce necesita atentia noastra este functionarea fara defecte a microcontrolerului in timpul functionarii.1. Blocul ce permite acest mod de comunicare este numit blocul de comunicare seriala. putem receptiona . Sa presupunem ca urmare a unei anumite interferente (ce adesea se intampla in industrie) microcontrolerul nostru se opreste din executarea programului. este posibil sa receptionam si sa transmitem date (informatii) in acelasi timp. de unde vine si numele de comunicatie seriala.1. .Fig. Fig. sau si mai rau. datele sunt mutate aici bit cu bit.5 Pentru ca aven linii separate de receptie si de transmitere. Unitatea de timer Acum ca avem comunicatia seriala . incepe sa functioneze incorect. Spre deosebire de transmisia paralela. sau intr-o serie de biti. Datele circula din memorie prin bus catre locatia de trimitere.

Totusi.1. . Aceasta sarcina este indeplinita de un bloc pentru conversia analog-digitala sau de un convertor AD. Acest bloc este responsabil pentru convertirea unei informatii despre o anumita valoare analoga intr-un numar binar si pentru a o urmari pe tot parcursul la un bloc CPU asa ca blocul CPU sa o poata procesa.1. nu se va mai scrie zero. Pentru a depasi acest obstacol. nu exista buton de resetare pe care sa apasam in cazul microcontrolerului care sa rezolve astfel problema noastra. Acesta este un element important al fiecarui program ce trebuie sa fie fiabil fara supravegherea omului.1.Fig. avem nevoie de a introduce inca un bloc numit watchdog-cainele de paza. si corect de aceasta data pe toata durata. cand aceasta se intampla cu un computer.7 Bineanteles. ele trebuie convertite intr-un mod care sa fie inteles de microcontroler. Acest bloc este de fapt un alt contor liber unde programul nostru are nevoie sa scrie un zero ori de cate ori se executa corect. Convertorul Analog-Digital Pentru ca semnalele de la periferice sunt substantial diferite de cele pe care le poate intelege (zero si unu). si tot ce mai ramane de facut este de a-l pune intr-o componenta electronica unde va accesa blocurile interioare prin pinii acestei componente.8 Astfel microcontrolerul este acum terminat. Imaginea de mai jos arata cum arata un microcontroler in interior.1. il resetam pur si simplu si va continua sa lucreze. Fig. iar contorul se va reseta singur pana la obtinerea valorii sale maxime. Aceasta va duce la rularea programului din nou. In caz ca programul se 'intepeneste'.

Fig.Cofiguratia fizica a interiorului unui microcontroler Liniile subtiri ce merg din interior catre partile microcontrlerului reprezinta fire conectand blocurile interioare cu pinii capsulei microcontrolerului.1.1. Schema urmatoare reprezinta sectiunea centrala a microcontrolerului.9. .

1. Programul . un microcontroler singur nu este de ajuns.Fig.10 Pentru o aplicatie reala. si alte cateva elemente ce constituie o interfata logica catre elementele de stabilizare (ce se va discuta in capitolele urmatoare). avem nevoie de un program pe care sa-l execute.1. Inafara de microcontroler.

programul care sa lucreaze la rezolvarea ei va fi mai mare. trebuie sa instalam microcontrolerul intr-un aparat si sa-l lasam sa lucreze. si vede totalul lor la portul A. Programarea poate fi facuta in catava limbaje ca Assembler. In orice caz. Pentru a face aceasta trebuie sa adaugam cateva componente externe necesare pentru functionarea sa. Sa incercam sa scriem un mic program ce il vom crea singuri si pe care oricine va fi in stare sa-l inteleaga. Prima linie a programului este pentru mutarea continuturilor locatiei de memorie 'A' intr-unul din registri unitatii centrale de procesare. Urmatoarea instructiune instruieste unitatea centrala de procesare sa adauge continuturile celor doi registri sa sa trimita un rezultat obtinut la portul A. le vom muta de asemenea in celalalt registru al unitatii centrale de procesare. Pentru o problema mai complexa. C si Basic care sunt cele mai folosite limbaje. Basic este cel mai utor de invatat. marimea memoriei si timpul disponibil pentru asamblarea sa. mai usor de inteles. Mai intai trebuie sa dam viata microcontrolerului prin conectarea sa la o LOCATION_A LOCATION_B . incat suma acestei adaugari sa fie vizibila pentru toata lumea de afara.Scrierea programului este un domeniu special de lucru al microcontolerului si este denumit 'programare'. dar folosesc cel mai mic spatiu in memorie si da cele mai bune rezultate cand viteza de executie a programului se are in vedere. START REGISTER1=MEMORY REGISTER2=MEMORY PORTA=REGISTER1 + REGISTER2 END Programul adauga continuturile a doua locatii de memorie. Programele in limbajul C sunt mai usor de scris. inainte de a va hotari in privinta unuia din aceste limbaje trebuie sa studiati cu atentie cerintele privind viteza de executie. Dupa ce este scris programul. Pentru ca avem nevoie si de celelalte date de asemenea. Pentru ca este cel mai folosit limbaj in programarea microcontrolerelor va fi discutat intr-un capitol ulterior. Assembler apartine limbajelor de nivel scazut ce sunt programate lent. dar sunt mai lente in executare decat programele in Assembler. si instructiunile sale sunt cele mai aproape de modul de gandire a omului. dar ca si limbajul de programare C este de asemenea mai lent decat Assembler-ul.

Bazat pe ceasul sau microcontrolerul executa instructiunile programului. poate fi folosit pentru masurarea timpului ce este foarte util la unele componente. iar portul B are 8 pini. In RAM sunt inmagazinate toate rezultatele intermediare sau datele temporare ce nu sunt cruciale la intreruperea sursei de alimentare. Memoria program (FLASH)-pentru inmagazinarea unui program scris. De exemplu. Microcontrolerul PIC16F84 PIC16F84 apartine unei clase de microcontrolere de 8 biti cu arhitectura RISC.sursa (tensiune necesara pentru operarea tuturor instrumentelor electronice) si un oscilator a carui rol este similar inimii din corpul uman. . Portul A are 5 pini. Asfel componenta noastra pierde in privinta auto-mentinerii. Pentru ca memoria ce este facuta in tehnologia FLASH poate fi programata si stearsa mai mult decat odata. o astfel de data este o temperatura prestabilita in regulatoarele de temperatura. TIMER-ul LIBER este un registru de 8 biti in interiorul microcontrolerului ce lucreaza independent de program. EEPROM-memorie de date ce trebuie sa fie salvate cand nu mai este alimentare. cel mai important fiind priceperea dezvoltatorului de hardware. Dupa cum stim timpul exact dintre fiecare doua incrementari ale continutului timer-ului. PORTUL A si PORTUL B sunt conexiuni fizice intre microcontroler sin lumea de afara. Structura lui generala este aratata in schita urmatoare reprezentand blocurile de baza. aceasta face microcontrolerul potrivit pentru dezvoltarea de componenta. va trebui sa facem ajustarea inca o data la revenirea alimentarii. La fiecare al patrulea impuls de ceas al oscilatorului isi incrementeaza valoarea lui pana ce atinge maximul (255). Indata ce este alimentat microcontrolerul va executa un scurt control asupra sa. si de expertiza programatorului in obtinerea maximului din aparat cu programul sau. Daca in timpul intreruperii alimentarii aceasta data se pierde. Cum va lucra aparatul depinde de multi parametri. RAM-memorie de date folosita de un program in timpul executarii sale. se va uita la inceputul programului si va incepe sa-l execute. si apoi incepe sa numere tot din nou de la zero. Este in mod uzual folosita pentru inmagazinarea de date importante ce nu trebuie pierdute daca sursa de alimentare se intrerupe dintr-o data.

si bineinteles.1. PIC16F84 foloseste 14 biti pentru instructiuni ceea ce permite ca toate instructiunile sa fie instructiuni de un cuvant. Coordoneaza lucrul altor blocuri si executa programul utilizatorului. Fig. Arhitectura Harvard este un concept mai nou decat von-Neumann`s. RISC S-a spus deja ca PIC1684 are o arhitectura RISC. In arhitectura Harvard.11 CISC. bus-ul de date bus-ul de adrese sunt separate.Unitatea cerntrala de prelucrare are rolul unui element de conectivitate intre celelalte blocuri ale microcontrolerului. Separand un program de memoria de date face posibil ca mai departe instructiunile sa nu trebuiasca sa fie cuvinte de 8 biti. Este de . Astfel un mare debit de date este posibil prin unitatea de procesare centrala. si are nevoie sa fie explicat aici mai in detaliu. o viteza mai mare de lucru.1. Acest termen este adeseori gasit in literatura despre computere. S-a nascut din nevoia de marire a vitezei microcontrolerului.

maxim doua instructiuni pe tact ) impreuna cu un programator si un compilator ( si un simulator ) devine o jucarie extrem de interesanta pentru un electronist obisnuit cu proiectarea CMOS sau TTL.asemenea tipic pentru arhitectura Harvard sa aiba mai putine instructiuni decat von-Newmann si sa aiba instructiuni executate uzual intr-un ciclu. Titlul CISC inseamna Complex Instruction Set Computer. sau poate fi folosit pentru a imbunatati programele la produse finite. Conform cu ceea ce spune constructorul. RISC inseamna Reduced Instruction Set Computer. etc. Aceasta capabilitate poate fi folosita pentru a crea productie pe linie de asamblare.) Programabilitatea sistemului acestui cip (impreuna cu folosirea a doar doi pini in transferul de date) face posibila flexibilitatea produsului. mai precis 35 de instructiuni (de ex. Pic16F84. manuirea usoara si flexibilitatea fac PIC16F84 aplicabil chiar si in domenii unde microcontrolerele nu au fost prevazute inainte (exemple:functii de timer. viteza motorului. Microcontrolerele cu arhitectura Harvard sunt de asemenea numite 'microcontrolere RISC'. Aplicatii : PIC16F84 se potriveste perfect in multe folosinte. frecventele receptorului. Pentru ca PIC16F84 este un microcontroler RISC.). consumul scazut. aplicatiile coprocesor. inlocuirea interfetei in sistemele mari. Microcontrolerele cu arhitectura vonNewmann sunt numite 'microcontrolere CISC'. manere electrice de usi si dispozitivele de securitate. microcontrolerele INTEL si Motorola au peste 100 de instructiuni). . de la industriile auto si aplicatiile de control casnice la instrumentele industriale. de a inmagazina date de calibrare disponibile doar dupa testarea finala. un microcontroller de 8 biti cu un set restrins de vre-o 34 de instructiuni. cu arhitectura de tip RISC (una. Memoria EEPROM face mai usoara aplicarea microcontrolerelor la aparate unde se cere inmagazinarea permanenta a diferitor parametri (coduri pentru transmitatoare. Toate aceste instructiuni sunt executate intr-un ciclu cu exceptia instructiunilor jump si branch. Este de asemenea ideal pentru cardurile smart ca si pentru aparatele alimentate de baterie din cauza consumului lui mic. dupa ce asamblarea si testarea au fost terminate. PIC16F84 ajunge la rezultate de 2:1 in compresia cod si 4:1 in viteza in comparatie cu alte microcontrolere de 8 biti din clasa sa. etc. senzori la distanta. Costul scazut . aceasta inseamna ca are un set redus de instructiuni.

. dar de data aceasta din partea adresei corecte. datorita pipeline-ului sau liniei directe. Daca instructiunea cauzeaza o schimbare in contorul programului. Decodarea si executarea incepe cu clock-urile Q2. si PC-ul nu directioneaza spre urmatoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps sau de apelare). Decodarea si executarea instructiunii sunt facute intre urmatoarele cicluri Q1 si Q4.Q3 si Q4 ce nu se suprapun. Q3 si Q4. prin scrierea intr-un registru (IR). fiecare instructiune este efectiv executata intr-un singur ciclu. Contorul de program (PC) retine informatia despre adresa urmatoarei instructiuni. Fig. 2 cicluri sunt necesare pentru executarea unei instructiuni. si este nevoie de inca una pentru decodare si executare. Totusi. este necesar un ciclu cu o instructiune. Executarea instructiunii incepe prin apelarea unei instructiuni care este urmatoarea in linie. Q2.1. Q3 si Q4. Ciclurile de instructiuni de apelare si executare sunt conectate intr-un asa fel incat pentru a face o apelare. Ciclul incepe cu clock-ul Q1.12 Pipelining Ciclul de instructiuni consta din ciclurile Q1.Ciclul de clock / instructiune : clock-ul este un semnal periodic dreptunghiular generat de un oscilator cu frecventa stabila.1. Aceste 4 clock-uri constituie un ciclu de o singura instructiune (numit de asemenea ciclu masina) in timpul careia o instructiune este executata. Clock-ul de la oscilator intra intr-un microcontroler prin pinul OSC1 unde circuitul intern al unui microcontroler divide clock-ul in 4 clock-uri egale Q1. Aceasta este pentru ca instructiunea trebuie procesata din nou. Instructiunea este apelata din memoria program la fiecare Q1 si este scrisa in registrul de instructiuni la Q4.Q2. In urmatoarea diagrama putem vedea relatia dintre ciclul instructiunii si clock-ul oscilatorului (OSC1) ca si aceea a clock-urilor interne Q1-Q4.

1. Cel mai adesea se gaseste intr-o capsula de tip DIP18 dar se poate gasi de asemenea si intr-o capsula SMD care este mai mica ca cea DIP.13 TYCO citeste instructiunea MOVLW 55h (nu are importanta pentru noi ce instructiune a fost executata.1. Acesta este un bun exemplu a unei instructiuni avand nevoie de mai mult de un ciclu. si citeste instructiunea BSF PORTA. TCY4 ciclul instructiunii este total folosit pentru citirea primei instructiuni dintr-un subprogram la adresa SUB_1. TCY5 executa prima instructiune dintr-un subprogram SUB_1 si citeste urmatoarea. TCY3 executa o apelare a unui subprogram CALL SUB_1. . DIP este prescurtarea de la Dual In Package. nu sunt necesare in lipirea acestui tip de componenta.Fig. instructiunea trebuie citita din nou. SMD este prescurtarea de la Surface Mount Devices sugerand ca gaurile pentru pini unde sa intre acestia . Semnificatia pinilor PIC16F84 are un numar total de 18 pini. sau nu este prima instructiune a unui subprogram SUB_1 a carui executie este urmatoarea in ordine. Pentru ca instructiunea aceasta nu este aceea de care avem nevoie. ce explica de ce nu este un dreptunghi in partea de jos). TCYI executa instructiunea MOVLW 55h si citeste MOVWF PORTB. BIT3. TCY2 executa MOVWF PORT si citeste CALL SUB_1.

Pin nr. Pin nr. . Nu are functie aditionala.Fig. Pin nr.13 RB7 Al saptelea pin la portul B.15 OSC2 Pin desemnat pentru conectarea la un oscilator Pin nr. Linia 'Data' in mod programare. Pin nr.11 RB5 Al cincilea pin la portul B.7 RB1 Primul pin la portul B.1. Pin nr.16 OSC1 Pin desemnat pentru conectarea la un oscilator Pin nr.18 RA1 Primul pin la portul A. Pin nr.10 RB4 Al patrulea pin la portul B.2 RA2 Al treilea pin la portul A.Nu are functie aditionala. Pin nr. Nu are functie aditionala. Pin nr. Nu are functie aditionala. Nu are functie aditionala.17 RA2 Al doilea pin la portul A.12 RB6 Al saselea pin la portul B. Pin nr.1.14 Vdd Polul pozitiv al sursei. Nu are functi aditionala.3 RA3 Al patrulea pin la portul A.14 Pinii microcontrolerului PIC16F84 au urmatoarea semnificatie: Pin nr. Intrarea intrerupta este o functie aditionala. Pin nr.4 MCLR Reseteaza intrarea si tensiunea de programare Vpp a microcontrolerului. Nu are functie aditionala. Linia de 'Clock' in mod programare. masa. Pin nr. Pin nr.8 RB2 Al doilea pin la portul B. Pin nr.9 RB3 Al treilea pin la portul B.6 RBO Pin de zero la portul B. TOCK1 care functioneaza ca timer se gaseste de asemenea la acest pin Pin nr. Nu are functie aditionala.5 VSS Alimentare.1 RA1 Al doilea pin la portul A. Nu are functie aditionala. Pin nr.

1.iar n numarul de spire.2) d este diametrul mediu al bobinei in mm.2. trebuie sa permita bobinarea usoara. Miezuri magnetice Pentru obtinerea inductivitatilor de valori mari.infasurarea bobinei se dispune pe miezuri magnetice. . l -lungimea in mm.Miezul magnetic impreuna cu eventualele intrefieruri formeaza un circuit magnetic care are calitatea de a concentra aproape integral liniile campului magnetic. prezentand in acelasi timp o rezistenta mecanica satisfacatoare. fixarea simpla si montarea comoda a miezului magnetic.Conductoarele din aluminiu se folosesc numai pentru bobinele instalatiilor de putere. in general cu formule semiempirice.2 Bobina.h-inaltimea bobinei in mm.spira langa spira: L0= [μH] (1.2. l este lungimea in mm. -pentru bobine cu mai multe straturi: L0= [μH] (1.Materialul cel mai des folosit in calitate de conductor este cuprul. pe care se infasoara conductorul bobinei. precum si prin rezistenta la eroziune chimica. efectuarea cu usurinta a conexiunilor. -pentru bobine fara miez. Calculul inductivitatii: Calculul inductivitatii se face anterior realizarii bobinei. Metode de masurare a bobinei Bobinajele se executa din materiale care se caracterizeaza prin conductivitate electrica ridicata. care are conductivitate electrica foarte buna si nu prezinta dificultati la prelucrarea tehnologica.1) d este diametrul mediu al bobinei in mm.cu un singur strat.Suportul. printr-o rezistenta mecanica suficienta.

iar momentele atomice vecine fiind orientate identic. ceea ce macroscopic se manifesta printr-o dependenta de tip histerezis a inductiei magnetice B.Magnetizarea spontana exista numai pana la o anumita temperatura T.3) . de intensitate H a campului magnetic.Neliniaritatea se exprima prin dependenta inductieie magnetice B de intensitatea campului magnetic H. dar unul dintre momente este mai mare in valoare absoluta.permeabilitate mare. pierderi mari. tinzand catre valoarea de saturatie B.Materialele ferimagnetice au in structura lor doua sau mai multe subretele magnetice. momentele magnetice fiind orientate in sens contrar.Din punct de vedere al orientarii momenteleor magnetice atomice. se formeaza domenii cu magnetizare spontana. numita temperatura Curie. materialul fiind paramagnetic.Pe ansamblu.Dupa depasirea temperaturii T energia termica a retelei depaseste energia interactiunii de schimb.a carei valoare depinde de material.Feromagneticele au momentele magnetice elementare orientate toate in acelasi sens. domenile de magnetizare dispar. materialele magnetice pot fi moi (cu campul coercitiv H<80A/m. printr-o functie neliniara. avand fiecare magnetizare spontana. Permeabilitatea magnetica Interactiunea substantei cu campul magnetic este caracterizata de permeabilitatea complexa relativa: μ= = μ'-j μ'' (1. domeniile sunt astfel orientate. incat materialul prezinta magnetizare remanenta.Din punct ce vedere al ciclului de histerezis. pierderi mici) sau dure (H>80A/m.Crescand intensitatea H a campului magnetic. materialele pot fi feromagnetice sau ferimagnetice. Atomii materialelor magnetice avand moment magnetic propiu.La aplicarea unui camp magnetic exterior apare o deplasare a domeniilor magnetice.Ciclul histerezis Materialele magnetice utilizate pentru miezurile bobinelor sunt neliniare din punctul de vedere al comportarii in camp magnetic exterior. dar cu energie mare in intrefier). inductia magnetica B creste.2.

a materialului miezului.4) Bobinele utilizate in echpamente electronice au miezurile realizate din materiale feromagnetice moi. O bobina ideala. μ =4π*10-7 -permeabilitatea vidului. Permeabilitatea efectiva se poate calcula numai pentru anumite geometri. avand in vid inductivitatea L0. H-intensitaea campului magnetic. pentru flux de scapari nul prezinta la borne impedanta: Z=jωL= jωL0 μ = jω μ'L0 + μ'' ωL0=rm+ jωL (1. dependenta de permeabilitatea relativa. de regula se detremina experimental. de geometrie si pozitia relativa a miezului fata de bobinaj.2. Inductivitatea bobinei In cazul bobinelor cu miez inductivitatea este L= μ efL0 (1. iar μ este permeabilitatea efectiva a miezului. Parametrii bobinei . in care se introduce un miez magnetic de permeabilitate relativa complexa μ.2.5) Unde L0 este inductivitatea bobinei fara miez.B -inductia magnetica.

permeabilitatea relativa este constanta. Care inglobeaza atat pierderile datorite curentilor turbionari in miezul magnetic. Pentru bobine dispuse in medii liniare si izotrope.In functionarea cu semnal mare. precum si de permeabilitatea relativa a mediului. dimensiunile si numarul de spire al bobinei. definita ca raportul dintre fluxul magnetic propriu sigma si curentul I ce strabate bobina: L=Ф/I (1.fie o inductivitate pentru o anumita valoare a curentului. ca element pur raectiv. inductivitatea variaza in limite largi si trebuie definita fie o inductivitate medie. Un alt parametru al bobinei este rezistenta sa de pierderi r.1 Parametrul caracteristic al unei bobine este inductivitatea L.In cazul bobinelor cu miez magnetic inductivitatea variaza in functie de semnalul aplicat.2. Considerand toate cele n spire identice.Fiecare spira a bobinei comporta ca o rezistenta de pierderi in conductor r'e.Pierderile r'c si r'm pot fi echivalate cu o rezitenta in serie cu inductivitatea L' a spirei. datorita permeabilitatii relative cu intensitatea curentului ce strabate bobina. depinzand numai de forma. si o rezistenta de pierderi in materialul magnetic r. intr-o prima aproximatie. efectul total de pierderi in bobina este exprimat prin rezistenta serie a bobinei r.al caror efect este proportional cu patratul frecventei de lucru.Transpunand efectul rezistentei de izolatie in serie. in timp ce r caracterizeaza pierderile de putere activa. tot grupul fiind in paralel cu rp=nr'p.1. Valoarea inductivitatii este usor dependenta si de temperatura de lucru atat prin dependenta inductivitatii relative de temperatura cat si prin modificarea dimensiunilor fizice ale bobinei la variatii mari de temperatura. L este constant.2. se poate considera bobina.Inductivitatea L caracterizeaza comportarea utila a bobinei. ca o inductivitate L=nL' in serie cu rc=nr'c si rm=nr'm.In paralel cu grupul serie apare rezistenta de izolare r'p.cat si pierderile prin histerezis al caror efect este proportional cu f.Fig.6) Acesta este o marime specifica a bobinei. .In functinarea cu semnal mic.

I -valoarea eficace a curentului prin bobina.2.factorul de calitate se determina din relatia: = = = QL (1. in functie de frecventa de lucru.Aceasta se datoreste capacitatii parazite C12 dintre doua spire alaturate.8)-factorul de calitate al bobinei Un alt parametru al bobinei este capacitatea sa parazita. . curentul si tensiunea la borne nu trebuie sa depaseasca.r-energia disipata prin efect Joule in perioada 0. QL = (1. Solicitarea bobinei reale in tensiune si curent in functie de tensiune si curent Curentul ce strabate o bobina si repectiv tensiunea la bornele sale depind de reactanta bobinei XL= ωL. anumite limite.Pentru a evita deteriorarea bobinei ca urmare unor solicitari electrice. care apare in paralel cu L' si r pe fiecare spira.2.7) Wmax-energia maxima acumulata in campul magnetic al bobinei Wj0. ca fiind proportional cu raportul dintre energie maxima inmagazinata in campul magnetic al bobinei si energia disipata sub forma de caldura.T ωL-reactanta bobinei la frecventa corespunzatoare pulsatiei ω=2πf r -rezistenta echivalenta pierderilor in bobina.La fiecare frecventa de lucru se defineste pentru bobina.Efectul total al acestor capacitati se inglobeaza intr-o capacitate echivalenta parazita Cp. factorul sau de calitate. intr-o perioada. deci vor depinde de frecventa. in paralel pe bobina. si capacitatilor C10 si C20 ale fiecarei spire fata de masa.Ca urmare.

12) Zgomotul unei impedante se datoreste agitatiei termice a electronilor liberi. -de la o anumita frecventa f1. asupra puterii disipate in domeniul f1.9) Deci la frecventa f1 va exista relatia: Pd max =ω1Imax2Ltg∂ (1. curentul nu trebuie sa depaseasca valoarea maxima admisibila Imax. apare pericolul de distrugere termica a bobinei.2.f2 si asupra tensiunii la frecvente mai mari de frecventa critica f2. deci curentul va avea alta lege de variatie I= U max/ ωL.2.-in domeniul frecventelor joase solicitarea bobinei se datoreste in principal curentului care da nastere unor forte mecanice de respingere intre spire . independent de regimul electric in care este utilizata aceasta.2. Pmax = (1. energia sa depinzand de energia cinetica a electronilor liberi.Deci pentru a se evita distrugerea bobinei.10) . deci trebuie limitata puterea maxima pe care o poate disipa bobina : Pd max=UI tg∂ (1.In acest domeniu tensiunea la borne creste liniar cu frecventa. pentru strapungerile intre spire. O sursa de zgomot propiu-zisa o . la randul sau determinata de temperatura absoluta a impedantei. Frecventele critice satisfac relatia: f1 f2= Zgomotul bobinelor (1.Acest zgomot este un zgomot de fluctuatie.pentru o anumita frecventa f2 in domeniul frecventelor inalte depasirea unei tensiuni limitaUmax este interzisa.Bobinele cu pierderi mici se comporta bine din punct de vedere al zgomotului. de conductie in interiorul impedantei respective.11) In functie de frecventa apar deci trei domenii in care se impun succesiv restrictii asupra curentului in domeniul frecventelor joase. pana la frecventa critica f1.2.

alegand tipul de bobinaj si de izolatie corespunzator frecventelor si tensiunilor de lucru.Pentru cresterea sigurantei bobinelor se pot lua masuri inca din fabriactie din etapa de proiectare. temperaturi inalte ce conduc la strapungerea termica a izolatiei. In general contributia zgomotului nu este importanta. tipul de conductor corespunzator puterilor dezvoltate in circuit. conectate in serie.Fiabilitatea bobinelor este destul de variata in functie de tipul bobinei. curentul din circuit va depinde mult de frecventa si va atinge maxim pronuntat la freventa de rezonanta. Fiabilitatea bobinelor Bobinele sunt elemente cu siguranta in functionare relativ scazuta.Ca urmare. domeniul de utilizare.Impedanta acestui circuit depinde mult de frecventa.constituie vibratiile mecanice ale miezului din tole nestranse suficient. modul de intretinere si exploatare. dar. temperaturi prea joase care favorizeaza strapungerea deoarece materialele de etansare pot crapa si astfel este posibila patrunderea umiditatii. in raport cu rezistenta interna a generatorului. conditiile de constructie. La randul lor insa. Circuit oscilant serie Circuitul scilant serie este un dipol pasiv format ditr-o bobina si un condensator. curentul prin circuit va fi practic constant si independent de frecventa deoarece impedanta circuitului va fi practic constant si independent de frecventa deoarece impedanta circuitului este practic neglijabila. Deci propietatile selective ale circuitului se pierd.daca circuitul se excita cu un generator ideal de tensiune.Cele mai frecvente defectiuni sunt intreruperea conductorului sau scurtcircuitul intre spire. ceea ce ii confera propietati selective.Daca circuitul s-ar excita cu un generator de curent. determinand deci o comportare a circuitului. defectiunile lor putand conduce si la defectarea altor piese cu care sunt conectate sau alaturi de care sunt montate.01/1000 h. .Astfel ea atinge un minim la frecventa la care modulul reactantei inductive devine egal cu modulul reactantei capacitive si tinde spre valori foarte mari in afara acestei frecvente. orientativ rata de defectare poate fi considerata λ=0. defectiunile bobinelor pot fi provocate de defectarea altor componente ale sistemului.

UR de la bornele inductantei.16) -argumentul impedantei circuitului serie. ZS= (1. are expresia: Rs=RL (1.1.2.19) .18) (1.13) -rezistenta de pierderi serie a circuitului. Expresia curentului I care se stabileste prin circuit este: Tensiunea UL.Fig.2. au expresiile: UL=jXLI=jωLI (1.2.2.2.14) -reactanta circuitului serie.2 Comportarea circuitului serie propriu-zis Se cosidera generatorul de tensiune ideal adica Rg=0 Impedanta circuitului serie Zs.2.UC. condensatorului si rezistorului serie.17) UC=jXcI=-( UR=Rs*I )I (1. Xs=ωL- (1.2.2. φs=arc tg( ) (1.15) -modulul impedantei circuitului serie.

2.2.24) Din propietatile circuitului oscilanta serie aratate rezulta si posibiltatile de utilizare a acestuiu circuit ca circuit selectiv sau ca circuit de rejectie.2.2.25) . tensiunile la bornele inductantei si ale condesatorului sunt maxime.La rezonanta.2.23) De asemenea la rezonanta.21) Deci rezonanta are loc atunci cand frecventa tensiunii de excitatie.22) Iar curentul prin circuit este maxim si in faza cu tensiune la bornele circuitului: I(ω0)= = (1.Rezonanta circuitului serie Fenomenul de rezonanta se produce la frecventa ω0 la care: X(ω0)= ω0L- =0 (1. impedanta circuitului serie este minima si pur rezistiva: Zs(ω0)=Rs (1. egale. coincide cu frecventa proprie de oscilatie a circuitului. in opozitie de faza si de Q ori mai mari decat tensiunea la bornele circuitului : = =ω0L = (1.20) De unde se poate deduce expresia frecventei de rezonanta.2. produsa de genaerator. Q= = =QL (1. sub forma: f0= (1. f0.

O particularitate a acestor bobine o constituie dependenta inductantei fata de nivelul tensiunii alternative si continue aplicate. P (ω0) -puterea de referinta. folosind conductor de cupru .Caracteristicile de frecventa normate.26) Q-factorul de calitate a circuitului la frecventa de rezonanta. ferite.iar modulul impedantei creste de 1. N1[dB]=10log N2[dB]=20log (1. in forma de tole sau oale.). curenti. precum si fata de frecventa. permalloy. K (ω0)-marimea de referinta.curentul scade la 0. x= = ( ωL- )=( )( - )=βQ (1.escartul de frecventa generalizat Se observa ca pentru ÐxÐ=1.Banda de trecere la 3dB. K (ω)-marimea la frecventa ω.2. impedante sau admitante. ) Au inductante ce pot ajunge la zeci de Henry. Tolele se realizeaza din materiale cu permeabilitate magnetica cat mai ridicata (otel cu siliciu. Bobine de audiofrecventa Se utilizeaza pentru filtru de joasa frecventa (filtre de retea. Bobinajele se executa pe carcase avand forma miezului. drosele de alimentare etc. P(ω)-puterea la frecventa ω. Β. Se realizeaza in general pe miezuri magnetice inchise.27) N1[dB]-nivelul in decibeli pentru puteri N2[dB]-nivelul in decibeli pentru tensiuni.41 ori fata de valoarea de la rezonanta. etc.7 din valoarea de la rezonanta.2.

In figura de mai jos se prezinta schema unui circuit derivatie alimentat de un generator pentru a carui reprezentare s-a utilizat schema echivalenta cu generator de curent.2.Excitarea sa trebuie facuta cu un generator cu rezistenta interna mare.Conductanta de pierderi derivatie Fig.Cu cat aceasta banda este mai ingusta.conectate in derivatie. Circuitul oscilant derivatie Circuitul oscilant derivatie este un dipol pasiv format din doua componente pasive reale. asa cum rezulta din relatia pentru ÐxÐ=1 curentul prin circuit se reduce la 1/√2 din valoarea sa maxima.o bobina si un condensator. astfel ca propietatile selective ale circuitului se pierd.Prin definitie. dar reduce permeabilitatea. deoarece un generator cu rezistenta mica va mentine practic constanta tensiunea la bornele circuitului.1. curentul se reduce cu 3dB fata de valoarea sa maxima posibila. care imbunatateste comportarea miezului.Marimea acestei benzi caracterizeaza propietatile selective ale circutului. rezulta ca la frecventele la care ÐxÐ=1.emailat cu diametru corespunzator curentului care le strabate. In cazul cand sunt strabatute si de o componenta de c.c.3 . indiferent de frecventa. diferenta acestor frecvente corespunzatoare lui ÐxÐ=1 se numeste banda de trecere a circuitului la 3dB. se intrerupe circuitul magnetic printr-un intrefier. Banda de trecere la 3dB Deoarece.cu atat circuitul este mai selectiv.

2.29) Q0.2.factorul de calitate in gol al bobinei RL-rezistenta de pierderi serie a bobinei Rezonanta circuitului derivatie Rezonanta se produce la frecventa ω0 la care: Bd (ω0) = ω0 C- =0 (1.2.Gd=Gg+GL+GC (1.2.31) La rezonanta.28) Gg-conductanta interna derivatie a generatorului GL-conductanta de pierderi derivatie a bobinei GC-conductanta de pierderi derivatie a condensatorului.32) Iar tensiunea la bornele circuitului este maxima si in faza cu curentul de alimentare I: U(ω0)= = (1.2. Pentru Q 10se poate arata GL= (1.2. admitanta circuitului derivatie este minima(deci impedanta maxima) si are expresia: Yd(ω0)=Gd (conductanta pura) (1.33) .30) f0= (1.

2. Urmatorul material se ocupa de conectarea unui afisaj LCD Hitachi la un microcontroler PIC. curentii prin inductanta si capacitate sunt maximi.3 Afisaj LCD Multe dispozitive cu microcontroler folosesc LCD-uri inteligente pentru a afisa informatia vizuala.34) Q= = =ω0Crd= (1.37) Caracteristicile de frecventa normate: x= =( )( - )=βQ (1.35) Rd = -rezistenta de pierderi derivatie a circuitului (1. grecesti si matematice. modulul pentru LCD fabricat de Hitachi. in opozitie de faza si de Q ori mai mari decat curentul total debitat de generator.2. si chiar posibil sa produca verificarea datelor afisate folosind cei 8x80 pixeli ai afisajului.2. egali in modul. 16x2 LCD Hitachi HD44780 . Afisajele LCD proiectate cu HD44780. Afisajele LCD Hitachi contin un set de caractere ASCII plus simboluri japoneze. I: IL(ω0)=Ic(ω0)= ω0CU=QI (1.2.38) 1.2. nu sunt scumpe si sunt usor de folosit.36) Q= -factor de calitate (1.La rezonanta circuitului derivatie.

0 Instructiuni. . Pentru un bus de 8 biti. Cand afisajul LCD nu este pornit liniile de date sunt TRI-STATE. . LCDul este dezactivat si ignora semnalele de la R/W si RS. . Cand aceasta linie este LOW.1 Accesul la LCD activate. afisajul are nevoie de o tensiune de alimentare de +5v si 11 linii I/O. Cand este LOW. LCDul necesita de altfel 3 linii de control de la microcontroler. Cand este HIGH. R/W: . RS: .1 Citeste date din LCD. LCD interpreteaza tipul datelor de pe liniile de date. Aceasta ne salveaza de o cantitate enorma de fire si de un control adecvat astfel incat sunt necesare doar cateva linii pentru a accesa afisajul. Linia Read/Write (R/W) stabileste directia datelor dintre LCD si microcontroler. Pentru un bus de 4 biti sunt necesare doar liniile de alimentare si 7 linii. . un caracter este scris in LCD. .0 Accesul la LCD dezactivat.Fiecare dintre cei 640 de pixeli ai afisajului trebuie sa poata fi accesat individual si aceasta se poate realiza cu un numar de integrate SMD pentru control montate pe spatele afisajului. Cu ajutorul liniei Register select (RS). Scrierea datelor in LCD se realizeaza in cativa pasi: . ceea ce inseamna ca ele sunt in stare de inalta impedanta (ca si cum ar fi deconectate) si astfel nu interfereaza cu functionabilitatea microcontrolerului cand afisajul nu este adresat.0 Scrie date in LCD.se seteaza bitul RS in 0 sau 1 logic (instructiune sau caracter). Cand linia (E) este HIGH. o instructiune este scrisa in LCD. Starea logica a liniilor de control: E: . datele sunt scrise in LCD. LCDul verifica starea celor doua linii de control si raspunde corespunzator.se seteaza bitul R/W LOW. Cand este HIGH.1 Caracter. datele sunt citite de la LCD. Putem comunica cu afisajul prin intermediul unui bus de date pe 8 biti sau de 4 biti. Cand linia este LOW. Linia Enable (E) permite accesul la afisaj prin intermediul liniilor R/W si RS.

. Capacitatea memoriei DD RAM este de 80 bytes. el este pregatit sa primeasca date sau instructiuni. Fig.se citesc datele de la liniile de date (daca se executa o citire). trebuie setata adresa CG RAM la punctul de start (de obicei 0) si apoi sa fie scrise datele in afisaj. cu deosebirea ca linia de control R/W trebuie sa fie HIGH. In momentul in care un LCD este initializat. Cursorul marcheaza locatia urmatoare unde un caracter va fi afisat. Fiecare caracter ocupa maxim 8 bytes in CG RAM. Citirea datelor de la LCD se realizeaza similar.se seteaza linia E HIGH. Cand trimitem un HIGH catre LCD. Instructiunile tipice care sunt transmise catre un afisaj LCD dupa reset sunt: pornirea afisajului.3.1 Inainte de a accesa DD RAM..se trimit datele catre liniile de date (daca se executa o scriere). . el se va reseta si va accepta instructiuni. Caracterele care pot fi afisate pe ecran sunt memorate in memoria video DD RAM (Data Display RAM). Afisajul LCD mai contine 64 bytes CG RAM ( Character Generator RAM). Odata ce adresa DD RAM este setata. mai intai trebuie sa setam adresa de start. si apoi sa trimitem cate un caracter pe rand.1. Pentru a afisa caracterul bitmap pe LCD. Datele din CG RAM sunt reprezentate sub forma de caractere bitmap de 8 biti. Aceasta memorie este rezervata pentru caracterele definite de utilizator. Daca receptioneaza un caracter. activarea cursorului si scrierea caracterelor de la stanga spre dreapta. Orice scriere si citire a datelor din memoria LCD este realizata de la ultima adresa care a fost setata. folosind instructiunea set-adress. . Cand dorim sa scriem un sir de caractere. astfel numarul total de caractere pe care un utilizator poate sa le defineasca este 8. programul trebuie sa seteze adresa in DD RAM. el il va afisa si va muta cursorul un spatiu la dreapta. dupa definirea unui caracter special. Definirea unui caracter ‚special’ este exemplificata in figura.

Pana acum am discutat operatia de scriere si citire a memoriei unui LCD ca si cum ar fi o memorie obisnuita. Mesajul ‚character’ este scris pe prima linie urmat de doua caractere speciale ‚~’ si ‚}’.2 O metoda este verificarea bitului BUSY de pe linia de date D7. Oricum.1. In acest timp microcontrolerul nu poate accesa LCDul. putem comunica cu un LCD printr-un bus de 4 linii. . In acest exemplu folosim un afisaj LCD cu 2x16 caractere. Aceasta nu este cea mai buna metoda pentru ca LCDul se poate bloca si programul va sta intr-o bucla infinita verificand bitul BUSY. astfel un program trebuie sa stie cand un LCD este ocupat. Pe a doua linie este scris cuvantul ‚mikroElektronika’.un caracter nou va fi afisat in locul potrivit pe ecran. La inceput am mentionat ca avem nevoie de 11 linii I/O pentru a comunica cu un LCD. Alte operatii pot dura pana la 5 ms. Instructiunile pentru scriere si citire cu memoria LCDului sunt afisate mai sus.3. Intarzierea trebuie sa fie destul de lunga pentru ca LCDul sa termine operatia in desfasurare. O alta metoda este introducerea unei intarzieri in program. Putem rezolva aceasta in doua metode. denumit LM16x212 fabricat de producatorul japonez Sharp. Putem reduce numarul total de linii de comunicatie la 7. Schema pentru conectarea printrun bus de 4 biti este in imaginea de mai jos. Acest lucru nu este adevarat. Fig. Controlerul LCD are nevoie de 40 pana la 120 microsecunde (us) pentru scriere si citire.

'Limbajul de asamblare' si 'assembler-ul' sau asamblorul sunt doua notiuni diferite.1. sau urmaresc aceleasi reguli in timpul comunicarii. este posibila numai daca amandoi partenerii de comunicare cunosc acelasi limbaj. si este analog numelor altor limbaje. Un program ce este tradus in 'zero-uri' si 'unu-uri' este numit 'limbaj masina'. Totusi.3. Programele scrise in limbaj de asamblare trebuie traduse intr-un 'limbaj de zero-uri si unu-uri' pentru ca un microcontroler sa-l inteleaga. .4 Metode de programare a microcontrolerului Abilitatea de a comunica este de mare importanta in orice domeniu. Folosind aceste principii ca un punct de plecare. 'limbajul de asamblare' este doar o solutie trecatoare.Fig. iar celalalt este un program in computerul personal care traduce limbajul de asamblare intr-un limbaj de zero-uri si unu-uri. Titlul insusi nu are un inteles deosebit.3 Conectarea unui afisaj la un microcontroler 1. putem de asemenea defini comunicarea ce are loc intre microcontrolere si om. Limbajul pe care microcontrolerul si omul il folosesc pentru a comunica este numit 'limbaj de asamblare'. engleza si franceza. Primul reprezinta un set de reguli folosite in scrierea unui program pentru un microcontroler. de ex. Mai precis.

Cand asamblorul il traduce. obtinem o serie de zero-uri si unu-uri pe care microcontroleul stie cum sa-l interpreteze. Acest nume vine de la o reprezentare . Exemplu: RETURN 00 0000 0000 1000 Similar propozitiei de mai sus.3. Locul unde aceasta traducere a limbajului de asamblare se gaseste . Omul poate intelege pentru ca este constituit din semne si cuvinte ale alfabetului.1. fiecare instructiune de asamblare este interpretata ca si corespunzand unei serii de zero-uri si unu-uri.4 Fizic. trebuie urmarite unele reguli pentru a se obtine un efect dorit. Sa luam de exemplu instructiunea 'RETURN' pe care microcontrolerul o foloseste pentru a se intoarce dintr-un sub-program.Fig. Vom intalni adesea numele de fisier 'HEX'. si este scris conform cu regulile de asamblare sau ale altui limbaj pentru programarea microcontrolerului. 'Program' reprezinta un fisier pe discul computerului (sau in memorie daca este citit intrun microcontroler). se numeste un fisier de 'executie'. Un Translator interpreteaza fiecare instructiune scrisa in limbajul de asamblare ca o serie de zero-uri si unu-uri ce au o semnificatie pentru logica interna a microcontrolerului. Cand se scrie un program.

hexazecimala a acelui fisier. Este de asemenea important ca un label sa inceapa de la primul rand.5 .) si programul poate chiar avea o conditie ce trebuie indeplinita pentru ca instructiunea Goto sa fie executata. Poate fi folosit de asemenea pentru a executa ramificare de program (ca Goto……. 'run through. fisierul de executie este citit in microcontroler printr-un programator. Odata ce este generat. Fig. Lungimea label-ului poate fi de pana la 32 caractere. Limbaj de Asamblare Elementele de baza ale limbajului de asamblare sunt:      Label-uri sau Etichete Instructiuni Operanzi Directive Comentarii Eticheta Un Label este o desemnare textuala (in general un cuvant usor de citit) pentru o linie intr-un program. de ex.hex'.1. Este important pentru un label de a incepe cu o litera a alfabetului sau cu o subliniere '_'.3. ca si de la apendicele 'hex' din titlu. sau sectiunea unui program unde micro-ul poate sari – sau chiar inceputul unui set de linii a unui program.

Modul in care scriem o instructiune mai este numit 'sintaxa' instructiunii. Comentarii Comentariul este o serie de cuvinte pe care programatorul le scrie pentru a face programul mai clar si mai usor de citit. In exemplul urmator putem recunoaste o greseala in scriere pentru ca instructiunile movlp si goto nu exista pentru microcontrolerul PIC16F84.Instructiuni Instructiunile sunt deja definite prin folosirea unui microcontroler specific. Cuvantul literal inseamna 'numar'. si trebuie sa inceapa cu punct si virgula'. Operanzi Operanzii sunt elemente ale instructiunii pentru instructiunea ce este executata. Constantele sunt numite 'literal-e'.'. Ei sunt de obicei registri sau variabile sau constante. asa ca ne ramane doar sa urmam instructiunile pentru folosirea lor in limbajul de asamblare. Se plaseaza dupa o instructiune . .

2. In felul acesta. si reprezinta o caracteristica a limbajului de asamblare insusi.1 Schema bloc Schema bloc a L – metrului este formata din : Fig. dar spre deosebire de o instructiune este independenta de modelul microcontrolerului. Directivelor le sunt date uzual intelesuri de scop prin variabile si registri. Cap. . LEVEL poate fi o desemnatie pentru o variabila in memoria RAM la adresa 0Dh. De exemplu. 2 Partea tehnica 2. variabila la acea adresa poate fi accesata prin desemnatia LEVEL. Aceasta este mult mai usor pentru un programator sa inteleaga decat sa incerce sa-si aduca aminte ca adresa 0Dh contine informatii despre LEVEL.2.1.1 Schema bloc a L-metrului Principiul de masurare este prezentat in figura 2.2.Directive O directiva este similara unei instructiuni.

Pentru OSC1 nu este necesar un oscilator de semnal intrucat LM339 genereaza direct semnal TTL. -2 divizoare de frecventa sunt de 4 respectiv 256 cu rolul de a micsora frecventa semnalului masurat astefel incat sa fie mult mai mica decat frecventa de functionare a picului astfel incat sa fie mult mai mare Tx>Tref .1) -un formator de semnal TTL (cu trigher smith) care preia semnalul generat de oscilatorul OSC2 si genereaza la iesire un semnal de nivel TTL.Acest bloc este format din : -2 oscialtoare OSC1.Daca LED-ul este aprins ne aflam in gama 100nH < L < 5 μH iar daca Led-ul este stins se masoara in gama 2.unul din semnalele S1 sau S2 un microcontroler care are rolul de a detecta o perioada din semnalulu al carei frecventa se masoara pe baza formulei L= valorii L. . Si comada afisajul LCD in vederea afisarii -un comutator K1 care permite schimabarea gamei de masura.2 Blocul oscilator Blocul oscilator de joasa frecventa LM339: .un multiplexor care selecteaza in functie de semnalul RA1 .OSC2 care au frecventa de oscilatie dependenta de inductanta bobinei masurata dupa relatia L= (2.1.LED-ul indicand in ce gama ne aflam.

Din catalog R1-R2=100K .Iar R1 si R2 se aleg astfel incat intrarea neinversoare a comaparatorului sa fie polarizata static la o valoare de .2.2.2.C1 impune frecventa de oscilatie a oscilatorului. fx= * (2. Valoarea lor trebuie sa suficient de mare pentru a nu amortiza curentul acordat derivatiei. Condensatorul C2 este un condensator de cuplaj al circuitului oscilant derivatie cu etajul comparator.1) Rx-rezistenta serie a bobinei Experimental s-a constat ca oscilatorul functioneaza stabil daca Rx<5.1 Lx.Fig.

R5 se alege astfel incat curentul pe iesire sa fie mic. Blocul oscilator de inalta frecventa cu FET .Alegem I0=5mA iar R5= = =1K Pentru a functiona stabil constanta de timp R4*C3>TX= Se alege R4=47 K si stabilim fX>500Hz de unde avem TX= < = Tmax Alegem C3 astfel incat R4*C3=100*Tmax de unde C3= Se alege la fel si C2 iar C1=506nF astfel incat oscilatorul sa functioneze stabil in gama 1μH<Lx<250mH.Pentru a asigura un coeficient de variatie pozitiva mare adica un oscilator static alegem si R3=100K Iesirea comparatorului este de tip open colector .

2 Schema bloc a unui oscilator este Fig.2. Conditia de oscilatie este x =1 (2.2.Fig.2.2) .3 Oscialtorul este un amplificator cu reactie pozitiva.2.2.

4) In schema amplificatorul este un etaj de amplificare cu transistor FET cu sarcina distributive.4 caracteristica de transfer a puntii CMOS Polarizarea intrarii puntii CMOS aproape de VT =2.5KΏ iar iar inversoru in defazaj de deci de 2 si se indeplineste Fig.3) (2.1) conditia de amplitudine: 2)conditia de faza: x =1 (2.2.5V se realizeaza si prin reglajul rezistentei din schema FET.2. Pentru a se indeplinii si conditia de amplitudine este necesar: Poarta CMOS sa fie polarizata in zona tensiuni de tranzitieVT cu ajutorul unei rezistenta R5care se determina experimental R5=1.2. Caracteristicile statice FET-ului sunt: .Amplificatorul ce introduce un defazaj de conditia de faza.Reactia pozitiva este asigurata cu un amplificator cu inversor CMOS.2. Tranzistorul FET trebuie polarizat in regiunea de saturatie.

.5) (2.2.2.2.6 Fig.2.2.2.2.Fig.5 Fig.6) Alegand un transistor FET BF256 cu VT=--3V si un curent Id=2mA se obtine P2=500 ohmi.7 Id=ISS(1VGS=-IdxP2 )2 0<VGS<VT (2.2.

.C5 si oscilatorul sa functioneze stabil..Si P1=4. Limitarea amplitudinii se face prin folosirea caracteristicii neliniare a tranzistorului cu efect de camp.7K care se regleaza astfel incat sa se indeplineasca conditia de amplitudine pentru a exista oscilatii. Grupul R6siC4 se allege asfel incat impedanta cat mai putin decat a puntii Cmos sa influenteze cat mai putin Q (factorul de calitate) al circuitului acordat Lx. Rezultatele de simulare a acestei scheme in ORCAD sunt prezentate in fig.

Fig. Schema interna a circuitului SN74LS393 este prezentata mai jos: . 2.8 Rezultate de simulare pentru oscilatorul cu FET 2. IC6 respectiv SN74LS393 .2.3 Divizoarele de frecventa Divizoarele de frecventa sunt realizate cu numaratoarele IC2.

.

Frecventa oscilatorului cu cuart care proiecteaza microcontrolerul este de 8Mhz .9 Shema interna a SN74LS393 Utilizarea divizoarelor de frecventa :IC2 este un divizor cu 4 respectiv IC6 divizor cu 256 sunt necesare pentru a micsora frecventa semnalului masurat. .2.Fig.Durata unei instructiuni este de 0.5μs.2.

1 S1-semnalul generat de IC2 (pin4) S2-semnalul generat de IC6 (pin8) Tabelul de adevar asociat multiplexorului : S1 S2 RA1 RB0 .Cu oscilatorul de inalta frecventa(FET) f= .Calculul frecventei de oscilatie 1. Fig.2. Kdiv=256 (2. Kdiv=2 (2.2.7) 2.4.8) 2.2.Cu oscilatorul de joasa frecventa(LM339) f= .4 Multiplexorul Un dispozitiv care permite transferul unor fluxuri multiple de date printr-un mediu comun.

.5 PIC 16F84 Functiile microcontrolerului   Initializarea si comanda a afisajul LCD 2X16 caractere.0 1 X X X X 0 1 0 0 1 1 0 1 0 1 Selecteaza semnalul S1 Selecteaza semnalul S2 S1-semnalul generat de oscilatorul de joasa frecventa S2-semnalul generat de oscilatorul de inalta frecventa 0 RA1 S1 S2 1 00 01 11 10 RB0=S1* 0 0 1 1 +S2*RA1 0 1 1 0 Se implementeaza cu circuite SI-NU cu 2 intrari : RB0= RB0= 2. Selecteaza gama de masura in functie de pozitia comutatorului.

Semnalul cu frecvente necunoscute Tx generat de oscilator este preluat la pinul RA0 de catre microcontrolerul care functioneaza in regim de intreruperi la pinul RB0 si la valori 0xFF a TMR0. Schema bloc echivalenta a uC este prezentata in figura….  Comanda afisajul LCD in vederea afisarii corecte a rezultatului. K1 neapasat: RA0=1 -se selecteaza gama de masura gama2:L=5μH .K1 apasat: RA0=0 -selecteaza gama de masura gama1:L = 100nH .5μH. .  Semnalizeaza prin aprinderea LED-ului conectat la RA2 gama de masurat -LED aprins gama1 -LED stins gama2   Selecteaza o perioada din semnalul generat de oscilatorul si aplicat apoi pe RB0.500mH. Efectueaza calculele matematice in vederea obtinerii valorii inductantei si frecventei semnalului generat de oscillator.

1 Calculul inductantei f0= * = (2. -Factorul de calitate al bobinei la freecventa de rezonanta Q= .5.Fig.5.5.2.1) daca RL <<1.2) Impedanta la frecventa de rezonanta . RL-rezistenta bobinei. ω0= (2.

4934=2.5.4) Tx=n*TRef . n-numarul de impulsuri masurate de microcontroler TRef=1μs Notam cu K Alegand C=506nF (470nF+33nF) K=200239. 1.Z0= = =Q*L* ω0= (2. Microcontrolerul calculeaza iar de coeficientul 10-7 se tine cont cand face afisarea. . NUMB.5.7) In registrele TMRO.Pentru oscilatorul de joasa frecventa(LM339) Tx=2π → Lx= = *( )2 (2.5.5. (2.5) Lx=2*105*10-12*( )2.6) Lx= *10 -7 [H] (2.3) Microcontrolerul calculeaza frecventa in 2 moduri in functie de oscilator. NUMB2 se gaseste numarul ( Kdiv=4 deoarece este dat de divizorul de frecventa )in forma binara.5.00239493*105(F-1) Lx=K ( )2=K*( )2=K*10-12( )2 (2.

Pentru oscilatorul de joasa frecventa Lx= TRef=1μs *( )2= (2.11) (2.865 nF Lx=m*10-2*n2=10-10*n2 Lx=10-10*n2 .2.5.5.10) (2.5. 2.5.8) Kdiv=256 deoarece este dat de divizorul cu 256 Lx=m*10-12*n2 (2.865*10-9F=3. (2.5.6 Initializare LCD Schema logica a subrutinei de initializare a LCD-ului este .9) Microcontrolerul calculeaza n2 iar de coeficientul 10-10 se tine cont cand se face afisarea.9) Se alege condensatorul astfel incat m sa fie numar intreg. -pentru m=100 se determina C= C=3.

.

2.6.Fig.1 LCD D777 D6666 D5 P2 15 14 13 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 D4 En 12 11 1 0 1 0 0 0 wait 1 0 1 1 wait 1 0 wait 1 0 1 1 wait 1 0 wait 0 0 R/W 10 0 0 0 0 0 0 0 0 0 0 0 0 RS 9 0 0 Wait_15ms 0x3000 Enable wait 5ms 0x30 Enable 0 0 0 0 0 0 0x30 Enable 0x20 .

0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 1 wait 0 wait 0 1 wait 0 wait 0 wait 0 1 wait 0 wait 0 1 wait 0 wait 0 1 wait 0 0 1 wait 0 wait 0 1 wait 0 wait 0 1 wait 0 wait 0 1 wait 0 wait 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Enable 0x20 Enable 0xC0 Enable 0x00 Enable 0xD0 Enable 0x00 Enable 0x40 Enable 0x00 Enable 0X60 Enable .

2.1 Organigrama Programului PIC .2 2.6.2.Fig.7.7 Schema logica a programului Fig.

.

.

.

Fig.2.7.2 .

Subrutina de calcul a frecventei .

care se presupun cunoscute: Up=220V .8 Sursa de alimentare Schema electrica a sursei de alimentare Pentru calculul transformatorului de retea se porneste de la marimile electrice.2.

US=9V IS=1A Puterea din secundar se calculeaza astfel: PS=US*IS PS=9V*1A de unde PS=9VA Puterea din primarul transformatorului este PP=PS/n PP=9VA/0.22* PP S2=1.6 S2=4cm2 Se alege tipul de tole determinand parametrul a: a2=4.6/220 IP=50mA Sectiunea miezului transformatorului este S2=1.6VA Curentul din primar: IP=PP/UP IP=10.85 PP=10.44*10.72*S .

712*IS d2S=0.5*1 dS=0.05 dp=0.bobinajul realizaduse pe o carcasa cu sectiunea de 4 cm2.5*0.7mm. Redresorul si filtrul .iar secundarul va avea 102 spire cu sarma de Cu de 0.712*IP d2p=0.15mm.7mm Deci primarul va avea 2473 spire cu sarma de Cu de 0.15mm d2s=0.24sp/V Numarul de spire al infasurarilor transformatorului: NP= n0*Up NS= n0*US NP=2473sp NS=102sp Diametrul conductoarelor transformatorului : d2p=0.09*4 a=10mm Grosimea pachetului de tole: h=50*S/a h=50*4/10 h=20mm Numarul de spire pe volt: n0=45/S n0=11.a2=22.

Fiultrul de C2.Redresarea tensiunii alternative data de transformator este facuta cu ajutorul puntii redresoare PR.Este mai probabil ca un om care respire aer curat va trai mai mult decat un om care locuieste intr-un mediu poluat.realizeaza aplatizarea riplului dat de PR.Conform specificatiilor tehnice oferite de producatorul microcontrolerului PIC. Stabilizatorul ULN 7805 In general alimentarea corecta este de o importanta maxima pentru functionarea corecta a sistemului cu microcontroller.Poate fi usor comparata cu respiratia unui om in aer.tensiune de alimentare ar trebui sa se incadreze intre 2V si 6V pentru toate versiunile.Filtrul capacitiv realizat cu condensatorul C1. A1 Schema electronica a L-metrului .Cea mai simpla solutie este folosirea stabilizatorului de tensiune LM7805 care ofera tensiunea stabile de +5V la iesire.Pentru o functionare corecta a oricarui microcontroller este necesar sa oferim o sursa stabile de alimentare.C3 si R1 este necesar pentru stabilirea functionarii circuitului LM7805.

Lista de componente .A.2.

7K 2.C1 C2.C3 R1.7K 500 100nF 1K 1K 10K 100nF .R2 R3 R4 LM339 C6 SN74LS393 R5 R6 C4 C5 R7 P1 BF256 P2 SN74HC14 C7 R9 LED R8 R10 C8 500mF 68μF 100K 100K 47K 100nF 1.2M 330pF 3.8nF 1M 4.

3 Cablajul .C9 P4 R12 P3 ULN7805 220nF 5K 110 1K LCD 2X16 Display A.

4.Listingul programului in limbaj de asamblare list p=16F84A radix hex PORTA equ 0x05 .A.

PORTB TRISA TRISB TMR0 STATUS OPTIONS INTCON W_temp equ 0x06 equ 0x85 equ 0x86 equ 0x01 equ 0x03 equ 0x81 equ 0x0B equ 0x17 STATUS_temp equ 0x18 COUNT1 COUNT2 LCD COUNT INDICE NUMB1 NUMB2 NUMB3 NUMB4 NUMZ1 NUMZ2 NUMZ3 NUMZ4 CARRY equ 0x1A equ 0x1B equ 0x1C equ 0x0C equ 0x19 equ 0x20 equ 0x21 equ 0x22 equ 0x23 equ 0x24 equ 0x25 equ 0x26 equ 0x27 equ 0x28 .

sign equ 0x39 0x3A equ 0x29 equ 0x2A equ 0x2B equ 0x2C equ 0x2D equ 0x2E equ 0x2F equ 0x30 #define RS PORTB.2 #define EN PORTB.1 #define RW PORTB.3 org 0x000 goto main .CARRY1 CARRY2 CARRY3 CARRY4 NRBITI CARRY12 CARRY13 CARRY14 ACCaLO equ 0x31 ACCaHI equ 0x32 ACCbLO equ 0x33 ACCbHI equ 0x34 ACCcLO equ 0x35 ACCcHI equ 0x36 ACCdLO equ 0x37 ACCdHI equ 0x38 temp equ .

ISR_adr

org 0x04 ;bcf PORTA,3;------;clrf TMR0 btfsc INTCON,7 goto ISR_adr ;call PUSH btfsc INTCON,1 goto ISR_rb0 btfsc INTCON,2 goto ISR_tmr

main clrwdt bsf STATUS,5 movlw b'00000000' movwf OPTIONS movlw 0x01 movwf TRISB movlw 0x19 movwf TRISA bcf STATUS,5 clrf PORTA ;clrf PORTB ;-;--

clrf NUMB1 clrf NUMB2 clrf NUMB3 clrf NUMB4 call init_lcd call stergere call scrie_proiect call stergere call scrie_mesaj ;-- valdeaza intrerupere RB0 ;bcf INTCON,2 bcf INTCON,1 bsf INTCON,4 bcf INTCON,3 bcf INTCON,5 clrf INDICE bsf INTCON,7 loop ;call init_lcd ;call scrie_mesaj goto loop ;goto main ISR_rb0 btfsc INDICE,0

goto rb01 clrf TMR0 bcf INTCON,1 bcf INTCON,2 bsf INTCON,5 bsf INDICE,0 retfie rb01 movf TMR0,0 movwf NUMB1 bcf INTCON,7 ;movf TMR0,0 ;movwf NUMB1 ;bcf INTCON,7 ;--conversie, calcule, afisare call init_lcd ;call scrie_mesaj call stergere call poz_cursor ;movf NUMB4,0 ;call afis_nibble_sup ;movf NUMB4,0 ;call afis_nibble_inf ;movf NUMB3,0

call delay_1s .0 .call delay_1s .movf NUMB1.movf NUMB1.clrf NUMB3 .call afis_nibble_sup .call delay_1s .call delay_1s .movf NUMB2.call afis_nibble_sup .0 .call delay_1s .call delay_1s .movf NUMB2.call afis_nibble_sup ..clrf NUMB4 .0 .call afis_nibble_inf .0 .movf NUMB3.call afis_nibble_inf .0 .call delay_1s .call delay_1s . calculeaza NxN movf NUMB2.0 .call afis_nibble_inf .

0 call afis_nibble_inf movf NUMZ3.0 call afis_nibble_sup movf NUMZ4.0 movwf ACCbLO call multiply call div_cu_doi2 call div_cu_doi2 call div_cu_doi2 call stergere call poz_cursor call conbinbcd movf NUMZ4.0 .0 call afis_nibble_sup movf NUMZ2.movwf ACCbHI movf NUMB1.0 call afis_nibble_inf movf NUMZ2.0 call afis_nibble_inf movf NUMZ1.0 call afis_nibble_sup movf NUMZ3.

call afis_nibble_sup movf NUMZ1. afiseaza rezultatul call stergere call poz_cursor movlw 'L' call afisare movlw '=' call afisare movf NUMZ4.call delay_1s .call delay_1s .0 call afis_nibble_inf call delay_1s call delay_1s call delay_1s call delay_1s .goto loop .0 bcf STATUS.2 .2 andlw 0xF0 btfss STATUS.call delay_1s .call delay_1s .

goto teo2 goto zeci_mH movf NUMZ3.0 bcf STATUS.0 bcf STATUS.goto teo3 goto unit_mH movf NUMZ2.2 .2 .goto teo1 goto sute_mH movf NUMZ3.goto eror movf NUMZ4.0 bcf STATUS.2 andlw 0x0F btfss STATUS.2 andlw 0x0F btfss STATUS.2 andlw 0xF0 btfss STATUS.2 .2 .0 bcf STATUS.2 andlw 0xF0 btfss STATUS.

2 .2 andlw 0x0F btfss STATUS.0 bcf STATUS.goto teo3 goto zeci_uH goto unit_uH eror call poz_cursor movlw 'E' call afisare movlw 'r' call afisare movlw 'o' call afisare movlw 'a' call afisare movlw 'r' call afisare movlw 'e' call afisare .goto teo3 goto sute_uH movf NUMZ2..

0 call afis_nibble_inf movlw '.goto teo sute_mH movf NUMZ4.' .0 call afis_nibble_sup movf NUMZ3.0 call afis_nibble_sup movlw 'm' call afisare movlw 'H' call afisare goto teo zeci_mH movf NUMZ3.' call afisare movf NUMZ2.0 call afis_nibble_sup movf NUMZ3.0 call afis_nibble_inf movlw '.0 call afis_nibble_inf movf NUMZ3.

0 call afis_nibble_inf movlw 'm' call afisare movlw 'H' call afisare goto teo sute_uH .0 call afis_nibble_inf movlw '.call afisare movf NUMZ2.0 call afis_nibble_sup movlw 'm' call afisare movlw 'H' call afisare goto teo unit_mH movf NUMZ3.0 call afis_nibble_sup movf NUMZ2.' call afisare movf NUMZ2.

0 call afis_nibble_inf movf NUMZ1.0 call afis_nibble_inf movf NUMZ1.0 call afis_nibble_sup movlw '.movf NUMZ2.0 call afis_nibble_sup movf NUMZ2.0 call afis_nibble_inf movlw 'u' call afisare movlw 'H' call afisare goto teo zeci_uH movf NUMZ2.0 .' call afisare movf NUMZ1.0 call afis_nibble_sup movlw '.' call afisare movf NUMZ1.

0 call afis_nibble_sup movlw '.' call afisare movf NUMZ1.call delay_1s .call delay_1s .0 call afis_nibble_inf movlw 'u' call afisare movlw 'H' call afisare teo call delay_1s call delay_1s call delay_1s .call afis_nibble_inf movlw 'u' call afisare movlw 'H' call afisare goto teo unit_uH movf NUMZ1.call delay_1s .

4 .7 retfie .goto loop ISR_tmr .2 goto iesire .1 .1 bcf INTCON.1 btfss STATUS.0 .bsf INTCON.5 bsf INTCON.bcf STATUS.valideaza intreruperile clrf TMR0 bcf INTCON.2 incf NUMB3.bsf INTCON.bcf STATUS.2 .2 goto iesire .btfss STATUS.1 btfss STATUS.call sterge_reg call stergere call scrie_mesaj bcf INDICE.7 incf NUMB2.-.2 incf NUMB4.

5 .bsf PORTA.2 bsf INTCON.----.goto iesire .incf NUM5 iesire bcf INTCON.call POP ..3.call POP retfie sterge_reg clrf NUMB1 clrf NUMB2 clrf NUMB3 clrf NUMB4 return stergere bcf RS bcf RW movlw 0x00 movwf PORTB call enable movlw 0x10 movwf PORTB call enable .

0 bsf retlw 0 multiply movf NUMB2.0 addwf ACCbLO.0 movwf ACCaHI movf NUMB1.0 bsf STATUS.1 btfsc STATUS.0 movf ACCaHI.1 btfsc STATUS.8Meg .0 addwf ACCbHI.0 incf ACCbHI.call delay_15m .call delay_15m return D_add bcf STATUS.0 movf ACCaLO.0 .0 movwf ACCaLO call setup STATUS.1 btfsc STATUS.

0 .1 btfsc STATUS.mloop rrf ACCdHI.0 movwf NUMB4 movf ACCbLO.0 movwf NUMB3 movf ACCcHI.1 decfsz temp.0 movwf NUMB1 return setup movlw .1 rrf ACCcLO.1 rrf ACCcHI.1 goto mloop movf ACCbHI.0 movwf NUMB2 movf ACCcLO.0 call D_add rrf ACCbHI.1 rrf ACCdLO.1 rrf ACCbLO.16 movwf temp movf ACCbHI.

1 return div_cu_doi2.1 rlf NUMB3.1 rrf NUMB1.0 rrf NUMB4.1 rlf NUMB4. impartirea cu doi a unui numar in baza 2 bcf STATUS.1 rrf NUMB3.0 rlf NUMB1.0 movwf ACCdLO clrf ACCbHI clrf ACCbLO retlw 0 inm_cu_doi2. impartirea cu doi a unui numar in baza 2 bcf STATUS.1 rlf NUMB2.1 return init_lcd call delay_1s bcf RS .1 rrf NUMB2.movwf ACCdHI movf ACCbLO.

call delay_125m call delay_1.call delay_125m call enable .8Meg . bcf RS bcf RW movlw 0xC0 movwf PORTB call enable movlw 0x00 movwf PORTB call enable . movlw 0x20 movwf PORTB call enable call enable.bcf RW movlw 0x30 movwf PORTB call enable call delay_15m .5m call enable.

bcf RS bcf RW movlw 0xF0 .movlw 0xC0 movwf PORTB call enable movlw 0x00 movwf PORTB call enable movlw 0x10 movwf PORTB call enable movlw 0x00 movwf PORTB call enable bcf RS bcf RW movlw 0x60 movwf PORTB call enable movlw 0x00 movwf PORTB call enable.

8Meg .movwf PORTB call enable call delay_15m .call delay_125m return scrie_proiect call poz_cursor movlw 'P' call afisare movlw 'r call afisare movlw 'o' call afisare movlw 'i' call afisare movlw 'e' call afisare movlw 'c' call afisare movlw 't' call afisare movlw ' ' .

call afisare movlw 'd' call afisare movlw 'e' call afisare call poz_lin_2 movlw 'd' call afisare movlw 'e' call afisare movlw ' ' call afisare movlw 's' call afisare movlw 't call afisare movlw 'a' call afisare movlw 't call afisare call delay_1s call delay_1s call delay_1s .

call delay_1s call delay_1s return poz_cursor bcf RS bcf RW movlw 0x00 movwf PORTB call enable movlw 0x10 movwf PORTB call enable call delay_15m .8Meg .call delay_15m bcf RS bcf RW movlw 0x80 movwf PORTB call enable movlw 0x30 movwf PORTB call enable .

8Meg .call delay_15m return poz_lin_2 movlw 0xC0 movwf PORTB call enable movlw 0x30 movwf PORTB call enable call delay_15m return scrie_mesaj .call delay_15m .scrie M bcf RS bcf RW movlw 0x00 movwf PORTB call enable movlw 0x10 movwf PORTB call enable .

call delay_15m bcf RS bcf RW movlw 0x80 movwf PORTB call enable movlw 0x30 movwf PORTB call enable call delay_15m movlw 'C' call afisare movlw 'o' call afisare movlw 'n' call afisare movlw 'e' call afisare movlw 'c' call afisare movlw 't' .call delay_15m .8Meg .

call afisare movlw 'a' call afisare movlw 't' call afisare movlw 'i' call afisare call poz_lin_2 movlw 'i' call afisare movlw 'n' call afisare movlw 'd' call afisare movlw 'u' call afisare movlw 'c' call afisare movlw 't' call afisare movlw 'a' call afisare movlw 'n' .

8Meg .call delay_15m .goto main afisare movwf LCD movlw 0xF0 andwf LCD.0 addlw 0x02 movwf PORTB call enable call delay_15m .call afisare movlw 't' call afisare movlw 'a' call afisare return .1 movlw 0xF0 andwf LCD.0 addlw 0x02 movwf PORTB call enable swapf LCD.

0 call afisare return enable bsf EN bcf EN nop .1 movlw 0x30 addwf LCD.movf NUMB1.return afis_nibble_inf .1 movlw 0x30 addwf LCD.0 movwf LCD movlw 0x0F andwf LCD.1 movlw 0x0F andwf LCD.0 call afisare return afis_nibble_sup movwf LCD swapf LCD.

nop .nop . . .-.8Mhz call delay_1125 nop . . . return delay_15m. . . . .nop . . nu realizeaza i intarziere de 15200us movlw 0x04 movwf COUNT nop nop nop nop nop nop nop nop nop nop nop nop . .nop . .

loop15

decfsz COUNT,1 goto loop115 goto exit15

loop115

call delay_1.5m goto loop15

exit15 call delay_1.5m return delay_1.5m ; intarzierea = 3 x count1 +3 x count2 +12 ; cu call si return

; intarzierea este 1.5ms nop nop nop nop nop nop movlw 0xFF movwf COUNT1 movlw 0xFF movwf COUNT2 loop1.5 decfsz COUNT1,1 goto loop1.5 loop21.5 decfsz COUNT2,1

goto loop21.5 return delay_1s; la 4Mhz call delay_125m call delay_125m call delay_125m call delay_125m call delay_125m call delay_125m call delay_125m call delay_125m return delay_125m; realizeaza o intarziere de 125ms movlw 0xFA movwf COUNT loop125 decfsz COUNT,1 goto loop1125 goto exit125 loop1125 call delay_1125 goto loop125 exit125 call delay_1125 return delay_1125

nop nop nop;-nop nop nop nop nop nop movlw 0x51 movwf COUNT1 movlw 0x4F movwf COUNT2 loop11125 decfsz COUNT1,1 goto loop11125 loop21125 decfsz COUNT2,1 goto loop21125 return conbinbcd clrf NUMZ1 clrf NUMZ2 clrf NUMZ3 clrf NUMZ4

inmultirea cu 2 a unui numar de la 09 bcf STATUS.movlw 0x21 movwf NRBITI bucla1 decfsz NRBITI.1 goto bucla2 goto bucla3 bucla2 call rotleft call bcd_ori_doi goto bucla1 bucla3 return rotleft bcf STATUS.0 movwf CARRY movlw 0x01 andwf CARRY return bcd_ori_doi.1 rlf NUMB3.1 movf STATUS.0 bcf STATUS.0 rlf NUMB1.1 rlf NUMB2.1 .1 rlf NUMB4.

1 btfss STATUS.clrf CARRY1 clrf CARRY12 clrf CARRY13 clrf CARRY14 clrf CARRY2 clrf CARRY3 clrf CARRY4 movf NUMZ1.0 movlw 0x06 addwf NUMZ1.1 movlw 0x0A subwf NUMZ1.0 .0 goto doi1 movlw 0x01 movwf CARRY1 doi1 btfss STATUS.0 bcf STATUS.1 goto doi2 bcf STATUS.1 goto doi3 doi2 bcf STATUS.0 addwf NUMZ1.

goto doi52 movlw 0x06 addwf NUMZ1.0 goto doi7 goto doi6 doi7 movf NUMZ2.0 goto doi5 doi6 bcf STATUS.0 goto doi7 bsf CARRY1.1 btfss STATUS.0 addwf NUMZ2.1 btfss STATUS.btfss STATUS.0 btfss STATUS.0 bcf STATUS.1 movlw 0x60 addwf NUMZ1.0 goto doi7 doi5 movlw 0xA0 subwf NUMZ1.1 goto doi3 .1 doi3 btfss CARRY1.0 .

0 btfss STATUS.1 goto doi9 bcf STATUS.0 movlw 0x06 addwf NUMZ2.1 movlw 0x0A subwf NUMZ2.goto doi52 movlw 0x06 addwf NUMZ2.goto doi8 movlw 0x01 movwf CARRY2 doi8 btfss STATUS.1 doi10 btfss CARRY2.0 goto doi11 doi12 bcf STATUS.1 goto doi10 .1 goto doi10 doi9 bcf STATUS.1 movlw 0x60 .0 bcf STATUS.0 bcf STATUS.

1 goto doi16 doi15 bcf STATUS.addwf NUMZ2.1 btfss STATUS.0 goto doi14 movlw 0x01 movwf CARRY12 doi14 btfss STATUS.0 addwf NUMZ2.0 goto doi13 doi11 movlw 0xA0 subwf NUMZ2.0 goto doi13 goto doi12 doi13 movf CARRY1.1 goto doi15 bcf STATUS.0 btfss STATUS.0 movlw 0x06 addwf NUMZ2.0 goto doi13 bsf CARRY2.1 btfss STATUS.0 .

0 goto doi19 goto doi18 .0 goto doi17 doi18 bcf STATUS.bcf STATUS.1 btfss STATUS.1 movlw 0x0A subwf NUMZ2.0 goto doi19 bsf CARRY12.0 btfss STATUS.1 doi16 btfss CARRY12.0 goto doi19 doi17 movlw 0xA0 subwf NUMZ2.1 goto doi16 .0 bcf STATUS.goto doi52 movlw 0x06 addwf NUMZ2.0 btfss STATUS.1 movlw 0x60 addwf NUMZ2.

doi19 movf CARRY12,0 addwf CARRY2,1 movf NUMZ3,0 addwf NUMZ3,1 btfss STATUS,0 goto doi20 movlw 0x01 movwf CARRY3 doi20 btfss STATUS,1 goto doi21 bcf STATUS,0 movlw 0x06 addwf NUMZ3,1 goto doi22 doi21 bcf STATUS,0 bcf STATUS,1 movlw 0x0A subwf NUMZ3,0 btfss STATUS,1 goto doi22 ;goto doi52 movlw 0x06

addwf NUMZ3,1 doi22 btfss CARRY3,0 goto doi23 doi24 bcf STATUS,0 bcf STATUS,1 movlw 0x60 addwf NUMZ3,1 btfss STATUS,0 goto doi25 bsf CARRY3,0 goto doi25 doi23 movlw 0xA0 subwf NUMZ3,0 btfss STATUS,0 goto doi25 goto doi24 doi25 movf CARRY2,0 addwf NUMZ3,1 btfss STATUS,0 goto doi26 movlw 0x01 movwf CARRY13 doi26 btfss STATUS,1

goto doi27 bcf STATUS,0 movlw 0x06 addwf NUMZ3,1 goto doi28 doi27 bcf STATUS,0 bcf STATUS,1 movlw 0x0A subwf NUMZ3,0 btfss STATUS,1 goto doi28 ;goto doi52 movlw 0x06 addwf NUMZ3,1 doi28 btfss CARRY13,0 goto doi29 doi30 bcf STATUS,0 bcf STATUS,1 movlw 0x60 addwf NUMZ3,1 btfss STATUS,0 goto doi31 bsf CARRY13,0

0 addwf NUMZ4.1 btfss STATUS.0 bcf STATUS.goto doi31 doi29 movlw 0xA0 subwf NUMZ3.0 goto doi32 movlw 0x01 movwf CARRY4 doi32 btfss STATUS.0 movlw 0x06 addwf NUMZ4.1 goto doi34 doi33 bcf STATUS.1 goto doi33 bcf STATUS.1 movf NUMZ4.0 goto doi31 goto doi30 doi31 movf CARRY13.1 .0 addwf CARRY3.0 btfss STATUS.

0 goto doi37 doi35 movlw 0xA0 subwf NUMZ4.goto doi52 movlw 0x06 addwf NUMZ4.1 goto doi34 .1 btfss STATUS.movlw 0x0A subwf NUMZ4.0 goto doi37 goto doi36 doi37 movf CARRY3.0 btfss STATUS.0 bcf STATUS.0 btfss STATUS.0 goto doi37 bsf CARRY4.0 goto doi35 doi36 bcf STATUS.1 doi34 btfss CARRY4.1 movlw 0x60 addwf NUMZ4.0 .

1 goto doi39 bcf STATUS.0 movlw 0x06 addwf NUMZ4.1 doi40 btfss CARRY14.0 bcf STATUS.0 .1 movlw 0x0A subwf NUMZ4.1 btfss STATUS.goto doi52 movlw 0x06 addwf NUMZ3.0 btfss STATUS.addwf NUMZ4.0 goto doi38 movlw 0x01 movwf CARRY14 doi38 btfss STATUS.1 goto doi40 .0 goto doi41 doi42 bcf STATUS.1 goto doi40 doi39 bcf STATUS.

return .0 goto doi46 movlw 0x99 movwf NUMZ1 movwf NUMZ2 movwf NUMZ3 movwf NUMZ4 goto doi47 .0 btfss STATUS.0 goto doi43 goto doi42 doi43 movf CARRY14.0 goto doi43 bsf CARRY14.1 movlw 0x60 addwf NUMZ4.0 goto doi43 doi41 movlw 0xA0 subwf NUMZ4.1 btfss STATUS.bcf STATUS.0 addwf CARRY4.1 doi45 btfss CARRY4.

0 btfss STATUS.1 goto star bcf STATUS.1 movlw 0x01 addwf NUMZ1.1 movlw 0x0A subwf NUMZ1.0 goto star bcf STATUS.doi46 btfss CARRY.movlw 0x10 .1 .0 .addwf NUMZ1.1 movlw 0x06 addwf NUMZ1.1 movlw 0xA0 subwf NUMZ1.0 btfss STATUS.0 goto doi47 call addbcd_1 doi47 return addbcd_1.0 bcf STATUS. aduna cu 1 in cod BCD bcf STATUS.

0 btfss STATUS.1 goto star bcf STATUS.1 movlw 0x0A subwf NUMZ2.addwf NUMZ1.1 movlw 0x06 addwf NUMZ2.0 btfss STATUS.0 goto star .1 movlw 0xA0 subwf NUMZ2..0 .1 movlw 0x00 subwf NUMZ1.0 bcf STATUS.0 btfss STATUS.1 .movlw 0x10 .1 movlw 0x60 addwf NUMZ1..bcf STATUS. movlw 0x01 addwf NUMZ2.

0 bcf STATUS..1 movlw 0x00 subwf NUMZ2.goto star bcf STATUS.1 goto star bcf STATUS.1 movlw 0xA0 .movlw 0x10 .1 .1 movlw 0x60 addwf NUMZ2.0 btfss STATUS.1 movlw 0x06 addwf NUMZ3.0 btfss STATUS.0 bcf STATUS. movlw 0x01 addwf NUMZ3.addwf NUMZ1.0 goto star .1 movlw 0x0A subwf NUMZ3.

1 movlw 0x0A subwf NUMZ4.1 .0 bcf STATUS.subwf NUMZ3.1 movlw 0x06 addwf NUMZ4..0 btfss STATUS.movlw 0x10 .0 goto star bcf STATUS.0 btfss STATUS.0 goto star .1 goto star bcf STATUS. movlw 0x01 addwf NUMZ4.0 bcf STATUS.1 movlw 0x00 subwf NUMZ3.1 movlw 0x60 addwf NUMZ3.0 btfss STATUS.

1 movlw 0x60 addwf NUMZ4.1 movlw 0xA0 subwf NUMZ4.0 btfss STATUS..1 movlw 0x00 subwf NUMZ4.0 goto star bcf STATUS.addwf NUMZ1.0 bcf STATUS.0 goto star movlw 0x99 movwf NUMZ1 movwf NUMZ2 movwf NUMZ3 movwf NUMZ4 star end return .0 btfss STATUS.