l-metru cu pic 16f84 schema programare

151
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.

description

l-metru cu pic 16f84 schema programarel-metru cu pic 16f84 schema programarel-metru cu pic 16f84 schema programarel-metru cu pic 16f84 schema programarel-metru cu pic 16f84 schema programarel-metru cu pic 16f84 schema programarel-metru cu pic 16f84 schema programarel-metru cu pic 16f84 schema programarel-metru cu pic 16f84 schema programare

Transcript of l-metru cu pic 16f84 schema programare

Page 1: l-metru cu pic 16f84 schema programare

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= si comanda

LCD.

Page 2: l-metru cu pic 16f84 schema programare

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 Introducere in microcontrolere pag. 5

1.2 Bobina:parametrii, caracteristici pag.24

1.3 Afisarea LCD.Principii de functionare pag.35

1.4 Metode de programare a Pic-ului pag.39

Cap.2 Partea tehnica

2.1 Scheme bloc pag.44

2.2 Blocul(oscilator cu bobina:LM,FET) pag.45

2.3 Divizorul de frecventa pag.51

2.4 Multiplexorul pag.54

2.5 PIC16F84 pag.56

2.6 LCD(Initializare LCD) pag.59

2.7 Schema logica a programului pag.63

2.8 Sursa de alimentare pag.68

ANEXE : A.1. Schema electronica pag.70

A.2. Cablaje pag.71

A.3. Lista componenetepag.72

A.4. Listarea programului si limbajului de asamblare pag.73

Page 3: l-metru cu pic 16f84 schema programare

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

Page 4: l-metru cu pic 16f84 schema programare

memorie decat ar fi cerut proiectul propus de inginerii japonezi. Dupa un timp, cu toate ca

inginerii au cautat sa caute o solutie mai simpla, ideea lui Marcian a castigat, si aluat nastere

primul microcontroler. In transformarea unei idei intr-un produs finit, Frederico Faggin a fost de

un ajutor major pentru INTEL. El s-a transferat la INTEL, si doar in 9 luni a reusit sa scoata un

produs din prima sa conceptie. INTEL a obtinut drepturile de a vinde acest bloc integral in 1971.

In primul rand ei au cumparat licenta de la compania BUSICOM care nu au avut idee ce

comoara avusesera. In timpul acelui an a aparut pe piata un microprocesor numit 4004. Acela a

fost primul microprocesor de 4 biti cu viteza 6000 operatii pe secunda. Nu mult dupa aceea,

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 CTC a renuntat la aceasta idee

pana la sfarsit, 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. Putea sa adreseze

64Kb de memorie si avea 45 de instructiuni si viteza de 300.000 de operatii pe secunda. Acel

microprocesor a fost predecesorul tuturor microprocesoarelor de astazi. 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, iar pretul incepuse de la 360$.

Intr-o alta companie americana Motorola, si-au dat seama repede ce se intampla, asa ca

au lansat pe piata un microprocesor de 8 biti 6800. Costructor sef era Chuck Peddle si pe langa

microprocesorul propriu-zis, Motorola a fost prima companie care sa faca alte periferice ca 6820

si 6850. La acel timp multe companii au recunoscut marea importanta a microprocesoarelor  si

au inceput propriile lor dezvoltari. Chuck Peddle paraseste Motorola pentru a se muta la MOS

Technology si continua sa lucreze intensiv la dezvoltarea microprocesoarelor.

La expozitia WESCON din Statele Unite din 1975 a avut loc un eveniment critic in

istoria microprocesoarelor. MOS Technology a anuntat ca produce microprocesoarele 6501 si

6502 la 25$ bucata pe care cumparatorii le puteau cumpara imediat. Aceasta a fost atat de

senzational incat au crezut ca este un fel de inselaciune, gandind ca competitorii vindeau 8080 si

6800 la 179$. Ca un raspuns la competitorii lor atat INTEL cat si Motorola au scazut preturile lor

in prima zi a expozitiei pana la 69.95$ pe microprocesor. Motorola intenteaza repede proces

contra lui MOS Technology si contra lui Chuck Peddle pentru copierea protejatului 6800. MOS

Technology inceteaza de a mai produce 6501 dar continua sa produca 6502. 6502 este un

microcontroler pe 8 biti cu 56 de instructiuni si o capabilitate de adresare directa de 64Kb de

Page 5: l-metru cu pic 16f84 schema programare

memorie. Datorita costului scazut, 6502 devine foarte popular, asa ca este instalat in computere  

ca :KIM-1, Apple I, Apple II, Atari, Comodore, Acorn, Oric, Galeb, Orao, Ultra si multe altele.

