DS18B20 – Skaitmeninis temperatūros jutiklis. Arduino DS18B20 temperatūros jutiklis Dallas 18b20 temperatūros jutiklis

DS18B20 yra modernus skaitmeninio tipo programuojamas temperatūros kaitos jutiklis su aliarmo funkcija. Šie įrenginiai veikia pagal 1-Wire protokolą (vieno laido ryšio linija su mikrovaldikliu) ir yra aprūpinti nepastoviąja atmintimi užprogramuotų sąsajos parametrų išsaugojimui ir valdymui. Teisingas DS18B20 temperatūros matavimas vyksta intervale nuo -55° iki +125°С, tačiau mažiausia paklaida 0,5°С pasiekiama intervale nuo -10° iki +85°С.

Skaitmeninis temperatūros jutiklis DS18B20 dėl specifinio 64 bitų kodo leidžia sujungti keletą šios serijos mikroschemų į vieną ryšio liniją, kad būtų galima valdyti tiek nedidelio biurų pastato Maskvoje, tiek didžiulio gamybos cecho mikroklimatą.

Modelių DS18B20 bendrosios charakteristikos, pavadinimai ir išėjimų žymėjimas

Priklausomai nuo konstrukcijos, temperatūros jutiklio lustas Dalasas DS18B20 nustatyti parametrus galima valdyti 3 formomis:

  • TO-92;
  • SO (150 mm);
  • µSOP.

Iššifruokime, kur yra mikroschemos išvestis ir kaip ją teisingai prijungti.

Pagrindinės DS18B20 temperatūros jutiklio savybės ir specifikacijos:

  • žemo lygio U maitinimas iš linijos (3–5,5 V);
  • labai efektyvus veikimas naudojant 1-Wire protokolą;
  • unikalus 64 bitų identifikavimo kodas, įrašytas į nepriklausomą įrenginio ROM atmintį, skirtas veikti daugiau įrenginių naudojant vieną ryšio liniją, leidžiantį gauti tikslią jutiklio padėtį, kurios temperatūra yra aukštesnė arba žemesnė už užprogramuotą lygis;
  • platus temperatūros matavimų diapazonas: -55°–+125°С 0,5°С tikslumu -10°–+85°С diapazone;
  • įmontuotas ADC leidžia programuoti DS18B20 9-12 bitų diapazone, o tai sumažina matavimo laiką iki 750 ms;
  • patogus DS18B20 Raspberry Pi lusto prijungimas;
  • norint užprogramuoti temperatūros jutiklį, pakanka jį prijungti prie bet kurio įrenginio, kuriame veikia Arduino, ARM, PIC ar AVR architektūra.

Kaip veikia šiuolaikiniai temperatūros jutikliai

Temperatūros jutiklio tipo DS18B20 blokinė schema yra tokia:

Remiantis aukščiau pateikta struktūra, atitinkamą jutiklį sudaro:

Pagrindinė lusto DS18B20 funkcija yra integruoto temperatūros jutiklio rodmenų pavertimas skaitmeniniu kodu. Šis konvertavimas priklauso nuo vartotojo nustatytos konvertavimo skiriamosios gebos, kuri svyruoja nuo 9 iki 12 bitų (0,5–0,625 °C). Jei nenustatyti jokie nustatymai, konfigūracijos registro nustatymas atitinka 12 bitų.

Pradinėje būsenoje DS18B20 yra ramybės būsenoje arba, kitaip tariant, mažai energijos. Norėdami pradėti matavimus, mikrovaldiklis siunčia signalą, po kurio gauti duomenys išsaugomi registre, o pats jutiklis pereina į „poilsio“ režimą.

Kai skaitmeninis temperatūros jutiklis DS18B20 yra valdomas iš nepriklausomo maitinimo šaltinio, mikrovaldiklis gali valdyti temperatūrą matuojančios komandos vykdymo procesą. Taigi temperatūros jutiklis DS18B20 generuos loginį „0“ temperatūros rodmenų transformacijos metu ir loginį „1“, jei konversijos procesas bus baigtas.

Gavus ir apdorojus signalą iš temperatūros jutiklio DS18B20 mikroschemoje, gauti duomenys Celsijaus laipsniais išsaugomi kaip 16 bitų skaičius su ženklu (S), kuris yra atsakingas už „+“ arba „-“ temperatūros ženklą. . Temperatūros registro struktūra atrodys taip, kaip parodyta žemiau.

Jei temperatūros rodmuo yra didesnis nei „0“, tada indikatorius S=0, jei temperatūros reikšmė neigiama, tai S=1. Žemiau yra duomenų ir temperatūros atitikties lentelė.

Kaip formuojami ir perduodami Th ir Tl pavojaus signalai

Temperatūros rodmenis pakeitus į 16 bitų kodą, gautas skaičius lyginamas su Th ir Tl reikšmėmis, esančiomis mikroprocesoriaus atminties registre (EEPROM), būtent antruoju ir trečiuoju baitais. Registrų Th ir Tl struktūra atrodys taip:

Jei gauti duomenys, 11–4 registro bitai, viršija Th arba yra žemiau Tl parametro, tada mikroschemoje generuojamas aliarmo signalas. Tačiau matavimai tuo nesibaigia, o jei Th sumažėja žemiau arba Tl viršija nurodytą diapazoną, sąlyga " Nelaimingas atsitikimas» yra nustatytas iš naujo.

Jei reikia savarankiškai identifikuoti vieną iš jutiklių, kurie duoda signalą " Nerimas“, tada mikrovaldiklį naudodami komandą ECH išbandys kiekvieną jutiklį. Jei Th ir Tl parametrai bus pakeisti, viršijantys arba mažesni už registre įvestas reikšmes, jis išduos įrenginio kodą su temperatūros režimo pažeidimais.

Kaip tinkamai maitinti DS18B20

DS18B20 lustas leidžia prijungti 2 tipus:

Šis ryšio tipas laikomas racionalesniu. Pagrindinis jo pranašumas yra galimybė dirbti su daugybe jutiklių naudojant specialias programas.

Kai DS18B20 lusto magistralėje yra didelis U, jis veikia ir įkrauna Cpp naudodamas DQ kaištį. Reikalinga sąlyga prietaisui valdyti šiuo režimu – įžeminimo Vdd. Kai signalo lygis pasikeičia į loginį "0", grandinė maitinama iš anksčiau įkrauto kondensatoriaus. AT normalus režimas DS18B20 lustas gali demonstruoti nuolatinį ir stabilų veikimą išlaikant elektros specifikacijas.

Tačiau kai lustas dažnai konvertuoja ir sąveikauja su atmintimi, srovės suvartojimas gali viršyti 1,5 mA. Dėl to magistralės įtampa nukris žemiau minimalaus leistino lygio. Norėdami išspręsti šią problemą, turite naudoti MOSFET tranzistorių. Jis veikia, kai kopijuojami duomenys arba konvertuojama temperatūra. Tačiau jis naudojamas retai, nes lusto DS18B20 galios rezervas leidžia atlikti skaičiavimus nemažinant įtampos lygio.

