45
Ministerul Educaţiei al Republicii Moldova Universitatea Tehnică a Moldovei Facultatea Inginerie si Management in Electronică şi Telecomunicaţii Catedra SDE Proiect de an La disciplina „Microcontrolere” TEMA: “Proiectarea ceasului electronic si termometrului pe baza de microprocesor” A efectuat studenta gr. E-111 Lasco Marina A verificat Conf. Univ. Andronic Sergiu 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2 3

Ceas Electronic

Embed Size (px)

DESCRIPTION

lucrare : ceas electronic

Citation preview

ceas si termometru

SDE 525.1 101 01 MECoala

24

ModCoala Docum.Semn.Data

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a MoldoveiFacultatea Inginerie si Management in Electronic

i Telecomunicaii

Catedra SDE

Proiect de anLa disciplina MicrocontrolereTEMA: Proiectarea ceasului electronic si termometrului pe baza de microprocesor

A efectuat

studenta gr. E-111

Lasco MarinaA verificat

Conf. Univ.

Andronic SergiuChiinau 2014

CUPRINS

4INTRODUCERE

41.Elaborarea algoritmului de functionare a dispozitivului

52.Elaborarea schemei de structura

63.Evidentierea tuturor operatiilor dispozitivului in curs de proiectare

64.Alegerea microprocesorului si tuturor dispozitivelor periferice necesare

64.1.Microprocesorul

74.2.Termometrul.

84.3.Ceasul de timp real.

84.4.Displeiul

95.Elaborarea schemei electrice de principiu

126.Efectuarea calculelor necesare

126.1.Calculul valorii rezistentei R9 pentru evitarea iesirii din functiune a ledurilor

137.Elaborarea algoritmilor si programelor de comanda a dispozitivului

137.1.Descrierea afisorului graphic LCD HD44780.

167.2.Descrierea ceasului de timp real.

187.3.Descrierea termometrului digital.

187.4.Descrierea protocolului 1-WIRE pentru termometrul digital

207.5.Descrierea protocolului I2C

228.Elaboarea ghidului de utilizare a dispozitivului proiectat

23Concluzie

24Bibliografie

Anexa1. Listingul programeiAneha2. Schema electrica principialaINTRODUCEREIn aceasta lucrare de curs am sa prezint modul si principiie de elaborare a unui dispozitiv pe baza de microprocesor care o sa aiba ca functie de baza a indica pe un displei temperatura data si ora curenta. Pentu a realiza aceasta sarcina o sa analizez realizarile posibile in limitele care ne le propune baza de elemente disponibila. Pentru a realiza aceasta sarcina sa mers pe calea cea mai simpla, alegind elemente schemotehnic simple din punct de vedere si usor programabile. Deoarece lucrarea data poarta un character mai mult de instruitre si de familiarizare decit constructiv, o sa se prezinte descrierea complete a tuturor etapelor de proiectare si a proceselor care se petrec atit in interiorul microprocesorului atit sin in modulele folosite . Se presupune microprocesorul de baza va lua asupra sa sarcina principala de prelucrare stocare si dirijare cu informatia primita de la modulele conectate. La prima etapa a proiectarii sa pus ca scop alegrerea bazei de elemente si limbajului de programare pe care se va baza dispozitivul. Ca limbaj de programare sa ales assemblerul pentru familia de microprocesoare AVR, dearece fiind un limbaj de nivel jos ne ofera posibilitati de a evidentia cele mai amanuntite momente in etapa proiectarii. Ca mediu de programare am ales AVRStudio. AVRStudio este un mediu de software dezvoltat de Atmel pentru nscrierea n limbaj de asamblare, compilarea i simularea de programe destinate microcontrolerelor produse de aceast companie.1. Elaborarea algoritmului de functionare a dispozitivuluiOdata cu conectare alimentarii fie unind elementul de alimentare sau apasind minerul intrerupatorului SW1 microcircuitul DA1 incepe a forma tensiune de alimentare +5V pentru microcontroller si toate perifericile unite (ceas, termometru, displei). Putem controla conectarea alimentarii dupa indicatia ledului HL1. Microcontrollerul DD2 incepe eczecutarea programei in caz ca in prealabil a fost programat prin conectorul XT1. Mai amanuntit despre modul functionarii programei este decris in paragraful 7. Cu ajutorul rezistorului R10 si condensatorului C7 se formeaza un interval de timp pina se stabilizeaza tensiunea de intrare.Microcontrollerul prelucreaza datele preluate de la ceas si termometru si le afiseaza pe displei. Cu ajutrorul butoanelor SB1-SB3 peutem seta ceasul. Cu butonul SB4 se reseateza manual microcontrollerul in caz de dereglarii iin lucrul programei.Luaind in consideratie ca dispozitivul va avea alimentare autonoma de baza, este prevazut deconectarea iluminarii ecranului manual de la al doielea miner al intrerupatorului SV. Ceia ce considerabil va mari timpul autonom de lucru al apartaului luind in consideratie ca iluminarea de fundal al displeiului consuma 100mA. Iar tot dispozitivul cu iluminarea deconectata consuma in jur de 50 mA.2. Elaborarea schemei de structuraPentru a avea o reprezentare generala despre modul de functionare si despre structura proiectului vom analiza rind-pe-rind blocurile functionale din care este alcatuit proiectul.

Fig.1. Schema de structura.

1. Termometu digital.2. Tastatura.

3. Ceas de timp real.

4. Acumulator

5. Microprocesor.

