Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • Termometru-termostat cu două canale pe ATmega8. Termometru electronic cu senzor wireless Schema unui termometru cu două canale pe un microcontroler

Termometru-termostat cu două canale pe ATmega8. Termometru electronic cu senzor wireless Schema unui termometru cu două canale pe un microcontroler

Iată un proiect pentru un termometru cu două canale. Poate măsura temperaturi în intervalul de la -50,0 până la +99,9 grade. Aparatul a fost conceput pentru a măsura temperatura în interior și în exterior, dar are și multe alte utilizări. Cu o ușoară modificare a programului, dispozitivul poate fi folosit și ca termostat. Termometrul este construit pe popularul și foarte răspândit senzor și microcontroler ATtiny2313, care a simplificat foarte mult dezvoltarea și a permis o reducere semnificativă a dimensiunii. Termometrul a fost comprimat astfel încât aproape toate elementele să fie situate sub afișajul cu trei cifre de 15 mm. Aproape toate elementele sunt SMD. Desigur, componentele TH ar putea fi folosite, dar în era miniaturizării, este mai bine să faceți un pas mai departe pentru a crea un sistem cu cele mai mici dimensiuni. Termometrul poate măsura temperatura în două locuri, folosind doi senzori conectați pe autobuze independente. Modificarea temperaturii afișate se face folosind două butoane.

Principiul de funcționare

Diagramă schematică:

Inima dispozitivului este microcontrolerul U1 (ATTINY2313), care este tactat de un oscilator intern de 8MHz, fără divizor de frecvență. Absența cuarțului a făcut posibilă reducerea dimensiunii dispozitivului și, de asemenea, a eliberat două picioare MK, butonul S2 este acum conectat la unul dintre ele. Microcontrolerul primește citiri de temperatură de la doi senzori, convertește datele într-o formă adecvată pentru afișare pe afișaj și procesează apăsările butoanelor S1 și S2. Condensatorul C1 (100nF), situat lângă microcontroler, este un condensator de filtrare. Condensatorii C2 (10 µF) și C3 (10 µF) sunt necesari pentru funcționarea corectă a U3 (78L05) Simplitatea circuitului se datorează senzorului de temperatură utilizat. Acesta este un termometru digital de 12 biți care poate funcționa de la -55 la +125 de grade. Timpul de procesare (conversie) a temperaturii nu durează mai mult de 750 ms. Comunicarea cu microcontrolerul se realizează printr-o interfață cu 1 fir. Indicatorul de temperatură este un afișaj cu LED din trei cifre (AT5636BMR-B) cu conexiuni de segmente interne, adaptat pentru afișaj dinamic. Rezistoarele R4-R11 limitează curentul de pe afișajul LED la 10-12 mA (pe segment). Cu toate acestea, curentul mediu este mai mic datorită utilizării afișajului dinamic. Anozii sunt controlați de trei tranzistoare populare T1 - T3 (BC857). Curenții de bază sunt limitați de rezistențele R1-R3 (3,3 kOhm). O componentă importantă este conectorul GP1, prin care sunt conectați senzorii și ieșirea de control (în cazul unui termostat).

de fabricație

Dispozitivul este realizat pe baza unei plăci de circuit imprimat. Placa este cu o singură față și aproape toate elementele sunt SMD. Excepție fac afișajul, butoanele de control și conectorii. Asamblarea nu este dificilă, dar necesită multă pricepere atunci când lipiți SMD. Dezavantajul plăcii este lipsa unui conector de programare, așa că dacă trebuie să faceți modificări în program, va trebui să lipiți firele programatorului direct pe placă. Dar puteți instala un conector miniatural pe placă.

Pinout conector

Pinii 1 și 2 ai acestui conector sunt alimentare și împământare. Pinul 3 este destinat pentru conectarea unei indicații de temperaturi negative (catod la conector, anod la +5V printr-un rezistor de 200 - 300 Ohm). Senzorii sunt conectați printr-un fir cu trei fire. Primul senzor este conectat la pinul 5, iar al doilea senzor este conectat la pinul 6. Dispozitivul este alimentat de la 7-12V printr-un stabilizator 78L05.

Programare

Programul este scris într-un mediu de programare binecunoscut. Ocupă aproximativ 70% din memoria microcontrolerului și poate fi compilat cu succes în versiunea demo a BASCOM"a. Programul nu este complicat. Mai jos sunt câteva elemente de cod

Manager de întreruperi Timer0:

Przerwanie0: Timer0 = 131 Set F4ms Incr Dziel(1) Dacă Dziel(1) = 25 Atunci Dziel(1) = 0 Set F100ms Incr Dziel(2) Dacă Dziel(2) = 10 Atunci Dziel(2) = 0 Set F1s End If End If Return

Bucla principală:

Do If F4ms = 1 Then Reset F4ms "co 4ms Wysw = T Gosub Wyswietl_zmierz End If If F100ms = 1 Then Reset F100ms "co 100ms If Pind.2 = 0 Then Kanal = 1 If Pina.0 = 0 Then If Kanal Sfârșitul buclei

Procedura de control a afișajului:

Wyswietl_zmierz: Incr Mux If Mux = 5 Then Mux = 0 Portd.3 = Not Minus For I = 1 To 3 Wysw_pomoc = Wysw Mod 10 Ww = Wysw_pomoc W(i) = Lookup(ww , Tabela) Wysw = Wysw / 10 Next I Dacă W(3) = 40 Atunci W(3) = 255 "wygaszenie zera wiodącego Select Case Mux Case 0: Portb = W(3) Reset Portd.6 Case 1: Set Portd.6 Portb = W(2) And &B11011111 Reset Portd.5 Case 2: Set Portd.5 Portb = W(1) Reset Portd.4 Case 3: Set Portd.4 Portb = 255 Gosub Temp "Caz 4: End Select Return Tablea: Date 40 , 235 , 50 , 162 , 225, 164, 36, 234, 32, 160

Procedura de masurare a temperaturii:

Temp: Dacă F1s = 1, Resetați F1s 1wreset Pind , Kanal 1wwrite &HCC , 1 , Pind , Kanal 1wwrite &HBE , 1 , Pind , Kanal T = 1wread(2 , Pind , Kanal): Minus = T.15 T = Abs(t ) T = T * 10 T = T / 16 1wreset Pind , Kanal 1wwrite &HCC , 1 , Pind , Kanal 1wwrite &H44 , 1 , Pind , Kanal End If Return

Fișierele microcontrolerului trebuie setate să funcționeze cu oscilatorul RC intern de 8 MHz

Fotografii

Lista radioelementelor

Desemnare Tip Denumire Cantitate NotăMagazinBlocnotesul meu
U1 MK AVR pe 8 biți

ATtiny2313

1 SO20 La blocnotes
U3 Regulator liniar

L78L05

1 SOT89 La blocnotes
T1-T3 Tranzistor bipolar

BC857

3 La blocnotes
C1 Condensator100 nF1 La blocnotes
C2, C3 Condensator electrolitic10 uF2 Tantal SMD 3216A La blocnotes
R1-R3 Rezistor

3,3 kOhm

3 SMD 0805 La blocnotes
R4-R11 Rezistor

330 ohmi

8 SMD 0805 La blocnotes
R12, R13 Rezistor

4,7 kOhmi

2 SMD 0805 La blocnotes
W1 Indicator cu șapte segmenteAT5636BMR1

Tip echipament: Termometru, dispozitiv de control termic, analizor de temperatura.

Producator: Rusia

Seria: TK-5

Model: TK-5.11

Descriere: Dispozitiv pentru măsurarea temperaturii și umidității relative.

Garanție pentru termometrul de contact TK-5.11: 24 luni.

Termometru la a lua legatura TK-5.11 este inclus în Registrul de stat al instrumentelor de măsurare.

Scopul dispozitivului:

Termometrul digital de contact TK-5.11 este conceput pentru a măsura temperatura diferitelor medii și umiditatea relativă a aerului prin contactul direct al sondei cu obiectul de măsurat. Termometrul este un dispozitiv cu două canale care permite funcționarea simultană a două sonde de măsurare. Constă dintr-o unitate electronică și sonde înlocuibile. Convertoare termoelectrice (TC) de la NSKh la GOST R 8.585. Iar senzorii capacitivi de umiditate sunt utilizați ca element de măsurare în sondele de umiditate relativă.

Funcționalitatea termometrului TK-5.11:

  • măsurarea simultană a umidității sau temperaturii prin două canale în orice combinație cu un singur dispozitiv;
  • măsurarea temperaturii cu o rezoluție de 0,1 °C;
  • măsurarea umidității cu o rezoluție de 0,1%;
  • posibilitatea de schimbare a sondei;
  • capacitatea de a afișa temperatura senzorului de compensare a temperaturii;
  • capacitatea de a afișa temperatura aerului atunci când se utilizează o sondă de umiditate;
  • stocarea valorilor măsurate de temperatură sau umiditate în memoria dispozitivului;
  • afișarea valorii medii a temperaturii sau umidității pentru un anumit număr de măsurători;
  • afișarea valorii maxime a temperaturii sau umidității (pentru un număr specificat de măsurători);
  • afișarea valorii minime de temperatură sau umiditate (pentru un număr specificat de măsurători);
  • indicarea tensiunii de alimentare;
  • stabilirea valorilor limită ale temperaturii sau umidității măsurate;
  • indicație sonoră atunci când sunt atinse nivelurile specificate de temperatură măsurată sau umiditate;
  • indicator luminos;
  • oprirea automată a dispozitivului după un timp specificat;
  • salvare automată la oprirea curentului, mediu, max, min, tensiune de alimentare, timpul de funcționare rămas al dispozitivului la momentul opririi.

Caracteristicile termometrului TK-5.11:

  • Măsurarea umidității.
  • Măsurarea simultană a temperaturii și umidității.
  • Posibilitatea de a lucra cu sonde înlocuibile.
  • Canal dual.
  • Alimentat cu baterii standard AA.
  • Consum redus de energie (cel puțin 350 de ore de funcționare de la un set de baterii).

Caracteristicile tehnice ale termometrului TK-5.11:

Gama de temperaturi măsurate, °C

100...+1800 (în funcție de tipul de sondă utilizat)

Eroare relativă, %

±0,5 + unități ml.mărime

Prețul unitar al cifrei celei mai mici, °C

0,1

Numărul de tipuri de sonde de înlocuire

Interval de măsurare a umidității relative, %

3...97

Eroarea absolută a măsurării umidității relative, %

Condiții de funcționare, °C

20...+50

Tensiune de alimentare, V

1,5x2

termeni de utilizare

temperatura ambiantă, °C

20...+50

umiditate relativă, %