Daugeliu atvejų racionalu naudoti šį metodą. Tačiau jei išmatuota temperatūra viršija 100°C, susidaro didelė nuotėkio srovė, o kondensatoriaus Cpp įkrovimo nepakanka pilnam mikroschemos funkcionavimui. Tokiais atvejais geriau naudoti mikroschemos maitinimo šaltinį iš išorinio šaltinio.

Skaitmeninio temperatūros jutiklio DS18B20 prijungimas prie išorinio maitinimo šaltinio

Pagrindinis tiesioginio ryšio privalumas yra MOSFET tranzistoriaus nebuvimas. Mikroschema maitinama iš išorinio šaltinio naudojant 4,7 kΩ rezistorių. Šios schemos metu pagrindinė konversijos magistralė gali būti naudojama kitiems tikslams, nes ji lieka laisva.

Skaityti valdiklį DS18B20

Norint valdyti 64 bitų ROM kodo duomenų skaitymo procesą, devintas baitas yra CRC arba SRAM ciklinio kodo baitai. CRC generatorius atrodo taip:

Šis kodas yra ROM atminties aukštajame baite ir skaičiuojamas ankstesniems 56 bitams. Pagrindinė devinto baito (CRC) užduotis yra valdyti duomenų nuskaitymą iš lusto. Norėdami tai padaryti, mikroprocesorius apskaičiuoja gautą ciklinį kodą ir palygina jį su anksčiau gautu kodu. Palyginimo rezultate mikrovaldiklis gauna duomenis apie gautų duomenų teisingumą.

Gautiems duomenims patikrinti naudojamas šios struktūros ciklinio kodo polinomas:

C R C = X 8 + X 5 + X 4 + 1

Jutiklio kodavimas DS18B20

Jis naudojamas temperatūros lygiui valdyti įvairiuose taškuose didelis skaičius jutikliai, kurių kiekvienas yra užkoduotas 64 bitų kodu ROM atmintyje. Pirmaisiais 8 bitais rašomas šeimos kodas (28h), antraisiais 48 bitais – jutiklio serijos numeris, o paskutiniuose 8 bituose – visų ankstesnių bitų ciklinis kodas (CRC).

Konfigūracijos registras

Signalo apdorojimo laikas DS18B20 mikroschemoje priklauso nuo 4 baito reikšmės konfigūracijos atmintyje, kuri yra konfigūracijos registras. Šis registras atrodo taip, kaip parodyta žemiau.

Norint nustatyti konvertavimo skiriamąją gebą, reikia pakeisti parametrus R0 ir R1, kurie pradinėje būsenoje atitinka 11. Lentelėje parodytas šių parametrų reikšmių atitikimas, skiriamoji geba ir konversijos laikas.

Darbas su 1-wire sąsaja

Temperatūros skirtumo matavimo sistema, pagrįsta DS18B20 jutikliais, veikia naudodama 1 laidų protokolą, kuris savo ruožtu susideda iš pagrindinio (pagrindinio arba "pagrindinio") ir pavaldžio įrenginio (SLAVE). Šio tipo jutiklius galima prijungti tik kaip pavaldinį. Jei prie magistralės prijungtas tik vienas jutiklis, ši sistema bus iškviesta vienas taškas, o kelių atveju – daugiataškis. Visi duomenys ir signalai tokioje sistemoje pirmiausia perduodami su mažiausiai reikšmingu bitu.

Kaip gaminama tokio tipo skaitmeninio jutiklio atmintis

Kad veiktų pilnai, DS18B20 susideda iš 2 tipų atminties: EEPROM ir SRAM. Pirmojo tipo atmintis yra nepastovi, o antroji - veikianti. Atminties žemėlapis atrodo taip:

EEPROM saugo temperatūros ribos duomenis ir konfigūracijos registrą.

O SRAM atminties kortelėje pirmieji 2 baitai (0 ir 1) yra atsakingi už išmatuotą temperatūrą, antrieji 2 baitai yra tik skaitomi ir yra atsakingi už ribines temperatūros vertes iš EEPROM atminties, ketvirtas baite yra konfigūracijos parametrai. O rezervuoti baitai nuo penkių iki septynių visada sukuria loginį „1“, kai jie skaitomi ir negali būti parašyti. Kad atmintis veiktų tinkamai, taip pat yra aštuntasis baitas arba ciklinis kodo generatorius, atsakingas už pirmuosius 8 baitus.

Norėdami įrašyti į 2-4 baitus, turite vykdyti komandą ĮRAŠO ATMINTIS. Norint gauti prieigą prie įrašytų duomenų, pakanka įvykdyti komandą SKAITYTI ATMINTĮ. O jei reikia parašyti parametrus TH, TL arba konfigūracijos registrą, tuomet reikia vykdyti komandą KOPIJUOTI ATMINTĮ.

Ko reikia norint dirbti su DS18B20 lustu

Norėdami dirbti su DS18B20 lustu, jums reikės:

  • programinė įranga Arduino IDE;
  • biblioteka darbui su 1-Wire protokolu OneWire biblioteka;
  • eskizas.

Aukščiau pateiktos programos leis jums paleisti lustą. Tačiau norint tai padaryti, jums reikės šios įrangos:

  • Arduino valdiklis;
  • USB kabelis, jungiantis valdiklį su asmeniniu kompiuteriu;
  • plokštė lustui ir 3 jungtims montuoti.

Lusto prijungimas prie Arduino

Norėdami prijungti jutiklį, kaip parodyta toliau pateiktoje diagramoje, 1 kaištis (GND) yra prijungtas prie bendros plokštės "-", 2 kaištis (Vdd) prijungiamas prie +5 V maitinimo šaltinio per 4,7 kΩ ištraukiamąjį rezistorių. , o paskutinis kaištis 3 (DATA ) yra prijungtas prie vieno iš Arduino mikrovaldiklio kaiščių (schemoje naudojamas antrasis kaištis).

Šiuo atveju 10 eilutė turėtų atrodyti taip: OneWire ds(2).

Kodo nustatymas ir darbas su bibliotekomis

Pabaigus studijas montavimo darbai galite pradėti programuoti įrenginį. Norėdami tai padaryti, naudokite programą Arduino IDE reikia prijungti biblioteką OneWire biblioteka. Norėdami tai padaryti, programos meniu pasirinkite " Pridėti biblioteką“, kuris yra meniu „ Eskizas"arba rusiškai versijai" Eskizas» - « Prijunkite biblioteką» - « OneWire».

Tada atsidariusioje bibliotekoje turėtumėte rasti "" programavimo pavyzdį. Norėdami tai padaryti, meniu " Failas» pasirinkite submeniu « Pavyzdžiai“, tada skyrių „ OneWire“ ir tašką „“.

Pavyzdyje iš OneWire bibliotekos 10 eilutėje iš pradžių užprogramuotas mikrovaldiklio 10 kaištis, nagrinėjamu atveju jį reikia pakeisti 2. Dėl to 10 eilutė turėtų atrodyti taip:

Po teisingai atliktų operacijų, programos kompiliavimas ir įkėlimas prievado monitoriaus lange " Instrumentai» - «» atrodo maždaug taip:

Išvada