6. Sistema de alimentare.

7. Displei 16x2.

La baza dispozitivului proiectat sta un microprocesor (B5) care achizitioneaza datele de la unitatile periferice si in dependenta de program dirijaza cu unitatile periferice la iesire. Functia de baza este de a plelua datele de la termometrul digital (B1) de a prelucra aceste date si le afisa pe displei (B7) intrun mod comod utilizatorului.

Blocul 1 reprezinta un termometrul digital destul de precis. Ca tastatura se vor folosi 3 butoane care prin intermediul lor o se sa infaptuiasca toate setarile necesare. In caz de deconectare a alimentarii de baza sau este pervazut alimentarea casului de timp real (B3) de la o baterie adaugatoare (B4) care asigura dupa promisiunile producatorului un lucru autonom timp de 10 ani.In calitate de dispozitiv de afisare serveste un displei pe cristale lichide (in continuare in tecst LCD) care permite afisarea a 16 caractere in doua rinduri (cite 16 caractere pe fiecare rind).3. Evidentierea tuturor operatiilor dispozitivului in curs de proiectare

Una din primele etape proiectarii dispozitivului este analiza sarcinii. Dina ceasta analiza reese conditiile in care trebue sa fie exploatat aparatul. Avind ca sarcina proiectarea unui dispozitiv pe baza de microprocesor care va indica la displei temperatura si ora curenta am inceput cu analiza surselor biografice la aceasta tematica.

Analizind prototipurile existente am trecut la analiza lor.

Sa analizat posibilitatile de realizare a ceasului pe baza de microprocesor si sa ales folosirea unui ceas de tiimp real care va fi realizat ca un microcircuit aparte care o sa ne ofrere precizie si functionalitate mare in comparatie cu scrierea programei si realizarea ceasului in interiorul microprocesorului. Urmatoarea etaapa a fost alegerea dispozitivelor periferice ramase. Sa trecut la proiectarea schemei electrice de structura si apoi acea principiala. O analiza fugitiva a proiectui nea aratat ca cu usurinta o sa se poata de realizat chiara si un machet al dispozitivului proiectat deoarece sau folosit elemente raspindite si cu pret rezonabil. Pentru scrierea programei sa trecut la analiza mai profunda a teoriei si metodelor de programare a periferiei. Ca sa se reduca timpul de scrierea a programei sa folosit o parte de subprograme imprumutate din alte surse si fisierilor incluse ceia ce nea permis de a reduce in primul rind timpul elaborarii programului si intral doilea rind a redus listingul programei care si asa ocupa aprohimativa 600 de rinduri. Deasemenea o etapa inportanta a fost introducerea in listingul programei comentarii cere sint inportante la scrierea in limbajul asembler. Partea teoretica a fost descrisa in mare parte in capitolul 7 in care sau descris protocoalele de comunicare intre microprocesor si dispozitivele periferice. In subcapitol aparte a fost descrisa si sina sincrona paralela de comunicare a microprocesorului cu displeiul.Ghidul de utilizare sa prezintat in capitiolul 8 si contine modul de setare si navigare prin meniul dispozitivului.

4. Alegerea microprocesorului si tuturor dispozitivelor periferice necesare

4.1. Microprocesorul

In baza proiectului sta microcontrollerul firmei Atmel ATtiny2313.

Insasi microcontrollerul se alimenteaza cu tensiunea de 5V . Stabilizarea si trasformarea tensiunii de intrare se face cu micriocircuitul L7805 datorita eu putem conecta la intrare o tensiune de la 7,5V pina la 35V.

Fig. 2. Microcontrollerul Attiny2313. interfata.Este un microcontroler raspindit si atragator din punct de vedere economic. Doar la pretul 25 lei ofera o gama destul de larga de periferice si 18 porturi de intrare/iesire care ne indestuleaza toate cerintele puse in acest proiect.Deasemenea o sa avem nevoie de taimerul care in regim de numarare ne va forma intreruperi aprohimativ odata pe secunda. Consumul propriu la la sursa de alimentare este doar de 230 A la frecventa de 1 MHz si tensiunea de 1.8V. 4.2. Termometrul.

Termometrul digital DS18b20 poseda un sir de avantaje. Una din avantaje este raspindirea lui larga, datorita careia putem gasi o multime de exemple de lucru al acestui senzor digital. Permite masurarea temperaturii in diapazonul de -55,0 125,0 asta precum ca curentul de consum este de 6mA.Descrierea senzorului: Termometru digital DS18B20 cu rezoluie programabil de la 9 pn la 12-bii, care pot fi stocai n memoria EEPROM. DS18B20 comunic printr-o magistral 1-Wire, i nu poate fi doar singurul dispozitiv pe linie ci i poate funciona n grupuri. Toate procesele de pe in sunt procesat de microprocesorul central. Diapazonul de msurare este de la -55 C pn la +125 C i 0,5 C. Precizia se afl n intervalul de la -10 C la +85 C. n plus, DS18B20 poate s se alimenteze de la linia de date ("putere parazit"), n absena unei surse externe.

Fiecare DS18B20 are un cod unic n 64 de bii, care permite s comunice cu mai muli senzori DS18B20 instalai pe in. Acest principiu permite utilizarea unui microprocesor pentru a controla mai muli senzori DS18B20, care sunt distribuii pe o arie mare. DS18B20 poate fi conectat la sursa de alimentare extern (VDD) , sau poate funciona n "putere parazit", care permite funcionarea DS18B20 fr putere pe pinul VDD. Puterea parazit este foarte util pentru aplicaii care necesit citirea temperaturii de la distan, sau este realizat din cauza proiectrii liniilor vechi de comunicare, care este realizat doar pe dou fire.