Curand apar cativa producatori de 6502 (Rockwell, Sznertek, GTE, NCR, 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. Federico Faggin paraseste INTEL, si isi porneste propria sa

companie Zilog Inc.

In 1976 Zilog anunta Z80. In timpul crearii acestui microprocesor, Faggin face o decizie

cruciala. Stiind ca un mare numar de programe fusesera dezvoltate pentru 8080, Faggin isi da

seama ca multi vor ramane fideli acelui microprocesor din cauza marii cheltuieli care ar rezula in

urma refacerii tuturor programelor. Astfel el decide ca un nou microprocesor trebuie sa fie

compatibil cu 8080, sau ca trebuie sa fie capabil sa execute toate programele care deja fusese

scrise pentru 8080. Inafara acestor caracteristici, multe altele noi au fost adaugate, asa ca Z80 a

fost un microprocesor foarte puternic la vremea lui. Se putea adresa direct la 64Kb de memorie,

avea 176 instructiuni, o singura sursa,mult mai mare viteza de lucru etc. Z80 a fost un succes

mare si toata lumea a facut conversia de 8080 la Z80. Se poate spune ca Z80 a fost fara nici o

indoiala comercial, cel mai de succes microcontroler de 8 biti a acelui timp. Inafara de Zilog, alti

noi producatori apar de asemenea ca :Mostek, NEC, SHARP si SGS. Z80 a fost inima a multor

computere ca :Spectrum, Partner, TRS703, Z-3 si Galaxi aici acasa.

In 1976, INTEL iese pe piata cu o versiune imbunatatita de microprocesor pe 8 biti numit

8085. Totusi, Z80 era cu mult mai bun incat INTEL a apierdut batalia. Chiar daca inca cateva

microprocesoare au aparut pe piata (6809,2650,SC/MP etc.), totul fusese de fapt deja hotarat. 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.

Deosebirea dintre microprocesoare si microcontrolere

Microcontrolerul difera de un microprocesor in multe feluri. In primul rand si cel mai important

este functionalitatea sa. Pentru a fi folosit, unui microprocesor trebuie sa i se adauge alte

componente ca memorie, sau componente pentru primirea si trimiterea de date. Pe scurt, aceasta

inseamna ca microprocesorul este inima computerului. Pe de alta parte, microcontrolerul este

Page 6: l-metru cu pic 16f84 schema programare

proiectat sa fie toate acestea intr-unul singur. Nu sunt necesare alte componente externe pentru

aplicarea sa pentru ca toate perifericele necesare sunt deja incluse in el.

Astfel, economisim timpul si spatiul necesare pentru construirea de aparate.  Un

microcontroler este un 'calculator pe un chip'. Cuvantul 'micro' sugereaza marimea redusa a

dispozitivului iar 'controler' ne spune ca dispozitivul poate fi folosit pentru a controla obicte,

procese sau evenimente.

         

Microcontrolerele pot fi gasite in componenta oricarui tip de aparat. Orice aparat care

masoara, stocheaza, comanda, calculeaza sau afiseaza informatii este o potentiala gazda pentru

un microcontroler.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. In calculatoare de birou (PC) se pot gasi microcontrolere in

tastatura, modemuri, imprimante si alte periferice. In echipamentele de testare fac posibila

adaugarea unor facilitati ca de exemplu memorarea rezultatelor masurarii, afisarea mesajelor si

formelor de unda. Produsele de larg consum care includ microcontrolere sunt camerele video,

video recorderele, compact-disk (CD) playere si altele. Un microcontroler este similar unui

microprocesor. Ambele contin o unitate centrala de prelucrare sau UCP (cenral processing unit).

CPU executa instructiuni care indeplinesc operatiile de baza logice, matematice si de curgere a

informatiei.

Pentru a construi un calculator complet, microprocesorul necesita memorie pentru

pastrarea datelor si programelor, interfete de intrare-iesire (I/O) pentru conectarea dispozitivelor

externe cum ar fi tastatura sau monitorul. Spre diferenta de microprocesor, microcontrolerul este

un calculator pe un chip deorece el contine si memorie si interfete de intrare-iesire pe langa CPU.

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.

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, oricare din

Page 7: l-metru cu pic 16f84 schema programare

continuturile lor vor fi atunci usor accesibile. Este suficient sa se stie desemnarea sertarului si

astfel continuturile lui ne vor fi cunoscute in mod sigur.

Fig.1.1.1

Componentele de memorie sunt exact asa. Pentru o anumita intrare obtinem continuturile

unei anumite locatii de memorie adresate si aceasta este totul. Doua noi concepte ne sunt

aduse :adresarea si locatia de memorie. Memoria consta din toate locatiile de memorie, si

adresarea nu este altceva decat selectarea uneia din ele. Aceasta inseamna ca noi trebuie sa

selectam locatia de memorie la un capat, si la celalalt capat trebuie sa asteptam continuturile

acelei locatii. In afara de citirea dintr-o locatie de memorie, memoria trebuie de asemenea sa

permita scrierea in ea. Aceasta se face asigurarea unei linii aditionale numita linie de control.

Vom desemna aceasta linie ca R/W (citeste /scrie). Linia de control este folosita in urmatorul

fel : daca r/w=1, se face citirea, si daca opusul este adevarat atunci se face scrierea in locatia de

memorie. Memoria este primul element, dar avem nevoie si de altele pentru ca microcontrolerul

nostru sa functioneze.

Unitatea centrala de procesare

Page 8: l-metru cu pic 16f84 schema programare

Sa adaugam alte 3 locatii de memorie pentru un bloc specific ce va avea o capabilitate

incorporata de inmultire, impartire, extragere si sa-i mutam continuturile dintr-o locatie de

memorie in alta. Partea pe care tocmai am adaugat-o este numita 'unitatea de procesare centrala'

(CPU). Locatiile ei de memorie sunt numite registri.

Fig.1.1.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. Sa privim la situtia

curenta. Avem doua entitati independente (memoria si CPU)  ce sunt interconectate, sI astfel

orice schimb de informatii este ascuns, ca si functionalitatea sa. Daca, de exemplu, dorim sa

adaugam continuturile a doua locatii de memorie si   intoarcem rezultatul inapoi in memorie,

vom avea nevoie de o conexiune intre menmorie si CPU. Mai simplu formulat, trebuie sa avem o

anumita 'cale' prin care datele circula de la un bloc la altul.

Bus-ul de date

Calea este numita 'bus'-magistrala. Fizic, el reprezinta un grup de 8, 16, sau mai multe

fire. Sunt doua tipuri de bus-uri : bus de adresa si bus de date. Primul consta din atatea linii cat

este cantitatea de memorie ce dorim sa o adresam, iar celalalt este atat de lat cat sunt datele, in

cazul nostru 8 biti sau linia de conectare. Primul serveste la transmiterea adreselor de la CPU la

memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.

Page 9: l-metru cu pic 16f84 schema programare

Fig.1.1.3

In ceea ce priveste functionalitatea, situatia s-a imbunatatit, dar o noua problema a aparut

de asemenea: avem o unitate ce este capabila sa lucreze singura, dar ce nu are nici un contact cu

lumea de afara, sau cu noi ! Pentru a inlatura aceasta deficienta, sa adaugam un bloc ce contine

cateva locatii de memorie a caror singur capat este conectat la busul de date, iar celalat are

conexiune cu liniile de iesire la microcontroler ce pot fi vazute cu ochiul liber ca pini la

componenta electronica.

Unitatea de intrare-iesire

Aceste locatii ce tocmai le-am adaugat sunt numite 'porti'.Sunt diferite tipuri de

porti :intrare, iesire sau porti pe doua-cai. Cand se lucreaza cu porti, mai intai de toate este

necesar sa se aleaga cu ce pot urmeaza sa se lucreze, si apoi sa se trimita date la, sau sa se ia date

de la port.

Fig.1.1.4

Page 10: l-metru cu pic 16f84 schema programare

Cand se lucreaza cu el portul se comporta ca o locatie de memorie. Ceva este pur si

simplu scris in sau citit din el, si este posibil de a remarca usor aceasta la pinii

microcontrolerului.

Porturi de comunicatie

Cu aceasta am adaugat la unitatea deja existenta posibilitatea comunicarii cu lumea de

afara. Totusi, acest mod de comunicare are neajunsurile lui. Unul din neajunsurile de baza este

numarul de linii ce trebuie sa fie folosite pentru a transfera datele. 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. Nu ne ramane decat sa reducem numarul de linii     intr-

un asa fel incat sa nu afectam functionalitatea. Sa presupunem ca lucram doar cu 3 linii, si ca o

linie este folosita pentru trimiterea de date, 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, trebuie sa stabilim regulile de schimb ale datelor. Aceste reguli sunt numite

protocol. Protocolul este de aceea definit in avans ca sa nu fie nici o neitelegere intre partile ce

comunica una cu alta. De exemplu, daca un om vorbeste in franceza, si altul vorbeste in engleza,

este putin probabil ca ei se vor intelege repede si eficient unul cu altul. Sa presupunem ca avem

urmatorul protocol. Unitatea logica '1' este setata pe linia de transmisie pana ce incepe transferul.

Odata ce incepe transferul, coboram linia de transmisie la '0' logic pentru o perioada de timp (pe

care o vom desemna ca T), asa ca partea receptoare va sti ca sunt date de primit, asa ca va activa

mecanismul ei de receptie. 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. Sa lasam ca fiecare bit sa ramana pe linie pentru o perioada de timp

egala cu T, si la sfarst, sau dupa al 8-lea bit, sa aducem unitatea logica  '1' inapoi pe linie ce va

marca  sfarsitul transmisiei unei date. Protocolul ce tocmai l-am descris este numit in literatura

profesionala NRZ (Non-Return to Zero).

Page 11: l-metru cu pic 16f84 schema programare

Fig.1.1.5

Pentru ca aven linii separate de receptie si de transmitere, este posibil sa receptionam si

sa transmitem date (informatii) in acelasi timp. Blocul ce permite acest mod de comunicare este

numit blocul de comunicare seriala. Spre deosebire de transmisia paralela, datele sunt mutate aici

bit cu bit, sau intr-o serie de biti, de unde vine si numele de comunicatie seriala. 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. Datele circula din memorie prin bus catre locatia de

trimitere, si de acolo catre unitatea de receptie conform protocolului.

Unitatea de timer

Acum ca avem comunicatia seriala , putem receptiona , trimite si procesa date.

Fig.1.1.6

Watchdog-ul

Inca un lucru ce necesita atentia noastra este functionarea fara defecte a

microcontrolerului in timpul functionarii. Sa presupunem ca urmare  a unei anumite interferente

(ce adesea se intampla in industrie) microcontrolerul nostru se opreste din executarea

programului, sau si mai rau, incepe sa functioneze incorect.

Page 12: l-metru cu pic 16f84 schema programare

Fig.1.1.7

Bineanteles, cand aceasta se intampla cu un computer, il resetam pur si simplu si va

continua sa lucreze. Totusi, nu exista buton de resetare pe care sa apasam in cazul

microcontrolerului care sa rezolve astfel problema noastra. Pentru a depasi acest obstacol, avem

nevoie de a introduce inca un bloc numit watchdog-cainele de paza. 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.

In caz ca programul se 'intepeneste', nu se va mai scrie zero, iar contorul se va reseta singur pana

la obtinerea valorii sale maxime. Aceasta va duce la rularea programului din nou, si corect de

aceasta data pe toata durata. Acesta este un element important al fiecarui program ce trebuie sa

fie fiabil fara supravegherea omului.

Convertorul Analog-Digital

Pentru ca semnalele de la periferice sunt substantial diferite de cele pe care le poate

intelege (zero si unu), ele trebuie convertite intr-un mod care sa fie inteles de microcontroler.

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.

Fig.1.1.8

Astfel microcontrolerul este acum terminat, 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.

Imaginea de mai jos arata cum arata un microcontroler in interior.

Page 13: l-metru cu pic 16f84 schema programare

Fig.1.1.9.Cofiguratia fizica a interiorului unui microcontroler

Liniile subtiri ce merg din interior catre partile microcontrlerului reprezinta fire

conectand blocurile interioare cu pinii capsulei microcontrolerului. Schema urmatoare reprezinta

sectiunea centrala a microcontrolerului.

Page 14: l-metru cu pic 16f84 schema programare

Fig.1.1.10

Pentru o aplicatie reala, un microcontroler singur nu este de ajuns. Inafara de

microcontroler, avem nevoie de un program pe care sa-l execute, si alte cateva elemente ce

constituie o interfata logica catre elementele de stabilizare (ce se va discuta in capitolele

urmatoare).

Programul

Page 15: l-metru cu pic 16f84 schema programare

Scrierea programului este un domeniu special de lucru al microcontolerului si este

denumit 'programare'. Sa incercam sa scriem un mic program ce il vom crea singuri si pe care

oricine va fi in stare sa-l inteleaga.

START

REGISTER1=MEMORY LOCATION_A

REGISTER2=MEMORY LOCATION_B

PORTA=REGISTER1 + REGISTER2

END

Programul adauga continuturile a doua locatii de memorie, si vede totalul lor la portul A.

Prima linie a programului este pentru mutarea continuturilor locatiei de memorie 'A' intr-unul din

registri unitatii centrale de procesare. Pentru ca avem nevoie si de celelalte date de asemenea, le

vom muta de asemenea in celalalt registru al 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, incat suma acestei adaugari sa fie vizibila pentru toata

lumea de afara. Pentru o problema mai complexa, programul care sa lucreaze la rezolvarea ei va

fi mai mare.

Programarea poate fi facuta in catava limbaje ca Assembler, C si Basic care sunt cele mai

folosite limbaje. Assembler apartine limbajelor de nivel scazut ce sunt programate lent, dar

folosesc cel mai mic spatiu in memorie si da cele mai bune rezultate cand viteza de executie a

programului se are in vedere. Pentru ca este cel mai folosit limbaj in programarea

microcontrolerelor va fi discutat intr-un capitol ulterior. Programele in limbajul C sunt mai usor

de scris, mai usor de inteles, dar sunt mai lente in executare decat programele in Assembler.

Basic este cel mai utor de invatat, 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. In orice caz, inainte de a va hotari in privinta unuia din aceste limbaje trebuie sa

studiati cu atentie cerintele privind viteza de executie, marimea memoriei si timpul disponibil

pentru asamblarea sa.

Dupa ce este scris programul, trebuie sa instalam microcontrolerul intr-un aparat si sa-l

lasam sa lucreze. Pentru a face aceasta  trebuie sa adaugam cateva componente externe necesare

pentru functionarea sa. Mai intai trebuie sa dam viata microcontrolerului prin conectarea sa la o

Page 16: l-metru cu pic 16f84 schema programare

sursa (tensiune necesara pentru operarea tuturor instrumentelor electronice) si un oscilator a carui

rol este similar inimii din corpul uman. Bazat pe ceasul sau microcontrolerul executa

instructiunile programului. Indata ce este alimentat microcontrolerul va executa un scurt control

asupra sa, se va uita la inceputul programului si va incepe sa-l execute. Cum va lucra aparatul

depinde de multi parametri, cel mai important fiind priceperea dezvoltatorului de hardware, si de

expertiza programatorului in obtinerea maximului din aparat cu programul sau.

Microcontrolerul PIC16F84

PIC16F84 apartine unei clase de microcontrolere de 8 biti cu arhitectura RISC. Structura

lui generala este aratata in schita urmatoare reprezentand blocurile de baza.

Memoria program (FLASH)-pentru inmagazinarea unui program scris. Pentru ca

memoria ce este facuta in tehnologia FLASH poate fi programata si stearsa mai mult decat odata,

aceasta face microcontrolerul potrivit pentru dezvoltarea de componenta.

EEPROM-memorie de date ce trebuie sa fie salvate cand nu mai este alimentare. Este in

mod uzual folosita pentru inmagazinarea de date importante ce nu trebuie pierdute daca sursa de

alimentare se intrerupe dintr-o data. De exemplu, o astfel de data este o temperatura prestabilita

in regulatoarele de temperatura.  Daca in timpul intreruperii alimentarii aceasta data se pierde, va

trebui sa facem ajustarea inca o data la revenirea alimentarii. Asfel componenta noastra pierde in

privinta auto-mentinerii.

RAM-memorie de date folosita de un program in timpul executarii sale. In RAM sunt

inmagazinate toate rezultatele intermediare sau datele temporare ce nu sunt cruciale la

intreruperea sursei de alimentare.

PORTUL A si PORTUL B sunt conexiuni fizice intre microcontroler sin lumea de afara.

Portul A are 5 pini, iar portul B are 8 pini.

TIMER-ul LIBER este un registru de 8 biti in interiorul microcontrolerului ce lucreaza

independent de program. La fiecare al patrulea impuls de ceas al oscilatorului isi incrementeaza

valoarea lui pana ce atinge maximul (255), si apoi incepe sa numere tot din nou de la zero. Dupa

cum stim timpul exact dintre fiecare doua incrementari ale continutului timer-ului, poate fi

folosit pentru masurarea timpului ce este foarte util la unele componente.

Page 17: l-metru cu pic 16f84 schema programare

Unitatea cerntrala de prelucrare are rolul unui element de conectivitate intre celelalte

blocuri ale microcontrolerului. Coordoneaza lucrul altor blocuri si executa programul

utilizatorului.

Fig.1.1.11

CISC, RISC

S-a spus deja ca PIC1684 are o arhitectura RISC. Acest termen este adeseori gasit  in

literatura despre computere, si are nevoie sa fie explicat aici mai in detaliu. Arhitectura Harvard

este un concept mai nou decat von-Neumann`s.   S-a nascut din nevoia de marire a vitezei

microcontrolerului. In arhitectura Harvard, bus-ul de date bus-ul de adrese sunt separate. Astfel

un mare debit de date este posibil prin unitatea de procesare centrala, si bineinteles, o viteza mai

mare de lucru. Separand  un program de memoria de date face posibil ca mai departe

instructiunile sa nu trebuiasca sa fie cuvinte de 8 biti. PIC16F84 foloseste 14 biti pentru

instructiuni ceea ce permite ca toate instructiunile sa fie instructiuni de un cuvant. Este de

Page 18: l-metru cu pic 16f84 schema programare

asemenea tipic pentru arhitectura Harvard sa aiba mai putine instructiuni decat von-Newmann si

sa aiba instructiuni executate uzual intr-un ciclu.

Microcontrolerele cu arhitectura Harvard sunt de asemenea numite 'microcontrolere

RISC'. RISC inseamna Reduced Instruction Set Computer. Microcontrolerele cu arhitectura von-

Newmann sunt numite 'microcontrolere CISC'. Titlul CISC inseamna Complex Instruction Set

Computer.

Pentru ca PIC16F84 este un microcontroler RISC, aceasta inseamna ca are un set redus

de instructiuni, mai precis 35 de instructiuni (de ex. microcontrolerele INTEL si Motorola au

peste 100 de instructiuni). Toate aceste instructiuni sunt executate intr-un ciclu cu exceptia

instructiunilor jump si branch. Conform cu ceea ce spune constructorul, 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.

Aplicatii :

PIC16F84 se potriveste perfect in multe folosinte, de la industriile auto si aplicatiile de

control casnice la instrumentele industriale, senzori la distanta, manere electrice de usi si

dispozitivele de securitate. Este de asemenea ideal pentru cardurile smart ca si pentru aparatele

alimentate de baterie din cauza consumului lui mic.

Pic16F84, un microcontroller de 8 biti cu un set restrins de vre-o 34 de instructiuni, cu

arhitectura de tip RISC (una, 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. Memoria EEPROM face mai usoara aplicarea

microcontrolerelor la aparate unde se cere inmagazinarea permanenta a diferitor parametri

(coduri pentru transmitatoare, viteza motorului, frecventele receptorului, etc.). Costul scazut ,

consumul scazut, manuirea usoara si flexibilitatea fac PIC16F84 aplicabil chiar si in domenii

unde microcontrolerele nu au fost prevazute inainte (exemple:functii de timer, inlocuirea

interfetei in sistemele mari, aplicatiile coprocesor, etc.) Programabilitatea sistemului acestui cip

(impreuna cu folosirea a doar doi pini in transferul de date) face posibila flexibilitatea

produsului, dupa ce asamblarea si testarea au fost terminate. Aceasta capabilitate poate fi folosita

pentru a crea productie pe linie de asamblare, de a inmagazina date de calibrare disponibile doar

dupa testarea finala, sau poate fi folosit pentru a imbunatati programele la produse finite.

Page 19: l-metru cu pic 16f84 schema programare

Ciclul de clock / instructiune : clock-ul este un semnal periodic dreptunghiular generat de

un oscilator cu frecventa stabila. 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,Q2,Q3

si Q4 ce nu se suprapun. Aceste 4 clock-uri constituie un ciclu de o singura instructiune (numit

de asemenea ciclu masina) in timpul careia o instructiune este executata.

Executarea instructiunii incepe prin apelarea unei instructiuni care este urmatoarea in

linie. Instructiunea este apelata din memoria program la fiecare Q1 si este scrisa in registrul de

instructiuni la Q4. Decodarea si executarea instructiunii sunt facute intre urmatoarele cicluri Q1

si Q4. In urmatoarea diagrama putem vedea relatia dintre ciclul instructiunii si clock-ul

oscilatorului (OSC1) ca si aceea a clock-urilor interne Q1-Q4. Contorul de program (PC) retine

informatia despre adresa urmatoarei instructiuni.

Fig.1.1.12

Pipelining

Ciclul de instructiuni consta din ciclurile Q1, Q2, Q3 si Q4. Ciclurile de instructiuni de

apelare si executare sunt conectate intr-un asa fel incat pentru a face o apelare, este necesar un

ciclu cu o instructiune, si este nevoie de inca una pentru decodare si executare. Totusi, datorita

pipeline-ului sau liniei directe, fiecare instructiune este efectiv executata intr-un singur ciclu.

Daca instructiunea cauzeaza o schimbare in contorul programului, si PC-ul nu directioneaza spre

urmatoarea ci spre alte adrese (poate fi cazul cu subprogramele jumps sau de apelare), 2 cicluri

sunt necesare pentru executarea unei instructiuni. Aceasta este pentru ca instructiunea trebuie

procesata din nou, dar de data aceasta din partea adresei corecte. Ciclul incepe cu clock-ul Q1,

prin scrierea intr-un registru (IR). Decodarea si executarea incepe cu clock-urile Q2, Q3 si Q4.

Page 20: l-metru cu pic 16f84 schema programare

Fig.1.1.13

TYCO citeste instructiunea MOVLW 55h (nu are importanta pentru noi ce instructiune a fost

executata, ce explica de ce nu este un dreptunghi in partea de jos).

TCYI executa instructiunea MOVLW 55h si citeste MOVWF PORTB.

TCY2 executa MOVWF PORT si citeste CALL SUB_1.

TCY3 executa o apelare a unui subprogram CALL SUB_1, si citeste instructiunea BSF PORTA,

BIT3. Pentru ca instructiunea aceasta nu este aceea de care avem nevoie, sau nu este prima

instructiune a unui subprogram SUB_1 a carui executie este urmatoarea in ordine, instructiunea

trebuie citita din nou. Acesta este un bun exemplu a unei instructiuni avand nevoie de mai mult

de un ciclu.

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.

Semnificatia pinilor

PIC16F84 are un numar total de 18 pini. 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. DIP

este prescurtarea de la Dual In Package. SMD este prescurtarea de la  Surface Mount Devices

sugerand ca gaurile pentru pini unde sa intre acestia , nu sunt necesare in lipirea acestui tip de

componenta.

Page 21: l-metru cu pic 16f84 schema programare

Fig.1.1.14

Pinii microcontrolerului PIC16F84 au urmatoarea semnificatie:

Pin nr.1 RA1 Al doilea pin la portul A. Nu are functie aditionala.

Pin nr.2 RA2 Al treilea pin la portul A. Nu are functi aditionala.

Pin nr.3 RA3 Al patrulea pin la portul A. TOCK1 care functioneaza ca timer se gaseste de

asemenea la acest pin

Pin nr.4 MCLR Reseteaza intrarea si tensiunea de programare Vpp a microcontrolerului.

Pin nr.5 VSS Alimentare, masa.

Pin nr.6 RBO Pin de zero la portul B. Intrarea intrerupta este o functie aditionala.

Pin nr.7 RB1 Primul pin la portul B. Nu are functie aditionala.

Pin nr.8 RB2 Al doilea pin la portul B. Nu are functie aditionala.

Pin nr.9 RB3 Al treilea pin la portul B. Nu are functie aditionala.

Pin nr.10 RB4 Al patrulea pin la portul B.Nu are functie aditionala.

Pin nr.11 RB5 Al cincilea pin la portul B.  Nu are functie aditionala.

Pin nr.12 RB6 Al saselea pin la portul B. Linia de 'Clock' in mod programare.

Pin nr.13 RB7 Al saptelea pin la portul B. Linia 'Data' in mod programare.

Pin nr.14 Vdd Polul pozitiv al sursei.

Pin nr.15 OSC2 Pin desemnat pentru conectarea la un oscilator

Pin nr.16 OSC1 Pin desemnat pentru conectarea la un oscilator

Pin nr.17 RA2 Al doilea pin la portul A. Nu are functie aditionala.

Pin nr.18 RA1 Primul pin la portul A. Nu are functie aditionala.

Page 22: l-metru cu pic 16f84 schema programare

1.2 Bobina. Metode de masurare a bobinei

Bobinajele se executa din materiale care se caracterizeaza prin conductivitate electrica

ridicata, printr-o rezistenta mecanica suficienta, precum si prin rezistenta la eroziune

chimica.Materialul cel mai des folosit in calitate de conductor este cuprul, care are conductivitate

electrica foarte buna si nu prezinta dificultati la prelucrarea tehnologica.Conductoarele din

aluminiu se folosesc numai pentru bobinele instalatiilor de putere.Suportul, pe care se infasoara

conductorul bobinei, trebuie sa permita bobinarea usoara, efectuarea cu usurinta a conexiunilor,

fixarea simpla si montarea comoda a miezului magnetic, prezentand in acelasi timp o rezistenta

mecanica satisfacatoare.

Calculul inductivitatii:

Calculul inductivitatii se face anterior realizarii bobinei, in general cu formule semiempirice.

-pentru bobine fara miez,cu un singur strat,spira langa spira:

L0= [μH] (1.2.1)

d este diametrul mediu al bobinei in mm, l este lungimea in mm,iar n numarul de spire.

-pentru bobine cu mai multe straturi:

L0= [μH] (1.2.2)

d este diametrul mediu al bobinei in mm, l -lungimea in mm,h-inaltimea bobinei in mm.

Miezuri magnetice

Pentru obtinerea inductivitatilor de valori mari,infasurarea bobinei se dispune pe miezuri

magnetice.Miezul magnetic impreuna cu eventualele intrefieruri formeaza un circuit magnetic

care are calitatea de a concentra aproape integral liniile campului magnetic.

Page 23: l-metru cu pic 16f84 schema programare

Ciclul histerezis

Materialele magnetice utilizate pentru miezurile bobinelor sunt neliniare din punctul de vedere al

comportarii in camp magnetic exterior.Neliniaritatea se exprima prin dependenta inductieie

magnetice B de intensitatea campului magnetic H, printr-o functie neliniara.Crescand intensitatea

H a campului magnetic, inductia magnetica B creste, tinzand catre valoarea de saturatie B.

Atomii materialelor magnetice avand moment magnetic propiu, iar momentele atomice vecine

fiind orientate identic, se formeaza domenii cu magnetizare spontana.Pe ansamblu, domeniile

sunt astfel orientate, incat materialul prezinta magnetizare remanenta.La aplicarea unui camp

magnetic exterior apare o deplasare a domeniilor magnetice, ceea ce macroscopic se manifesta

printr-o dependenta de tip histerezis a inductiei magnetice B, de intensitate H a campului

magnetic.Din punct de vedere al orientarii momenteleor magnetice atomice, materialele pot fi

feromagnetice sau ferimagnetice.Feromagneticele au momentele magnetice elementare orientate

toate in acelasi sens.Materialele ferimagnetice au in structura lor doua sau mai multe subretele

magnetice, avand fiecare magnetizare spontana, momentele magnetice fiind orientate in sens

contrar, dar unul dintre momente este mai mare in valoare absoluta.Magnetizarea spontana exista

numai pana la o anumita temperatura T, numita temperatura Curie,a carei valoare depinde de

material.Dupa depasirea temperaturii T energia termica a retelei depaseste energia interactiunii

de schimb, domenile de magnetizare dispar, materialul fiind paramagnetic.Din punct ce vedere al

ciclului de histerezis, materialele magnetice pot fi moi (cu campul coercitiv

H<80A/m,permeabilitate mare, pierderi mici) sau dure (H>80A/m, pierderi mari, dar cu energie

mare in intrefier).

Permeabilitatea magnetica

Interactiunea substantei cu campul magnetic este caracterizata de permeabilitatea complexa

relativa:

μ= = μ'-j μ'' (1.2.3)

B -inductia magnetica;

Page 24: l-metru cu pic 16f84 schema programare

H-intensitaea campului magnetic;

μ =4π*10-7 -permeabilitatea vidului;

O bobina ideala, avand in vid inductivitatea L0, in care se introduce un miez magnetic de

permeabilitate relativa complexa μ, pentru flux de scapari nul prezinta la borne impedanta:

Z=jωL= jωL0 μ = jω μ'L0 + μ'' ωL0=rm+ jωL (1.2.4)

Bobinele utilizate in echpamente electronice au miezurile realizate din materiale

feromagnetice moi.

Inductivitatea bobinei

In cazul bobinelor cu miez inductivitatea este

L= μ efL0 (1.2.5)

Unde L0 este inductivitatea bobinei fara miez, iar μ este permeabilitatea efectiva a

miezului, dependenta de permeabilitatea relativa, a materialului miezului, de geometrie si pozitia

relativa a miezului fata de bobinaj. Permeabilitatea efectiva se poate calcula numai pentru

anumite geometri, de regula se detremina experimental.

Parametrii bobinei

Fig.1.2.1

Page 25: l-metru cu pic 16f84 schema programare

Parametrul caracteristic al unei bobine este inductivitatea L, definita ca raportul dintre fluxul

magnetic propriu sigma si curentul I ce strabate bobina:

L=Ф/I (1.2.6)

Acesta este o marime specifica a bobinei, depinzand numai de forma, dimensiunile si

numarul de spire al bobinei, precum si de permeabilitatea relativa a mediului. Pentru bobine

dispuse in medii liniare si izotrope, L este constant.In cazul bobinelor cu miez magnetic

inductivitatea variaza in functie de semnalul aplicat, datorita permeabilitatii relative cu

intensitatea curentului ce strabate bobina.In functinarea cu semnal mic, permeabilitatea relativa

este constanta.In functionarea cu semnal mare, inductivitatea variaza in limite largi si trebuie

definita fie o inductivitate medie,fie o inductivitate pentru o anumita valoare a curentului.

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.

Un alt parametru al bobinei este rezistenta sa de pierderi r.Fiecare spira a bobinei comporta ca o

rezistenta de pierderi in conductor r'e, si o rezistenta de pierderi in materialul magnetic r. Care

inglobeaza atat pierderile datorite curentilor turbionari in miezul magnetic,al caror efect este

proportional cu patratul frecventei de lucru,cat si pierderile prin histerezis al caror efect este

proportional cu f.Pierderile r'c si r'm pot fi echivalate cu o rezitenta in serie cu inductivitatea L' a

spirei.In paralel cu grupul serie apare rezistenta de izolare r'p.

Considerand toate cele n spire identice, se poate considera bobina, intr-o prima aproximatie, ca o

inductivitate L=nL' in serie cu rc=nr'c si rm=nr'm, tot grupul fiind in paralel cu

rp=nr'p.Transpunand efectul rezistentei de izolatie in serie, efectul total de pierderi in bobina este

exprimat prin rezistenta serie a bobinei r.Inductivitatea L caracterizeaza comportarea utila a

bobinei, ca element pur raectiv, in timp ce r caracterizeaza pierderile de putere activa.

La fiecare frecventa de lucru se defineste pentru bobina, factorul sau de calitate, ca fiind

proportional cu raportul dintre energie maxima inmagazinata in campul magnetic al bobinei si

Page 26: l-metru cu pic 16f84 schema programare

energia disipata sub forma de caldura, intr-o perioada.Ca urmare,factorul de calitate se determina

din relatia:

= = = QL (1.2.7)

Wmax-energia maxima acumulata in campul magnetic al bobinei

Wj0,r-energia disipata prin efect Joule in perioada 0,T

ωL-reactanta bobinei la frecventa corespunzatoare pulsatiei ω=2πf

r -rezistenta echivalenta pierderilor in bobina;

I -valoarea eficace a curentului prin bobina;

QL = (1.2.8)-factorul de calitate al bobinei

Un alt parametru al bobinei este capacitatea sa parazita.Aceasta se datoreste capacitatii

parazite C12 dintre doua spire alaturate, care apare in paralel cu L' si r pe fiecare spira, si

capacitatilor C10 si C20 ale fiecarei spire fata de masa.Efectul total al acestor capacitati se

inglobeaza intr-o capacitate echivalenta parazita Cp, in paralel pe bobina.

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, deci vor depinde de frecventa.Pentru a evita deteriorarea bobinei ca urmare unor

solicitari electrice, curentul si tensiunea la borne nu trebuie sa depaseasca, in functie de frecventa

de lucru, anumite limite.

-in domeniul frecventelor joase solicitarea bobinei se datoreste in principal curentului care da

nastere unor forte mecanice de respingere intre spire .In acest domeniu tensiunea la borne creste

Page 27: l-metru cu pic 16f84 schema programare

liniar cu frecventa.Deci pentru a se evita distrugerea bobinei, curentul nu trebuie sa depaseasca

valoarea maxima admisibila Imax.

-de la o anumita frecventa f1, apare pericolul de distrugere termica a bobinei, deci trebuie limitata

puterea maxima pe care o poate disipa bobina :

Pd max=UI tg∂ (1.2.9)

Deci la frecventa f1 va exista relatia: Pd max =ω1Imax2Ltg∂ (1.2.10)

- pentru o anumita frecventa f2 in domeniul frecventelor inalte depasirea unei tensiuni limitaUmax

este interzisa, pentru strapungerile intre spire, deci curentul va avea alta lege de variatie I= U max/

ωL.

Pmax = (1.2.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, asupra puterii disipate in

domeniul f1- f2 si asupra tensiunii la frecvente mai mari de frecventa critica f2. Frecventele critice

satisfac relatia:

f1 f2= (1.2.12)

Zgomotul bobinelor

Zgomotul unei impedante se datoreste agitatiei termice a electronilor liberi, de conductie in

interiorul impedantei respective.Acest zgomot este un zgomot de fluctuatie, energia sa depinzand

de energia cinetica a electronilor liberi, la randul sau determinata de temperatura absoluta a

impedantei, independent de regimul electric in care este utilizata aceasta.Bobinele cu pierderi

mici se comporta bine din punct de vedere al zgomotului. O sursa de zgomot propiu-zisa o

constituie vibratiile mecanice ale miezului din tole nestranse suficient. In general contributia

zgomotului nu este importanta.

Page 28: l-metru cu pic 16f84 schema programare

Fiabilitatea bobinelor

Bobinele sunt elemente cu siguranta in functionare relativ scazuta, defectiunile lor putand

conduce si la defectarea altor piese cu care sunt conectate sau alaturi de care sunt montate. La

randul lor insa, defectiunile bobinelor pot fi provocate de defectarea altor componente ale

sistemului.Fiabilitatea bobinelor este destul de variata in functie de tipul bobinei, domeniul de

utilizare, conditiile de constructie, modul de intretinere si exploatare, dar, orientativ rata de

defectare poate fi considerata λ=0,01/1000 h.Cele mai frecvente defectiuni sunt intreruperea

conductorului sau scurtcircuitul intre spire, temperaturi inalte ce conduc la strapungerea termica

a izolatiei, temperaturi prea joase care favorizeaza strapungerea deoarece materialele de etansare

pot crapa si astfel este posibila patrunderea umiditatii.Pentru cresterea sigurantei bobinelor se pot

lua masuri inca din fabriactie din etapa de proiectare, alegand tipul de bobinaj si de izolatie

corespunzator frecventelor si tensiunilor de lucru, tipul de conductor corespunzator puterilor

dezvoltate in circuit.

Circuit oscilant serie

Circuitul scilant serie este un dipol pasiv format ditr-o bobina si un condensator, conectate in

serie.Impedanta acestui circuit depinde mult de frecventa, ceea ce ii confera propietati

selective.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.Ca

urmare,daca circuitul se excita cu un generator ideal de tensiune, curentul din circuit va depinde

mult de frecventa si va atinge maxim pronuntat la freventa de rezonanta, determinand deci o

comportare a circuitului.Daca circuitul s-ar excita cu un generator de curent, 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, in

raport cu rezistenta interna a generatorului. Deci propietatile selective ale circuitului se pierd.

Page 29: l-metru cu pic 16f84 schema programare

Fig.1.2.2

Comportarea circuitului serie propriu-zis

Se cosidera generatorul de tensiune ideal adica Rg=0

Impedanta circuitului serie Zs, are expresia:

Rs=RL (1.2.13) -rezistenta de pierderi serie a circuitului;

Xs=ωL- (1.2.14) -reactanta circuitului serie;

ZS= (1.2.15) -modulul impedantei circuitului serie;

φs=arc tg( ) (1.2.16) -argumentul impedantei circuitului serie.

Expresia curentului I care se stabileste prin circuit este:

Tensiunea UL,UC,UR de la bornele inductantei, condensatorului si rezistorului serie, au expresiile:

UL=jXLI=jωLI (1.2.17)

UC=jXcI=-( )I (1.2.18)

UR=Rs*I (1.2.19)

Rezonanta circuitului serie

Fenomenul de rezonanta se produce la frecventa ω0 la care:

X(ω0)= ω0L- =0 (1.2.20)

Page 30: l-metru cu pic 16f84 schema programare

De unde se poate deduce expresia frecventei de rezonanta, f0, sub forma:

f0= (1.2.21)

Deci rezonanta are loc atunci cand frecventa tensiunii de excitatie, produsa de genaerator,

coincide cu frecventa proprie de oscilatie a circuitului.La rezonanta, impedanta circuitului serie

este minima si pur rezistiva:

Zs(ω0)=Rs (1.2.22)

Iar curentul prin circuit este maxim si in faza cu tensiune la bornele circuitului:

I(ω0)= = (1.2.23)

De asemenea la rezonanta, tensiunile la bornele inductantei si ale condesatorului sunt maxime,

egale, in opozitie de faza si de Q ori mai mari decat tensiunea la bornele circuitului :

= =ω0L = (1.2.24)

Din propietatile circuitului oscilanta serie aratate rezulta si posibiltatile de utilizare a acestuiu

circuit ca circuit selectiv sau ca circuit de rejectie.

Q= = =QL (1.2.25)

Caracteristicile de frecventa normate.Banda de trecere la 3dB.

x= = ( ωL- )=( )( - )=βQ (1.2.26)

Q-factorul de calitate a circuitului la frecventa de rezonanta;

Page 31: l-metru cu pic 16f84 schema programare

Β- escartul de frecventa generalizat

Se observa ca pentru ÐxÐ=1,curentul scade la 0,7 din valoarea de la rezonanta,iar modulul

impedantei creste de 1,41 ori fata de valoarea de la rezonanta.

N1[dB]=10log N2[dB]=20log (1.2.27)

N1[dB]-nivelul in decibeli pentru puteri

N2[dB]-nivelul in decibeli pentru tensiuni, curenti, impedante sau admitante.

P(ω)-puterea la frecventa ω;

P (ω0) -puterea de referinta;

K (ω)-marimea la frecventa ω;

K (ω0)-marimea de referinta;

Bobine de audiofrecventa

    Se utilizeaza pentru filtru de joasa frecventa (filtre de retea, drosele de alimentare etc. ) Au

inductante ce pot ajunge la zeci de Henry. Se realizeaza in general pe miezuri magnetice inchise,

in forma de tole sau oale. Tolele se realizeaza din materiale cu permeabilitate magnetica cat mai

ridicata (otel cu siliciu, permalloy, ferite, etc.). O particularitate a acestor bobine o constituie

dependenta inductantei fata de nivelul tensiunii alternative si continue aplicate, precum si fata de

frecventa. Bobinajele se executa pe carcase avand forma miezului, folosind conductor de cupru

emailat cu diametru corespunzator curentului care le strabate. In cazul cand sunt strabatute si de

o componenta de c.c. se intrerupe circuitul magnetic printr-un intrefier, care imbunatateste

comportarea miezului, dar reduce permeabilitatea.

Banda de trecere la 3dB

Page 32: l-metru cu pic 16f84 schema programare

Deoarece, asa cum rezulta din relatia pentru ÐxÐ=1 curentul prin circuit se reduce la 1/√2 din

valoarea sa maxima, rezulta ca la frecventele la care ÐxÐ=1, curentul se reduce cu 3dB fata de

valoarea sa maxima posibila.Prin definitie, diferenta acestor frecvente corespunzatoare lui

ÐxÐ=1 se numeste banda de trecere a circuitului la 3dB.Marimea acestei benzi caracterizeaza

propietatile selective ale circutului.Cu cat aceasta banda este mai ingusta,cu atat circuitul este

mai selectiv.

Circuitul oscilant derivatie

Circuitul oscilant derivatie este un dipol pasiv format din doua componente pasive reale,o bobina

si un condensator,conectate in derivatie.Excitarea sa trebuie facuta cu un generator cu rezistenta

interna mare, deoarece un generator cu rezistenta mica va mentine practic constanta tensiunea la

bornele circuitului, indiferent de frecventa, astfel ca propietatile selective ale circuitului se pierd.

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.Conductanta de pierderi

derivatie

Fig.1.2.3

Gd=Gg+GL+GC (1.2.28)

Gg-conductanta interna derivatie a generatorului

GL-conductanta de pierderi derivatie a bobinei

GC-conductanta de pierderi derivatie a condensatorului.

Page 33: l-metru cu pic 16f84 schema programare

Pentru Q 10se poate arata GL= (1.2.29)

Q0- 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.30)

f0= (1.2.31)

La rezonanta, admitanta circuitului derivatie este minima(deci impedanta maxima) si are

expresia:

Yd(ω0)=Gd (conductanta pura) (1.2.32)

Iar tensiunea la bornele circuitului este maxima si in faza cu curentul de alimentare I:

U(ω0)= = (1.2.33)

La rezonanta circuitului derivatie, curentii prin inductanta si capacitate sunt maximi, egali in

modul, in opozitie de faza si de Q ori mai mari decat curentul total debitat de generator, I:

IL(ω0)=Ic(ω0)= ω0CU=QI (1.2.34)

Q= = =ω0Crd= (1.2.35)

Page 34: l-metru cu pic 16f84 schema programare

Rd= -rezistenta de pierderi derivatie a circuitului (1.2.36)

Q= -factor de calitate (1.2.37)

Caracteristicile de frecventa normate:

x= =( )( - )=βQ (1.2.38)

1.3 Afisaj LCD

Multe dispozitive cu microcontroler folosesc LCD-uri inteligente pentru a afisa

informatia vizuala. Urmatorul material se ocupa de conectarea unui afisaj LCD Hitachi la un

microcontroler PIC. Afisajele LCD proiectate cu HD44780, modulul pentru LCD fabricat de

Hitachi, nu sunt scumpe si sunt usor de folosit, si chiar posibil sa produca verificarea datelor

afisate folosind cei 8x80 pixeli ai afisajului. Afisajele LCD Hitachi contin un set de caractere

ASCII plus simboluri japoneze, grecesti si matematice.

16x2 LCD Hitachi HD44780

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. 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. Putem comunica cu afisajul prin intermediul unui bus de

date pe 8 biti sau de 4 biti. Pentru un bus de 8 biti, afisajul are nevoie de o tensiune de alimentare

de +5v si 11 linii I/O. Pentru un bus de 4 biti sunt necesare doar liniile de alimentare si 7 linii.

Cand afisajul LCD nu este pornit liniile de date sunt TRI-STATE, ceea ce inseamna ca ele sunt

Page 35: l-metru cu pic 16f84 schema programare

in stare de inalta impedanta (ca si cum ar fi deconectate) si astfel nu interfereaza cu

functionabilitatea microcontrolerului cand afisajul nu este adresat. LCDul necesita de altfel 3

linii de control de la microcontroler.

Linia Enable (E) permite accesul la afisaj prin intermediul liniilor R/W si RS. Cand aceasta linie

este LOW, LCDul este dezactivat si ignora semnalele de la R/W si RS. Cand linia (E) este

HIGH, LCDul verifica starea celor doua linii de control si raspunde corespunzator.

Linia Read/Write (R/W) stabileste directia datelor dintre LCD si microcontroler. Cand linia este

LOW, datele sunt scrise in LCD. Cand este HIGH, datele sunt citite de la LCD.

Cu ajutorul liniei Register select (RS), LCD interpreteaza tipul datelor de pe liniile de date.

Cand este LOW, o instructiune este scrisa in LCD. Cand este HIGH, un caracter este scris in

LCD.

Starea logica a liniilor de control:

E: - 0  Accesul la LCD dezactivat;

- 1  Accesul la LCD activate;

R/W: - 0  Scrie date in LCD;

        - 1 Citeste date din LCD;

RS: - 0 Instructiuni;

- 1 Caracter;

Scrierea datelor in LCD se realizeaza in cativa pasi:

- se seteaza bitul R/W LOW;

- se seteaza bitul RS in 0 sau 1 logic (instructiune sau caracter);

- se trimit datele catre liniile de date (daca se executa o scriere);

- se seteaza linia E HIGH;

- se citesc datele de la liniile de date (daca se executa o citire).

Citirea datelor de la LCD se realizeaza similar, cu deosebirea ca linia de control R/W trebuie sa

fie HIGH. Cand trimitem un HIGH catre LCD, el se va reseta si va accepta instructiuni.

Instructiunile tipice care sunt transmise catre un afisaj LCD dupa reset sunt: pornirea afisajului,

activarea cursorului si scrierea caracterelor de la stanga spre dreapta. In momentul in care un

Page 36: l-metru cu pic 16f84 schema programare

LCD este initializat, el este pregatit sa primeasca date sau instructiuni. Daca receptioneaza un

caracter, el il va afisa si va muta cursorul un spatiu la dreapta. Cursorul marcheaza locatia

urmatoare unde un caracter va fi afisat. Cand dorim sa scriem un sir de caractere, mai intai

trebuie sa setam adresa de start, si apoi sa trimitem cate un caracter pe rand. Caracterele care pot

fi afisate pe ecran sunt memorate in memoria video DD RAM (Data Display RAM). Capacitatea

memoriei DD RAM este de 80 bytes.

Afisajul LCD mai contine 64 bytes CG RAM ( Character Generator RAM). Aceasta memorie

este rezervata pentru caracterele definite de utilizator. Datele din CG RAM sunt reprezentate sub

forma de caractere bitmap de 8 biti. Fiecare caracter ocupa maxim 8 bytes in CG RAM, astfel

numarul total de caractere pe care un utilizator poate sa le defineasca este 8. Pentru a afisa

caracterul bitmap pe LCD, trebuie setata adresa CG RAM la punctul de start (de obicei 0) si apoi

sa fie scrise datele in afisaj. Definirea unui caracter ‚special’ este exemplificata in figura.

Fig.1.3.1

Inainte de a accesa DD RAM, dupa definirea unui caracter special, programul trebuie sa seteze

adresa in DD RAM. Orice scriere si citire a datelor din memoria LCD este realizata de la ultima

adresa care a fost setata, folosind instructiunea set-adress. Odata ce adresa DD RAM este setata,

un caracter nou va fi afisat in locul potrivit pe ecran. Pana acum am discutat operatia de scriere si

citire a memoriei unui LCD ca si cum ar fi o memorie obisnuita. Acest lucru nu este adevarat.

Controlerul LCD are nevoie de 40 pana la 120 microsecunde (us) pentru scriere si citire. Alte

operatii pot dura pana la 5 ms. In acest timp microcontrolerul nu poate accesa LCDul, astfel un

program trebuie sa stie cand un LCD este ocupat. Putem rezolva aceasta in doua metode.

Page 37: l-metru cu pic 16f84 schema programare

Fig.1.3.2

O metoda este verificarea bitului BUSY de pe linia de date D7. Aceasta nu este cea mai buna

metoda pentru ca LCDul se poate bloca si programul va sta intr-o bucla infinita verificand bitul

BUSY. O alta metoda este introducerea unei intarzieri in program. Intarzierea trebuie sa fie

destul de lunga pentru ca LCDul sa termine operatia in desfasurare. Instructiunile pentru scriere

si citire cu memoria LCDului sunt afisate mai sus. La inceput am mentionat ca avem nevoie de

11 linii I/O pentru a comunica cu un LCD. Oricum, putem comunica cu un LCD printr-un bus de

4 linii. Putem reduce numarul total de linii de comunicatie la 7. Schema pentru conectarea printr-

un bus de 4 biti este in imaginea de mai jos. In acest exemplu folosim un afisaj LCD cu 2x16

caractere, denumit LM16x212 fabricat de producatorul japonez Sharp. Mesajul ‚character’ este

scris pe prima linie urmat de doua caractere speciale ‚~’ si ‚}’. Pe a doua linie este scris cuvantul

‚mikroElektronika’.

Page 38: l-metru cu pic 16f84 schema programare

Fig.1.3.3 Conectarea unui afisaj la un microcontroler

1.4 Metode de programare a microcontrolerului

Abilitatea de a comunica este de mare importanta in orice domeniu. Totusi, este posibila numai

daca amandoi partenerii de comunicare cunosc acelasi limbaj, sau urmaresc aceleasi reguli in

timpul comunicarii. Folosind aceste principii ca un punct de plecare, 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'. Titlul insusi nu are un inteles

deosebit, si este analog numelor altor limbaje, de ex. engleza si franceza. Mai precis, 'limbajul de

asamblare' este doar o solutie trecatoare. Programele scrise in limbaj de asamblare trebuie

traduse intr-un 'limbaj de zero-uri si unu-uri' pentru ca un microcontroler sa-l inteleaga.

'Limbajul de asamblare' si 'assembler-ul' sau asamblorul sunt doua notiuni diferite. Primul

reprezinta un set de reguli folosite in scrierea unui program pentru un microcontroler, iar celalalt

este un program in computerul personal care traduce limbajul de asamblare intr-un limbaj de

zero-uri si unu-uri. Un program ce este tradus in 'zero-uri' si 'unu-uri' este numit 'limbaj masina'.

Page 39: l-metru cu pic 16f84 schema programare

Fig.1.3.4

Fizic, 'Program' reprezinta un fisier pe discul computerului (sau in memorie daca este citit intr-

un microcontroler), si este scris conform cu regulile de asamblare sau ale altui limbaj pentru

programarea microcontrolerului.  Omul poate intelege pentru ca este constituit din semne si

cuvinte ale alfabetului. Cand se scrie un program, trebuie urmarite unele reguli pentru a se obtine

un  efect dorit. 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.

 Sa luam de exemplu instructiunea 'RETURN' pe care microcontrolerul o foloseste pentru a se

intoarce dintr-un sub-program.

Cand asamblorul il traduce, obtinem o serie de zero-uri si unu-uri pe care microcontroleul stie

cum sa-l interpreteze.

Exemplu: RETURN 00 0000 0000 1000

Similar propozitiei de mai sus, fiecare instructiune de asamblare este interpretata ca si

corespunzand unei serii de zero-uri si unu-uri.

Locul unde aceasta traducere a limbajului de asamblare se gaseste , se numeste un fisier de 

'executie'. Vom intalni adesea numele de fisier 'HEX'. Acest nume vine de la o reprezentare

Page 40: l-metru cu pic 16f84 schema programare

hexazecimala a acelui fisier, ca si de la apendicele 'hex' din titlu, de ex. 'run through.hex'. Odata

ce este generat, fisierul de executie este citit in microcontroler printr-un programator.

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, sau sectiunea unui program unde micro-ul poate sari – sau chiar inceputul unui set de

linii a unui program. Poate fi folosit de asemenea pentru a executa ramificare de program (ca

Goto…….) si programul poate chiar avea o conditie ce trebuie indeplinita pentru ca 

instructiunea Goto sa fie executata. Este important pentru un label de a incepe cu o litera a

alfabetului sau cu o subliniere '_'. Lungimea label-ului poate fi de pana la 32 caractere. Este de

asemenea important ca un label sa inceapa de la primul rand.

Fig.1.3.5

Page 41: l-metru cu pic 16f84 schema programare

Instructiuni

Instructiunile sunt deja definite prin folosirea unui microcontroler specific, asa ca ne ramane doar

sa urmam instructiunile pentru folosirea lor in limbajul de asamblare. Modul in care scriem o

instructiune mai este numit 'sintaxa' instructiunii. In exemplul urmator putem recunoaste o

greseala in scriere pentru ca instructiunile movlp si goto nu exista pentru microcontrolerul

PIC16F84.

Operanzi

Operanzii sunt elemente ale instructiunii pentru instructiunea ce este executata. Ei sunt de obicei

registri sau variabile sau constante. Constantele sunt numite 'literal-e'. Cuvantul literal

inseamna 'numar'.

Comentarii

Comentariul este o serie de cuvinte pe care programatorul le scrie pentru a face programul mai

clar si mai usor de citit. Se plaseaza dupa o instructiune , si trebuie sa inceapa cu punct si

virgula';'.

Page 42: l-metru cu pic 16f84 schema programare

Directive

O directiva este similara unei instructiuni, dar spre deosebire de o instructiune este independenta

de modelul microcontrolerului, si reprezinta o caracteristica a limbajului de asamblare insusi.

Directivelor le sunt date uzual intelesuri de scop prin variabile si registri. De exemplu, LEVEL

poate fi o desemnatie pentru o variabila in memoria RAM la adresa 0Dh. In felul acesta,

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.

Cap. 2 Partea tehnica

2.1 Schema bloc

Schema bloc a L – metrului este formata din :

Fig. 2.1.1 Schema bloc a L-metrului

Principiul de masurare este prezentat in figura 2.2.2.

Page 43: l-metru cu pic 16f84 schema programare

Acest bloc este format din :

-2 oscialtoare OSC1,OSC2 care au frecventa de oscilatie dependenta de inductanta

bobinei masurata dupa relatia L= (2.1.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. 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

- un multiplexor care selecteaza in functie de semnalul RA1 ,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= . Si comada afisajul LCD in vederea afisarii

valorii L.

-un comutator K1 care permite schimabarea gamei de masura.LED-ul indicand in ce

gama ne aflam.Daca LED-ul este aprins ne aflam in gama 100nH < L < 5 μH iar daca Led-ul

este stins se masoara in gama

2.2 Blocul oscilator

Blocul oscilator de joasa frecventa LM339:

Page 44: l-metru cu pic 16f84 schema programare

Fig.2.2.1

Lx,C1 impune frecventa de oscilatie a oscilatorului.

fx= * (2.2.1)

Rx-rezistenta serie a bobinei

Experimental s-a constat ca oscilatorul functioneaza stabil daca Rx<5.

Condensatorul C2 este un condensator de cuplaj al circuitului oscilant derivatie cu etajul

comparator.Iar R1 si R2 se aleg astfel incat intrarea neinversoare a comaparatorului sa fie

polarizata static la o valoare de .

Valoarea lor trebuie sa suficient de mare pentru a nu amortiza curentul acordat derivatiei.

Din catalog R1-R2=100K

Page 45: l-metru cu pic 16f84 schema programare

Pentru a asigura un coeficient de variatie pozitiva mare adica un oscilator static alegem si

R3=100K

Iesirea comparatorului este de tip open colector .

R5 se alege astfel incat curentul pe iesire sa fie mic.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.

Blocul oscilator de inalta frecventa cu FET

Page 46: l-metru cu pic 16f84 schema programare

Fig.2.2.2

Schema bloc a unui oscilator este

Fig.2.2.3

Oscialtorul este un amplificator cu reactie pozitiva.

Conditia de oscilatie este x =1 (2.2.2)

Page 47: l-metru cu pic 16f84 schema programare

1) conditia de amplitudine: x =1 (2.2.3)

2)conditia de faza: (2.2.4)

In schema amplificatorul este un etaj de amplificare cu transistor FET cu sarcina

distributive.Reactia pozitiva este asigurata cu un amplificator cu inversor CMOS.Amplificatorul

ce introduce un defazaj de iar iar inversoru in defazaj de deci de 2 si se indeplineste

conditia de faza.

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.5KΏ

Fig.2.2.4 caracteristica de transfer a puntii CMOS

Polarizarea intrarii puntii CMOS aproape de VT =2.5V se realizeaza si prin reglajul

rezistentei din schema FET.

Tranzistorul FET trebuie polarizat in regiunea de saturatie.

Caracteristicile statice FET-ului sunt:

Page 48: l-metru cu pic 16f84 schema programare

Fig.2.2.5 Fig.2.2.6

Fig.2.2.7

Id=ISS(1- )2 0<VGS<VT (2.2.5)

VGS=-IdxP2 (2.2.6)

Alegand un transistor FET BF256 cu VT=--3V si un curent Id=2mA se obtine P2=500 ohmi.

Page 49: l-metru cu pic 16f84 schema programare

Si P1=4,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,C5 si oscilatorul sa functioneze

stabil.

Limitarea amplitudinii se face prin folosirea caracteristicii neliniare a tranzistorului cu efect de

camp.

Rezultatele de simulare a acestei scheme in ORCAD sunt prezentate in fig..

Page 50: l-metru cu pic 16f84 schema programare

Fig. 2.2.8 Rezultate de simulare pentru oscilatorul cu FET

2.3 Divizoarele de frecventa

Divizoarele de frecventa sunt realizate cu numaratoarele IC2, IC6 respectiv SN74LS393 .

Schema interna a circuitului SN74LS393 este prezentata mai jos:

Page 51: l-metru cu pic 16f84 schema programare
Page 52: l-metru cu pic 16f84 schema programare

Fig.2.2.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.Durata unei instructiuni este de

0,5μs.Frecventa oscilatorului cu cuart care proiecteaza microcontrolerul este de 8Mhz . Error:

Reference source not found

Page 53: l-metru cu pic 16f84 schema programare

Calculul frecventei de oscilatie

1.Cu oscilatorul de joasa frecventa(LM339)

f= ; Kdiv=2 (2.2.7)

2.Cu oscilatorul de inalta frecventa(FET)

f= ; Kdiv=256 (2.2.8)

2.4 Multiplexorul

Un dispozitiv care permite transferul unor fluxuri multiple de date printr-un mediu comun.

Fig.2.4.1

Error: Reference source not found (pin4)

S2-semnalul generat de IC6 (pin8)

Tabelul de adevar asociat multiplexorului :

S1 S2 RA1 RB0

Page 54: l-metru cu pic 16f84 schema programare

0 X 0 0 Selecteaza

semnalul S11 X 0 1

X 0 1 0 Selecteaza

semnalul S2X 1 1 1

S1-semnalul generat de oscilatorul de joasa frecventa

S2-semnalul generat de oscilatorul de inalta frecventa

RA1

S1 S2

0 1

00 0 0

01 0 1

11 1 1

10 1 0

RB0=S1* +S2*RA1

Se implementeaza cu circuite SI-NU cu 2 intrari :

RB0=

RB0=

2.5 PIC 16F84

Functiile microcontrolerului

Initializarea si comanda a afisajul LCD 2X16 caractere;

Selecteaza gama de masura in functie de pozitia comutatorului;

Page 55: l-metru cu pic 16f84 schema programare

K1 apasat:

RA0=0 -selecteaza gama de masura gama1:L = 100nH - 5μH;

K1 neapasat:

RA0=1 -se selecteaza gama de masura gama2:L=5μH - 500mH;

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;

Efectueaza calculele matematice in vederea obtinerii valorii inductantei si frecventei

semnalului generat de oscillator;

Comanda afisajul LCD in vederea afisarii corecte a rezultatului.

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….

Page 56: l-metru cu pic 16f84 schema programare

Fig.2.5.1

Calculul inductantei

f0= * = (2.5.1)

daca RL <<1;

RL-rezistenta bobinei;

-Factorul de calitate al bobinei la freecventa de rezonanta

Q= ; ω0= (2.5.2)

Impedanta la frecventa de rezonanta

Page 57: l-metru cu pic 16f84 schema programare

Z0= = =Q*L* ω0= (2.5.3)

Microcontrolerul calculeaza frecventa in 2 moduri in functie de oscilator.

1.Pentru oscilatorul de joasa frecventa(LM339)

Tx=2π → Lx= = *( )2 (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,4934=2,00239493*105(F-1)

Lx=K ( )2=K*( )2=K*10-12( )2 (2.5.5)

Lx=2*105*10-12*( )2; (2.5.6) Lx= *10-7[H](2.5.7)

In registrele TMRO, NUMB; NUMB2 se gaseste numarul ( )in forma binara.

Kdiv=4 deoarece este dat de divizorul de frecventa

Microcontrolerul calculeaza iar de coeficientul 10-7 se tine cont cand face afisarea.

Page 58: l-metru cu pic 16f84 schema programare

2.Pentru oscilatorul de joasa frecventa

Lx= *( )2= (2.5.8)

TRef=1μs

Kdiv=256 deoarece este dat de divizorul cu 256

Lx=m*10-12*n2 (2.5.9)

Se alege condensatorul astfel incat m sa fie numar intreg.

-pentru m=100 se determina C= (2.5.9)

C=3,865*10-9F=3.865 nF

Lx=m*10-2*n2=10-10*n2 (2.5.10)

Lx=10-10*n2 ; (2.5.11)

Microcontrolerul calculeaza n2 iar de coeficientul 10-10 se tine cont cand se face afisarea.

2.6 Initializare LCD

Schema logica a subrutinei de initializare a LCD-ului este

Page 59: l-metru cu pic 16f84 schema programare
Page 60: l-metru cu pic 16f84 schema programare

Fig.2.6.1

LCD D777D6666D5 D4 En R/W RSP2 15 14 13 12 11 10 9 Wait_15ms

0 0 1 1 0 0 0 0x30000 0 1 1 0 0 0 Enable0 0 0 0 0 0 0

wait wait 5ms0 0 1 1 0 0 0 0x300 0 1 1 1 0 0 Enable

wait0 0 1 1 0 0 0

wait0 0 1 1 0 0 0 0x300 0 1 1 1 0 0 Enable

wait

Page 61: l-metru cu pic 16f84 schema programare

0 0 1 1 0 0 0wait

0 0 1 0 0 0 0 0x200 0 1 0 1 0 0 Enable

wait0 0 1 0 0 0 0

wait0 0 1 0 0 0 0 0x200 0 1 0 1 0 0 Enable

wait0 0 1 0 0 0 0

wait1 1 0 0 0 0 0 0xC0

wait1 1 0 0 0 0 0 Enable1 1 0 0 1 0 0

wait1 1 0 0 0 0 0

wait0 0 0 0 0 0 0 0x000 0 0 0 1 0 0 Enable

wait0 0 0 0 0 0 0

wait1 1 0 1 0 0 0 0xD01 1 0 1 1 0 0 Enable

wait1 1 0 1 0 0 00 0 0 0 0 0 0 0x000 0 0 0 1 0 0 Enable

wait0 0 0 0 0 0 0

wait0 0 0 1 0 0 0 0x400 0 0 1 1 0 0 Enable

wait0 0 0 1 0 0 0

wait0 0 0 0 0 0 0 0x000 0 0 0 1 0 0 Enable

wait0 0 0 0 0 0 0

wait0 1 1 0 0 0 0 0X600 1 1 0 1 0 0 Enable

Page 62: l-metru cu pic 16f84 schema programare

wait0 1 1 0 0 0 0

wait

Fig.2.6.2

2.7 Schema logica a programului

Fig.2.7.1

Organigrama Programului PIC

Page 63: l-metru cu pic 16f84 schema programare
Page 64: l-metru cu pic 16f84 schema programare

Error: Reference source not found

Page 65: l-metru cu pic 16f84 schema programare
Page 66: l-metru cu pic 16f84 schema programare

Fig.2.7.2

Page 67: l-metru cu pic 16f84 schema programare

Subrutina de calcul a frecventei

Page 68: l-metru cu pic 16f84 schema programare

2.8 Sursa de alimentare

Schema electrica a sursei de alimentare

Pentru calculul transformatorului de retea se porneste de la marimile electrice,care se presupun

cunoscute:

Up=220V

Page 69: l-metru cu pic 16f84 schema programare

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.85

PP=10.6VA

Curentul din primar:

IP=PP/UP

IP=10.6/220

IP=50mA

Sectiunea miezului transformatorului este

S2=1.22* PP

S2=1.44*10.6

S2=4cm2

Se alege tipul de tole determinand parametrul a:

a2=4.72*S

Page 70: l-metru cu pic 16f84 schema programare

a2=22.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.24sp/V

Numarul de spire al infasurarilor transformatorului:

NP= n0*Up NP=2473sp

NS= n0*US NS=102sp

Diametrul conductoarelor transformatorului :

d2p=0.712*IP d2

p=0.5*0.05 dp=0.15mm

d2s=0.712*IS d2

S=0.5*1 dS=0.7mm

Deci primarul va avea 2473 spire cu sarma de Cu de 0.15mm,iar secundarul va avea 102 spire cu

sarma de Cu de 0.7mm,bobinajul realizaduse pe o carcasa cu sectiunea de 4 cm2.

Redresorul si filtrul

Page 71: l-metru cu pic 16f84 schema programare

Redresarea tensiunii alternative data de transformator este facuta cu ajutorul puntii redresoare

PR.Filtrul capacitiv realizat cu condensatorul C1,realizeaza aplatizarea riplului dat de PR.Fiultrul

de C2,C3 si R1 este necesar pentru stabilirea functionarii circuitului LM7805.

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.Este mai

probabil ca un om care respire aer curat va trai mai mult decat un om care locuieste intr-un

mediu poluat.Pentru o functionare corecta a oricarui microcontroller este necesar sa oferim o

sursa stabile de alimentare.Conform specificatiilor tehnice oferite de producatorul

microcontrolerului PIC,tensiune de alimentare ar trebui sa se incadreze intre 2V si 6V pentru

toate versiunile.Cea mai simpla solutie este folosirea stabilizatorului de tensiune LM7805 care

ofera tensiunea stabile de +5V la iesire.

A1 Schema electronica a L-metrului

Page 72: l-metru cu pic 16f84 schema programare

A.2.Lista de componente

Page 73: l-metru cu pic 16f84 schema programare

C1 500mF

C2,C3 68μF

R1,R2 100K

R3 100K

R4 47K

LM339

C6 100nF

SN74LS393

R5 1,7K

R6 2,2M

C4 330pF

C5 3,8nF

R7 1M

P1 4,7K

BF256

P2 500

SN74HC14

C7 100nF

R9 1K

LED

R8 1K

R10 10K

C8 100nF

Page 74: l-metru cu pic 16f84 schema programare

C9 220nF

P4 5K

R12 110

P3 1K

ULN7805

LCD 2X16 Display

A.3 Cablajul

Page 75: l-metru cu pic 16f84 schema programare

A.4.Listingul programului in limbaj de asamblare

list p=16F84A

radix hex

PORTA equ 0x05

Page 76: l-metru cu pic 16f84 schema programare

PORTB equ 0x06

TRISA equ 0x85

TRISB equ 0x86

TMR0 equ 0x01

STATUS equ 0x03

OPTIONS equ 0x81

INTCON equ 0x0B

W_temp equ 0x17

STATUS_temp equ 0x18

COUNT1 equ 0x1A

COUNT2 equ 0x1B

LCD equ 0x1C

COUNT equ 0x0C

INDICE equ 0x19

NUMB1 equ 0x20

NUMB2 equ 0x21

NUMB3 equ 0x22

NUMB4 equ 0x23

NUMZ1 equ 0x24

NUMZ2 equ 0x25

NUMZ3 equ 0x26

NUMZ4 equ 0x27

CARRY equ 0x28

Page 77: l-metru cu pic 16f84 schema programare

CARRY1 equ 0x29

CARRY2 equ 0x2A

CARRY3 equ 0x2B

CARRY4 equ 0x2C

NRBITI equ 0x2D

CARRY12 equ 0x2E

CARRY13 equ 0x2F

CARRY14 equ 0x30

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 0x39

;sign equ 0x3A

#define RS PORTB,1

#define RW PORTB,2

#define EN PORTB,3

org 0x000

goto main

Page 78: l-metru cu pic 16f84 schema programare

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

;--

Page 79: l-metru cu pic 16f84 schema programare

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

Page 80: l-metru cu pic 16f84 schema programare

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

Page 81: l-metru cu pic 16f84 schema programare

;call afis_nibble_sup

;movf NUMB3,0

;call afis_nibble_inf

;movf NUMB2,0

;call afis_nibble_sup

;movf NUMB2,0

;call afis_nibble_inf

;movf NUMB1,0

;call afis_nibble_sup

;movf NUMB1,0

;call afis_nibble_inf

;call delay_1s

;call delay_1s

;call delay_1s

;call delay_1s

;call delay_1s

;call delay_1s

;call delay_1s

;call delay_1s

;clrf NUMB4

;clrf NUMB3

; calculeaza NxN

movf NUMB2,0

Page 82: l-metru cu pic 16f84 schema programare

movwf ACCbHI

movf NUMB1,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

call afis_nibble_sup

movf NUMZ4,0

call afis_nibble_inf

movf NUMZ3,0

call afis_nibble_sup

movf NUMZ3,0

call afis_nibble_inf

movf NUMZ2,0

call afis_nibble_sup

movf NUMZ2,0

call afis_nibble_inf

movf NUMZ1,0

Page 83: l-metru cu pic 16f84 schema programare

call afis_nibble_sup

movf NUMZ1,0

call afis_nibble_inf

call delay_1s

call delay_1s

call delay_1s

call delay_1s

;call delay_1s

;call delay_1s

;call delay_1s

;call delay_1s

;goto loop

; afiseaza rezultatul

call stergere

call poz_cursor

movlw 'L'

call afisare

movlw '='

call afisare

movf NUMZ4,0

bcf STATUS,2

andlw 0xF0

btfss STATUS,2

Page 84: l-metru cu pic 16f84 schema programare

goto eror

movf NUMZ4,0

bcf STATUS,2

andlw 0x0F

btfss STATUS,2

;goto teo1

goto sute_mH

movf NUMZ3,0

bcf STATUS,2

andlw 0xF0

btfss STATUS,2

;goto teo2

goto zeci_mH

movf NUMZ3,0

bcf STATUS,2

andlw 0x0F

btfss STATUS,2

;goto teo3

goto unit_mH

movf NUMZ2,0

bcf STATUS,2

andlw 0xF0

btfss STATUS,2

Page 85: l-metru cu pic 16f84 schema programare

;goto teo3

goto sute_uH

movf NUMZ2,0

bcf STATUS,2

andlw 0x0F

btfss STATUS,2

;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

Page 86: l-metru cu pic 16f84 schema programare

goto teo

sute_mH

movf NUMZ4,0

call afis_nibble_inf

movf NUMZ3,0

call afis_nibble_sup

movf NUMZ3,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

zeci_mH

movf NUMZ3,0

call afis_nibble_sup

movf NUMZ3,0

call afis_nibble_inf

movlw '.'

Page 87: l-metru cu pic 16f84 schema programare

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_inf

movlw '.'

call afisare

movf NUMZ2,0

call afis_nibble_sup

movf NUMZ2,0

call afis_nibble_inf

movlw 'm'

call afisare

movlw 'H'

call afisare

goto teo

sute_uH

Page 88: l-metru cu pic 16f84 schema programare

movf NUMZ2,0

call afis_nibble_sup

movf NUMZ2,0

call afis_nibble_inf

movf NUMZ1,0

call afis_nibble_sup

movlw '.'

call afisare

movf NUMZ1,0

call afis_nibble_inf

movlw 'u'

call afisare

movlw 'H'

call afisare

goto teo

zeci_uH

movf NUMZ2,0

call afis_nibble_inf

movf NUMZ1,0

call afis_nibble_sup

movlw '.'

call afisare

movf NUMZ1,0

Page 89: l-metru cu pic 16f84 schema programare

call afis_nibble_inf

movlw 'u'

call afisare

movlw 'H'

call afisare

goto teo

unit_uH

movf NUMZ1,0

call afis_nibble_sup

movlw '.'

call afisare

movf NUMZ1,0

call afis_nibble_inf

movlw 'u'

call afisare

movlw 'H'

call afisare

teo call delay_1s

call delay_1s

call delay_1s

;call delay_1s

;call delay_1s

;call delay_1s

Page 90: l-metru cu pic 16f84 schema programare

call sterge_reg

call stergere

call scrie_mesaj

bcf INDICE,0

;-- valideaza intreruperile

clrf TMR0

bcf INTCON,1

bcf INTCON,5

bsf INTCON,4

;bsf INTCON,7

retfie

;goto loop

ISR_tmr ;bsf INTCON,7

incf NUMB2,1

btfss STATUS,2

goto iesire

;bcf STATUS,2

incf NUMB3,1

btfss STATUS,2

goto iesire

;bcf STATUS,2

incf NUMB4,1

;btfss STATUS,2

Page 91: l-metru cu pic 16f84 schema programare

;goto iesire

;incf NUM5

iesire bcf INTCON,2

bsf INTCON,5

;call POP

;bsf PORTA,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

Page 92: l-metru cu pic 16f84 schema programare

call delay_15m

;8Meg

;call delay_15m

return

D_add

bcf STATUS,0

movf ACCaLO,0

addwf ACCbLO,1

btfsc STATUS,0

incf ACCbHI,1

btfsc STATUS,0

bsf STATUS,0

movf ACCaHI,0

addwf ACCbHI,1

btfsc STATUS,0

bsf STATUS,0

retlw 0

multiply

movf NUMB2,0

movwf ACCaHI

movf NUMB1,0

movwf ACCaLO

call setup

Page 93: l-metru cu pic 16f84 schema programare

mloop rrf ACCdHI,1

rrf ACCdLO,1

btfsc STATUS,0

call D_add

rrf ACCbHI,1

rrf ACCbLO,1

rrf ACCcHI,1

rrf ACCcLO,1

decfsz temp,1

goto mloop

movf ACCbHI,0

movwf NUMB4

movf ACCbLO,0

movwf NUMB3

movf ACCcHI,0

movwf NUMB2

movf ACCcLO,0

movwf NUMB1

return

setup

movlw .16

movwf temp

movf ACCbHI,0

Page 94: l-metru cu pic 16f84 schema programare

movwf ACCdHI

movf ACCbLO,0

movwf ACCdLO

clrf ACCbHI

clrf ACCbLO

retlw 0

inm_cu_doi2; impartirea cu doi a unui numar in baza 2

bcf STATUS,0

rlf NUMB1,1

rlf NUMB2,1

rlf NUMB3,1

rlf NUMB4,1

return

div_cu_doi2; impartirea cu doi a unui numar in baza 2

bcf STATUS,0

rrf NUMB4,1

rrf NUMB3,1

rrf NUMB2,1

rrf NUMB1,1

return

init_lcd

call delay_1s

bcf RS

Page 95: l-metru cu pic 16f84 schema programare

bcf RW

movlw 0x30

movwf PORTB

call enable

call delay_15m

;8Meg

;call delay_125m

call enable

;call delay_125m

call delay_1.5m

call enable;

movlw 0x20

movwf PORTB

call enable

call enable;

bcf RS

bcf RW

movlw 0xC0

movwf PORTB

call enable

movlw 0x00

movwf PORTB

call enable

Page 96: l-metru cu pic 16f84 schema programare

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;

bcf RS

bcf RW

movlw 0xF0

Page 97: l-metru cu pic 16f84 schema programare

movwf PORTB

call enable

call delay_15m

;8Meg

;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 ' '

Page 98: l-metru cu pic 16f84 schema programare

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

Page 99: l-metru cu pic 16f84 schema programare

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

Page 100: l-metru cu pic 16f84 schema programare

call delay_15m

;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

;scrie M

bcf RS

bcf RW

movlw 0x00

movwf PORTB

call enable

movlw 0x10

movwf PORTB

call enable

Page 101: l-metru cu pic 16f84 schema programare

call delay_15m

;8Meg

;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'

Page 102: l-metru cu pic 16f84 schema programare

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'

Page 103: l-metru cu pic 16f84 schema programare

call afisare

movlw 't'

call afisare

movlw 'a'

call afisare

return

;goto main

afisare

movwf LCD

movlw 0xF0

andwf LCD,0

addlw 0x02

movwf PORTB

call enable

swapf LCD,1

movlw 0xF0

andwf LCD,0

addlw 0x02

movwf PORTB

call enable

call delay_15m

;8Meg

;call delay_15m

Page 104: l-metru cu pic 16f84 schema programare

return

afis_nibble_inf

;movf NUMB1,0

movwf LCD

movlw 0x0F

andwf LCD,1

movlw 0x30

addwf LCD,0

call afisare

return

afis_nibble_sup

movwf LCD

swapf LCD,1

movlw 0x0F

andwf LCD,1

movlw 0x30

addwf LCD,0

call afisare

return

enable

bsf EN

bcf EN

nop

Page 105: l-metru cu pic 16f84 schema programare

nop

; nop

; nop

; nop

; nop

;-- 8Mhz

call delay_1125

nop

;nop

; nop

; nop

; nop

; nop

;nop

;nop

; nop

; nop

; nop

; nop

return

delay_15m; nu realizeaza i intarziere de 15200us

movlw 0x04

movwf COUNT

Page 106: l-metru cu pic 16f84 schema programare

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

Page 107: l-metru cu pic 16f84 schema programare

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

Page 108: l-metru cu pic 16f84 schema programare

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

Page 109: l-metru cu pic 16f84 schema programare

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

rlf NUMB1,1

rlf NUMB2,1

rlf NUMB3,1

rlf NUMB4,1

movf STATUS,0

movwf CARRY

movlw 0x01

andwf CARRY

return

bcd_ori_doi;inmultirea cu 2 a unui numar de la 09

bcf STATUS,0

bcf STATUS,1

Page 110: l-metru cu pic 16f84 schema programare

clrf CARRY1

clrf CARRY12

clrf CARRY13

clrf CARRY14

clrf CARRY2

clrf CARRY3

clrf CARRY4

movf NUMZ1,0

addwf NUMZ1,1

btfss STATUS,0

goto doi1

movlw 0x01

movwf CARRY1

doi1 btfss STATUS,1

goto doi2

bcf STATUS,0

movlw 0x06

addwf NUMZ1,1

goto doi3

doi2 bcf STATUS,0

bcf STATUS,1

movlw 0x0A

subwf NUMZ1,0

Page 111: l-metru cu pic 16f84 schema programare

btfss STATUS,1

goto doi3

;goto doi52

movlw 0x06

addwf NUMZ1,1

doi3 btfss CARRY1,0

goto doi5

doi6 bcf STATUS,0

bcf STATUS,1

movlw 0x60

addwf NUMZ1,1

btfss STATUS,0

goto doi7

bsf CARRY1,0

goto doi7

doi5 movlw 0xA0

subwf NUMZ1,0

btfss STATUS,0

goto doi7

goto doi6

doi7 movf NUMZ2,0

addwf NUMZ2,1

btfss STATUS,0

Page 112: l-metru cu pic 16f84 schema programare

goto doi8

movlw 0x01

movwf CARRY2

doi8 btfss STATUS,1

goto doi9

bcf STATUS,0

movlw 0x06

addwf NUMZ2,1

goto doi10

doi9 bcf STATUS,0

bcf STATUS,1

movlw 0x0A

subwf NUMZ2,0

btfss STATUS,1

goto doi10

;goto doi52

movlw 0x06

addwf NUMZ2,1

doi10 btfss CARRY2,0

goto doi11

doi12 bcf STATUS,0

bcf STATUS,1

movlw 0x60

Page 113: l-metru cu pic 16f84 schema programare

addwf NUMZ2,1

btfss STATUS,0

goto doi13

bsf CARRY2,0

goto doi13

doi11 movlw 0xA0

subwf NUMZ2,0

btfss STATUS,0

goto doi13

goto doi12

doi13 movf CARRY1,0

addwf NUMZ2,1

btfss STATUS,0

goto doi14

movlw 0x01

movwf CARRY12

doi14 btfss STATUS,1

goto doi15

bcf STATUS,0

movlw 0x06

addwf NUMZ2,1

goto doi16

doi15 bcf STATUS,0

Page 114: l-metru cu pic 16f84 schema programare

bcf STATUS,1

movlw 0x0A

subwf NUMZ2,0

btfss STATUS,1

goto doi16

;goto doi52

movlw 0x06

addwf NUMZ2,1

doi16 btfss CARRY12,0

goto doi17

doi18 bcf STATUS,0

bcf STATUS,1

movlw 0x60

addwf NUMZ2,1

btfss STATUS,0

goto doi19

bsf CARRY12,0

goto doi19

doi17 movlw 0xA0

subwf NUMZ2,0

btfss STATUS,0

goto doi19

goto doi18

Page 115: l-metru cu pic 16f84 schema programare

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

Page 116: l-metru cu pic 16f84 schema programare

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

Page 117: l-metru cu pic 16f84 schema programare

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

Page 118: l-metru cu pic 16f84 schema programare

goto doi31

doi29 movlw 0xA0

subwf NUMZ3,0

btfss STATUS,0

goto doi31

goto doi30

doi31 movf CARRY13,0

addwf CARRY3,1

movf NUMZ4,0

addwf NUMZ4,1

btfss STATUS,0

goto doi32

movlw 0x01

movwf CARRY4

doi32

btfss STATUS,1

goto doi33

bcf STATUS,0

movlw 0x06

addwf NUMZ4,1

goto doi34

doi33 bcf STATUS,0

bcf STATUS,1

Page 119: l-metru cu pic 16f84 schema programare

movlw 0x0A

subwf NUMZ4,0

btfss STATUS,1

goto doi34

;goto doi52

movlw 0x06

addwf NUMZ4,1

doi34 btfss CARRY4,0

goto doi35

doi36 bcf STATUS,0

bcf STATUS,1

movlw 0x60

addwf NUMZ4,1

btfss STATUS,0

goto doi37

bsf CARRY4,0

goto doi37

doi35 movlw 0xA0

subwf NUMZ4,0

btfss STATUS,0

goto doi37

goto doi36

doi37 movf CARRY3,0

Page 120: l-metru cu pic 16f84 schema programare

addwf NUMZ4,1

btfss STATUS,0

goto doi38

movlw 0x01

movwf CARRY14

doi38 btfss STATUS,1

goto doi39

bcf STATUS,0

movlw 0x06

addwf NUMZ4,1

goto doi40

doi39 bcf STATUS,0

bcf STATUS,1

movlw 0x0A

subwf NUMZ4,0

btfss STATUS,1

goto doi40

;goto doi52

movlw 0x06

addwf NUMZ3,1

doi40 btfss CARRY14,0

goto doi41

doi42 bcf STATUS,0

Page 121: l-metru cu pic 16f84 schema programare

bcf STATUS,1

movlw 0x60

addwf NUMZ4,1

btfss STATUS,0

goto doi43

bsf CARRY14,0

goto doi43

doi41 movlw 0xA0

subwf NUMZ4,0

btfss STATUS,0

goto doi43

goto doi42

doi43 movf CARRY14,0

addwf CARRY4,1

doi45 btfss CARRY4,0

goto doi46

movlw 0x99

movwf NUMZ1

movwf NUMZ2

movwf NUMZ3

movwf NUMZ4

goto doi47

;return

Page 122: l-metru cu pic 16f84 schema programare

doi46 btfss CARRY,0

goto doi47

call addbcd_1

doi47 return

addbcd_1; aduna cu 1 in cod BCD

bcf STATUS,1

movlw 0x01

addwf NUMZ1,1

movlw 0x0A

subwf NUMZ1,0

btfss STATUS,1

goto star

bcf STATUS,0

bcf STATUS,1

movlw 0x06

addwf NUMZ1,1

;movlw 0x10

;addwf NUMZ1,1

movlw 0xA0

subwf NUMZ1,0

btfss STATUS,0

goto star

bcf STATUS,0

Page 123: l-metru cu pic 16f84 schema programare

bcf STATUS,1

movlw 0x60

addwf NUMZ1,1

movlw 0x00

subwf NUMZ1,0

btfss STATUS,0

goto star

;;;

movlw 0x01

addwf NUMZ2,1

movlw 0x0A

subwf NUMZ2,0

btfss STATUS,1

goto star

bcf STATUS,0

bcf STATUS,1

movlw 0x06

addwf NUMZ2,1

;movlw 0x10

;addwf NUMZ1,1

movlw 0xA0

subwf NUMZ2,0

btfss STATUS,0

Page 124: l-metru cu pic 16f84 schema programare

goto star

bcf STATUS,0

bcf STATUS,1

movlw 0x60

addwf NUMZ2,1

movlw 0x00

subwf NUMZ2,0

btfss STATUS,0

goto star

;;

movlw 0x01

addwf NUMZ3,1

movlw 0x0A

subwf NUMZ3,0

btfss STATUS,1

goto star

bcf STATUS,0

bcf STATUS,1

movlw 0x06

addwf NUMZ3,1

;movlw 0x10

;addwf NUMZ1,1

movlw 0xA0

Page 125: l-metru cu pic 16f84 schema programare

subwf NUMZ3,0

btfss STATUS,0

goto star

bcf STATUS,0

bcf STATUS,1

movlw 0x60

addwf NUMZ3,1

movlw 0x00

subwf NUMZ3,0

btfss STATUS,0

goto star

;;

movlw 0x01

addwf NUMZ4,1

movlw 0x0A

subwf NUMZ4,0

btfss STATUS,1

goto star

bcf STATUS,0

bcf STATUS,1

movlw 0x06

addwf NUMZ4,1

;movlw 0x10

Page 126: l-metru cu pic 16f84 schema programare

;addwf NUMZ1,1

movlw 0xA0

subwf NUMZ4,0

btfss STATUS,0

goto star

bcf STATUS,0

bcf STATUS,1

movlw 0x60

addwf NUMZ4,1

movlw 0x00

subwf NUMZ4,0

btfss STATUS,0

goto star

movlw 0x99

movwf NUMZ1

movwf NUMZ2

movwf NUMZ3

movwf NUMZ4

star return

end