Čeština / English
Login

Aplikace / Sběrnice 1-wire a čidlo DS18B20

Autor: Karel Slaný ()

Abstrakt: Implementace sběrnice 1-wire pro MCU a komunikace s čidlem DS18B20.

Update: 20100209

1. Čidlo DS18B20

Součástka DS18B20DS18B20 je běžně dostupný digitální teploměr, který je schopný měřit v rozsahu -55°C až +125°C. Výrobce garantuje přesnost 0.5°C v teplotním rozsahu -10°C do +85°C. Přesnost měření je volitelná v rozmezí 9 - 12 bitů (tzn. rozlišení 0.5 - 0.0625°C).

Senzor se připojuje pomocí jedno-vodičového seriového rozhraní označované jako 1-wire1wire.

Pro komunikaci se používá jeden datový a dva napajecí vodiče (GND, VDD, DQ). Napájecí napětí VDD se může pohybovat 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čů (GND, DQ). V tomto typu zapojení je připojené zařízení napájeno interním kondenzátorem, který je připojen k datovému vodiči. K datovému vodiči je nutné připojit slabý pull-up rezistor, protože všechna zařízení jsou připojena ke sběrnici skrze otevřený kolektor.

ds18b20multi2.png

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

Kromě měření teploty obvod CD18B20 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í1-wsearch ke sběrnici umožňuje provozovat několik senzorů na jednom datovém vodiči.

2. Popis aplikace

Aplikace umožňuje snímat teplotu z libovolného počtu senzorů DS18B20 připojených přímo k jednomu z pinů MCU. Maximální počet senzorů je omezen velikostí dostupné paměti. Ke každému zařízení je totiž nutné uchovat jeho 64-bitové identifikační číslo. To pak slouží k adresaci zařízení na sběrnici. Komunikaci s čidly a implementaci 1-wire protokolu zajišťuje program1-wsw běžící v MCU. Mikrokontroler obsahuje rutiny, které jsou schopny dentifikovat zarizeni na běrnici 1-wire, znicializovat teplotní čidla a změřit teplotu.

Zdrojový kód protokolu 1-wire lze nalézt v souborech one_wire.h a one_wire.c.

Funkce ow_find_devices() identifikuje zařízení na sběrnici a uloží jejich identifikační čísla do interních datových struktur.

Vlastní měření realizují rutiny ds_measure_all() a ds_get_temperature_selected(idx) definované v souboru main.c. Sběrnice 1-wire umožňuje současně rozeslat všem zařízením jeden příkaz. Toho lze využít v případě, kdy je ke sběrnici připojeno pouze jediné zařízení (protože se významně zjednoduší komunikační procedury - není nutné adresovat zařízení) nebo v případech, že na sběrnici je více stejných zařízení vykonávajících stejné operace. Funkce ds_measure_all() rozešle všem zařízením příkaz k měření teploty. Funkce ds_get_temperature_selected(idx) se pak dotazuje jednotlivých zařízení na naměřenou hodnotu. Pro identifikaci zařízení slouží parametr idx, který je číslo z intevalu <0, (devs-1)>, kde devs je počet připojených zařízení ke sběrnici.

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

ds18b20fitkit_conn.png

Obrázek 2.1: Zapojení dvou DS18B20 k FITkitu.

3. Zprovoznění aplikace

  1. přeložte aplikaci

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

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

    Pokud je senzor připojen, měl by se po resetu MCU na displeji zobrazit počet nalezených zařízení. Po chvíli by se měla začít zobrazovat naměřená teplota ze všech senzorů, která se aktualizuje každou sekundu.

Zobrazeno: 12054x Naposledy: 1.10.2023 19:17:53