DS18B20 yra sudėtingas temperatūros jutiklis, lengvai montuojamas, aukšto temperatūros matavimo tikslumas ir patikimumas. Tačiau norint visapusiškai veikti šie įrenginiai, būtinas sudėtingas programavimas.

Susiję vaizdo įrašai

Ar reikia matuoti temperatūrą aplinkoje, kuri yra priešiška lustams?

DS18B20 jutiklis padės išmatuoti vandens temperatūrą akvariume ar virdulyje. Juo galite matuoti temperatūrą lauke ir nebijoti, kad jutiklį užlies lietus. Vasaros gyventojai įvertins galimybę išmatuoti dirvožemio temperatūrą šiltnamyje ir svetainėje.

Nuolatinėje DS18B20 atmintyje galite išsaugoti temperatūros ribines vertes, kurias išėjus jutiklis pereis į aliarmo režimą. Bendroje daugelio jutiklių magistralėje mikrovaldiklis gali vienu metu sužinoti, kuris iš jų perjungė šį režimą. Tai leidžia lengvai nustatyti probleminę sritį kontroliuojamoje aplinkoje.

Skaitymo skiriamoji geba yra konfigūruojama ir gali būti nuo 9 iki 12 bitų. Kuo mažesnė skiriamoji geba, tuo didesnis konversijos greitis.

Ryšys

Užsandarintas jutiklis, pagrįstas DS18B20 lustu, gali būti prijungtas dviem būdais:

Ant trijų laidų: maitinimo (raudonas), įžeminimo (juodas) ir signalo (baltas).

Ant dviejų laidų: įžeminimo ir signalo. Tokiu atveju jutiklis kartais gali pateikti neteisingus rodmenis, kuriuos galima lengvai pašalinti iš galutinio rezultato filtruojant.

Nepriklausomai nuo prijungimo būdo, signalo laidas turi būti prijungtas prie maitinimo per 4,7 kΩ rezistorių. Jungiant tik vieną jutiklį, veiks ir 10 kΩ rezistorius.

Norėdami prijungti jutiklį prie Arduino arba prie duonos lentos, bus patogu naudoti įstumiamą gnybtų bloką.

Yra paruošta biblioteka, skirta 1 laidų įrenginiams prijungti prie „Arduino“, o darbui su DS18B20 yra Mileso Burtono priedo biblioteka.

Charakteristikos:
  • Maitinimo įtampa: 3,0...5,5 V
  • Temperatūros diapazonas: -55°C..+125°C
  • Temperatūros matavimo tikslumas: 0,5 °C
  • Skaitymo žingsnis: 0,0625 ° С
  • Sąsaja: 1 laidas
  • Vielos ilgis: 1 metras
  • Srovės suvartojimas: 1mA

Arduino temperatūros jutiklis yra vienas iš labiausiai paplitusių jutiklių tipų. Arduino termometro projekto kūrėjui yra daug galimybių. skirtingų variantų, skiriasi veikimo principu, tikslumu, dizainu. Skaitmeninis jutiklis DS18B20 yra vienas populiariausių temperatūros jutiklių, dažnai naudojamas vandeniui atspariame korpuse vandens ar kitų skysčių temperatūrai matuoti. Šiame straipsnyje rasite ds18b20 jutiklio aprašymą rusų kalba, kartu apsvarstysime prisijungimo prie arduino ypatybes, jutiklio veikimo principą, bibliotekų ir eskizų aprašymą.

DS18B20 yra skaitmeninis temperatūros jutiklis su daugybe naudingų funkcijų. Tiesą sakant, DS18B20 yra visas mikrovaldiklis, kuris gali saugoti matavimo vertę, signalizuoti temperatūrą, viršijančią nustatytas ribas (galime nustatyti ir keisti ribas), keisti matavimo tikslumą, sąveikos su valdikliu būdą ir daug daugiau. Visa tai labai mažoje pakuotėje, kuri yra ir vandeniui atspari versija.

DS18B20 temperatūros jutiklis turi įvairių korpusų tipų. Galite rinktis iš trijų – 8 kontaktų SO (150 mylių), 8 kontaktų µSOP ir 3 kontaktų TO-92. Pastarasis yra labiausiai paplitęs ir pagamintas specialiame vandeniui atspariame dėkle, kad būtų galima saugiai naudoti po vandeniu. Kiekvienas jutiklis turi 3 kontaktus. TO-92 korpusui reikia pažvelgti į laidų spalvą: juoda - įžeminimas, raudona - galia ir balta / geltona / mėlyna - signalas. Internetinėse parduotuvėse galite įsigyti jau paruoštą DS18B20 modulį.

Kur nusipirkti jutiklį

Natūralu, kad DS18B20 yra pigiausia įsigyti „Aliexpress“, nors jis taip pat parduodamas bet kuriose specializuotose Rusijos internetinėse parduotuvėse su „Arduino“. Štai keletas nuorodų su pavyzdžiais:

Jutiklių atmintis susideda iš dviejų tipų: veikiančios ir nepastovios – SRAM ir EEPROM. Pastarajame yra konfigūracijos registrai ir TH, TL registrai, kurie gali būti naudojami kaip bendrosios paskirties registrai, jei jie nenaudojami leistinų temperatūros verčių diapazonui nurodyti.

Pagrindinė DS18B20 užduotis yra nustatyti temperatūrą ir paversti rezultatą į skaitmeninę formą. Savarankiškai galime nustatyti reikiamą skiriamąją gebą, nustatydami tikslumo bitų skaičių – 9, 10, 11 ir 12. Tokiais atvejais raiškos bus atitinkamai lygios 0,5C, 0,25C, 0,125C ir 0,0625C.

Gauti temperatūros matavimai saugomi jutiklio SRAM. 1 ir 2 baitai saugo gautą temperatūros reikšmę, 3 ir 4 saugo matavimo ribas, 5 ir 6 yra rezervuoti, 7 ir 8 naudojami didelio tikslumo temperatūros aptikimui, paskutiniai 9 baitai saugo triukšmui atsparų CRC kodą.

DS18B20 prijungimas prie Arduino

DS18B20 yra skaitmeninis jutiklis. Skaitmeniniai jutikliai perduoda išmatuotos temperatūros reikšmę tam tikro dvejetainio kodo pavidalu, kuris tiekiamas į skaitmeninius ar analoginius arduino kaiščius ir vėliau iškoduojamas. Kodai gali būti labai skirtingi, ds18b20 veikia 1-Wire duomenų protokolu. Mes nesigilinsime į šio skaitmeninio protokolo detales, tik nurodysime būtinas minimumas suprasti sąveikos principus.

Keitimasis informacija 1 laidu vyksta dėl šių operacijų:

  • Inicializacija – signalų sekos, nuo kurios prasideda matavimas ir kitos operacijos, apibrėžimas. Pagrindinis įrenginys siunčia atstatymo impulsą, po kurio jutiklis turi duoti buvimo impulsą, rodantį, kad jis yra pasirengęs atlikti operaciją.
  • Duomenų rašymas – į jutiklį perduodamas duomenų baitas.
  • Duomenų skaitymas – iš jutiklio gaunamas baitas.