nu mai mult de 80% la T = 35 °C

presiunea atmosferică, kPa

86 - 106

Domeniul de aplicare al termometrului TK-5.01:

  • Inginerie termică și echipamente tehnice ale serviciilor municipale. Audit energetic al spațiilor, controlul temperaturii calității utilităților, reglarea condițiilor termice în încăperile cazanelor.
  • Întreprinderi industriale. Monitorizarea temperaturii pieselor în timpul sudării, în metalurgie, reglarea condițiilor de temperatură în producția de materiale de construcție și produse din plastic, determinarea temperaturii matrițelor în industria sticlei și a cofetăriei.
  • Industria alimentară. Monitorizarea temperaturii proceselor tehnice de gătit, afumare, coacere, producție de drojdie, malț etc.

Set de livrare de termometru TK-5.01P:

  • termometrul TK-5.11
  • manual de instrucțiuni și pașaport
  • certificat de verificare
  • geanta-cutie

*Specificațiile și domeniul de livrare a dispozitivelor de control al temperaturii pot fi modificate de către producător fără notificare prealabilă.

Informații suplimentare despre termometre pot fi obținute contactând specialiștii noștri sunând la numerele indicate secțiune" contacte".

Livrăm dispozitive de măsurare a temperaturii în toată Rusia prin servicii de curierat și companii de transport.

Am decis să fac un termometru cu două canale, dar nu unul obișnuit, ci cu senzor wireless pentru stradă. Ideea cu siguranță nu este nouă și termometre industriale similare sunt deja pe piață. Deoarece aveam experiență în conectarea modulelor radio la un microcontroler, am început să dezvolt propria mea versiune a unui termometru fără fir.

Pentru a măsura temperatura, am folosit senzorii obișnuiți DS18B20, iar pentru afișarea citirilor l-am folosit pe cel nu mai puțin popular. Am discutat mai devreme despre modulele radio și algoritmul de transmisie a datelor într-un articol despre

Mai jos este o diagramă a unui senzor wireless pe un microcontroler PIC12F675.

După ce este aplicată alimentarea, microcontrolerul citește valoarea temperaturii de la senzorul BK1 și trimite aceste date la transmițătorul radio A1, după care intră în modul de repaus. Microcontrolerul se trezește printr-o întrerupere, care este generată de o modificare a nivelului pe linia GP0. La această linie este conectat un circuit RC pe elementele R2 și C4, care îndeplinește funcția de cronometru. La ieșirea din modul de repaus, linia GP0 este setată la un nivel logic scăzut, descarcând astfel condensatorul C4. Înainte de a intra în „sleep”, linia este ajustată la intrare, condensatorul începe să se încarce prin rezistorul R4, iar când este atinsă tensiunea de prag (aproximativ 1,2 V), microcontrolerul este întrerupt și trezit. Cu valorile R2 și C4 indicate în diagramă, perioada de trezire este de aproximativ 5 minute. Prin instalarea jumperului JP1, puteți reduce perioada la 5,5 secunde. Selectând un condensator și un rezistor, puteți regla perioada de timp dorită, dar trebuie să țineți cont de curentul de încărcare al condensatorului în ceea ce privește consumul de energie.

Valoarea temperaturii este transmisă pe canalul radio sub forma unui pachet de 3 octeți, ultimul octet este suma de control a primilor 2 octeți. Algoritmul de transmitere a datelor pe care îl folosesc, în principiu, ne permite să facem fără o sumă de control probabilitatea de a primi date incorecte este mică; Viteza de transmisie este de 3,3 Kbps. De fiecare dată după măsurarea temperaturii, sunt trimise 3 pachete de octeți, pauza dintre pachete este de 10 ms, am folosit această opțiune de transmisie pentru a crește fiabilitatea primirii datelor de către receptor. Acest lucru se datorează faptului că partea de recepție întrerupe recepția semnalului timp de 4-5 ms în timp ce măsoară temperatura de la senzorul intern (acasă).

O baterie 6F22 9V („Krona”) este utilizată ca alimentare; modulul emițător radio A1 este alimentat direct de la baterie. Pentru alimentarea microcontrolerului, se folosește un stabilizator de tensiune de micro-putere de 5V DA1 (MCP1702), consumul propriu de curent al stabilizatorului este de numai 1-2 µA, curentul maxim de sarcină este de până la 250 mA. Stabilizatorul MCP1702 poate fi înlocuit cu LP2950, ​​al cărui consum de curent este mai mare și este de 75 μA. Stabilizatoarele de tensiune convenționale de tip L78xx au un consum mare de curent de câțiva miliamperi și, prin urmare, nu sunt potrivite pentru echipamente alimentate cu baterii. Consumul de curent al dispozitivului în modul sleep se modifică în timp pe măsură ce condensatorul C4 se încarcă în primele 2,5 minute consumul este de 10 μA, în următoarele 2,5 minute curentul crește treptat până la ieșirea din modul sleep; Acest fenomen apare din cauza prezenței curenților de comutare în tamponul de intrare al microcontrolerului.

Aș dori să remarc că la temperaturi scăzute capacitatea bateriei scade mai repede; Bateriile cu litiu au cele mai bune performante la temperaturi scazute, urmate de bateriile Ni-Mh, bateriile alcaline ocupa pozitia a treia, celulele de sare nu sunt potrivite pentru astfel de conditii.

