Teplotní čidlo DS18B20 ve spojení s PIC12F629
http://www.pandatron.cz/?566&teplotni_cidlo_ds18b20_ve_spojeni_s_pic12f629
Popis teplotního čidla DS18B20, jeho připojení k procesoru PIC i volně dostupné zdrojové kódy. Uvnitř článku je i pokus se zmražením čidla na více než -35°C.
DS18B20
Obvod DS18B20 je digitální teplotní senzor, nejčastěji používaný v pouzdře TO-92 se třemi vývody. Senzor s nadřazeným systémem komunikuje pomocí sběrnice 1-Wire™, která je včetně řady aplikačních poznámek popsaná pěkně například na webu firmy Maxim. Rozlišení teplotního senzoru je 12b, tedy 0,0625°C. Přesnost je 0,5°C v teplotním rozsahu -10°C až +85°C a 2°C v celém teplotním rozsahu obvodu, tedy -55°C až +125°C.
Obr. 1: DS18B20 v pouzdře TO-92 při pohledu zepředu
Princip snímání teploty je ve zkratce takový, že uvnitř čidla jsou dva oscilátory. Jeden je s nízkým teplotním koeficientem a druhý naopak s vysokým. Jakmile se dá po sběrnici čidlu příkaz k zahájení převodu (měření) teploty, spustí se čítání obou těchto oscilátorů. Tato akce trvá (podle teploty) až 700ms a jejím výsledkem je 12b hodnota odpovídající aktuální teplotě. Ta je poté uložena ve vnitřních registrech obvodu a čeká na její vyčtení z nadřazeného obvodu.
Jednou z dalších předností tohoto čidla je i mimo jiné možnost provozu napájení i přenosu dat po jediném vodiči (samozřejmě plus GND). Tuto možnost zde však nepoužijeme, i když její implementace do řídícího kódu procesoru představuje zhruba dva řádky kódu, viz dále.
Kromě obvodu DS18B20 existuje i řada podobných čidel, například DS18S20 a podobně. Každý takový obvod, i když je ve svém principu totožný, je vždy v něčem odlišný a tak ho není možné použít. Následující zapojení a především ovládací program je tedy výhradně pro obvod DS18B20, případně následovaný dalšími znaky.
Schéma zapojení:
Čidlo bylo připojeno k procesoru firmy Microchip a to typu PIC12F629/675 podle následujícího obrázku:
Schéma i následný firmware vychází ze zapojení uvedeném ve článku UART na PIC - jednovodičový RS232. Je zde tedy podobně jako ve zmíněném článku připojen počítač PC prostřednictvím sériového portu (či USB/RS232 převodníku) přímo bez RS232/TTL převodníku.
Teplotní čidlo DS18B20 je poté svým datovým pinem připojeno na pin č.5 (GP2) procesoru. Hodnota rezistoru R1 není kritická.
Firmware:
Řídící program procesoru vychází z již zmíněného článku, ze kterého je zachována komunikace (pouze vysílání dat) s počítačem PC pomocí linky RS232. Program je dále doplněn o několik podprogramů, vykonávajících funkci komunikace s čidlem a konverze získané hodnoty na teplotu.
Na následujícím obrázku je diagram hlavní smyčky programu s červeně uvedenými názvy volaných podprogramů.
Obr. 3: Diagram funkce hlavní smyčky programu
Jak je z obrázku patrné, je v hlavní smyčce voláno celkem pět podprogramů s různými funkcemi. Takovéto rozdělení je výhodné jak z důvodu přehlednosti, tak především z důvodů případných následných úprav a modifikací. Pokud se například rozhodnete pro připojení displeje k procesoru a zobrazování teploty na něm, stačí nahradit funci vysílacící teplotu do PC (TEMPSND) za svou funkci komunikující s displejem.
DSSTART (řádek č.69) naváže komunikaci s teplotním senzorem a spustí v něm snímání (převod) teploty (viz datashhet obvodu DS18B20). Obvod DS18B20 tímto zahájí měření teploty, které trvá až 700ms a do jeho ukončení není možné vyčíst správnou teplotu. Tento podprogram však na ukončení měření nečeká a ihned vrátí řízení hlavní smyčce.
PAUSE (řádek č.350) zajišťuje čekání procesoru po dobu zhruba 10s. Změnou hodnoty (nyní 50) na začátku této smyčky je možné dobu libovolně upravit. Neměla by být však kratší než zhruba 1s z důvodu převodu teploty v čidle, který trvá zhruba 700ms.
DSREAD (řádek č.87) opět naváže komunikaci s teplotním čidlem a vyčte z něho 12b binární hodnotu teploty, kterou následně uloží ho registrů TEMPL (nižších 8 bitů) a TEMPH (vyšších 8 bitů), tedy hodnotu prvních dvou registrů obvodu DS18B20.
TMPCNV (řádek č.176) převede binární hodnotu získanou z teplotního čidla na dekadické číslo reprezentující samotnou teplotu. Výsledkem funkce naplní registr TEMPDP, který obsahuje desetinné číslo teploty, tedy binární (ne ASCII) hodnotu 0 - 9 (vzhledem k rozlišení teplotního čidla je to ve skutečnosti 0 - 8) reprezentující číslo ,0°C až ,9°C. Druhým touto funkcí naplněným registem je TEMPH. Ten obsahuje opět binární hodnotu (ne ASCII) teploty před desetiným místem. Může tedy obsahovat hodnotu 0 - 125, reprezentující teplotu 0°C až +125°C. Dále je v tomto registru zaznamenána i záporná teplota a to doplněním o konstantu 200. Pro záporné teploty má tedy tento registr hodnotu 200 pro teplotu -0,1°C až 255 pro teplotu -55°C.
TEMPSND (řádek č.258) poslední volaná funkce odešle do PC text "Teplota: " následovaný hodnotou teplotou (vše ve znacích ASCII).
Modifikace firmware:
Řídící program procesoru je možné libovolně měnit a upravovat. Například změnou hodnoty 50 (řádek č.350) je možné změnit interval měření a odesílání teploty do PC. Hodnota 50 odpovídá času zhruba necelých 10s. Změnou hodnoty uvedené na řádku č.36 je naopak možné změnit komunikační rychlost linky RS232. Možné hodnoty jsou uvedeny ve zdrojovéh kódu na následujících řádcích.
Nebo je například možné změnou znaků uvedených od řádku č.258 posílat do PC i libovolný jiný text než "Teplota: ". Délka tohoto textu je omezena pouze pamětí procesoru a může být tedy téměř libovolná.
Teplotní čidlo DS18B20 umožňuje pracovat i s tzv. parazetním napájením. V tom případě je však potřeba upravit schéma zapojení například podle obr.4 a do ovládacího programu (například na začátek a konec podprogramu PAUSE) přidat spínání a vypínání tranzistoru T1.
Obr. 4: Možné rozšířené schéma zapojení
Jinak je kód je samozřejmě možné i jinak upravovat a libovolně rozšiřovat. Je například možné zobrazovat teplotu na displeji a podobně.
Zobrazení teploty na PC:
Data z procesoru jsou odesílána do PC prostřednictvím sériové linky RS232 a to rychlostí 9600Bd.
Obr. 5: Nastavení COMportu
Zde je na jejich příjem možné použít například i obyčejný Hyperterminál, který je součástí každých Windows.
Obr. 6: Příjem teploty pomocí Hyperterminálu
Nebo je možné napsat si svůj ovládací program, který bude teplotu ukládat například i do grafu.
Závěr:
Zapojení bylo sestaveno a vyvinuto na kontaktním poli.
Obr. 7: Teploměr sestavený na kontaktním poli
Jelikož teplotní čidlo zvládá i poměrně vysoké záporné teploty, byl na něm proveden pokus.
Na následujícím obrázku je tak čidlo DS18B20 zmražené na více než -35°C. K takovému lokálnímu zmražení byl použit nejjednodušší možný způsob a to obyčejný náhradní plyn do zapalovačů, prodávaný v každé trafice.
Obr. 8: Čidlo DS18B20 zmrazené na -35°C
I když k takovémuto zmrazení stačí velice malé množství plynu stříknutého několikrát na čidlo, přesto si dejte pozor na silně hořlavé výpary.
Přijatý záznam teplot vypadal takto:
Teplota: -18,8°C Teplota: -29,8°C Teplota: -32,0°C Teplota: -33,5°C Teplota: -32,5°C Teplota: -33,5°C Teplota: -34,2°C Teplota: -35,3°C Teplota: -25,0°C Teplota: -12,8°C Teplota: -30,7°C Teplota: -21,1°C Teplota: -10,3°C
Odkazy & Download:
Zdrojové kódy řídícího programu procesoru k obr.2 - ds18b20_pic12f629_fw.zip
Datasheet obvodu DS18B20 - http://mexlewiki.hs-heilbronn.de/UserFiles/File/DS18B20.pdf