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