Mai jos este o diagramă a unui termometru pe un microcontroler PIC16F628A.


Afișajul HG1, senzorul BK1 și microcontrolerul sunt alimentate de o tensiune de 3,3V de la stabilizatorul DA2. Această valoare a fost aleasă datorită caracteristicilor afișajului, a cărui tensiune maximă de alimentare este de 3,3V în plus, nu este necesară potrivirea nivelurilor de tensiune între liniile I/O ale afișajului și microcontrolerului; Modulul receptor A1 este alimentat de stabilizatorul DA1, cu o tensiune de ieșire de 5V. Rezistoarele R6, R7 sunt instalate pentru a se potrivi nivelurilor de tensiune.

Microcontrolerul DD1 citește valoarea temperaturii de la senzorul BK1 la fiecare 2 secunde, în paralel primește un semnal de la receptor, iar când un pachet de octeți este primit de la transmițător, LED-ul HL1 clipește. În partea de sus a afișajului este afișată inscripția „Acasă”, sub care este afișată valoarea temperaturii de la senzorul intern (acasă), sub inscripția „Street” și temperatura primită de la senzorul wireless. După primirea datelor prin canalul radio, microcontrolerul pornește un temporizator care numără invers timpul pentru a controla primirea datelor. Dacă nu au fost primite date în timpul numărătoarei inverse a temporizatorului, în loc de citirile de temperatură, simbolurile liniuțe „- – – – -” sunt afișate pe afișaj. Timpul de numărătoare inversă poate fi setat de la 1 la 15 minute în trepte de un minut. Pentru a face acest lucru, înainte de a programa microcontrolerul, trebuie să scrieți un număr de la 1 la 15 în celula EEPROM cu adresa 0x00. Perioada implicită este de 7 minute. Dacă senzorii BK1 funcționează defectuos, pentru ambele dispozitive, în locul valorii de temperatură corespunzătoare, este afișat mesajul „EROARE”. Butonul SB1 controlează iluminarea de fundal a afișajului în mod implicit; Butonul SB2 este conceput pentru a regla contrastul afișajului, deoarece acesta poate diferi de la un model la altul.

O sursă de alimentare nestabilizată cu o tensiune de ieșire de 8-12V este potrivită pentru alimentarea dispozitivului. Ambele dispozitive sunt găzduite în carcase de plastic. Antena pentru module radio este realizată sub forma unei bucăți de fir unic de 17 cm lungime (un sfert din lungimea de undă a frecvenței purtătoare).





Termometru cu două canale bazat pe microcontroler ATmega8 și senzori DS18B20

Caracteristicile termometrului:
— 2 canale pentru măsurarea temperaturii curente, senzorii sunt conectați la diferiți biți ai portului microcontrolerului
— fiecare canal vă permite să măsurați temperatura curentă în intervalul de la +125 ºС la -55 ºС cu o rezoluție de până la 0,1 ºС
— eroare de măsurare a temperaturii ±0,5 ºС
— detectarea și indicarea posibilelor erori în lucrul cu senzorii de temperatură
— intervalul de măsurare a temperaturii curente — 2 secunde

Dragi cititori ai site-ului!
Dacă sunteți interesat în mod special de designul unui termometru cu două canale, atunci vă pot recomanda utilizarea firmware-ului pentru proiectare pentru a flash-ul firmware-ului microcontrolerului (aici este un cod mai optimizat și „combinat”).

Astăzi, în continuarea dezvoltării proiectului pe ATmega8, ne vom uita la designul „ Termometru cu două canale cu senzori de temperatură DS18B20«.
Designul adus în atenție este simplu, conține un minim de piese și nu necesită configurare.

(Aș dori să vă avertizez imediat că timpul nu stă pe loc și după publicarea articolului a fost finalizat programul termometrului - i s-au făcut trei modificări: în lucrare se folosește un singur cronometru T0, frecvența ceasului intern de microcontrolerul a fost crescut la 8 MHz, algoritmul de determinare a zecimii de temperatură a fost modificat (acum Zecimile nu sunt calculate, ci iau o valoare în funcție de numărul scris în nibble-ul scăzut al registrului LS-bite. Noul program este postat mai jos. cel descris in acest articol))

Temperatura curentă este indicată pe două indicatoare LED cu trei cifre și șapte segmente, cu:
— temperatura sub +100 ºС — indicarea se realizează în trei cifre cu o precizie de zecimi
— temperatura peste +99,9 ºС — indicația se realizează pe trei cifre cu o precizie de un grad
- temperatura peste -10 ºС - se efectuează indicația: prima cifră este semnul „-“, a doua și a treia cifră sunt unități și zeci de grade
- temperatura sub -9,9 ºС - se efectuează indicația: prima cifră este semnul „-“, a doua și a treia cifră sunt zeci și unități de grade
— nu sunt afișate zerouri nesemnificative
Dacă apar posibile erori la lucrul cu senzori de temperatură, pe indicatori se afișează următoarele:
— nu există un nivel ridicat pe linia DQ a senzorului — „Er1”
— fără impuls de prezență de la senzor — „Er2”
- după pulsul de prezență, linia DQ nu a revenit la starea logică „1” - „Er3”
Indicarea erorilor permite identificarea și corectarea defecțiunilor în timp util.

Diagrama unui termometru cu două canale bazat pe senzorii ATmega8 și DS18B20:


Piese utilizate în proiectarea termometrului

