Indicatorul de temperatură al termometrului de pe microcontroler pic16f628a. Realizarea unui termometru simplu pe un microcontroler. Aspectul plăcii de circuit imprimat finit pentru un termometru

Figura prezintă o diagramă a unui termometru bazat pe microcontrolerul PIC16F628A; un senzor digital de temperatură DS18B20 este utilizat ca senzor. Indicatorul termometrului este format dintr-un indicator cu 4 cifre și șapte segmente. Interval de temperatură măsurat de la-55 până la + 125 grade Celsius. Temperatura se citește la fiecare 15 secunde, timpul de citire poate fi modificat în cod.

Tensiunea de alimentare a termometrului este de 5V, consumul de curent este de 90 mA. Circuitul folosește BC337 sau tranzistoare similare. Consumul de curent al fiecărui segment indicator este de 15 mA (indicație dinamică), care este limitat de rezistențe de 220 Ohm (indicator cu catod comun).

Fișier cu firmware -

Termometru digital DS18B20 cu rezoluție programabilă, de la 9 la 12 biți, care poate fi stocat în memoria EEPROM a dispozitivului. DS18B20 face schimb de date printr-o magistrală cu 1 fir și poate fi fie singurul dispozitiv de pe linie, fie poate lucra într-un grup. Toate procesele de pe magistrală sunt controlate de un microprocesor central.

Domeniu de măsurare de la –55°C la +125°C și precizie de 0,5°C în intervalul de la –10°C la +85°C. În plus, DS18B20 poate fi alimentat de la tensiunea liniei de date („putere parazită”) în absența unei surse externe de tensiune.
Fiecare DS18B20 are un cod serial unic de 64 de biți care îi permite să comunice cu mai mulți senzori DS18B20 instalați pe aceeași magistrală. Acest principiu permite utilizarea unui microprocesor pentru a controla mulți senzori DS18B20 distribuiți pe o zonă mare. Aplicațiile care pot beneficia de această caracteristică includ sistemele de control al temperaturii în clădiri, echipamente sau utilaje, precum și monitorizarea și controlul proceselor de temperatură.

  • Articole similare

Conectați-vă folosind:

Articole aleatorii

  • 10.10.2014

    Figura prezintă un circuit al unui preamplificator cu un bloc de timbre; blocul de timbre este inclus în circuitul de feedback al preamplificatorului. Tensiunea de alimentare a dispozitivului poate varia de la 12 la 24V, consumul de curent nu este mai mare de 10 mA. Semnalul de intrare ajunge prin condensatorul de cuplare C1, rezistențele R1 și R2 determină tensiunea de polarizare a tranzistorului VT1, după pre-amplificare ...

O zi bună, dragi cititori. După cum sugerează și titlul articolului, vom vorbi despre un termometru asamblat pe un PIC. Asa de. De ce și cum a început totul?!
Aveam nevoie de o diagramă a unui termometru simplu pentru subsolul garajului. Am început să caut o schemă potrivită pe Internet. Un criteriu important a fost utilizarea unui număr minim de elemente în circuit. Voi spune imediat că există o mulțime de astfel de circuite de termometre online. Dar! Cel mai adesea sunt realizate pe AVR-uri cu care, spre regretul meu cel mai profund, nu sunt prieten. Așa că am început să caut un circuit PIC. Dar și aici am fost dezamăgit. Există scheme pentru termometrele PIC. Dar folosesc fie tranzistori pentru indicatori, fie cuarț extern, fie altceva care a complicat circuitul și a fost inacceptabil în cazul meu. În cele din urmă, după o lungă căutare, a fost găsită aici o schemă care mi se potrivea:

http://www.labkit.ru/html/show_meter?id=38
Și s-a repetat cu succes de mai multe ori. Totul funcționează grozav. (pe site-ul web al autorului acestui circuit există atât firmware, cât și o placă de circuit imprimat pentru replicarea acestui termometru). Odată cu trecerea timpului. Și la un moment dat, deficiențele acestui circuit au devenit mai întâi clare și, de asemenea, trebuia să folosesc un indicator cu un catod comun (pe site-ul web al autorului, firmware-ul era doar pentru anodul comun). Acum despre deficiența schemei din sursa originală. Inițial, circuitul autorului nu are o rezistență de tragere pentru senzorul de temperatură. Adică nu există nicio rezistență de 4,7K în circuit. Da, într-adevăr, cu acest design al circuitului, termometrul poate funcționa, dar numai dacă senzorul de temperatură este lipit direct în placă sau lungimea firului pe care se află senzorul nu trebuie să depășească o lungime a firului de un metru. , un metru și jumătate. Nu mai. În caz contrar, indicatorul începe să arate niște prostii, nu temperatură.
Această întorsătură a evenimentelor nu m-a făcut deloc fericit. Pentru ca aveam nevoie ca lungimea firului cu senzorul sa fie de minim 10 metri.
Această problemă a fost rezolvată foarte simplu și rapid, și anume prin instalarea unui rezistor pull-up de 4,7K pe senzor. După care senzorul a început să funcționeze stabil pentru orice lungime de fir. Dar dacă am doar indicatoare cu catod comun! Și firmware-ul a fost făcut pentru anod... Aici m-a ajutat Stanislav Dmitriev. Pentru care îi mulțumesc foarte mult. Nu numai că a scris firmware-ul pentru anodul comun. Dar și pentru un catod comun și pentru diferite tipuri de senzori de temperatură (DS18S20 sau DS18B20). Acest lucru a făcut posibilă unificarea în continuare a acestei scheme. Și recomand pentru repetare. De asemenea, este posibil să se utilizeze în circuit atât dispozitive cu șapte segmente pe patru biți, cât și cu șapte segmente pe trei biți. Ceea ce nu este un lucru mare, dar totuși un plus.
Acum circuitul în sine

După cum puteți vedea, diagrama nu este diferită de cea prezentată pe site-ul web http://www.labkit.ru
Așa a fost conceput inițial. Singura modificare a circuitului este instalarea unui rezistor suplimentar. Nu am redesenat diagrama de la zero. Tocmai am adăugat elementul lipsă din circuit. În esență, dacă doriți să simplificați și mai mult circuitul și aveți o sursă de alimentare stabilă de 5V, atunci puteți exclude stabilizatorul liniar din circuit. Și alimentați MK direct de la 5V.
Acum să vorbim puțin despre cum să personalizați singur firmware-ul pentru indicatorul sau senzorul de care aveți nevoie. Totul este simplu aici.

După ce ați încărcat fișierul firmware în programator, dvs.: pe baza a ceea ce aveți nevoie și privind această captură de ecran, scrieți parametrii de care aveți nevoie în fișierul firmware în secțiunea EPROM. După care puteți flash controler.

În versiunea mea a plăcii de circuit imprimat, placa oferă spațiu nu numai pentru un stabilizator liniar, ci și pentru o punte de diode (care va permite ca circuitul să fie alimentat cu o tensiune de la 7,5 V la 12 V. Placa oferă și spațiu pentru instalare). un bloc terminal, care vă permite să nu lipiți un senzor de temperatură în placă și să îl fixați cu cleme.Acest lucru este convenabil când schimbați senzorul sau când instalați senzorul pe un fir lung. Vă permite să schimbați rapid firul.

Desen pe tablă

După cum puteți vedea, termometrul este asamblat pe două plăci. Unul este echipat cu un indicator cu șapte segmente (trei sau patru cifre). Toate celelalte elemente ale circuitului sunt instalate pe a doua placă. Plăcile sunt conectate între ele folosind un pieptene sau, în cazul meu, prin fire..
La sfârșit este o fotografie cu termometrul meu terminat.

Designul unui termometru cu 2 canale bazat pe PIC16F628A și DS18B20, destinat utilizării casnice, a fost de interes atât pentru radioamatorii obișnuiți, cât și pentru cei care au o mașină.