Norėdami dirbti su jutikliu, mums reikia programinės įrangos:

  • Arduino IDE
  • „OneWire“ biblioteka, jei naudojate kelis jutiklius magistralėje, galite naudoti „DallasTemperature“ biblioteką. Jis veiks „OneWire“ viršuje.

Iš įrangos jums reikės:

  • Vienas ar daugiau DS18B20 jutiklių;
  • Arduino mikrovaldiklis;
  • jungtys;
  • 4,7 kOhm rezistorius (jei prijungtas vienas jutiklis, eis rezistorius, kurio vertė nuo 4 iki 10K);
  • Grandinės plokštė;
  • USB laidas, skirtas prijungti prie kompiuterio.

Jutiklis prijungiamas prie Arduino UNO plokštės paprastai: GND nuo temperatūros jutiklio prijungiamas prie Arduino GND, Vdd prijungtas prie 5V, Duomenys prijungiami prie bet kurio skaitmeninio kaiščio.

Paprasčiausia skaitmeninio jutiklio DS18B20 prijungimo schema parodyta paveikslėlyje.

Eskizo informacijos apie temperatūrą gavimo algoritmas susideda iš šių veiksmų:

  • Jutiklio adreso nustatymas, jo prijungimo tikrinimas.
  • Jutikliui siunčiama komanda su reikalavimu nuskaityti temperatūrą ir įrašyti išmatuotą vertę į registrą. Procedūra užtrunka ilgiau nei kitos, trunka apie 750 ms.
  • Duojama komanda nuskaityti informaciją iš registro ir išsiųsti gautą reikšmę į "prievado monitorių",
  • Jei reikia, jis bus konvertuojamas į Celsijaus / Farenheito laipsnius.

Paprastas DS18B20 eskizo pavyzdys

Paprasčiausias eskizas dirbant su skaitmeniniu jutikliu yra toks. (eskize naudojame OneWire biblioteką, apie kurią plačiau pakalbėsime kiek vėliau).

#įtraukti /* * Sąveikos su skaitmeniniu jutikliu ds18b20 aprašymas * Ds18b20 prijungimas prie arduino per 8 kaištį */ OneWire ds(8); // Sukurkite OneWire objektą 1-Wire magistralei, kuri bus naudojama dirbti su jutikliu void setup()( Serial.begin(9600); ) void loop()( // Nustatykite temperatūrą iš DS18b20 jutiklio baito duomenys; // Temperatūros reikšmės vieta ds.reset(); // Pradėkite sąveiką iš naujo nustatydami visas ankstesnes komandas ir parametrus ds.write(0xCC); // Pasakykite DS18b20 jutikliui praleisti adreso paiešką. Mūsų atveju tik vienas įrenginys ds.write(0x44) ; // DS18b20 jutikliui duodame komandą matuoti temperatūrą. Pačios temperatūros reikšmės dar negauname – jutiklis įdės į vidinės atminties delsą (1000); // mikroschema matuoja temperatūrą, o mes laukiame. ds.reset(); išmatuotos temperatūros reikšmė ds.write(0xCC); ds.write(0xBE); // Prašome atsiųsti mums registrų reikšmę su temperatūros reikšme / / Gaukite ir perskaitykite atsakymo duomenis = ds.read(); // Nuskaitykite žemą temperatūros vertės duomenų baitą = ds.read(); // O dabar senesnis // Galutinės reikšmės formavimas ty: // - pirmiausia "priklijuokite" reikšmę, // - tada padauginkite ją iš koeficiento, atitinkančio skiriamąją gebą (12 bitų numatytoji vertė yra 0,0625) plūduriuojanti temperatūra = ((duomenys)<< 8) | data) * 0.0625; // Выводим полученное значение температуры в монитор порта Serial.println(temperature); }

Eskizas darbui su ds18b20 jutikliu nedelsiant

Galite šiek tiek apsunkinti ds18b20 programą, kad atsikratytumėte eskizo sulėtėjimo.

#įtraukti OneWire ds(8); // OneWire objekto vidinė temperatūra = 0; // Visuotinis kintamasis, skirtas temperatūros vertei iš DS18B20 jutiklio saugoti long lastUpdateTime = 0; // Kintamasis, skirtas išsaugoti paskutinio jutiklio skaitymo laiką const int TEMP_UPDATE_TIME = 1000; // Nustatykite tikrinimų dažnumą void setup()( Serial.begin(9600); ) void loop()( detectTemperature(); // Nustatykite temperatūrą iš DS18b20 jutiklio Serial.println(temperature); // Išspausdinkite gautą temperatūros reikšmė // Т (kadangi temperatūros kintamasis yra int tipo, trupmeninė dalis bus tiesiog išmesta) int detectTemperature()(baitų duomenys; ds.reset(); ds.write(0xCC); ds.write(0x44) ; if (millis() - paskutinio atnaujinimo laikas > TEMP_ATNAUJINIMO_TIME) ( lastUpdateTime = millis(); ds.reset(); ds.write(0xCC); ds.write(0xBE); data = ds.read(); duomenys = ds. read(); // Sugeneruoti reikšmę temperatūra = (duomenys<< 8) + data; temperature = temperature >> 4; } }

DallasTemperature Library ir DS18b20

Savo eskizuose galime naudoti DallasTemperature biblioteką, kuri supaprastina kai kuriuos darbo su ds18b20 jutikliu per 1 laidą aspektus. Eskizo pavyzdys:

#įtraukti // Arduino kaiščio numeris su prijungtu jutikliu #define PIN_DS18B20 8 // Sukurti objektą OneWire OneWire oneWire(PIN_DS18B20); // Sukurkite objektą DallasTemperature, skirtą darbui su jutikliais, perduodant jam nuorodą į objektą, skirtą darbui su 1 laidu. Dalaso temperatūros dalaso jutikliai (&oneWire); // Specialus objektas įrenginio adresui saugoti DeviceAddress sensorAddress; void loop(void)( // Temperatūros jutiklio matavimų užklausa Serial.print("Matuojama temperatūra..."); dallasSensors.requestTemperatures(); // Prašymas ds18b20 rinkti duomenis Serial.println("Atlikta"); // Prašymas gauti išsaugotą temperatūros reikšmę printTemperature(sensorAddress); // Delsimas, kad būtų galima ką nors išanalizuoti ekrane delay(1000); ) // Pagalbinė įrenginio temperatūros vertės spausdinimo funkcija void printTemperature(DeviceAddress deviceAddress)( float tempC = dallasSensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.println(tempC); ) // Pagalbinė funkcija, rodanti jutiklio adresą ds18b20 void printAddress(DeviceAddress deviceAddress)( for (uint8_t i = 0) ; i< 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } }

OneWire biblioteka, skirta darbui su DS18B20

DS18B20 naudoja 1-wire protokolą, kad keistųsi informacija su arduino, kuriam jau parašyta puiki biblioteka. Galite ir turėtumėte jį naudoti, kad nenaudotumėte visų funkcijų rankiniu būdu. . Norėdami įdiegti biblioteką, atsisiųskite archyvą, išpakuokite jį į savo Arduino katalogo bibliotekos aplanką. Biblioteka įtraukiama naudojant komandą #include