Microcontroler ATmega8-16PU cu o frecvență internă de ceas de 4 MHz.
Indicatori— indicatoare LED cu trei cifre și șapte segmente cu un circuit de comutare „catod comun”.
Tranzistoare— Structuri „NPN” BC547 (tranzistoarele pot fi înlocuite cu orice alte structuri NPN de putere redusă).
Rezistențe constante- orice tip, putere 0,25 W, apropiata de valorile indicate in schema.
Senzori— senzori de temperatură DS18B20. Rezoluția este setată „în mod implicit” - 12 biți, ceea ce corespunde unei rezoluții de măsurare a temperaturii de 0,0625 ºС.

Senzorii comunică cu microcontrolerul printr-o magistrală cu 1 fir, care permite, în principiu, „așezarea” senzorilor pe aceeași linie. În designul prezentat, senzorii sunt conectați la diferiți biți ai portului „PB” (6 și, respectiv, 7) din trei motive:
— dacă este necesară distanțarea senzorilor în direcții diferite, așezarea liniilor de legătură este simplificată
- programul este simplificat - nu este nevoie să definiți coduri de 64 de biți ale senzorilor și, în consecință, timpul petrecut pentru comunicarea cu senzorii este redus (ceea ce este important în acest design atunci când se afișează dinamic 6 cifre ale indicatorilor)
- și astfel tot portul rămâne nefolosit
Controlul redundanței ciclice (CRC) nu este definit - în acest design, nu văd niciun rost să verific transmiterea corectă a rezultatelor conversiei temperaturii de către senzori.
La distanțe mari dintre senzori și unitatea principală, poate fi necesară selectarea rezistențelor de tracțiune (de la 1 la 5 kOhm). Poate fi mai bine să conectați aceste rezistențe direct la senzori.

Structura este alimentată de la o sursă stabilizată de 5 volți. Ca sursă de alimentare, puteți utiliza un încărcător de telefon mobil inutil cu o tensiune de ieșire de 5 volți.

Funcționarea termometrului

Programul termometrului cu două canale a fost scris în mediul Algorithm Builder


Programul folosește două cronometre ale microcontrolerului ATmega8 - T0 și T1, care sunt configurate pentru a apela întreruperi atunci când contoarele depășesc.
Când dispozitivul este pornit, se fac setări preliminare pentru porturile microcontrolerului implicate în operație, datele necesare sunt introduse în variabile și întreruperile sunt activate, apoi programul intră într-o buclă fără sfârșit. În viitor, toată funcționarea dispozitivului este efectuată prin întreruperi ale temporizatoarelor T0 și T1.
în care:
La procesarea unei întreruperi de la temporizatorul T0:
— indicarea dinamică a valorilor actuale ale temperaturii pe indicatoarele LED
— citirea alternativă a datelor de la senzorii de temperatură
— calculul și conversia temperaturii pentru afișarea pe indicatoare
La procesarea unei întreruperi de la temporizatorul T1,
— trimiterea alternativă a unei comenzi de conversie a temperaturii prin senzori (cu o frecvență de 1 secundă)
Divizoare de frecvență temporizatoare la frecvența internă a microcontrolerului de 4 MHz sunt configurate următoarele:
- T1 - SK/64 - apelul de întrerupere are loc aproape după 1 secundă
— T0 — setarea frecvenței divizorului pentru temporizator ar trebui să fie SK sau SK/8 — 512 mcs sau 64 mcs — nu este critică (dar nu mai puțin de 2 ms). Acest lucru se datorează faptului că timpul de procesare a întreruperii de la temporizatorul T1 este egal cu timpul necesar senzorului pentru a converti temperatura (conform fișei de date, cu o rezoluție de 12 biți, timpul maxim de conversie este de 750 ms, în în realitate este mult mai rapid)

Pentru a actualiza temperatura curentă mai frecvent Puteți seta oscilatorul intern al microcontrolerului la o frecvență de 8 MHz și puteți seta divizoarele de frecvență ale temporizatorului:
— T0 — SK/64 (frecvența apelului de întrerupere este de aproximativ 2 ms)
- T1 - SK/64 (frecvența apelului de întrerupere este de aproximativ 0,5 secunde)
care vă va permite să actualizați temperatura curentă de la senzori în fiecare secundă. Comenzile mai frecvente pentru a converti temperatura în senzori pot duce la încălzirea acestora și, în consecință, la o creștere a erorii de măsurare.

Dacă sunteți „prieteni” cu programul „Algorithm Builder”. apoi poate fi configurat să actualizeze temperatura curentă în mod continuu, imediat după ce temperatura este convertită de către senzor. Pentru a face acest lucru, trebuie să faceți următoarele:
1. Dezactivați temporizatorul T1
2. Dezactivați rutina de procesare a întreruperilor de la cronometrul T1 (nu trebuie să o dezactivați)
3. Includeți o bucată de „cod gri” într-o „buclă fără sfârșit”
Este posibil ca, pentru a preveni pâlpâirea indicatorilor, frecvența de ceas a microcontrolerului va trebui să crească la 8 MHz.
4. Setați divizorul de frecvență al temporizatorului T0 la o frecvență de întrerupere de cel puțin 2 ms

Dacă indicatorii încă pâlpâie, încercați să „jucați” cu comenzile NOP la începutul și la sfârșitul buclei fără sfârșit - adăugați sau eliminați. De exemplu:


O parte din codul programului este dezactivată; este destinată reducerii rezoluției senzorilor. Pentru a modifica rezoluția convertorului de temperatură trebuie:
1. Includeți o parte a codului pe pagina principală și subrutina pentru modificarea rezoluției în fila „DS18B20”:

2. Activați constantele evidențiate cu roșu în fila „DS18B20”:

Scopul constantelor:
- Read_Scratchpad - Comanda funcției DS18B20 ($4E). Această comandă permite dispozitivului de control să scrie 3 octeți de date în memoria DS18B20. Primul octet de date este scris în registru (TH), al doilea octet este scris în registru (TL), al treilea octet este scris în registrul de configurare
— TH și TL — registre de alarmă de limită superioară și inferioară, constantă b#01010101 — corespunde la 85 ºС (așa cum se stabilește în senzori în mod implicit)
bit11— registrul de configurare, scrierea constantei b#01011111 va modifica rezoluția de la 12 la 11 biți, ceea ce va reduce la jumătate timpul de conversie a temperaturii senzorilor. Pentru rezoluție de 10 biți - b#00111111, pentru rezoluție de 9 biți - b#00011111
3. Schimbați numărul 625 din subprogramul de calcul al temperaturii din fila „DS18B20” la numărul de rezoluție pentru măsurarea temperaturii pentru rezoluția corespunzătoare (125, 25, 5) și, respectiv, numerele 1000 și 999 (pentru 125 - 1000 și 999, pentru 25 - 100 și 99, pentru 5 - 10 și 9)

Daca aveti intrebari scrieti, va raspund.

Atasamente la articol:

(50,6 KiB, 26.984 accesări)

Distribuie la:

Recent, multe descrieri ale diferitelor modele de microcontrolere au fost publicate în literatura de radio amatori, cel mai adesea din familia picmicro de la microcip. Fără a le diminua meritele, autorul a decis să reamintească că există și alte microcontrolere și a realizat dispozitivul propus pe unul dintre ele - AT89C2051 din familia mcs-51.