Parametri tehnici

Msurarea temperaturii de la -55 C pn la +125 C (pasul 0,1 C)

Setarea temperaturii de la -55 C la 124 C (pasul 0,1 C).

Histerezis de la 0,1 C la 25 C

Fig. 3. Ceasul. Configurarea pinilor si infatisarea.4.3. Ceasul de timp real.

Cicuitul Ds1307 este un Real-tine clock (RTC)care comunic serial prin I2C cu microcontro1erul i ofer informaii precise despre or, minute secunde i dat, setate anterior de ctre utilizator.

Acest ceas are modul de comuncare prin protocol i2c (2 fire active, SDA = intrare/iesire date, respectiv SCL = intrare seriala ceas), ceasul intern se bazeaza pe un cristal de cuart de 32,768kHz (cum sunt cele din ceasurile de mana), iar partea de alimentare de rezerva (in cazul intreruperii alimentarii) se realizeaza cu o baterie de 3V tip CR2302 (cum sunt cele de pe placile de baza ale calculatoarelor (PC), dar sepot folsi si 2 inseriate de 1,5V...

Fig. 4. Ceasul DS1307.4.4. DispleiulUn din cerinte si cred ca ce-a mai importanta este sa ne ofere spatiu destul de larg pentru a afisa toata informatia. Pe displei trebue afisata urmatoarea informatie: data, luna, anul, temperatura, ora in format- ora si minutele. Un displei care permite afisarea a 16 carectere in 2 rinduri este deajuns.

Fig. 5. Afisorul grafic.Afisorul WH1602D este raspindit si deasemenea se poate de gasit descrierea completa a lui. Ceia ce tare usureaza scrierea programului.5. Elaborarea schemei electrice de principiuUrmatoarea etapa dupa alegerea tuturor comonenteler periferice si am elaborarea schemei de structura este elaborarea schemei electrica principiala.XT1 (nu este prezintat) este conectorul de programare ISP (In-System Programming); acesta permite programarea memoriei FLASH din procesor folosind un programator extern. De notat ca exist mai multe standarde de conector (n principal 2x3 pini i 2x5 pini), noi l vom folosi numai pe acesta pentru compatibilitate.

Fig. 6 Circuitul de alimentare.Pentru alimentare se foloseste stabilizatorul U3 cu 3 terminale (7805), 2 condensatoare de 100nF necesare pentru stabilitatea functionrii acestuia, i dioda D1 care protejeaz la alimentarea inversa.

De la intrerupatorul SV1 gestionam cu alimentarea si iluminarea displeiului.Ceasul de timp real are o conectare tipica ce este prezintata in specificatia tehnica care am repetato si in proiect.

Fig. 7. Conectarea ceasului de timp real.Apropo DS1307 permite lucrul si fara cuartul de tactaere . Pentu aceasta la pinul X1 se aplica semnalul extern de tactare 32.768 kHz, iar X2 ramine sa stee neconectat.Conectare senzoruui de temeratura este reprezintata mai jos si tot este tipica.

Fig.8. Conectarea senzorului e temperatura.

Rezistentele pull-up R1...R3 asigura nivelul 1 pe pin cand butonul este in repaus. Cand butonul este apasat, nivelul pinului este 0 prin legare la GND. Desigur portul respectiv si anume PB0,PB1,PB2 trebue de configurat ca intrare.

Fig. 9. Conecttarea butoanelor.R10, C7 formeaza circuitul de power-on reset. n momentul aplicarii Vcc, C7 este descrcat i trage linia RESET* n 0, resetnd procesorul. Ulterior, condensatorul se va incrca prin R10 i linia va sta n 1 (procesul este asimptotic, dar sfritul ncrcrii se consider dupa un timp aproximativ egal cu 5R10C7).

Fig. 10. Circuitul de resetare.

Acest reset este necesar pentru a asigura pornirea n bune condiii a procesorului; n lipsa lui, tensiunile tranzitorii care apar n momentul alimentrii pot duce la ajungerea procesorului intr-o stare incert. Practic, linia RESET* e inut n 0 un timp semnificativ mai lung dect are nevoie sursa de alimentare s intre n regim staionar.Pentu a avea posibilitate de a manipula cu luminozitatea displeiului folosim un rezistor variabil R4. Condensatorul C1 serveste ca filtru.

Fig.11. Setarea luinozitatii displeiului.

In Fig 12 este aratat conectarea displeiului la micropriocesor.

Fig.12. Conectarea displeiului.Displeiul WH1602D are un microcontroller HD44780 incorporat care comunica cu microcontrolerul extern prin un protocol.Microcontrolerul dat este ncorporat direct n LCD si unde pinii sunt prezentate mai jos:

1 VSS 8 DB1

2 VDD 9 DB2

3 Vo 10 DB3

4 RS 11 DB4

5 R/W 12 DB5

6 E 13 DB6

7 DB0 14 DB7

Unde VSS tensiunea de alimentare;

VDD la pamint(potentialul comun);

Vo tensiunea de contrast a indicatorului;

RS - comutarea tipului de date / instruciunii, ( 0 - datele, 1 - instructiuni );

R/W alegerea regimului de scriere/citire, ( 0 - scriere, 1 - citire );

E semnalul de permitere a citirii/scrierii;

DB0-DB7 intrarile /iesirile de informatie.

Pinul de intrare/iesire DB7 este folosita pentru verificarea starii flagului sinei(BF).

Daca BF = 1 se efectuiaza instructiunea anterioara, BF = 0 microcontrolorul poate sa primeasca urmatoarea instructiune. Citirea BF se efectuiaza prin RS = 0, R/W = 1.

HD44780 poate sa lucreze in regimurile cu limea magistralei de date de 4 si 8 biti.

Aceasta ne permite sa economisim pinii a controului dispoziivului, sau de marit viteza sa lucru cu indicatorul.

6. Efectuarea calculelor necesare6.1. Calculul valorii rezistentei R9 pentru evitarea esirii din functiune a ledurilor

Se foloseste formula luii Ohm (1) :

De aici reese ca tensiunea care ese din microcontroller este =5V.

Becurile noastre se alimenteaza cu intensitatea 10ma.

Reese ca rezistenta de limitare este calculata cu ajutorul formulei:

Fig.13. Rezistenta de limitare pentru ledul HL17. Elaborarea algoritmilor si programelor de comanda a dispozitivului In listingul programei am folosit fisiere incluse. In aceste fisiere sint descrise procedurile pentru lucrul cu sinile I2C, 1-wire si lucrul cu LCD. Aceste fisiere nu leam inclus in listingul programei din anecsa, dar mai jos in tecst o sa fie lamurit rolul acestor fisiere.In ciclul principal al programei rind 143-145 din anexa (in continuare se va scrie numai numarul rindului, subintelegind numarul rindului din listingul programei) se face numai citirea butoanelor incontinuu si ciclic. Dupa ce sa intimplat intreruperea dupa comparator cu aprocsimatie odata pe secunda microcontrollerul primesete temperatura, datele din ceasul de timp real, prelucreaza informatia primita si o indica la ecran.In microcontroller informatia primita de la ceasurile de timp real ds1307 se salveza in memoria ram in variabila clock , iar din senzorul de temperatura ds18b20 in variabila buffer. Ceasul de timp real implicit nu este pornit, si nu merge, asa ca el trebue pornit.

Cum sa mai spus in rindurile de mai sus in corpul programului se face numai citirea butoanelor, iar dupa intreruperea taimerului pe rind se chemama subprogramele de lucru cu acele trei dispozitive periferice conectate la microcontroller. Deaceia este rezonabi de analizat careva subprograme in parte, avind in vedere ca analiza programului intreg este deneinfaptuit in cadrul acestei lucrari de curs.Vom incepe cu descrierea afisorului grafic.7.1. Descrierea afisorului graphic LCD HD44780.

Indicatoare simbolice pe cristale lichide cu microcontroloare incorporate au primit o raspindire larga n electrocasnice, datorit consumului redus de energie, a confortului si usurinta de utilizare.

Indicatoarele simbolice in doua linii cu 8 si 16 simboluri in linie ce sunt suficient de accesibile i funcionale pentru realizarea mai multor sarcini..

Analizam microcontrolerul LCD HD44780, utilizate de ctre productorii de LCD, reprezentnd cea mai larg gam de produse pe piaa .Prima etapa a lucrului cu HD44780 este initializarea. Initializarea se efectuiaza in ordinea de mai jos.

Dupa aplicarea tensiunei de alimentare la microcontrolor este necesar de efectuat o pauza de 15 ms, dar din cauza diferenelor dintre caracteristicile de surse de alimentare folosite durata recomandat de pauza este de 1-2 secunde.

Deoarece am folosit conectarea displeiului folosind interfata de 4 biti,o sa prezint numai initializarea respectiva.Initializarea (interfata de 4 biti).

Initializarea HD44780 in regimul de 4 biti se efectuiaza practic asemanator cu acea de 8 biti, numai ca datele se transmit in doua etape cite 4 biti, cu toate ca primele merg cei mai mari 4 biti.

Sa analizam mai in detaliu initializarea regimului de 4 biti.

1. Conectarea tensiunii de alimentare.

2. Pauza 1-2 secunde.

3. RS R/W DB7 DB6 DB5 DB4

0 0 0 0 1 1

4. Pauza 4.1 ms.

5. RS R/W DB7 DB6 DB5 DB4

0 0 0 0 1 1

6. Pauza 100 s.

7. RS R/W DB7 DB6 DB5 DB4

0 0 0 0 1 1

8. Pauza 200 s.

9. RS R/W DB7 DB6 DB5 DB4

0 0 0 0 1 0 Instalarea interfetei de 4 biti

10. RS R/W DB7 DB6 DB5 DB4 Instalarea interfetei de 4 biti, numrul de rnduri,

0 0 0 0 1 0 instalarea punctelor de afisare a simbolurilor

0 0 N F * *

11. RS R/W DB7 DB6 DB5 DB4 Display conectat

0 0 0 0 0 0

0 0 1 0 0 0

12. RS R/W DB7 DB6 DB5 DB4

0 0 0 0 0 0

0 0 0 0 0 1 Display conectat

13. RS R/W DB7 DB6 DB5 DB4

0 0 0 0 0 0 Instalarea parametrilor de afisare a informatiei

0 0 0 1 I/D S

Afisarea informatiei la diplay.

Afisarea informatiei in forma de simbol la display se efectuiaza prin metoda transmiiterii informatiei despre simbolurile afisate la iesirile de informative si dirijarea procesului de nregistrare a iesirilor RS,R/W E.

La inceput microcontrollerul primeste informatia despre adresa introdusa a simbolului. Adresa de la nceputul primei linii 080, l doilea - 00, mai departe deplasarea pe linii se efectuiaza cu marirea adresei.Pentru a afirea simbolului pe ecran se foloseste urmtoarea secven:

1. RS = 0, R/W = 0, E = 1;

2. Stabilirea adresei liniilor informationale;

3. Pauza 50 s;

4. RS = 0, R/W = 0, E = 0;

5. Pauza 255 s;

6. RS = 1, R/W = 0, E = 1;

7. Setam codul simbolului pe liniile informationale;

8. Pauza 50 s;

Ca exemplu mai jos sa prezinta afisarea mesajului de salut UTM FIMET

ldi simv,0x55 ;U

rcall Writes

ldi simv,0x54 ;T

rcall Writes

ldi simv,0x4D ;M

rcall Writes

ldi simv,0x20 ;' '

rcall Writes

ldi simv,0x46 ;F

rcall Writes

ldi simv,0x49 ;I

rcall Writes

ldi simv,0x4D ;M

rcall Writes

ldi simv,0x45 ;E

rcall Writes

ldi simv,0x54 ;T

rcall Writes

ldi simv,0x20 ;' '

rcall Writes

Fig.14. Spatiul cu simboluri in memoria displeiului.

Din tabel usor se poate gasi codul oricarui simbol introdus in memoria displeiului. De exemplu codul 55(baza 16) corespunde caracterului U, codul 0x54 corespunde caracterului T.

7.2. Descrierea ceasului de timp real.

Microcircuitl dat are 60 baiti de memorie. Din care primii 8 sint de lucru. In ei se pastereaza timpul, data, ziua saptaminii. Iar altii ramasi din baiti sint destinati pentru cerintele utilizatorului. In ei se poate de pastrat de exemplu setarile curente sau alte date. Normal ca daca alimentarea de rezerva va disperea informatia se va pierde. Tot luctrul cu cieasurile (cititul si setatul orei si timpului ) se reduce la aceia ce trebue de scris sau de citit celulele de memorie respective.Tabelul 1. Memoria interna a ceasului de timp real.

Toate numerile in memorie se pastreaza in cod binar-zecimal. Aceasta inseamna ca in fiecare bait poate sa se pastreze deodata doua cifre. De eczemplu 023- contie cifra 2 si cifra 3. Pentru fiecare cifra se aloca 4 biti. Aceasta este pefacu pentu comoditate si economie de memorie. Inafara de ora si data in memorie se mai pasgtreaa si citeva biti al setarilor. Care sunt :

Clock Halt dirijeaza cu ceasul. Cind bitul este setat apoi ceasul este oprit (nu numara timpul). Pentru a porni ceasul ca sa numere timpul este necesar de a inscri in acest bit 0. Dupa conectarea batereii de alimentare rezerva acest bit este setat si nu numara timpul. Trebue de mentionat aceasta.

24/12 ascesta este bitul de alegere regimului ceasului. Daca se foloseste regimul de 12ore atunci al cincilea bit arata AM sau PM acum. Daca bitul este egal cu 1 atunci PM. In regim de 24 de oreacest bit se foloseste pentru pastararea zecimilor de ceas inpreuna cu bitul 4.

Output seteaza starea pinului SQW/OUT. Daca bitul este setat pe pin este 1 logic. Dacai resetat apoi este 0 logic. Pentru a manipula in asa fel bitul SQWE trebue sa fie resetat.SQWE- cint bitul este setat la pinul SQW/OUT apar impulsuri dreptunghiulare.

RS1,RS0- cu aceste bituri se seteaza fregventa impulsurilor. Depaenenta frecventei de combinatia bitilor se arata in tabelul de mai jos.

Tabelul 2. Dependenta frecventei de combinatia bitilor.

7.3. Descrierea termometrului digital.

Principiul masurarii temperaturii este bazat pe compararea fregventelor a doua generatoare. Frecventa unuia dintre generatoare nu depinde de temperatura, iar fregventa al doilea generator se schimba odata cu schimbarea temperaturii. Diferenta dintre frecventele acestor doua generatoare si stabilesc valoarea temperaturii. Codul de opt biti bit cu bit incepind cu bitul inferior a aplica pe linia de legatura. Al noualea bit stabileste semnul temperaturii. Daca al noualea bit este setat in unu atunci temperatura are semnul minus si invers. Transmiterea fiecarrui bit dureaza 60mks. Daca durata nivelului jos pe linie este de la 1 pina la 15mks atunci impulsul se identifica ca unu logic. Zero logic se identifica atunci cind durata impulsilui este de la 15 pina la 60mks.7.4. Descrierea protocolului 1-WIRE pentru termometrul digital

Pentu a incepe lucrul cu senzorul de temperatura microcontrollerul trebue sal initializeze prin transmiterea comenzilor necesare. Vom analiza destinatia fiecarei comenzi care conduc cu lucrul senzorului de temperatura.Se prezinta instructiunile de initializare, si mai jos se va descrie metode de lucru cu protocolul 1-wire. Alimantarea de la linie (Read Power Supply) [0xB4]. Dupa acesta comanda senzorul trece la alimantarea de la linie. In component senzorului de temperatura se afla un condensator, care se incarca de la nivelul inalt al liniei. Inainte de a se adresa la senzorul de temperatura microcontrolerul ytrebue sa pastreze un interval de timp, necesar incarcarii condensatorului.Transmiterea datelor pe o singura linie se infaptuieste cu impulsuri de nivel jos, dar de durata diferita. Impulsul va fi perceput ca 1 logic daca durata lui nu este mai mare ca 15 mks . vezi desenul de mai jos. In cazul cind durata impulsului este mai mare decit 15mks atunci bitul trimis se percepe ca 0. Durata unui bit de informatie este egal cu 60mks. De aicea si avem asa de multe variante de durate de impuls: nivelul logic 0-1....15mk, nivelul logic 1-16...60 mks.

Fig.15. Diagramele de timp a sinei 1-Wire

Fig.16. Diagramele de timp a sinei 1-Wire

Fig.17. Diagramele de timp a sinei 1-WirePentru a pregati senzorul de temperatura pentru primirea informatiei microcontrolerul trebue sa trimita in linie un impuls de resetare (Reset) vezi desenul de mai sus. Impulsul de resetare trebue sa aiba durata de 480...960mks. In raspuns la resetarea facuta de microcontroller senzorul de temperatura trimite impulsul de prezenta (Presence). Daca in dispozitiv nu este prevazut deconectarea senzorului atunci impulsul de prezenta pentru a simplifica programa putem sa nu il controlam, da sa uplem acest timp cu pauza (aprohimativ 100mks). Durata impulsului Presence poate fi in limitele 60...240mks.Daca la o linie sint conectate mai multe senzoare de temperatura atunci controlul impulsului de prezenta este obligatorie. Inaiintea de primire fiecarui bit de informatie de la senzor microcontrollerul trebue sa trimita un impuls scurt de gatinta (crerere) cu durata de 1...3mks.7.5. Descrierea protocolului I2C

Protocolul I2C a fost dezvoltat pentru a crea un canal de comunicatie intre circuite integrare (CI).

I2C consta fizic in linii 2 active i o conexiune de impamintare. Liniile active sint denumite SDA i SCL, Ambele linii sint bi direcionale. SDA este Serial Date Line iar SCL este Serial Clock Line.

Orice device conectat la bus are adresa sa unica fara a conta daca este MMU , driver LCD , memorie sau ASIC. Fiecare din aceste cipuri poate primi si / sau transmite depinzind de functionalitatea dorita. Evident un driver LCD poate doar primi in timp ce o memorie sau un dispozitiv I/O poate primi si transmite date.

I2C este un bus multi-master. Astfel pe in I2C bus pot fi conecate mai multe circuite integrate capabile sa initieze transferuri de date. Protocolul I2C specifica ca integratul care initializeaza conexiunea este considerat Bus Master . In consecinta restul circuitelor conectate la I2C sint privite ca Bus Slaves.

Cum Bus Master sint microcontrolere(MCU) iata cum arata o secventa de comunicatie pe I2C.

MCU trimite secventa START . In acest moment toate circuitele de pe bus trec in modul receptie.

MCU trimite ADRESA circuitului cu care vrea sa comunice impreuna cu flagul operatiei ( READ / WRITE ) .

Circuitele compara ADRESA cu adresa proprie si daca nu ii este destinat mesajul asteapta conditia de STOP. Daca un circuit are ADRESA dorita de MCU atunci chipul va produce un mesaj ACKNOWLEDGE. Apoi se trece la transferul datelor. Cind s-au terminat de transferat datele se trimite secventa de STOP. Acum cind am descris modurile de lucru cu taoata periferia conectata la microcontroller trecem in sa la descrierea algoritmului programei.

Corpu l principal al programei prezinta blocurile 1-8, prelucrarea butoanelor prezinta 16-23, plelucarea informatiei de la dispozitivele periferice si lucrul cu ele prezinta blocurile 10-15.

Duapa cum sa mentionat mai sus programul a fost cules compilat si emulat in mediul de programare AVR Studio 4.Mai jos prezint informatia generata de AVR Studio ca rezultata a compilarii.In memoria flesh [.cseg] programul ocupa 2048 bytes ceia ce prezinta 79.0% din toata memoria isponibila. Ddtele [.dseg] ocoupa 13.3%. Im memoria eeprom [.eseg] 0.0%.ATtiny2313 memory use summary [bytes]:

Segment Begin End Code Data Used Size Use%

---------------------------------------------------------------

[.cseg] 0x000000 0x000652 1586 32 1618 2048 79.0%

[.dseg] 0x000060 0x000071 0 17 17 128 13.3%

[.eseg] 0x000000 0x000000 0 0 0 128

Assembly complete, 0 errors. 7 warnings

8. Elaboarea ghidului de utilizare a dispozitivului proiectatPentua a seta ceasurile si calendarul apasati "Set". Apasind "Set" o singura data nimerim in regimul setarii minutelor. Cu butoanele "plus" si "minus" setam minutele. Apasind "set a doilea oara nimerim in regimul setarii orei." Apasind al treilea oara nimerinm in setarea zilei de saptamina (nu se indica ). Mai departe data, luna, anul. Apasind de a saptelea oara Set iesim din regimul de setare.

Fig. 19. Schema principiala simulata in Proteus.ConcluzieIn aceasta lucrae de curs sa arat pas cu pas etapele de proiectare ceasului si termometrului pe baza de microprocesor. Dupa primirea sarcinii am trecut la analiza surselor biografice prezintate mai jos. Sa ajuns la concluzia de folosit microprocesorul Atiny2313 deoarece acest microprocesor este similar cu microprocesorul Atmega8 care sa studiat la disciplina microprocesoare. Attiny2313 este un microprocesor cu periferie mai saraca dar cu pret corespunzator si care foarte bine rezolva sarcinilile puse in aceasta lucrare de curs. In prim plan sa pus precizia cu care o sa numaram timpul si cu care o sa masuram temperatura. Din aceste considerente am ales senzori inteletuali cu precizie destul de mare si care necesita minimul elemente adaugatoare. Dar un dezavantaj foarte considerabil poate fi comunicarea dintre ceas, termometru si microprocesor destul de complicata si greu de realizat in limbajul asembler. Dar aceasta problema sa rezolvat prin folosirea la scrierea programei a fisirerelor incluse cu descrierea protocolalelor de comunicare si initializare.Programul a fost scris si compilat in mediul sost AVR Studio 4 in limbajul de programare assembler. Ceia ce a dat volum programului dar in rest mi-a aprofundat cunostintele despre structura interna a microcontrolerului.

Dispozitivul proiectat are avantaje fata de alte realizari prin metoda masurare, numarare si schemotehnica simpla.

In final pot concluziona ca am avut o sarcina interesanta pe care am efectuat-o cu succes totodata acumulind o experienta in proiectarea dispozitivelor.

Bibliografie

1. . . . " PIC "

2. . . I2 . .: -, 2002. 192 . ( )3. . AVR. . /. . .: - -1, 2006. 272 .: . ( ).

4. .. . .: , 2005. 256 .: .5. 1) .., CodeVisionAVR , 2008-600M;