Visi DS18B20 jutikliai sujungti lygiagrečiai, visiems užtenka vieno rezistoriaus. Naudodami OneWire biblioteką galite vienu metu nuskaityti visus duomenis iš visų jutiklių. Jei prijungtų jutiklių skaičius yra didesnis nei 10, turite pasirinkti rezistorių, kurio varža ne didesnė kaip 1,6 kOhm. Be to, norint tiksliau išmatuoti temperatūrą, tarp Arduino plokštės duomenų išvesties ir kiekvieno jutiklio duomenų reikia įdėti papildomą 100 ... 120 omų rezistorių. Galite sužinoti, iš kurio jutiklio buvo gauta tam tikra reikšmė, naudodami unikalų 64 bitų serijos kodą, kuris bus išduotas vykdant programą.

Norėdami prijungti temperatūros jutiklius įprastu režimu, turite naudoti diagramą, parodytą paveikslėlyje.

išvadų

Dallas DS18B20 lustas yra labai įdomus prietaisas. Temperatūros jutikliai ir jais pagrįsti termometrai pasižymi daugeliui užduočių priimtinomis charakteristikomis, pažangiomis funkcijomis ir yra palyginti nebrangūs. DS18B20 ypač išpopuliarėjo kaip vandeniui atsparus prietaisas skysčių temperatūrai matuoti.

Už papildomas funkcijas turite mokėti už santykinį darbo su jutikliu sudėtingumą. Norint prijungti DS18B20, mums tikrai reikės maždaug 5K nominalo rezistoriaus. Norėdami dirbti su jutikliu „Arduino“ eskizuose, turite įdiegti papildomą biblioteką ir įgyti tam tikrų įgūdžių dirbti su juo - ten viskas nėra visiškai trivialu. Tačiau galite nusipirkti paruoštą modulį, o eskizui daugeliu atvejų pakaks paprastų pavyzdžių, pateiktų šiame straipsnyje.

DS18B20- Skaitmeninis temperatūros jutiklis iš Dalaso. Temperatūros duomenis siunčia tik vienu skaitmeniniu kaiščiu ir specialiu protokolu, vadinamu 1-Wire. Prie vieno kaiščio galite prijungti kelis jutiklius. Jutiklis matuoja temperatūrą Celsijaus laipsniais.

Specifikacijos DS18B20

  • Jutiklis gali būti maitinamas nuo 3 iki 5,5 V įtampos
  • Jutiklis gali matuoti temperatūrą nuo -55 iki 125 °C
  • Jutiklio skaitmeninė skiriamoji geba yra nuo 9 iki 12 bitų
  • Matavimo tikslumas +/- 0,5 °C diapazone nuo -10 iki 85 °C
  • Matavimo tikslumas: +/- 2 °C diapazone nuo -55 iki 125 °C
  • Matavimo poslinkis +/- 0,2 °C

Sujungimo schema DS18B20

Kas yra leidimas?

AT Techninės specifikacijos pranešama, kad DS18B20 jutiklis gali matuoti temperatūrą įvairia raiška. Raiška yra kaip liniuote: milimetrai tarp centimetrų. Panašiai, naudojant DS18B20 skiriamąją gebą, tai yra žingsnis tarp nuoseklių Celsijaus laipsnių žingsnių.

Rezoliucija parenkama naudojant bitų skaičių. Pasirinkimo diapazonas yra nuo 9 iki 12 bitų. Leidimo pasirinkimas sukelia tam tikrų pasekmių. Kuo didesnė skiriamoji geba, tuo ilgiau teks laukti matavimo rezultato.

9 bitų skiriamoji geba yra 2 žingsniai tarp nuoseklių lygių:

  • 0,0°C
  • 0,5°C

10 bitų skiriamoji geba yra 4 žingsniai tarp nuoseklių lygių:

  • 0,0°C
  • 0,25°C
  • 0,5°C
  • 0,75°C

Šiuo atveju temperatūrą skaitome 0,25 °C skiriamąja geba. 10 bitų raiškos matavimo laikas yra 187,5 ms, o tai leidžia atlikti 5,3 matavimo per sekundę.

11 bitų skiriamoji geba yra 8 žingsniai tarp nuoseklių lygių:

  • 0,0°C
  • 0,125°C
  • 0,25°C
  • 0,375°C
  • 0,5°C
  • 0,625°C
  • 0,75°C
  • 0,875°C

Tai reiškia, kad skiriamoji geba yra 0,125 °C. 11 bitų raiškos matavimo laikas yra 375 ms. Tai leidžia atlikti 2,6 matavimo per sekundę.

12 bitų skiriamoji geba yra 16 žingsnių tarp nuoseklių lygių:

  • 0,0°C
  • 0,0625°C
  • 0,125°C
  • 0,1875°C
  • 0,25°C
  • 0,3125°C
  • 0,375°C
  • 0,4375°C
  • 0,5°C
  • 0,5625°C
  • 0,625°C
  • 0,6875°C
  • 0,75°C
  • 0,8125°C
  • 0,875°C
  • 0,9375°C

Todėl skiriamoji geba yra 0,0625 °C. 12 bitų raiškos matavimo laikas yra apie 750 ms. Tai yra, galite atlikti 1,3 matavimo per sekundę.

Kas yra matavimo tikslumas?

Niekas pasaulyje, o ypač elektronikoje, nėra tobulas. Priartėti prie tobulybės galite tik išleisdami vis daugiau pinigų ir pastangų. Tas pats su šiuo jutikliu. Jame yra keletas netikslumų, kuriuos turėtumėte žinoti.

Techninėse specifikacijose nurodyta, kad matavimo diapazone nuo -10 iki 85 ° C jutiklio DS18B20 tikslumas yra +/- 0,5 ° C. Tai reiškia, kad kai kambario temperatūra yra 22,5 °C, jutiklis gali grąžinti 22–23 °C matavimo rezultatą. Tai yra, jis gali rodyti 0,5 ° C daugiau ar mažiau. Viskas priklauso nuo individualių jutiklio savybių.

Diapazone nuo -55 iki 125 °C matavimo paklaida gali padidėti iki +/- 2 °C. Tai yra, kai matuojate ką nors, kai temperatūra yra 100 ° C, jutiklis gali rodyti 98–102 ° C temperatūrą.

Visi šie nuokrypiai kiekvienai temperatūrai gali šiek tiek skirtis, tačiau matuojant tą pačią temperatūrą, nuokrypis visada bus toks pat.

Kas yra matavimo poslinkis?

Matavimo poslinkis yra blogiausia netikslumo forma. Matavimo dreifo esmė slypi tame, kad matuojant pastovią temperatūrą – vieno matavimo metu jutiklis gali rodyti vieną temperatūrą, o kitame – kitą (pagal dreifo kiekį).

Temperatūros jutiklio dreifas DS18B20 +/- 0,2 °C. Pavyzdžiui, kai patalpoje pastovi 24°C temperatūra, jutiklis gali rodyti nuo 23,8°C iki 24,2°C.

(379,0 Kb, atsisiųsta: 913)