Microcontrolerele din familia MC5-51 sunt campionii fără îndoială dintre cele pe opt biți atât în ​​ceea ce privește numărul de soiuri, cât și în numărul de companii care le produc modificările. Primul reprezentant al acestei familii, Intel 8051, a fost lansat în 1980. Pentru vremea lui, acesta era un produs foarte complex. Există 128 de mii de tranzistori pe cipul său, de patru ori mai mulți decât în ​​microprocesorul Intel 8086, baza pentru computerele personale ibm pc. Un set de succes de dispozitive periferice, capacitatea de a lucra cu memorie de program externă și internă și un preț accesibil au asigurat microcontrolerului Intel 8051 un mare succes. Un rol important l-a jucat politica deschisă a Intel, care a distribuit pe scară largă licențe pentru producția de dispozitive cu nucleul 8051 printre cele mai importante companii de semiconductori din lume: philips, siemens, intel, atmel, dallas. temic, ow. amd, mhs, lg (winbond, sisteme de siliciu și o serie de altele. În URSS, microcontrolere din familia msc-51 au fost produse la Kiev (1816BE31. 1816BE51), Voronezh (1830BE31, 1830BE51), Minsk (1834BEZs1) și Novosibirsk (1850BE31).
Astăzi, peste 200 de modificări ale microcontrolerelor din această familie sunt produse în întreaga lume, variind de la simple 20 de pini la complexe de 100 de pini cu ADC-uri încorporate, numeroase timer-countere, multiplicatori hardware și 64 KB de memorie de program pe un un singur cip. Toate au un sistem de comandă comun și, din punctul de vedere al unui programator, diferă doar prin numărul de registre cu scop special.
Când autorul a avut nevoie să protejeze subsolul garajului de îngheț prin monitorizarea și reglarea de la distanță a temperaturii din acesta, pentru unitatea de măsurare a temperaturii și controlul încălzitorului a fost ales microcontrolerul at89c2051-24pi din familia menționată. Din cauza lipsei de memorie de date nevolatile pentru a stoca informații despre modul setat și valorile de temperatură admise, a fost necesar să se utilizeze un cip de memorie nevolatil separat la 24c02-10pi Ambele cipuri sunt proiectate să funcționeze în „industrial ” gama de temperaturi ambientale (-40...+85 ° C) .
Alegerea a fost influențată și de faptul că costul total al acestor microcircuite într-una dintre companiile comerciale din Moscova este jumătate din prețul popularului microcontroler pic16f84a-04i/p, care funcționează în același interval de temperatură.

Principalele caracteristici tehnice
Senzor tip ds1820 sau ds18b20
Temperatura măsurată, °C
maxim+99.9
minim- 55
Rezoluție de citire, „C 0.1
Temperatura menținută C
maxim+99,9
minim0
Timp consumat pentru introducerea unei noi valori a temperaturii menținute, s.
nu mai15

Diagrama prezentată în Fig. 1 a devenit aproape clasic pentru dispozitivele cu microcontroler în acest scop. Microcontrolerul dd1 este încărcat cu programul prezentat în tabel.


Capacitatea de încărcare a ieșirilor microcontrolerului utilizat este de 20 mA la un nivel de tensiune scăzut pe ele și doar 50 μA la un nivel de tensiune ridicată, prin urmare, indicatorii LED cu șapte elemente hg1 și hg2 sunt selectați cu anozi comuni; Pentru a reduce numărul de pini de microcontroler necesari pentru conectarea indicatorilor, o indicație dinamică este organizată programatic cu o durată de afișare a fiecărei cifre de 3 ms Elementul g (semnul minus) al indicatorului hg1.1 se conectează în loc de elementul h (punct zecimal). a indicatorului hg1.2. deci indicația este de fapt din trei cifre, ciclul său complet durează 9 ms.
Adesea, în timp ce se efectuează citiri ale senzorului, se calculează temperaturi, se scriu date în eeprom și alte operațiuni relativ lungi, afișajul dinamic este suspendat, ceea ce este perceput ca indicatori care pâlpâie. Pentru a elimina acest fenomen neplăcut, programul este optimizat și funcționează cu o conexiune strictă la tempo-ul afișajului.
Rezistoarele r7-r14 limitează curentul catozilor indicatorilor hg1 și hg2. Tranzistoarele vt1, vt2, vt4 își schimbă anozii, conectându-se la rândul lor la pozitivul sursei de alimentare. Rezistoarele r1, r2 limitează curentul în cazul scurtcircuitelor accidentale ale firelor care merg la senzorii VK1 și VK2, a căror lungime poate ajunge la câțiva metri. Deoarece aceste fire pot fi așezate în imediata apropiere a cablurilor de alimentare, intrările P3.2 ale microcontrolerului dd1 și SCL ale cipului de memorie ds1 sunt protejate de un posibil zgomot de impuls prin diodele vd5 și vd6. Este posibilă utilizarea aceluiași pin de microcontroler atât pentru comunicarea cu senzorul, cât și pentru gestionarea memoriei, deoarece aceste funcții nu sunt niciodată executate în același timp. Rezistorul r4 este o sarcină pentru linia de interfață cu 1 fir, conform căreia comenzile și datele sunt schimbate între microcontroler și senzor.
Rezistorul r3 menține un nivel logic ridicat la intrarea RZ.Z a microcontrolerului atunci când niciunul dintre butoanele de control sb1-sb3 nu este apăsat. Diodele vd7-vd9 elimină consecințele apăsării mai multor butoane în același timp. Tranzistorul vt3, conform comenzilor microcontrolerului, pornește și oprește releul K1, care controlează încălzitorul (sau alt actuator) și LED-ul de semnal hl1. Dioda vd10 protejează LED-ul hl1 de tensiune inversă.
LED-ul hl2, conectat în locul elementului h al indicatorului hg2.2, servește ca indicator suplimentar. De exemplu, este dezactivat atunci când citirile senzorului VK1 sunt afișate pe indicator și pornit când sunt afișate citirile senzorului VK2.
Unitatea de alimentare a dispozitivului constă dintr-un redresor pe o punte de diode vd1 -vd4 și un stabilizator de tensiune +5 V da1.
Senzorii digitali de temperatură VK1, VK2 - ds1820 sau mai modern ds18s20 - sunt incluși în Registrul de stat al instrumentelor de măsurare sub nr. 3169-02 și, prin urmare, sunt aprobați oficial pentru utilizare în Federația Rusă. În unele cazuri, acest lucru este critic. Senzorii funcționează cu o tensiune de alimentare de 3...5,5 V, consumând un curent de cel mult 1 µA în modul de așteptare, iar în timpul citirii temperaturii și generând rezultatul (aceste procese nu durează mai mult de 750 ms) - aproximativ 1 mA . Rezoluția rezultatului măsurării (0,5 C) poate fi redusă prin citirea valorilor registrelor senzorului count_remain (restul după numărare) și count_perc (numărul corespunzător unui grad Celsius). Cunoscându-le și citirea temperaturii (temperatura citită de la senzor într-un mod standard), valoarea sa mai precisă poate fi calculată folosind formula:

Această tehnică aduce discretitatea reprezentării temperaturii la 0,1 °C.
Fiecărei instanțe ale tipurilor de senzori de mai sus i se atribuie un număr individual unic de 48 de cifre binare, stocate în ROM-ul său intern. Acest lucru vă permite să conectați un număr aproape nelimitat de senzori în paralel, interacționând cu fiecare dintre ei separat.
În dispozitivul descris, microcontrolerul trimite mai întâi comanda skip_rom (OSSN) către senzori, instruindu-le să sară peste procedura de verificare a numărului individual. Apoi, comanda convert_t (44H) pornește procesul de măsurare a temperaturii în doi senzori simultan. După 750 ms necesari pentru a finaliza acest proces, microcontrolerul emite comanda match_rom (55H), însoțită de numărul individual al unuia dintre senzori. Ca rezultat, doar acest senzor răspunde la următoarea comandă read_scratchpad (ARIES) și raportează rezultatul măsurării la microcontroler. Apoi (după comanda de configurare inițială) secvența comenzilor match_rom și read_scratchpad se repetă pentru al doilea senzor.
Microcontrolerul procesează datele primite și le afișează pe indicator. Pentru comoditate, zeroul nesemnificativ nu este afișat pe indicator, iar semnul minus, dacă este necesar, este adiacent celei mai semnificative cifre din stânga. Dacă comunicarea cu un senzor eșuează, ceea ce poate indica un senzor defect sau lipsă, va fi afișat un mesaj „-dat” (în formă stilizată) în locul valorii temperaturii.
Prin apăsarea scurtă a butonului sb1, dispozitivul trece la afișarea citirilor senzorului VK1 sau VK2. Dacă țineți apăsat acest buton mai mult de 5 s, va fi activat modul de ieșire secvențială automată a citirilor senzorului cu o perioadă de 5 s. Ieșiți din acest mod apăsând scurt același buton.
Termostatul funcționează întotdeauna conform citirilor senzorului BK2. Prin apăsarea butonului sb2 de pe indicator, valorile temperaturii sunt apelate în următoarea secvență: pragul inferior (când este atins, încălzitorul este pornit) - pragul superior (când este atins, încălzitorul va fi pornit oprit) - curent. Afișarea temperaturii pragului superior pe indicator este însoțită de aprinderea LED-ului hl2.
Modificați valoarea pragului de temperatură afișată în prezent pe indicator apăsând butoanele sbi (creștere) și 5°C (scădere). Etapa de schimbare este de 0,1 °C. Dacă țineți apăsat butonul corespunzător mai mult de 1 secundă, valoarea va începe să crească sau să scadă cu o rată de 30 de pași pe secundă. Dacă nu este apăsat niciun buton în decurs de 5 s, dispozitivul trece automat la afișarea temperaturii curente. Pentru a opri termostatul, este suficient să setați pragurile de temperatură egale sau cea inferioară este mai mare decât cea superioară.
Înainte de a începe măsurarea temperaturii și reglarea acesteia, dispozitivul trebuie să „înregistreze” senzorii conectați la acesta - să determine și să rețină numerele lor individuale. Pentru înregistrare, senzorii sunt conectați unul câte unul (al doilea trebuie oprit în acest moment).
După ce porniți dispozitivul, apăsați butonul sb2 și țineți-l apăsat cel puțin 5 s până când pe indicator apare mesajul stilizat „pr1”. indicând disponibilitatea de a înregistra senzorul conectat ca BK1. Dacă trebuie să înregistrați senzorul ca BK2, apăsați scurt butonul sb2, care va afișa mesajul „pr2” pe indicator. Cu o altă apăsare puteți întoarce mesajul „pr1” la indicator și așa mai departe.
Înregistrarea efectivă are loc după apăsarea butonului sb1. Dacă nouă încercări ale microcontrolerului de a comunica cu senzorul, de a determina și de a reține numărul său individual nu reușesc, se va ajunge la concluzia că senzorul este defect sau lipsește, iar pe indicator va fi afișat mesajul „-dat”. După înregistrarea cu succes, indicatorul va afișa valoarea temperaturii măsurată de senzorul înregistrat. Procedura descrisă trebuie, de asemenea, urmată dacă unul sau ambii senzori sunt înlocuiți. Datele despre senzori și modurile de afișare sunt stocate în cipul de memorie nevolatilă ds1.


Termometrul-termostatul este asamblat pe o placă de circuit imprimat cu o singură față de 75x74 mm, prezentată în Fig. 2. Scopul de a atinge densitatea maximă de montare și dimensiunile minime ale plăcii nu a fost stabilit în timpul dezvoltării sale. În condiții de amatori, ușurința de fabricație, ușurința de instalare și configurare sunt mult mai importante. Evident, prin utilizarea elementelor de dimensiuni mici și montarea pe suprafață pe două fețe, dimensiunile plăcii ar putea fi reduse semnificativ. Dar acest lucru nu ar oferi niciun beneficiu operațional. Există o mulțime de spațiu liber unde dispozitivul ar trebui să fie instalat. Aspectul plăcii montate și de operare este prezentat în Fig. 3.

Aparatul este alimentat de la rețea prin orice transformator coborâtor cu o tensiune pe înfășurarea secundară de 9 V la un curent de 300 mA și o bună izolație între înfășurări. În locul indicatoarelor LED verzi duble hlec-d512gwb, puteți folosi oricare alții cu un anod comun, de la o singură cifră la cvadruplu. Desigur, cu ajustări adecvate la placa de circuit imprimat.
Diodele 1n4148 sunt înlocuite cu orice diode de siliciu de putere redusă, de exemplu, seria KD522, iar diodele 1n4007 sunt înlocuite cu diode redresoare cu un curent de cel puțin 300 mA, de exemplu, seria KD208 sau KD209. Înlocuirea tranzistorilor -KT310. KT502B, KT502G, VS327. Stabilizatorul 7805 poate fi înlocuit cu KR142EN5A sau KR142EN5V casnic. Este recomandabil să-l echipați cu un mic radiator. În loc de microcircuitul AT24C02, puteți utiliza AT24C01A. Frecvența rezonatorului de cuarț poate fi în intervalul 10... 12 MHz. Releul K1 - cu o înfășurare de 12 V, un curent de funcționare de 70 mA și contacte proiectate pentru un curent de 10 A la o tensiune de 250 V. În locul unui nap electromagnetic, puteți utiliza un întrerupător triac cu izolare optică, asamblarea acestuia conform la un circuit similar cu cel prezentat în Fig. 2 în articolul lui S. Koryakov „Termometru cu funcție de cronometru sau control termostat” (Radio. 2003, nr. 10, pp. 26-28).
Dispozitivul este plasat într-o carcasă din material izolator cu conectori pentru conectarea senzorilor (sunt convenabil conectorii audio cu trei pini cu un diametru de 3,5 mm), o rețea și un încălzitor.

Secțiunea: [Dispozitive pe microcontrolere]
Salvați articolul pe:
Lăsați comentariul sau întrebarea dvs.:

Cele mai bune articole pe această temă