Pentru a fi utilizat într-o mașină, designul termometrului a suferit o serie de modificări, atât de circuite, cât și de software. Inscripția „Acasă” a fost înlocuită cu „Salon”, iar linia inferioară a afișajului afișează acum tensiunea rețelei de bord a vehiculului. La implementarea funcției de măsurare a tensiunii rețelei de bord, au apărut dificultăți din cauza lipsei unui convertor digital-analogic (ADC) în microcontrolerul utilizat. Dar microcontrolerul are un modul comparator, care a fost folosit pentru a măsura tensiunea de la bord. Folosind modulul comparator, a fost posibil să se măsoare tensiunea în intervalul de tensiune de intrare de la 5,6 V la 16 V cu o rezoluție de măsurare de 0,7 V. Aceasta este cea mai bună opțiune pentru a rezolva problema fără a înlocui microcontrolerul. Cunoscând tensiunea rețelei de bord, puteți evalua starea bateriei. Imediat când dispozitivul este pornit (folosind contactul sau altă metodă), se măsoară tensiunea de la bord. Dacă tensiunea de bord este mai mică de 10,5 V, termometrul-voltmetrul mașinii va anunța cu un semnal sonor (timp de 1,5 s) și, în același timp, va afișa mesajul „Baterie - descărcată” în linia de jos a afișajului pentru aproximativ 3...4 s. Apoi, valoarea curentă a tensiunii de la bord va fi afișată în linia de jos. Dacă valoarea tensiunii este mai mică de 5,6 V, indicatorul va afișa mesajul „Tensiune<6B ", iar dacă este mai mare de 16 V - " Tensiune >16V".

Descrierea circuitului:

Microcontrolerul de la Microchip PIC16F628A este folosit ca controler de control D1, care operează în acest dispozitiv de la un generator de ceas intern (4 MHz).

Microcontrolerul afișează informații despre temperaturile măsurate și tensiunea rețelei de bord a vehiculului pe indicatorul LCD E1 de pe telefonul mobil Nokia3310. Aceste informații sunt transmise printr-un canal de interfață serială de tip SPI. Schimbul de informații între microcontroler și afișaj este unidirecțional; datele sunt transferate numai de la microcontroler la indicator.

Rezistoarele R11...R15, împreună cu circuitele de protecție încorporate de intrare ale indicatorului, asigură coordonarea nivelurilor semnalelor de control furnizate indicatorului.

Indicatorul este alimentat de un stabilizator parametric de tensiune, care asigură o tensiune de alimentare a indicatorului de aproximativ +3,3V. Stabilizatorul de tensiune este alcătuit din diodă zener V5, rezistența R10 și condensatorul de filtru C8. Alimentarea stabilizatorului provine de la o sursă de tensiune stabilizată de +5V. Măsurarea temperaturii este realizată de senzorii digitali de temperatură U1 și U2 de la Maxim DS18B20. Acești senzori sunt calibrați din fabrică și vă permit să măsurați temperaturile ambiante de la -55 la +125°C, iar în intervalul -10...+85°C producătorul garantează o eroare absolută de măsurare nu mai rea de ±0,5°C. La limitele intervalului de temperaturi măsurate, precizia se deteriorează la ± 2 ° C. Citirile termometrului sunt afișate în întregul interval de temperaturi măsurate cu o rezoluție de ± 0,1 ° C.

Schimbul de date și comenzi între microcontrolerul D1 și senzorii de temperatură U1 și U2 se realizează folosind un canal de interfață serială cu 1 fir. Pentru a simplifica software-ul, senzorii sunt conectați la intrări separate ale microcontrolerului. În acest caz, protocolul de schimb prin magistrala 1-Wire este simplificat: senzorii de adresare și inițializarea lor preliminară nu sunt necesare.

Rezistoarele R4, R6 sunt rezistențe de sarcină pentru liniile de interfață cu 1 fir. Rezistoarele R5, R7 îndeplinesc funcția de a proteja sursa de alimentare internă a termometrului în cazul unui scurtcircuit în circuitele de alimentare ale senzorului.

Conectorul X3 este utilizat pentru programarea în circuit a microcontrolerului D1. Trebuie instalat atunci când se utilizează un microcontroler SMD sau când un microcontroler dintr-un pachet DIP este lipit direct pe placă, mai degrabă decât instalat într-o priză. Conectorul X3 asigură conectarea directă a programatorului PICKIT2 la termometru.

Emițătorul piezo SP1 furnizează semnale sonore care anunță că bateria este descărcată.

Circuitul intern de alimentare al unui termometru auto este implementat astfel: - de la conectorul X4, tensiunea de bord este furnizată prin dioda V1 și rezistența R3 la cipul de stabilizator de tensiune integrat U3 de tip 7805.

Acest microcircuit folosește tensiunea rețelei de bord pentru a genera o tensiune stabilizată de +5V pentru a alimenta microcontrolerul, stabilizatorul indicator parametric și senzorii digitali de temperatură;