Tiriant mikrovaldiklius, anksčiau ar vėliau atsiranda būtinybė išmatuoti tokį meteorologinį parametrą aplinką kaip jos temperatūra. Šiuolaikinė pasaulinė elektroninių komponentų rinka siūlo platų temperatūros jutiklių asortimentą. Pagrindiniai skirtumai tarp jų yra išmatuotos temperatūros diapazone, maitinimo įtampa, taikymo sritis, bendri matmenys, temperatūros konvertavimo metodai, sąsaja sąveikai su vartotojo valdymo sistema. Taip istoriškai susiklostė, kad šiuo metu vienas populiariausių temperatūros jutiklių yra jutiklis DS18B20 Dallas Semiconductor Corp. Toliau pateikiama istorija apie jį.

DS18B20– skaitmeninis temperatūros jutiklis su programuojama konvertavimo raiška.

Skiriamieji bruožai:

1) 1 laidų sąsajos duomenų magistralės naudojimas sąveikai su valdymo sistema;
2) unikalaus 64 bitų serijinio identifikavimo kodo, esančio vidinėje ROM atmintyje, buvimą, skirtą daugiataškėms sistemoms, kur reikia kreiptis į konkretų jutiklį;
3) Maitinimo įtampa yra 3-5,5 V, todėl ją galima naudoti ne tik 5 voltų sistemose, bet ir 3,3 (dauguma mikrovaldiklių);
4) Matuojamos temperatūros diapazonas -55…+125 о С;
5) Tikslumas ± 0,5 ° C, nors tai galioja tik diapazonui -10 ... + 85 ° C;
6) Konversijos skiriamąją gebą nustato vartotojas ir yra 9…12 bitų;
7) Turi vidinius viršutinės ir apatinės slenksčių trigerių registrus generuojant pavojaus signalą sistemoms naudojant termostatinę veikimo logiką;
8) Šie jutikliai yra suderinami su programine įranga DS1822 ir yra plačiai naudojami pramoniniuose termostatiniuose valdikliuose, pramoninėse sistemose, plataus vartojimo elektronikoje ir kitose temperatūrai jautriose sistemose.

Prietaiso aprašymas ir veikimo principas:

Savo straipsnyje aprašysiu darbo su jutikliu, pagamintu TO-92 pakuotėje, pavyzdį.

Tai atrodo taip:

Viduje šis daiktas išdėstytas labai paprastai, pažiūrėkite patys:

Pažvelkime atidžiau į šią blokinę schemą.

Tačiau maitinimas tokiu būdu įveda tam tikrus jutiklio laiko parametrų apribojimus. Kurį laiką palaikius duomenų liniją, kondensatorius išsikraus, o tai lems VIDINĖS Vdd linijos ir atitinkamai viso jutiklio išjungimą. Todėl nepanaudotu laiku DQ linija turi būti laikoma aukštai. Reikėtų atkreipti dėmesį į vieną svarbią pastabą. Konvertuojant temperatūrą ir kopijuojant duomenis iš Scratchpad į EEPROM (į vieną iš registrų), INTERNAL Vdd linijos suvartojama srovė gali siekti 1,5 mA, o tai nepakeliama vidiniam kondensatoriui, o traukiant labai nukris įtampa. rezistorius, kuris nepriimtinai paveiks įrenginio veikimą apskritai. Norėdami tai padaryti, būtina organizuoti DQ linijas pagal galingą ištraukimo schemą, įgyvendintą pagal šią schemą:

Išdavus komandą PaverstiT arba KopijuotiBloknotėlis reikia įjungti galingą DQ linijos patraukimą su MOSFET tranzistoriumi ne vėliau kaip per 10 μs (max), pasak jutiklių kūrėjų, o tada laukti konversijos laiko (Tconv) arba duomenų perdavimo laiko (Twr). = 10 ms), ir šiuo metu jokių veiksmų nesiimama, kai galingas prisitraukimas yra DQ linijoje, neturėtų būti!

Mažai ką reikia pasakyti apie standartinę galią, nes čia viskas paprasta ir net MOSFET visai nereikia:

„64 BIT ROM IR 1-Wire PORT“ posistemyje yra unikalus 64 bitų serijinis identifikavimo kodas, esantis nepastovioje ROM atmintyje, o šiame mazge taip pat yra sąsaja, skirta sąveikai su 1 laidų valdymo sistema. „Memory Control Logic“ posistemis vykdo duomenų perdavimą tarp 1 laidų sąsajos posistemio ir „Scratchpad“ tipo atminties, kuri savo ruožtu turi prieigą prie temperatūros jutiklių registrų, viršutinės ir apatinės aliarmo slenksčių nustatymo registrų, konfigūracijos. registro ir generatoriaus registro 8 bitų kontrolinė suma, siekiant apsaugoti sistemą nuo neteisingų duomenų.

Kai įjungtas, jutiklis pagal numatytuosius nustatymus nustato 12 bitų konvertavimo skiriamąją gebą ir iškart pereina į mažos galios režimą. Norėdami pradėti konvertavimą, pagrindinis vadovas turi išsiųsti komandą PaverstiT . Konvertavus temperatūrą į skaitmeninį kodą, šis kodas išsaugomas bloknoto atmintyje kaip dviejų baitų žodis, o jutiklis vėl persijungia į energijos taupymo režimą.

Temperatūros konvertavimas.

Dabar išsiaiškinkime, kaip temperatūra konvertuojama jutiklyje. Tiesą sakant, ADC yra pačiame temperatūros jutiklio viduje, o išvesties duomenys, esantys temperatūros registre, perduodami į bloknoto atmintį. Temperatūros duomenys pateikiami tokiu formatu:

S vėliavėlė yra ženklo vėliavėlė, naudojama nurodyti skaičiaus ženklą (S = 0 yra skaičius, esantis 10-0 bituose, yra teigiamas, o S = 1, jei skaičius, esantis tuose pačiuose bituose, yra neigiamas, t. y. Ši byla temperatūra pavaizduota dviejų komplemento kodu (dviejų komplemento kodu)).

Nustačius 12 bitų konvertavimo skiriamąją gebą, visi 12 bitų (11 bitų 0) yra įjungti ir juose yra tinkamų duomenų. Nustačius 11 bitų, 0 bito turinio reikia nepaisyti, kai nustatyta 10 bitų, į 0 ir 1 bitus neatsižvelgti ir pan.

Pavojaus signalas yra termostato funkcija.

Tam yra numatyti 2 8 bitų registrai Th ir Tl. Th yra viršutinės temperatūros slenksčio reikšmė, o Tl - atitinkamai apatinė. Jei temperatūra viršija Th arba žemiau Tl, nustatoma pavojaus vėliavėlė. Šią aliarmo vėliavėlę aptinka šeimininkas, išduodamas komandą Signalizacijos paieška prie DQ linijos. Aliarmo vėliavėlė atnaujinama po kiekvienos temperatūros keitimo operacijos. Beje, naudojami tik 11–4 temperatūros registro bitai, palyginti su Th arba Tl registru, o tai reiškia, kad termostato funkcija veikia tik esant sveikoms temperatūroms. Registrai fiziškai yra EEPROM atmintis, todėl išjungiant maitinimą jie išlaiko savo reikšmes. Patys registrai yra panašūs į temperatūros registrą, tik jie yra 8 bitų, S vėliavėlė turi lygiai tokią pačią reikšmę kaip ir ankstesniu atveju:

Šis kodas, kaip minėta anksčiau, yra būtinas kiekvienam linijos įrenginiui identifikuoti kelių taškų temperatūros matavimo sistemose.

Šios atminties formatas yra toks:

Apatiniai 8 bitai yra skirti šeimos pavadinimui ir juose yra reikšmė 0x28. Kituose 48 bituose yra unikalus įrenginio serijos numeris. Reikšmingiausiame baite yra CRC kontrolinės sumos reikšmė, apskaičiuota žemesniems 56 ROM atminties bitams.

Atminties organizavimas.

Siųstuvo atmintį sudaro „Scratchpad“ atminties vieta ir EEPROM, skirta konfigūracijos duomenims ir aukšto bei žemo pavojaus signalo registro reikšmėms saugoti.

Kai maitinimas išjungiamas, 2, 3 ir 4 duomenų baitai išlaiko savo vertę EEPROM. Na, o įjungus vertė juose išlieka nepakitusi. 0 ir 1 baituose yra konvertuotos temperatūros reikšmė, 5, 6, 7 baitai yra rezervuoti vidiniam naudojimui ir vartotojas negali jų pasiekti savo poreikiams.

8-ajame baite yra reikšmė, sugeneruota integruotos CRC generavimo logikos 0–7 baitams, o tai sumažina klaidingų temperatūros rodmenų galimybę.

Pažymėtina, kad jei nenaudojama termostato funkcija, tuomet Th ir Tl registrai gali būti naudojami kaip bendrosios paskirties atmintis – juose galite saugoti bet kokią informaciją.

Duomenys įrašomi į 2, 3 ir 4 baitus, pradedant mažiausiai reikšmingu 2 baito bitu, naudojant instrukcijas Rašykite bloknotą. Norėdami patikrinti įrašytų duomenų vientisumą, galite juos perskaityti, tam reikia nusiųsti komandą jutikliui Skaitykite bloknotą, po kurio pagrindinis įrenginys turėtų gauti duomenis, pradedant nuo mažiausiai reikšmingo 0 baito bito.

Kad EEPROM atmintyje būtų saugomi termostato aukštų ir žemų registrų duomenys, taip pat konfigūracijos registras, pagrindinis įrenginys turi nusiųsti komandą jutikliui. Nukopijuokite bloknotą.

Kaip minėta anksčiau, į EEPROM įrašyti duomenys išsaugomi, kai išjungiamas maitinimas. Tačiau įjungus maitinimą, vertės iš atitinkamų EEPROM langelių automatiškai įkeliamos į atitinkamus bloknoto atminties registrus. Patogu, ar ne? :)

Be to, į EEPROM įrašytus duomenis galima bet kada perrašyti į bloknoto atmintį. Tai būtina, pavyzdžiui, kai eksploatacijos metu pakeičiate konfigūraciją, o tada reikia pereiti į „įprastą režimą“, t.y. grąžinti operacijos konfigūraciją, kuri buvo prieš keičiant bloknoto atminties registrų turinį. Tiesą sakant, tam pagrindinis įrenginys turi nusiųsti komandą jutikliui Prisiminkite E2 .

Konfigūracijos registre vartotojas gali apibrėžti tik 2 bitus: R0 ir R1. Šie bitai nustato temperatūros konvertavimo skiriamąją gebą ir pagal numatytuosius nustatymus yra 1, o tai yra pradinis 12 bitų konvertavimo skyros nustatymas.

Visos galimos šių bitų konfigūracijos ir atitinkami leidimai pateikiami toliau esančioje lentelėje. Pažymėtina, kad kuo didesnė konvertavimo skiriamoji geba, tuo ilgesnis konvertavimo laikas, pavyzdžiui, 12 bitų raiškai konvertavimo laikas yra 750 ms (maks.).

Sąveika su valdymo sistema.

Kaip minėta anksčiau, DS18B20 naudoja 1 laidų sąsajos duomenų magistralę, kad galėtų susisiekti su pagalbiniu įrenginiu. Todėl, norint jį prijungti, valdymo sistema turi pateikti išėjimą su atviru nutekėjimu arba su Hi-Z linijos būsena.

Vidinė jutiklio sąsajos konfigūracija parodyta žemiau:

Neaktyvioje būsenoje (tuščiosios eigos būsena) DQ linija ištraukiama rezistorius į „+“ maitinimo šaltinį. Taigi tarp operacijų (duomenų perdavimo) ši eilutė visada turi būti tokia. Jei dėl kokios nors priežasties operacijos turi būti sustabdytos, DQ eilutė turi būti aukšta, kad šis perkėlimas būtų atnaujintas. Sustabdydami operaciją galime išlaikyti DQ eilutę aukštame loginiame lygyje tiek, kiek norime, pradedant nuo 1 µs. Tačiau jei duomenų magistralė yra žema ilgiau nei 480 µs, visi šioje magistralėje esantys jutikliai bus nustatyti iš naujo.

Mainų operacijų seka.

Kiekvieną kartą, kai kreipiatės valdymo sistema prie jutiklio, reikia laikytis šios veiksmų sekos:

1) Inicializavimas;
2) ROM komanda (po to reikia keistis duomenimis);
3) Jutiklio funkcijos komanda (po to reikalingas ryšys).

Jei prieiti prie jutiklio nėra žingsnio, jutiklis nereaguos. Išimtis yra komandos PaieškaROM [ F0 h] ir SignalizacijaPaieška [ ECH] , po jų vykdymo kapitonas turi grįžti į pirmąjį valdymo sekos žingsnį.

Taigi. Visos operacijos prasideda inicijavimu. Po šios operacijos valdiklis generuoja atstatymo impulsą, pagal kurį pavaldiniai (šiuo atveju jutiklis (-iai)) perduoda buvimo impulsą pagrindiniam įrenginiui, kuris praneša, kad jutikliai yra prijungti ir paruošti darbui. operacija.

Apskritai, daviklyje įdiegta 1-Wire sąsajos magistralė apibrėžia kelių tipų signalus duomenų linijoje: atstatymo impulsas, buvimo impulsas, rašymas 0, rašymas 1, skaitymas 0, skaitymas 1. Visas šias operacijas atlieka pagrindinis įrenginys. , išskyrus buvimo pulsą. Jį formuoja tik jutiklis (-ai).

Taigi, pradedantiesiems, pagrindinis įrenginys pereina į siųstuvo režimą ir nustato DQ eilutę į 0 mažiausiai 480 µs (paryškinta juoda spalva). Tai iš naujo nustato jutiklį. Tada linija turi būti atlaisvinta ir pagrindinis įrenginys turi būti įjungtas į imtuvo režimą, o ištraukimo rezistorius nustatys duomenų liniją į aukštą loginį lygį (paryškinta plona juoda spalva). Kai jutiklis pajus kylantį kraštą, jutiklis palauks 15–60 µs ir iš naujo nustatys duomenų liniją į 0 per savo aparatinės įrangos sąsają ir išlaikys ją 60–240 µs. Praėjus šiam laikui, jutiklis atleis liniją ir bus nustatytas į loginį 1 lygį mažiausiai 480 µs po to, kai jutiklis aptiks atstatymo impulsą.