6. 2) . ., C AVR PIC , 2006;

Surse biografice din internet

7. AVR Studio

Anexe

Anexa1. Listingul programei

;*****************************************************************

;Autor: Lasco Marina;Data: 2014;Versiunea: beta :)

;Nume proiect: nivelul fluidului in rezervor;Procesor: ;Tactarea: 8MGZ de la oscilator intern

;TERMOMETRU, CEAS, CALENDAR

;Portul PC2 se folos pentru 1-Wire la care este conectat ds18b20

;*******************************************************************

.include "tn2313def.inc" ; AVR ATtiny2313

.include "macros.inc" ; macrosurile adaugatoare

.include "ds1820.inc" ; descrierea comenzilor senzorilor

;*****DEECLARARI***************************************************

; registri de lucru. se folosesc pentru prelucrarea algoritmului

.def Temp = r18

.def Temp1 = r19.def Temp2 = r20.def button = r22.def Simv = r23.def Kur = r24;============================================================

;segment date in RAM - celule ajutatoare

;============================================================

setRAM:

;SRAM baitul superior de adresa SRAM=0x01

.equ Sek = 0x10 ;valoarea curenta a SEC

.equ Min = 0x11 ;valoarea curenta a MIN

.equ Hour = 0x12 ;valoarea curenta a OREI

