Čeština / English
Login

Aplikace / Měření teploty pomocí DS18B20

Autor: Zdeněk Vašíček ()

Abstrakt: Komunikace s teplotním čidlem DS18B20 připojeným ke sběrnici one-wire.

Update: 20090404

1. Senzor DS18B20

DS18B20 je běžně dostupný digitální teploměr, který je schopen měřit v rozsahu -55°C až +125°C s přesností ±0.5°C garantovanou v teplotním rozsahu -10°C to +85°C. Data jsou ze senzoru získávána pomocí jedno-vodičového seriového rozhraní (1-wire interface) s uživatelsky programovatelnou přesností 9 - 12 bitů (tzn. rozlišení rozlišení 0.5 - 0.0625°C). Pro komunikaci se používá jeden datový a dva napajecí vodiče (GND, VDD, DQ). Napájecí napětí VDD se může pohyboat v rozmezí 3.3V až 5.5V. Mimo to lze senzor provozovat v tzv. parazitním režimu využívajícím pouze dvou vodičů.

ds18b20multi2.png

Obrázek 1.1: Obvod DS18B20 a způsob zapojení více senzorů na sběrnici

Kromě měření teploty obvod disponuje funkcí digitálního termostatu, jehož dolní a horní hranici lze programově nastavit a uložit do EEPROM paměti na čipu. Při čtení naměřené hodnoty jsou pak k dispozici bity informující o překročení naprogramovaných rozsahů.

Každý obvod má již z výroby přiděleno své vlastní unikátní 64-bitové seriové číslo, které slouží k adresaci konkrétního senzoru. Seriové číslo společně s unikátním protokolem identifikace připojených zařízení ke sběrnici umožňuje provozovat několik senzorů na jednom datovém vodiči. Mimo to nabízí obvod možnost využít napěťový signál pro přenos dat, čímž se celkový počet vodičů nutný k připojení senzorů redukuje na dva (GND, VDD/DQ).

2. Popis aplikace

Aplikace umožňuje snímat teplotu z jednoho senzoru DS18B20 připojeného k jednomu z pinů FPGA obvodu. Komunikaci s čidlem a realizaci 1-wire protokolu zajišťuje řadič uvnitř FPGA. Mikrokontroler obsahuje rutiny, které jsou schopny znicializovat teplotní čidlo a změřit teplotu. Rutiny využívají příkazu čtení a zápisu bytu poskytovaného FPGA řadičem.

Řadič v FPGA se skládá z konečného automatu, který zajišťuje a) čtení 8-bitové informace, b) zápis 8-bitové informace, c) inicializaci teplotního sensoru a detekci jeho připojení. Zdrojový kód řadiče lze nalézt v souboru one_wire.vhd.

Vlastní měření realizuje rutina measuretemp() uvedená v souboru main.c. Tato funkce využívá následující jednoduché rutiny komunikující s řadičem v FPGA:

  • onewire_reset() - nařídí řadiči v FPGA zinicializovat zařízení (je-li nějaké připojeno)

  • onewire_write() - řadič v FPGA pošle přes 1-wire 8-bitové slovo

  • onewire_read() - řadič v FPGA přečte z 1-wire 8-bitové slovo a vrátí je mikrokontoleru (v rutině se aktivně čeká na dokončení operace)

Pomocí těchto funkcí jsou zasílány příkazy a čteny data ze senzoru. Nejdříve je zahájen převod teploty (příkaz 0xCC 0x44), poté se aktivně čeká, až je převod dokončen a následně je přečtena naměřená hodnota (příkaz 0xCC 0xBE). Bližší informace naleznete v příslušném datasheetu.

Zdrojové kódy aplikace lze nalézt v SVN.

3. Zprovoznění aplikace

  1. přeložte aplikaci

  2. připojte teplotní senzor na předposlední pin horní řady konektoru JP10 dle nákresu na obrázku 3.1. Datový vodič je nutné opatřit pull-up resistorem o odporu několik kilo ohmů.

    ds18b20fitkit.png

    Obrázek 3.1: Připojení teplotního čidla k FITkitu

  3. naprogramujte MCU a FPGA a spusťte terminálový program nebo vytáhněte propojky J8/J9

    Pokud je senzor připojen, měla by se na displeji zobrazit naměřená teplota, která se aktualizuje každou sekundu.

Zobrazeno: 7510x Naposledy: 30.9.2023 01:32:35