Dabar pakalbėkime apie tai, kaip atliekamas duomenų perdavimo procesas. Paprastai bitų perkėlimas. Esmė tokia. Paimamas tam tikras laiko tarpas ir per tą laiką meistras pažiūri, ką turime eilutėje, tarkime 1 – tai reiškia, kad užsirašėme 1, jei 0 – tai reiškia, kad užsirašėme nulį. Bet tai tik abstraktus paaiškinimas. Tiesą sakant, yra keletas niuansų, susijusių su viso šio atvejo terminu.

Žiūrėti paveikslėlius:

Viskas prasideda nuo to, kad kapitonas turi nuleisti duomenų liniją iki logiškai žemo lygio, o nuo to momento prasideda 1/0 rašymo / skaitymo lizdas, trunkantis nuo 60 iki 120 μs. Tarp rašymo / skaitymo lizdų duomenų eilutė turi būti nustatyta į 1 ne trumpesnį kaip atkūrimo laiką (1 μs). Norint organizuoti 0 rašymo lizdą, reikia visą lizdo laiką laikyti duomenų eilutę ties 0, bet jei reikia rašyti į jutiklį 1, tada pirmiausia iš naujo nustatykite duomenų eilutę į 0, tada palaukite bent 1 μs ir atleiskite eilutę ties 1, rašymo lizdo metu 1 (60–120 µs) į jutiklį įrašys 1 (žr. viršutinį dešinįjį paveikslą).

Tiesą sakant, jei duomenų eilutėje aptinkamas 1 per 15-60 µs nuo pradžios, tada bus parašytas 1, o jei 0 aptinkamas per 60-240 µs, tada bus parašytas 0.

Duomenų nuskaitymą lydi pagrindinis įrenginys, kai atstato liniją, laukia bent 1 µs, o 15 µs žiūri, kas vyksta linijoje: jei lieka 0, tai jutiklis perduoda 0, jei perjungė į 1, tada 1 buvo perduotas.

Komandos.

ROM komandos.

Šios komandos turi atitikti inicijavimo seką, jose turi būti instrukcijos, kaip rasti tinkamą jutiklį ir pan. Kiekvienos komandos talpa yra 8 bitai. Įvykdę atitinkamą komandą, jutikliui galite nusiųsti funkcijos komandą.

PAIEŠKOS ROM

Iš pradžių prijungus sistemą, ji turi atpažinti visus prie magistralės prijungtus įrenginius. Tam ir skirta ši komanda. Tačiau, kadangi turime tik vieną jutiklį, šios komandos nenaudosime.

SKAITYTI ROM

Ši komanda naudojama tik tada, kai magistralėje yra tik vienas jutiklis. Tai leidžia pagrindiniam įrenginiui nuskaityti 64 bitų ROM atminties turinį nenaudojant paieškos komandos. Ir jei bandysite naudoti šią komandą su daugiau nei 1 prijungtu jutikliu, visi jie pradės perduoti šios atminties turinį, o tai sukels nepageidaujamų pasekmių.

MATCH ROM

Tai yra ROM atitikimo komanda. Meistras išleidžia 64 bitus atitinkamo jutiklio, prijungto prie magistralės, ROM, ir jis jau nustato, ką su juo daryti (matuoti temperatūrą ir pan.). Kiti autobuso jutikliai šiuo metu lauks savo eilės.

PRALEISTI ROM

Tai yra ROM praleidimo komanda. Neatsižvelgiama į kurio nors konkretaus jutiklio adresą magistralėje, bet adresai visi iš karto. Po šios komandos galite išduoti, pavyzdžiui, temperatūros konvertavimo komandą ir visi jutikliai pradės konvertavimą. Tačiau iškvietus šią komandą, išdavus skaitymo atminties komandą, rezultatai bus nenuspėjami (nes visi jutikliai duomenis perduos vienu metu). Tai reiškia, kad tik su vienu prijungtu jutikliu tokia situacija yra įmanoma.

ALARM PAIEŠKA

Ši komanda yra identiška pirmajai šioje lentelėje, išskyrus tai, kad ji ieško jutiklių magistralėje su nustatyta aliarmo vėliavėle.

funkcines komandas.

Šios komandos atlieka bet kokių procesų funkcines operacijas, pavyzdžiui, temperatūros konvertavimo operacijos paleidimą, atminties kopijavimą ir pan. Iš viso yra 6 komandos, kiekvieno bito ilgis yra 8 bitai.

KONVERTUOTI T

Pradėti temperatūros keitimą. Įvykdžius šią komandą, į temperatūros registrą įvedami 2 baitų duomenys.

RAŠYKITE BLOKŠTELĮ

Įrašo duomenis į 2-4 registrus, pradedant nuo antrojo mažiausiai reikšmingo bito. Perkeliant duomenis į tris registrus reikia pasirūpinti, kad meistras nenustatytų jutiklių, nes galimas duomenų praradimas.

SKAITYKITE SKILTELĮ

Pradeda duomenų perdavimo procesą visuose bloknoto atminties registruose, pradedant žemu 0 baito bitu ir baigiant 8 baito aukštuoju bitu (CRC).

KOPIJUOTI SKELDŽELĮ

Ši instrukcija nukopijuoja 2, 3 ir 4 baitų registrų turinį į atitinkamas EEPROM vietas.

PRISIMINTI E2

Ši komanda nukopijuoja duomenis iš EEPROM į atitinkamas bloknoto vietas. Kaip minėta anksčiau, ši operacija atliekama automatiškai, kai įjungiamas maitinimas.

SKAITYKITE MAITINIMO TIEKIMĄ

Tiesą sakant, tai yra visa darbo su DS18B20 temperatūros jutikliu išmintis. Išsamesnės informacijos ieškokite duomenų lape (). Dabar reikia visą šį verslą įgyvendinti geležyje.

Scheminė įrenginio schema:

Spausdintinės plokštės surinkimo brėžinys (atsiprašau už kokybę, ką tik padariau, kad veiktų, dėl derinimo):

Nepamirškite tinkamai atspindėti lentos

Kadangi tai yra duonos lenta, aš ją ištraukiau iš seno projekto, todėl aukščiau esanti lenta šiek tiek skiriasi nuo turimos (manojoje dabar pašalinau viską, kas nereikalinga, ir ji tapo lygiai tokia, kaip aukščiau esančiose nuotraukose).

Štai kas man atsitiko:

Paaiškėjo, kad tai sumuštinis

Programos šaltinio kodas buvo parašytas kūrimo aplinkoje. Nebandžiau išnaudoti maksimalaus gatavų avr-gcc kompiliatorių bibliotekų, bet viską rašiau, kaip sakoma, „ranka“. Mano tikslas nėra pademonstruoti C virtuoziškumą, o tik per valandą parašytas pavyzdys, galintis suteikti pradedantiesiems bendrą idėją apie darbą su jutikliu.
Prietaisas skirtas naudoti patalpoje, todėl nenumatytas neigiamų temperatūrų matavimas.

Atsisiųskite šaltinius ir spausdintinės plokštės LAY galite žemiau

Bet kokių papildomų klausimų ar pasiūlymų laukiame adresu: [apsaugotas el. paštas]