Dioda V1 previne trecerea zgomotului de impuls de tensiune negativă în circuitul de alimentare al termometrului, protejează dispozitivul în caz de alimentare incorectă a dispozitivului (inversarea puterii) și împreună cu condensatorul C1 împiedică repornirea microcontrolerului dispozitivului în eventualitatea scăderilor de tensiune în rețeaua de bord atunci când pornesc mașina demarorul sau alți consumatori mari consumatoare de energie; - Rezistorul R3, împreună cu dioda de limitare (supresor) V2, protejează circuitele interne ale termometrului de supratensiunile rezultate din influența zgomotului de impuls.

Unitatea de generare a semnalului analogic necesar pentru măsurarea tensiunii rețelei de bord este asamblată pe un divizor de tensiune rezistiv R1, R2, un condensator cu filtru de suprimare a zgomotului C2 (R1, C2) și diode V3, V4, care împreună cu Rezistorul R1 protejează intrarea analogică a microcontrolerului de supratensiuni.

Pentru a crește acuratețea măsurării tensiunii, este recomandabil să folosiți rezistențele R1 și R2 cu o precizie de 1%, dar deoarece rezoluția de măsurare este foarte mare (0,7V), această condiție nu este necesară.

Puterea rezistenței R3 trebuie să fie de cel puțin 0,5 W, iar puterea rezistențelor din oțel poate fi de 0,125 W pentru ieșire și 0,1 W pentru rezistențe SMD

Un prototip de termometru de mașină a fost asamblat pe o placă de circuit imprimat cu o singură față:

Atenție, placa de circuit imprimat și instalarea prototipului se realizează conform schemei - Shema_avto_termo_3310_pic16f628.spl, al cărei fișier este prezentat mai jos. Diferența față de diagrama prezentată mai sus este doar în designul și desemnările poziționale ale elementelor.

În acest articol vom trece în revistă termometru digital, construit pe microcontroler Attiny2313, echipat senzor digital la distanță DS18B20. Intervalul de măsurare a temperaturii este de la -55 la +125 grade Celsius, pasul de măsurare a temperaturii este de 0,1 grade. Circuitul este foarte simplu, conține un minim de piese și poate fi ușor asamblat cu propriile mâini.

Descrierea funcționării circuitului termometrului

Termometru electronic de casă cu senzor de la distanță construit pe tot ce se știe. Microcircuitul DS18B20 de la Dallas acționează ca un senzor de temperatură. Într-un circuit termometru pot fi utilizați până la 8 senzori digitali. Microcontrolerul comunică cu DS18B20 prin protocolul 1Wire.

În primul rând, toți senzorii conectați sunt căutați și inițializați, apoi temperatura este citită din aceștia și apoi afișată pe indicatorul cu trei cifre și șapte segmente HL1. Indicatorul poate fi utilizat atât cu un catod comun (CC) cât și cu un anod comun (CA). A fost folosit și un indicator similar. Fiecare indicator are propriul firmware. Puteți măsura temperatura atât acasă, cât și afară; pentru a face acest lucru, trebuie să scoateți DS18B20 în afara ferestrei.

