- Vaaditut komponentit: -
- DS18B20-lämpötila-anturi:
- Piirikaavio:-
- Vaiheet tai koodivirta: -
- Koodin selitys:
- Tietojen saaminen DS18B20 -lämpötila-anturista:
Yleensä LM35-lämpötila-anturia käytetään mikro-ohjainten kanssa lämpötilan mittaamiseen, koska se on halpa ja helposti saatavilla. Mutta LM35 antaa analogiset arvot ja meidän on muunnettava ne digitaalisiksi käyttämällä ADC: tä (Analog to Digital Converter). Mutta tänään käytämme DS18B20 -lämpötila-anturia, jossa emme tarvitse ADC-muunnosta lämpötilan saamiseksi. Tässä käytetään lämpötilan mittaamiseen PIC-mikrokontrolleria DS18B20: n kanssa.
Joten tässä rakennamme lämpömittaria, jolla on seuraava eritelmä, käyttäen mikrosirun PIC16F877A-mikrokontrolleriyksikköä.
- Se näyttää koko lämpötila-alueen -55 asteesta +125 asteeseen.
- Se näyttää lämpötilan vain, jos lämpötila muuttuu + / -.2 astetta.
Vaaditut komponentit: -
- Pic16F877A - PDIP40-paketti
- Leipälauta
- Pickit-3
- 5 V: n sovitin
- LCD JHD162A
- DS18b20 lämpötila-anturi
- Johdot oheislaitteiden liittämistä varten.
- 4.7k vastukset - 2kpl
- 10k potti
- 20mHz kristalli
- 2 kpl 33pF keraamisia kondensaattoreita
DS18B20-lämpötila-anturi:
DS18B20 on erinomainen anturi lämpötilan tarkkaan tunnistamiseen. Tämä anturi tarjoaa 9 - 12 bitin tarkkuuden lämpötilan tunnistuksessa. Tämä anturi on yhteydessä vain yhteen johtimeen, eikä se tarvitse ADC: tä analogisten lämpötilojen saamiseksi ja niiden muuntamiseksi digitaalisesti.
Anturin tekniset tiedot ovat: -
- Mittaa lämpötiloja -55 ° C - + 125 ° C (-67 ° F - + 257 ° F)
- ± 0,5 ° C Tarkkuus välillä -10 ° C - + 85 ° C
- Ohjelmoitava tarkkuus 9 bitistä 12 bittiin
- Ulkoisia komponentteja ei tarvita
- Anturissa käytetään 1-Wire®-liitäntää
Jos tarkastelemme yllä olevaa pinout-kuvaa datalehdestä, voimme nähdä, että anturi näyttää täsmälleen samalta kuin BC547- tai BC557-paketti, TO-92. Ensimmäinen tappi on Ground, toinen tappi on DQ tai data ja kolmas tappi on VCC.
Alla on tuoteselosteen sähköiset eritelmät, joita tarvitaan suunnittelussa. Anturin nimellinen syöttöjännite on + 3,0 V - + 5,5 V. Sen on myös nostettava syöttöjännite, joka on sama kuin edellä mainittu syöttöjännite.
Lisäksi on tarkkuusmarginaali, joka on +0,5 celsiusastetta alueella -10 astetta C - +85 astetta ja tarkkuus muuttuu koko alueen marginaalille, joka on + -2 astetta -55 astetta + 125 asteen alue.
Jos katsomme jälleen datalehteä, näemme anturin yhteysmäärityksen. Voimme liittää anturin loistehotilaan, kun tarvitaan kaksi johtoa, DATA ja GND, tai voimme liittää anturin ulkoisella virtalähteellä, jossa tarvitaan kolme erillistä johtoa. Käytämme toista kokoonpanoa.
Koska tunnemme nyt anturin tehoarvot ja liitäntään liittyvät alueet, voimme nyt keskittyä kaavamaisen tekemiseen.
Piirikaavio:-
Jos näemme piirikaavion, näemme, että: -
16x2 merkin LCD on kytketty PIC16F877A-mikrokontrolleriin, jossa RB0, RB1, RB2 on kytketty LCD-nastaa RS, R / W ja E.Ja RB4, RB5, RB6 ja RB7 on kytketty LCD: n 4-nastaisiin D4, D5, D6, D7. Nestekidenäyttö on kytketty 4-bittisessä tai naposteltavassa tilassa.
20 MHz: n kideoskillaattori, jossa on kaksi 33pF: n keraamista kondensaattoria, on kytketty OSC1- ja OSC2-nastojen yli. Se tarjoaa jatkuvan 20 MHz: n kellotaajuuden mikrokontrollerille.
DS18B20 on myös kytketty tapin kokoonpanon mukaisesti ja 4,7 k: n vetovastuksella, kuten aiemmin on keskusteltu. Olen liittänyt kaiken tämän leipälautaan.
Jos olet uusi PIC-mikrokontrolleri, noudata PIC-mikrokontrollerioppaita, joissa mainitaan PIC-mikrokontrollerin käytön aloittaminen.
Vaiheet tai koodivirta: -
- Aseta mikro-ohjaimen kokoonpanot, jotka sisältävät oskillaattorin kokoonpanon.
- Aseta haluttu portti LCD-näytölle ja TRIS-rekisteri.
- Jokainen sykli, jossa on ds18b20-anturi, alkaa nollauksella, joten nollaamme ds18b20 ja odotamme läsnäolopulssia.
- Kirjoita raaputuslehti ja aseta anturin resoluutio 12 bittiä.
- Ohita ROM-lukema ja palautuspulssi.
- Lähetä muunna lämpötila -komento.
- Lue lämpötila raaputusalustalta.
- Tarkista lämpötila-arvo negatiivisena tai positiivisena.
- Tulosta lämpötila 16x2 nestekidenäytölle.
- Odota lämpötilan muutoksia +/-. 20 astetta.
Koodin selitys:
Tämän digitaalisen lämpömittarin täydellinen koodi annetaan tämän opetusohjelman lopussa ja esittelyvideo. Tarvitset joitain otsikkotiedostoja tämän ohjelman ajamiseksi, jotka voidaan ladata täältä.
Ensin meidän on asetettava konfigurointibitit pic-mikrokontrollerissa ja aloitettava sitten tyhjällä päätoiminnolla .
Sitten alle neljä riviä käytetään muun muassa kirjasto header-tiedosto, lcd.h ja ds18b20.h . Ja xc.h on tarkoitettu mikro-ohjaimen otsikkotiedostolle.
#sisältää
Näitä määritelmiä käytetään komennon lähettämiseen lämpötila-anturille. Komennot on lueteltu anturin datalehdessä.
#define skip_rom 0xCC #define convert_temp 0x44 #define write_scratchpad 0x4E #define resolution_12bit 0x7F #define read_scratchpad 0xBE
Tämä anturin tietolomakkeen taulukko 3 näyttää kaikki komennot, joissa makroja on käytetty vastaavien komentojen lähettämiseen.
Lämpötila näkyy näytössä vain, jos lämpötila muuttuu +/- .20 astetta. Voimme muuttaa tätä lämpötilaeroa tästä temp_gap- makrosta. Muuttamalla tämän makron arvoa määrittelyä muutetaan.
Kaksi muuta kelluvaa muuttujaa, joita käytetään näytettyjen lämpötilatietojen tallentamiseen ja erottamaan ne lämpötilavälillä
#define temp_gap 20 kelluva pre_val = 0, perän_val = 0;
In void main () toiminnon, lcd_init () ; on toiminto nestekidenäytön alustamiseksi. Tätä toimintoa lcd_init () kutsutaan lcd.h- kirjastosta.
TRIS-rekistereitä käytetään valitsemaan tulo- tai lähtöliitännät. Kaksi allekirjoittamatonta lyhytmuuttujaa TempL ja TempH käytetään 12- bittisen resoluutiotiedon tallentamiseen lämpötila-anturista.
void main (void) {TRISD = 0xFF; TRISA = 0x00; TRISB = 0x00; //TRISDbits_t.TRISD6 = 1; allekirjoittamaton lyhyt TempL, TempH; allekirjoittamaton int t, t2; kelluva ero1 = 0, ero2 = 0; lcd_init ();
Katsotaan taas while-silmukka, tässä hajotamme while (1) -silmukan pieniksi paloiksi.
Näitä johtoja käytetään tunnistamaan, että lämpötila-anturi on kytketty tai ei.
while (ow_reset ()) {lcd_com (0x80); lcd_puts ("Ole hyvä ja muodosta yhteys"); lcd_com (0xC0); lcd_puts ("Temp-Sense Probe"); }
Tämän koodisegmentin avulla alustamme anturin ja lähetämme komennon lämpötilan muuntamiseksi.
lcd_puts (""); ow_reset (); kirjoita tavu (kirjoitus_raaputuslevy); kirjoita tavu (0); kirjoita tavu (0); kirjoita tavu (resoluutio 12 bittiä); // 12-bittinen resoluutio ow_reset (); kirjoita tavu (ohita_romi); kirjoita tavu (muunna lämpötila);
Tämä koodi on tarkoitettu 12-bittisen lämpötilatiedon tallentamiseen kahteen allekirjoittamattomaan lyhytmuuttujaan.
while (luku_byte () == 0xff); __viive_ms (500); ow_reset (); kirjoita tavu (ohita_romi); kirjoita tavu (read_scratchpad); TempL = luettu tavu (); TempH = luettu tavu ();
Sitten, jos tarkistat alla olevan täydellisen koodin, meillä on luoda if-else-ehto selvittääksesi lämpötilamerkin, onko se positiivinen vai negatiivinen.
Käyttämällä If- lausekekoodia me manipuloimme tietoja ja katsomme onko lämpötila negatiivinen vai ei, ja määritämme lämpötilan muutokset +/-. Ja muualla tarkistimme, onko lämpötila positiivinen vai ei, ja lämpötilan muutosten havaitseminen.
koodi
Tietojen saaminen DS18B20 -lämpötila-anturista:
Katsotaanpa 1-Wire®-liitännän aikaväli. Käytämme 20Mhz Crystalia. Jos katsomme ds18b20.c-tiedoston sisälle, näemme
#define _XTAL_FREQ 20000000
Tätä määritelmää käytetään XC8-kääntäjän viiveen. 20 MHz on asetettu kidetaajuudeksi.
Teimme viisi toimintoa
- ow_reset
- read_bit
- read_byte
- kirjoita_bit
- kirjoita tavu
1-Wire ® -protokolla tarvitsee tiukat ajoitukseen liittyvät paikat kommunikoimaan. Datalehden sisällä saamme täydelliset aikaväleihin liittyvät tiedot.
Alla olevan toiminnon sisällä loimme tarkan aikavälin. On tärkeää luoda tarkka viive pitoon ja vapautukseen sekä ohjata kyseisen anturin portin TRIS-bittiä.
allekirjoittamaton char ow_reset (mitätön) {DQ_TRIS = 0; // Tris = 0 (lähtö) DQ = 0; // aseta tappi # matalaksi (0) __viivästys_ (480); // 1 johto vaatii aikaviiveen DQ_TRIS = 1; // Tris = 1 (syöte) __viive_us (60); // 1 johto vaatii aikaviiveen, jos (DQ == 0) //, jos läsnäololausetta on {__delay_us (480); paluu 0; // return 0 (1-johdin on läsnäolo)} else {__delay_us (480); paluu 1; // return 1 (1-johdin EI OLE läsnäoloa)}} // 0 = läsnäolo, 1 = ei osaa
Nyt luemme alla olevan aikavälin kuvauksen mukaisesti, jota käytetään lukemisessa ja kirjoittamisessa , luodaan vastaavasti luku- ja kirjoitusfunktio .
unsigned char read_bit (void) {allekirjoittamaton char i; DQ_TRIS = 1; DQ = 0; // vedä DQ matalaksi aloittaaksesi aikavälin DQ_TRIS = 1; DQ = 1; // palaa sitten korkeaksi (i = 0; i <3; i ++); // viive 15us aikavälin paluun alkamisesta (DQ); // DQ-rivin palautusarvo} void write_bit (char bitval) {DQ_TRIS = 0; DQ = 0; // vedä DQ matalaksi aloittaaksesi aikavälin if (bitval == 1) DQ = 1; // palauttaa korkean DQ-arvon, jos kirjoitat 1 __viivästys_us (5); // pidä arvoa jäljellä olevan aikavälin ajan DQ_TRIS = 1; DQ = 1; } // Viive tarjoaa 16us / silmukka plus 24us. Siksi viive (5) = 104us
Edelleen tarkistaa kaikki siihen liittyvät header ja.c tiedostot tähän.
Joten voimme käyttää DS18B20-anturia lämpötilan saamiseen PIC-mikrokontrollerilla.
Jos haluat rakentaa yksinkertaisen digitaalisen lämpömittarin LM35: llä, maksa alla olevat projektit muiden mikrokontrollerien kanssa:
- Huonelämpötilan mittaus Vadelma Pi: llä
- Digitaalinen lämpömittari, jossa käytetään Arduinoa ja LM35: tä
- Digitaalinen lämpömittari LM35: llä ja 8051: llä
- Lämpötilan mittaus LM35- ja AVR-mikrokontrollerilla