A DS18B20 egy digitális hőmérséklet-érzékelő, amely egyetlen buszidőzítést használ a gazdagéppel való kommunikációhoz. Csak 1 A hőmérsékleti adatok leolvasásához vezetékre van szükség;
A DS18B20 beépített 64 bites sorozatszámmal rendelkezik az egyszerű azonosítás érdekében. Több DS18B20 érzékelő csatlakoztatható 1 Huzal, és 64 bites identitás-hitelesítéssel, a különböző érzékelőktől gyűjtött hőmérsékleti információk külön-külön leolvashatók.
A DS18B20 bemutatása
2.1 A DS18B20 főbb jellemzői
1. Teljesen digitális hőmérséklet-átalakítás és kimenet.
2. Fejlett egybuszos adatkommunikáció.
3. Akár 12 bites felbontás, akár ±0,5 Celsius fokos pontossággal.
4. A maximális munkaciklus 12 bites felbontásnál 750 milliszekundum.
5. Kiválasztható a parazita üzemmód.
6. Az érzékelési hőmérséklet tartomány –55°C ~ +125°C (–67°F ~+257°F).
7. Beépített EEPROM, hőmérséklet határérték riasztás funkció.
8. 64-bit fotolitográfia ROM, beépített termék sorozatszáma, kényelmes többgépes csatlakoztatáshoz.
9. Különféle csomagolási formák, alkalmazkodni a különböző hardverrendszerekhez.
2.2 DS18B20 tű funkció
GND feszültség földelés;
DQ egyetlen adatbusz;
VDD tápfeszültség;
NC üres tű;
2.3 DS18B20 működési elv és alkalmazás
A DS18B20 hőmérsékletérzékelés és a digitális adatkimenet teljes mértékben egy chipen van integrálva, tehát erősebb az interferencia-elhárító képessége. Egy munkaciklusa két részre osztható, nevezetesen hőmérsékletérzékelés és adatfeldolgozás.
18A B20 háromféle memória-erőforrással rendelkezik. Ők azok: ROM csak olvasható memória, a DS18B20ID kód tárolására szolgál; az első 8 A bitek egysoros sorozatkódok (A DS18B20 kód 19H), a következőket 48 A bitek a chip egyedi sorozatszámai; az utolsó 8 bitek a CRC kódok (redundancia ellenőrzés) a fentiek közül 56 bitek. Az adatok gyártáskor kerülnek beállításra, és a felhasználó nem módosíthatja azokat. A DS18B20 összesen 64 ROM bitek.
RAM adatregiszter, belső számításokhoz és adateléréshez használják, áramszünet után az adatok elvesznek, A DS18B20 összesen 9 bájt RAM, minden bájt az 8 bitek. Az első és a második bájt a hőmérséklet-átalakítás utáni adatérték információ; a harmadik és negyedik bájt a felhasználó EEPROM-jának tükörképe (általában hőmérséklet-riasztási értékek tárolására használják). Értéke a tápfeszültség visszaállításakor frissül. Az ötödik bájt a felhasználó harmadik EEPROM-jának tükörképe. A 6, 7th, a 8. bájtok pedig számlálóregiszterek, amelyek célja, hogy a felhasználók magasabb hőmérsékleti felbontást érjenek el. Ideiglenes tárolóegységek is a belső hőmérséklet átalakításához és kiszámításához. A 9. bájt az első CRC kódja 8 bájtok. Az EEPROM egy nem felejtő memória, amelyet olyan adatok tárolására használnak, amelyeket hosszú ideig kell menteni, felső és alsó hőmérsékleti riasztási értékek, és ellenőrző adatok. A DS18B20 összesen 3 bit EEPROM, és a RAM-ban tükörképek találhatók a felhasználói kezelés megkönnyítése érdekében.
A DS18B20 alapértelmezés szerint 12 bites felbontású módban működik. Az átalakítás után kapott 12 bites adatokat a DS18B20 két 8 bites RAM-jában tárolják. (az első két bájt). Az első 5 A bináris bitek előjelbitek. Ha a mért hőmérséklet nagyobb, mint 0, ezek 5 bitek vannak 0. Csak szorozza meg a mért értéket ezzel 0.0625 hogy megkapjuk a tényleges hőmérsékletet. Ha a hőmérséklet kisebb, mint 0, ezek 5 bitek vannak 1. A mért értéket meg kell fordítani, tette hozzá 1, majd megszorozzuk vele 0.0625 hogy megkapjuk a tényleges hőmérsékletet. Vagy használjon bitműveletet a hőmérséklet kivonására: a tizedesjegyek az alsót foglalják el 4 bitek, a felső bitek pedig egész bitek (a negatív számokat nem veszik figyelembe).
2.4 DS18B20 chip ROM utasítás táblázat
1. Olvassa el a ROM-ot [33H] (a hexadecimális parancsszó szögletes zárójelben van).
Ez a parancs lehetővé teszi a buszvezérlő számára, hogy beolvassa a DS18B20 64 bites ROM-ját. Ez az utasítás csak akkor használható, ha csak egy DS18B20 van a buszon. Ha egynél több van csatlakoztatva, adatütközések lépnek fel a kommunikáció során.
2. csatolja a ROM-ot [55H]
Ezt az utasítást a vezérlő által kiadott 64 bites sorozatszám követi. Ha több DS18B20 van a buszon, csak a vezérlő által kiadott sorozatszámmal megegyező chip tud válaszolni, és a többi chip várni fog a következő resetre. Ez az utasítás egylapkás és többlapkás csatlakoztatásra alkalmas.
3. ROM kihagyása [CCH]
Ez az utasítás arra készteti a chipet, hogy ne reagáljon a ROM kódra. Egyetlen busz esetén, ezzel az utasítással időt takaríthat meg. Ha ezt az utasítást több chip csatlakoztatásakor használja, adatütközések lépnek fel, hibákat eredményezve.
4. ROM keresése [F0H]
A chip inicializálása után, a keresési utasítás lehetővé teszi az összes eszköz 64 bites ROM-jának azonosítását, ha több chip csatlakozik a buszhoz.
5. Riasztás keresése [MINDEN]
Több chip esetén, a riasztási chip keresési utasítás csak azokra a chipekre reagál, amelyek megfelelnek a TH-nál magasabb vagy TL-nél alacsonyabb hőmérsékletű riasztási feltételnek. Amíg a chip nincs kikapcsolva, a riasztási állapot mindaddig megmarad, amíg a hőmérsékletet ismét meg nem mérik, és a riasztási állapotot el nem érik.
6. Írjon Firkálótömböt [4EH]
Ez az utasítás az adatok RAM-ba írásához. A később írt két bájt adat a címen lesz tárolva 2 (A riasztási RAM TH) és címet 3 (TL riasztási RAM). Az írási folyamat egy reset jellel fejezhető be.
7. Olvassa el a Firkálótömböt (adatok olvasása a RAM-ból) [BEH]
Ez az utasítás adatokat olvas be a RAM-ból, címtől kezdve 0 és címig 9, a teljes RAM-adat beolvasásának befejezése. A chip lehetővé teszi, hogy a reset jel leállítsa az olvasási folyamatot, vagyis, az ezt követő felesleges bájtok figyelmen kívül hagyhatók az olvasási idő csökkentése érdekében.
8. Firkálótömb másolása (másolja a RAM-adatokat EEPROM-ba) [48H]
Ez az utasítás a RAM-ban lévő adatokat az EEPROM-ba tárolja, így az adatok nem vesznek el, ha a tápfeszültség ki van kapcsolva. Mivel a chip EEPROM tárolási feldolgozással van elfoglalva, amikor a vezérlő olvasási időrést küld, a busz kimeneteket “0”, és amikor a tárolási munka befejeződött, a busz kimenetet fog adni “1”.
Parazita üzemmódban, Az utasítás kiadása után azonnal erős felhúzást kell alkalmazni, és legalább 10 MS-ig fenn kell tartani a chip működésének fenntartása érdekében.
9. Konvertálja a T (hőmérséklet átalakítás) [44H]
Miután megkapta ezt az utasítást, a chip hőmérséklet-konverziót hajt végre, és a konvertált hőmérsékleti értéket a RAM 1. és 2. címén tárolja. Mivel a chip a hőmérséklet-átalakítással van elfoglalva, amikor a vezérlő olvasási időrést küld, a busz kimeneteket “0”, és amikor a tárolási munka befejeződött, a busz kimenetet fog adni “1”. Parazita üzemmódban, Az utasítás kiadása után azonnal erős felhúzást kell alkalmazni, és legalább 500 MS-ig fenn kell tartani a chip működésének fenntartása érdekében.
10. Hívja elő az EEPROM-ot (Másolja a riasztási értéket az EEPROM-ban a RAM-ba) [B8H]
Ez az utasítás az EEPROM riasztási értékét a RAM 3. és 4. bájtjába másolja. Mivel a chip a másolási folyamattal van elfoglalva, amikor a vezérlő olvasási időrést küld, a busz kimeneteket “0”, és amikor a tárolási munka befejeződött, a busz kimeneteket “1”. Ezen kívül, ez az utasítás automatikusan végrehajtásra kerül, amikor a chipet bekapcsolják és visszaállítják. Ily módon, a RAM-ban lévő két riasztási bájtbit mindig az EEPROM-ban lévő adatok tükörképe lesz.
11. Olvassa el a tápegységet (Üzemmód kapcsoló) [B4H]
Az utasítás kiadása után, olvasási időköz kerül kiadásra, és a chip visszaadja a teljesítmény állapot szót. “0” a parazita hatalmi állapot és “1” a külső teljesítmény állapota.
2.5 DS18B20 időzítési diagram
2.5.1 DS18B20 visszaállítási és válaszkapcsolati diagram
Minden kommunikáció előtt alaphelyzetbe kell állítani. A visszaállítási idő, várakozási idő, és a válaszidőt szigorúan az időzítésnek megfelelően kell programozni.
DS18B20 olvasási és írási időköz: A DS18B20 adatolvasást és -írást az időrés feldolgozó bitje és az információcseréhez szükséges parancsszó erősíti meg.
2.5.2 Írjon adatokat 0 és adatok 1 a DS18B20-hoz
Az írási adatok első 15uS-ében időrés, a buszt le kell húzni a vezérlővel, és akkor ez lesz a buszadatok chip-mintavételi ideje. A mintavételi idő 15-60 uS. Ha a vezérlő magasra húzza a buszt a mintavételi idő alatt, írást jelent “1”, és ha a vezérlő alacsonyra húzza a buszt, írást jelent “0”.
Minden átviteli bitnek rendelkeznie kell legalább 15 uS alacsony szintű indítóbittel, és az azt követő adatok “0” vagy “1” 45 eS-en belül kell befejezni.
A teljes bit átviteli idejét 60-120 uS között kell tartani, ellenkező esetben a normál kommunikáció nem garantálható.
Jegyzet: A DS18B20 az alacsony bitről olvas és ír adatokat.
2.5.3 Adatok olvasása 0 és adatok 1 a DS18B20-tól
A vezérlés mintavételezési ideje az olvasási időrés alatt pontosabb legyen. Az olvasási időköz alatt, a gazdagépnek legalább 1uS alacsony szintet is generálnia kell, hogy jelezze az olvasási idő kezdetét. Majd, 15 USA-ban, miután a buszt kiengedik, a DS18B20 elküldi a belső adatbitet. Ebben az időben, ha a vezérlő megállapítja, hogy a busz magas, olvasást jelent “1”, és ha alacsony a busz, adatok olvasását jelenti “0”. Mielőtt elolvasná az egyes részeket, a vezérlő indítójelet ad hozzá.
Jegyzet: Az adatbitet az olvasási rés kezdetétől számított 15 uS-en belül kell beolvasni a megfelelő kommunikáció érdekében.
A kommunikáció alatt, 8 darabjait “0” vagy “1” bájtként használatosak, és a bájt olvasása vagy írása az alsó bittől kezdődik.
2.5.4 A hőmérséklet egyszeri leolvasási sorrendje (csak egyetlen DS18B20 van a buszon)
1. Reset jel küldése
2. Válaszjel érzékelése
3. 0xCC küldése
4. 0x44 küldése
5. Reset jel küldése
6. Válaszjel érzékelése
7. Írj 0xcc-t
8. Írj 0xbe-t
9. Hurok 8 alkalommal a hőmérséklet alacsony bájtjának olvasásához
10. Hurok 8 alkalommal olvassa be a hőmérséklet magas bájtját
11. Szintetizálja a 16 bites hőmérsékleti adatokat és dolgozza fel
3. Driver kód
3.1 DS18B20.c
#tartalmaz “ds18b20.h”
/*
Funkció: DS18B20 inicializálás
Hardver csatlakozás: PB15
*/
void ds18b20_init(üres)
{
RCC->APB2ENR|=1<<3; //PB
GPIOB->CRH&=0x0FFFFFFFF;
GPIOB->CRH|=0x30000000;
GPIOB->ODR|=1<<15; //Push-up
}
/*
Funkció: Ellenőrizze, hogy létezik-e a DS18B20 eszköz
Visszatérési érték: 1 azt jelenti, hogy az eszköz nem létezik 0 azt jelenti, hogy a készülék normális
*/
u8 DS18B20_CheckDevice(üres) //Reset impulzust tartalmaz, észlelő impulzus
{
DS18B20_OUTPUT_MODE();//Inicializálás kimeneti módba
DS18B20_OUT=0; //Reset impulzus generálása
DelayUs(750); //750us alacsony szintet generál
DS18B20_OUT=1; //Kioldó busz
DelayUs(15); //Várja meg a DS18B20 válaszát
ha(DS18B20_CleckAck())//Létezési impulzus észlelése
{
visszatérés 1;
}
visszatérés 0;
}
/*
Funkció: A DS18B20 eszköz létezési impulzusának észlelése
Visszatérési érték: 1 hibát jelez 0 normált jelez
*/
u8 DS18B20_CleckAck(üres)
{
u8 cnt=0;
DS18B20_INPUT_MODE();//Inicializálás beviteli módba
míg(DS18B20_IN&&CNT<200) //Várja meg a DS18B20 válasz létezési impulzust
{
DelayUs(1);
cnt++;
}
ha(CNT>=200)visszatérés 1; //hiba
cnt=0;
míg((!DS18B20_IN)&&CNT<240) //várja meg, amíg a DS18B20 felszabadítja a buszt
{
DelayUs(1);
cnt++;
}
ha(CNT>=240)visszatérés 1; //hiba
visszatérés 0;
}
/*
Funkció: Írj egy bájtot
Először tanulj meg egy kicsit írni.
*/
void ds18b20_writebyte(u8 cmd)
{
u8 i;
DS18B20_OUTPUT_MODE(); //Inicializálás kimeneti módba
számára(i=0;én<8;i++)
{
DS18B20_OUT=0; //Írási időrés generálása (írás kezdése)
DelayUs(2);
DS18B20_OUT=cmd&0x01; //Valós adatbit küldése
DelayUs(60); //Várja meg az írás befejezését
DS18B20_OUT=1; //Engedje el a buszt, és készüljön fel a következő adásra
cmd>>=1; //Folytassa a következő adatbit elküldését
}
}
/*
Funkció: Olvasson egy bájtot
Először tanulj meg olvasni egy kicsit.
*/
u8 DS18B20_ReadByte(üres)
{
u8 i,adat=0;
számára(i=0;én<8;i++)
{
DS18B20_OUTPUT_MODE(); //Inicializálás kimeneti módba
DS18B20_OUT=0; //Olvasási időrés generálása (olvasás kezdete)
DelayUs(2);
DS18B20_OUT=1; //Kioldó busz
DS18B20_INPUT_MODE(); //Inicializálás beviteli módba
DelayUs(8); //Várja meg a DS18B20 adatkimenetet
adat>>=1; //Töltse fel a magas bitet 0, alapértelmezett az 0
ha(DS18B20_IN) adat|=0x80;
DelayUs(60);
DS18B20_OUT=1; //Kioldó busz, várja meg a következő adatrészlet olvasását
}
visszaadja az adatokat;
}
/*
Funkció: Olvassa el egyszer a DS18B20 hőmérsékleti adatait
Visszatérési érték: a hőmérsékleti adatok olvashatók
Megfontolt helyzet: Csak egy DS18B20 csatlakozik a buszhoz
*/
u16 DS18B20_ReadTemp(üres)
{
u16 hőmérséklet=0;
u8 temp_H,temp_L;
DS18B20_CheckDevice(); //Reset impulzus küldése, pulzust észlelni
DS18B20_Writebyte(0XCC); //A ROM-szekvencia észlelésének kihagyása
DS18B20_Writebyte(0x44); //Indítsa el a hőmérséklet-átalakítást
//Várja meg, amíg a hőmérséklet-átalakítás befejeződik
míg(DS18B20_ReadByte()!=0xFF){}
DS18B20_CheckDevice(); //Reset impulzus küldése, pulzust észlelni
DS18B20_Writebyte(0XCC); //A ROM-szekvencia észlelésének kihagyása
DS18B20_Writebyte(0XBE); //Olvassa le a hőmérsékletet
temp_L=DS18B20_ReadByte(); //Olvassa el az alacsony hőmérsékletű adatokat
temp_H=DS18B20_ReadByte(); //Olvassa el a magas hőmérsékletű adatokat
temp=temp_L|(temp_H<<8); //Szintetizált hőmérséklet
visszatérési hőmérséklet;
}
3.2 DS18B20.h
#ifndef DS18B20_H
#DS18B20_H meghatározása
#tartalmaz “stm32f10x.h”
#tartalmaz “sys.h”
#tartalmaz “késleltetés.h”
#tartalmaz “ds18b20.h”
#tartalmaz “usart.h”
/*Csomag felület*/
//Inicializálja a DS18B20-at bemeneti módba
#definiálja a DS18B20_INPUT_MODE-ot() {GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x80000000;}
//Inicializálja a DS18B20-at kimeneti módba
#határozza meg a DS18B20_OUTPUT_MODE paramétert(){GPIOB->CRH&=0x0FFFFFFFF;GPIOB->CRH|=0x30000000;}
//DS18B20 IO port kimenet
#definiálja a DS18B20_OUT PBout-ot(15)
//DS18B20 IO port bemenet
#definiálja a DS18B20_IN PBin-t(15)
//Funkció deklaráció
u8 DS18B20_CleckAck(üres);
u8 DS18B20_CheckDevice(üres);
void ds18b20_init(üres);
u16 DS18B20_ReadTemp(üres);
u8 DS18B20_ReadByte(üres);
void ds18b20_writebyte(u8 cmd);
#endif
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png
3.3 Késleltetés funkció
/*
Funkció: Késés bennünk
*/
érvénytelen DelayUs(int bennünk)
{
#ifdef _SYSTICK_IRQ_
int i,j;
számára(i=0;iVAL=0; //CNT számláló értéke
SysTick->LOAD=9*us; //9 1us-t jelent
SysTick->CTRL|=1<<0; //Indítsa el az időzítőt
csinál
{
tmp=SysTick->CTRL; //Állapot olvasása
}míg((!(tmp&1<<16))&&(tmp&1<<0));
SysTick->VAL=0; //CNT számláló értéke
SysTick->CTRL&=~(1<<0); //Kapcsolja ki az időzítőt
#endif
};i++)>
3.4 main.c Hívja a DS18B20 számot, hogy leolvassa a hőmérsékletet, és kinyomtassa a soros portra
#tartalmaz “stm32f10x.h”
#tartalmaz “ds18b20.h”
u8 DS18B20_ROM[8]; //Tárolja a DS18B20 64 bites ROM kódját
int fő(üres)
{
u16 hőm;
USARTx_Heat(USART1,72,115200);//A soros port inicializálása 1
Ds18b20_init(); //DS18B20 inicializálás
/*1. Olvassa be a DS18B20*/ 64 bites ROM kódját
//Reset impulzus küldése, érzékeli a létezési impulzust
míg(DS18B20_CheckDevice())
{
printf(“A DS18B20 eszköz nem létezik!\n”);
DelayMs(500);
}
//Küldje el a parancsot a 64 bites ROM kód olvasásához
DS18B20_Writebyte(0x33);
//Hurok beolvasása 64 bites ROM kód
számára(i=0;én<8;i++)
{
DS18B20_ROM[én]= DS18B20_ReadByte();
printf(“DS18B20_ROM[%D]=0x%X\n”,én,DS18B20_ROM[én]);
}
míg(1)
{
/*2. Működtesse egyidejűleg az összes DS18B20-at a buszon a hőmérséklet átalakításához*/
DS18B20_CheckDevice(); //Reset impulzus küldése, pulzust észlelni
DS18B20_Writebyte(0XCC); //A ROM-szekvencia észlelésének kihagyása
DS18B20_Writebyte(0x44); //Indítsa el a hőmérséklet-átalakítást (hagyja, hogy a buszon lévő összes DS18B20 konvertálja a hőmérsékletet)
DelayMs(500); //Várja meg, amíg az összes DS18B20 hőmérséklet-átalakítás befejeződik a vonalon
/*3. Mindegyik DS18B20*/ hőmérsékletének egyetlen célzott leolvasása
DS18B20_CheckDevice(); //Reset impulzus küldése, pulzust észlelni
DS18B20_Writebyte(0x55); //Parancs küldése a ROM-nak megfelelő
számára(i=0;én<8;i++) //64 bites kód küldése
{
DS18B20_Writebyte(DS18B20_ROM[én]);
}
DS18B20_Writebyte(0XBE); //Olvassa le a hőmérsékletet
temp=DS18B20_ReadByte(); //Olvassa el az alacsony rendű hőmérsékleti adatokat
hőmérséklet|=DS18B20_ReadByte()<<8; //Magas rendű hőmérsékleti adatok olvasása
printf(“temp1=%d.%d\n”,hőmérséklet>>4,hőmérséklet&0xF);
printf(“temp2=%f\n”,hőmérséklet*0,0625);
DelayMs(500);
}
}
English
Afrikaans
العربية
বাংলা
bosanski jezik
Български
Català
粤语
中文(简体)
中文(漢字)
Hrvatski
Čeština
Nederlands
Eesti keel
Suomi
Français
Deutsch
Ελληνικά
हिन्दी; हिंदी
Magyar
Bahasa Indonesia
Italiano
日本語
한국어
Latviešu valoda
Lietuvių kalba
македонски јазик
Bahasa Melayu
Norsk
پارسی
Polski
Português
Română
Русский
Cрпски језик
Slovenčina
Slovenščina
Español
Svenska
ภาษาไทย
Türkçe
Українська
اردو
Tiếng Việt







