DS18B20 1 wire teploměr

Při potřebě sledovat teplotu a následně na to ovládat zařízení, co ji bude zvyšovat nebo snižovat, jsem narazil na 1 wire teploměr od firmy Dallas Semiconductor. Jedná se o digitální teplotní senzor, který komunikuje po 1 vodiči (plus zem). Prodává se v mnoha pouzdrech, nejčastější je však TO-92 se třemi vývody (+ data -). Na jeden datový vodič lze připojit více zařízení. Před požadavkem na zahájení a příjmem teploty, se vždy odešle adresa daného zařízení, se kterým chceme komunikovat. Pokud je na sběrnici připojen jen jeden digitální senzor, není zapotřebí jej adresovat a stačí použít příkaz skip_rom pro přeskočení adresace. Pokud by na zběrnici bylo připojeno více zařízení a byl by použit příkaz skip_rom tak by jsme dostali nesmyslnou hodnotu. Tento příkaz však lze použít například pro zahájení měření teploty všech čidel a poté jen sbírat postupně hodnoty. Teploměr má 4 úrovně převodu teploty viz tabulka :

Velikost slova (bit) 9 10 11 12
Rozlišení (°C) 0.5 0.25 0.125 0.0625
Doba převodu (ms) 93,75 187,5 375 750


Zpracovává teplotu od -55 do 125 °C a ke své činnosti potřebuje napájecí napětí od 3 do 5 V.


Zapojení teplotního čidla pohled na bříško (rovnou plošku). Mezi pin Vdd a DQ připojíme odpor 47k.

Při komunikaci s mikropočítačem bude praktická realizace vypadat takto:

Reset :

-Stáhnout sběrnici na 0, počkat 480 µs
-Uvolnit sběrnici, počkat 70 µs
-Přečíst sběrnici. je-li ve stavu log. 0, je na ní připojeno nějaké zařízení. Pokud je v log. 1, žádné zařízení připojeno není.
-Počkat 410 µs

Zápis log. 1 :

-Stáhnout sběrnici na 0, počkat 4 µs
-Uvolnit sběrnici, počkat 60 µs

Zápis log. 0 :

-Stáhnout sběrnici na 0, počkat 60 µs
-Uvolnit sběrnici, počkat 4 µs

Čtení :

-Stáhnout sběrnici na 0, počkat 4 µs
-Uvolnit sběrnici, počkat 10 µs
-Přečíst sběrnici. Její stav udává přečtený bit.
-Počkat 55 µs
-Čtení opakovat 16x

Pauzy jsou jen orientační a mnou odzkoušené přesné rozmezí které lze použít je v datasheetu který lze nalést v sekci download.

Pokud chceme přečíst hodnotu naměřenou čidlem a máme připojeno jediné zařízení odešleme tento sled instrukcí:

Reset, Skip ROM[CCh], Convert T[44h], Reset, Skip ROM[CCh], Read Scratchpad[BEh], Read, Read

Seznam instrukcí:

Read ROM [33h]
Match ROM [55h]
Skip ROM [CCh]
Search ROM [F0h]
Alarm Search [ECh]
Write Scratchpad [4Eh]
Read Scratchpad [BEh]
Copy Scratchpad [48h]
Convert T [44h]
Recall E2 [B8h]
Read Power Supply [B4h]

Přijaté dva bajty nám udávají přímo teplotu ve °C. Ty však musíme upravit dle následující tabulky:

Teplota Přijatá hodnota
°C 0 = Plus
1 = Mínus
Celé stupně Zbytek
1. Přijatý bajt 2. Přijatý bajt
+125 0000 0111 1101 0000
+85 0000 0101 0101 0000
+25,0625 0000 0001 1001 0001
+10,125 0000 0000 1010 0010
+0,5 0000 0000 0000 1000
0 0000 0000 0000 0000
-0,5 1111 1111 1111 1000
-10,125 1111 1111 0101 1110
-25,0625 1111 1110 0110 1111
-55 1111 1100 1001 0000


Z tabulky lze vyčíst že desetinná část teploty je rozdělena do 16 kroků. Když vydělíme 1°C/16kroky dostaneme požadované 12 bit rozlišení 0,0625°C.

Testovací program má teplotní čidlo připojené k vývodu p3.0 a displej je zapojen stejně jako při jeho testování s 4 bitovou komunikací viz 8051 - LCD.


Teplotní čidlo Dallas.


Teplota na chladiči stabilizátoru.


Teplota v mražáku.

A tradáááááááá je hotovo.

Created by Mipi :)