.equ Date = 0x13 ;valoarea curenta a DATEI

.equ Month = 0x14 ;valoarea curenta a LUNII

.equ Year = 0x15 ;valoarea curenta a ANULUI

;=============================================================

; segment de cod - programa

;=============================================================

.dseg clock: .byte 7 ; sec, min, ore, ziua sapt, num ziua, luna, an

.cseg .org 0 ; si, incepem!!!!

;=============================================================

; Vectorii intreruperilor (se foloseste numai una !!!!)

;=============================================================

rjmp Reset

rjmp INT_0

rjmp INT_1

rjmp Timer1_capt1

rjmp Timer1_comp1

rjmp Timer1_OVF1

rjmp Timer0_OVF0

rjmp UART_RX

rjmp UART_UDRE

rjmp UART_TX

rjmp ANA_COMP

;Reset:

INT_0:

INT_1:

Timer1_capt1:

;Timer1_comp1 ;taimerul unu in regim de comparatie

Timer1_OVF1:

Timer0_OVF0:

UART_RX:

UART_UDRE:

UART_TX:

ANA_COMP:

reti

;=============================================================

; includem biblioteca cu descrierea LCD

.include "LCD16S2D.asm"

;=============================================================

; includem biblioteca cu descrierea i2c

.include "i2c.asm"