Pentru Attiny2313 trebuie să setați siguranțele după cum urmează (pentru program

Termometru pe ATmega8 și senzor de temperatură DS18B20

Circuit termometru pentru ATmega8 și DS18B20

Termometru digital DS18B20
Indicator LED cu șapte segmente
Algoritmul programului termometrului
Program termometru digital pentru DS18B20

Circuitul și programul sunt foarte simple termometru digital folosind un microcontroler ATmega8 si senzor de temperatura DS18B20. Termometrul vă permite să măsurați temperatura de la 0 la 99 de grade cu o precizie de 0,5 grade cu o rezoluție de 0,1 grade

Termometrul este foarte simplu în caracteristicile sale și poate fi folosit doar ca termometru pentru a măsura temperatura „în cameră”. Folosirea unui microcontroler cu 8 kiloocteți de memorie în acest design este, desigur, o risipă; puteți folosi un microcontroler mai simplu. Dar ideea este că acest design stă la baza dezvoltării ulterioare a proiectului folosind senzorul digital de temperatură DS18B20. În articolul următor, designul unui alt termometru va fi publicat - pe doi senzori DS18B20, care vă vor permite să măsurați temperatura nu numai în cameră, ci și „peste bord”. Desigur, se va adăuga și capacitatea de a măsura temperaturi negative. În viitor, la design vor fi adăugate o funcție de termostat, un ceas și capacitatea de a lucra cu diferite sarcini, ceea ce va face posibilă asamblarea unei structuri simple - baza unei „case inteligente”. Ei bine, astăzi este primul articol din această serie.

Circuitul termometrului bazat pe senzorul de temperatură ATmega8 și DS18B20

Să ne uităm la diagrama termometrului:

După cum puteți vedea, circuitul este foarte simplu; se utilizează doar minimul necesar de piese.
Circuitul folosește un indicator LED cu șapte segmente și trei cifre pentru a indica citirile.

Tensiunea de alimentare de proiectare - 5 volți. Dacă utilizați un microcontroler cu sursă de alimentare de joasă tensiune, atunci puteți reduce tensiunea de alimentare a structurii, dar în acest caz, poate fi necesar să reduceți valoarea rezistențelor de amortizare în segmentele indicatoare. Valorile aproximative ale rezistenței pot fi luate:
- cu o sursă de alimentare de 5 volți - 200-300 Ohmi
- cu o sursa de alimentare de 2,7 - 3 volti - 100-150 Ohmi


Tranzistoare- orice structuri NPN de putere redusă.
senzor de temperatura - DS18B20
Indicator cu șapte segmente - orice trei biți cu un catod comun. Dacă doriți să folosiți altele, cu un anod comun, atunci va trebui să înlocuiți tranzistoarele cu cele PNP și să faceți modificări în program (înlocuiți șirul de coduri binare pentru afișarea numerelor pe indicator). Am folosit un indicator de strălucire roșu și, în același timp, pentru următoarea schemă, am pregătit-o pe aceeași, dar cu o culoare albastră strălucitoare.

Părți ale termometrului de pe microcontrolerul ATmega și DS18B20



Pinout microcontroler ATmega8:

Indicator cu trei cifre și șapte segmente FYT-5631AUR-21:

Senzor de temperatură DS18B20:

Tranzistori BC547C:

Algoritmul programului de termometru pe ATmega și DS18B20

Toate setările microcontrolerului sunt setări din fabrică; biții FUSE nu trebuie să fie atinși.

Pentru a opera programul, sunt utilizate două cronometre/contoare ale microcontrolerului:
T0 pe opt biți
T1 pe șaisprezece biți
Prin utilizarea temporizator pe opt biți T0 configurat să apeleze o întrerupere de overflow, cu o frecvență internă CK/8 (perioada 2 milisecunde) este organizat:
— calculul temperaturii curente
— ieșire dinamică a rezultatelor măsurării temperaturii cu senzorul DS18B20
Prin utilizarea temporizator pe șaisprezece biți T1 configurat să apeleze o întrerupere de depășire, cu o frecvență internă de CK/64 (perioada 4 secunde) într-o manieră organizată:
— trimiterea unei comenzi la senzorul DS18B20 pentru a măsura temperatura
— citirea temperaturii măsurate de la senzor
În principiu, puteți utiliza un timer/contor de opt biți, configurat și pentru a declanșa o întrerupere de overflow, cu o frecvență internă de CK/8, și să organizați întreaga funcționare a circuitului în timpul procesării întreruperii. Dar adevărul este că nu are rost în acest sens - senzorul DS18B20 are nevoie de puțin mai puțin de 1 secundă (cu rezoluție de 12 biți) pentru a converti (a determina) temperatura, adică nu vom putea actualiza mai mult datele de temperatură. decât o dată pe secundă. În plus, astfel de actualizări frecvente ale temperaturii vor duce la încălzirea senzorului și, în consecință, la distorsiunea datelor reale. Utilizarea unui al doilea contor vă permite să setați separat intervalele de timp pentru măsurarea temperaturii.

Iată cum arată partea principală a programului în Algorithm Builder:

Unde:

SP— setarea adresei de pornire a stivei

Cronometru 0— setarea temporizatorului T0:

Temporizator 1— setarea temporizatorului T1:

TIMSK— setarea întreruperilor de la temporizatoare:

Init_Display— subrutină pentru setarea biților de porturi implicați în indicarea dinamică a datelor de ieșire la un indicator cu trei cifre și șapte segmente

1 —> I- activare globală a întreruperii

Dacă aveți întrebări, dacă se prezintă ceva care nu este clar sau dacă aveți întrebări despre program, scrieți-mi și vă voi răspunde.

(2,4 KiB, 7.004 accesări)