;=============================================================

; includem biblioteca cu descrierea 1-Wire

.include "1-wire.asm"

;=============================================================

; macrosul ajutator de inscriere in 1-Wire

.macro Send_1w

ldi Temp, @0 ; primul parametru

mov r0, Temp

rcall Send1w ; inscriem (trimitem)

.endmacro;=============================================================

Reset: ; de aici se incepe insasi codul de lucru (un fel de functie main :)

;=============================================================

ldi Temp,0b011110000 ; setam porturile

out DDRB,Temp

ldi Temp,0b11111111 ; setam porturile

out DDRd,Temp

ldi Temp,RamEnd ; stabilirea indicatorul de stiva(

out SPL,Temp

ldi Temp1,0b01000000

out Timsk,Temp1 ;permitem intreruperile comparatorului

ldi Temp1,0b00000100

out Tccr1b,Temp1 ;semnalul de tactare /256

ldi Temp1,0xff

out Ocr1ah,Temp1

ldi Temp1,0xff

out Ocr1al,Temp1 ;inscriem numarul pentru comparatie

;==============================================================

;Lucrul cu LCD

rcall Delay40mks ; facem o pauza inainte de pornire

rcall Init_LCD16s2d ; initializam LCD

rcall Write_CGRAM ; cream un simbol propriu

;==============================================================

;==============================================================

; Setam regimul ds18b20

rcall reset1w ;resetam 1-Wire

Send_1w CMD_SKIP_ROM ; comanda "sarim peste adresa"

send_1w CMD_W_SCRATCHPAD ; inscriem in buferul interior (registri)

send_1w 0b00000000 ; TL

send_1w 0b00000000 ; TH

send_1w 0b01111111 ; Registrul de configurare

;==============================================================

;Initializam ceasurile

clr Temp ;curatam

rcall IniSek ;pornim ceasurile (Temp= 128

brsh setsek ;apoi zavodim ceasurile

setsek:

clr temp

rcall IniSek ;setam secundele = 0

;=======================================================

;===========citim ceasurile ===================

ReadClk: ;citim BSD din cesuuri

ldi zL, low(clock)

ldi zH, high(clock)

ldi ClkA,0 ;adresa secundelor in cesuri

sbis Pinb,pSDA

rcall err_i2c

rcall start

ldi DATA, 0b11010000 ; i-2adresa ceasuri+inscrierea

rcall write

brcs stopR ;C=1 dacai eroare

mov DATA,ClkA ;adresa registrului secundelor

rcall write

brcs stopR; C=l dacai eroare

rcall start

ldi DATA, 0b11010001 ;adresa ceasurilor+citirea

rcall write

brcs stopR ;C=1 dacai eroare

set ;CK

rcall read ;citim secundele

brcs stopR ;C=1 dacai greseala

st z+,DATA ;inscriem secundele in memorie

rcall read ;citim minutele

brcs stopR ;1 dacai greseala

st z+,DATA ;inscriem minutele in memorie

rcall read ;citim minutele

brcs stopR ;1 dacai greseala

st z+,DATA ;ceasurile le scrim in memorie

rcall read ;citim ziua saptaminii

st z+,DATA ;ziua saptaminii inscriem in memorie

brcs stopR ;1 dacai greseala

rcall read ;citim daat

brcs stopR ;1 dacai greseala

st z+,DATA ;inscrim im memorie

rcall read ;citim luna

brcs stopR ;1 dacai greseala

st z+,DATA ;inscrim luna in memorie

clt ;nu trimitem sfirsitul citirii

rcall read ;citim anul

brcs stopR ; 1 dacai greseala

st z+,DATA ;anul inscriem in memorie

rcall stop

ret

stopR:

ret

;==============================================================

;Prelucram butoanele

;==============================================================

Press:

CLi ; interzicem intreruperile

in button,Pinb ;citim portul D

andi button,0b00000100 ;taiem dupa masca

ldi Temp1,0b00000100

eor button,Temp1 ;convertim biturile dupa masca

breq Nobut ; dacai 0 (nui apasat ->) iesim

;intram in regimul setarii ceasurilor

ldi Kur,0b11000000 ; cursorul la simbolul 0 al rindului 2

rcall WriteCmd ; setam cursorul

ldi simv,0x20 ; stergem rindul de jos

rcall Writes

ldi simv,0x20

rcall Writes

ldi simv,0x20

rcall Writes

ldi simv,0x20

rcall Writes

ldi simv,0x20

rcall Writes

ldi simv,0x20

rcall Writes

ldi zL, low(clock+1)

ldi zH, high(clock+1)

ldi Temp2,0 rcall Delay2

m1:

in button,Pinb ;citim portul b

andi button,0b00000010 ;stergem dupa masca

ldi Temp1,0b00000010

eor button,Temp1 ;inversam biturile dupa masca

breq m2 ; nui apasat +

ld Temp, z ;luam

rcall FuncInc ;marim Temp

st z,Temp ;inscriem in memorie

rcall LSD

rcall Delay2

m2:

in button,Pinb ;citim porul b

andi button,0b00000001 ;taiem dupa masca

ldi Temp1,0b00000001

eor button,Temp1 ;invertim biturile dupa masca

breq m3 ; nui apasat -

ld Temp, z ;luam

rcall FuncDec ;micsoram Temp

st z,Temp ;inscriem in memorie

rcall LSD

rcall Delay2

m3:

in button,Pinb ;citim D

andi button,0b00000100 ;taiem dupa masca

ldi Temp1,0b00000100

eor button,Temp1 ;invertim biturile

breq m1 ; nui apasat ->

inc ZL inc Temp2

rcall Delay2

CPI Temp2,6brne m1 ; trecem daca nu-i egal

rcall Setclock

Nobut:

sei ; permitem intreruperile

ret;================================================================

Delay2:

LDI r26,15Delay1:

dec r23brne Delay1

dec r24brne Delay1

dec r26brne Delay1

ret4

3

2

1

CPUAVR ATtiny2313

LCD

16x2

ToC.Termometru digital

Ceas timp real

Sistema de alimentare

Tastatura

Acumulator

1

5

6

7

5

20

12

13

1

22

21

16

18

17

8

6

7

4

3

START

Def. variabile

Perm. intreruperile

Set. Porturile

Initializare LCD

Initializare Term

Initializare Ceas

Press

STOP

Set taimerul

Timer1_comp1

Interz. intreruperile

Primim t-ra

Prelucram inf

Incr

Afisam ceas,data

Afisam t-ra

Perm. intreruperile

RETURN

Nu

Da

PRESS

Interz. intreruperile

Perm. intreruperile

RETURN

Da

*but apas ?

+but apas ?

-but apas ?

Nu

LCD

dec

2

19

23

10

11

14

15

Fig 18 Algoritmul programei

22