Elektronika, ukázky pro STM8S103F3, plus programování v assembleru.


Čidlo DHT-22 (AM2302) a případně DHT-11

pro měření teploty a vlhkosti

AM2302

S modulem DHT-22, nebo AM2302 (DHT-11) jsem si pohrál a následující kód pro práci s ním je funkční. Alespoň u mne :-). Časování procesoru je zde nastaveno na 2MHz. CPU rychlost ovlivňuje i čtení z čidla, kde je časování kritické. IO pin zde je PA1. Je možné to samozřejmě změnit. V tomto kodu se čtení z DHT provádí na základě timeru, po spuštění ihned, pak každých cca 15 minut. Při checksum error se čtení opakuje po několika vteřinách. Pokud čidlo nebude komunikovat vůbec, bude po volání čtení nastaven příznak overflow.
Mám v plánu žádat o data přes UART a přečtená data odeslat také na UART. Timer by v tomto případě nebyl potřeba.

Postup pro čtení dat:
  • Nastavit IO pin na OUTPUT
  • Shodit jej do LOW na 1ms u DHT-22 (AM2302), nebo 18ms u DHT-11, tím se čidlu pošle žádost o data
  • Nastavit IO pin na INPUT
  • Cekat na "start bit" - postupne LOW - HIGH - LOW
  • Následuje čtení 40 bitů (LOW-HIGH-LOW-HIGH...) - měří se délka stavů HIGH (30us = 0; 70us = 1)
  • 40 bitů = 5 bajtů - vhkost - vlhkost desetiny - teplota - teplota desetiny - kontrolní součet
  • 1.byte + 2.byte + 3.byte + 4.byte AND 0xFF = kontrolni součet, jinak chyba čtení

Tato ukázka kódu je primárně určená pro DHT-22 (AM2302), ale po malé úpravě je možné ji aplikovat i na jednodušší DHT-11. Rozdíl je hlavně v tom, že DHT-22 i AM2302 vrací hodnotu teploty a vlhkosti jako word (2 byte) v destinách stupňů, či procent. U jednodušší DHT-11 vraci u teploty i vlhkosti dva byte, kde první byte jsou celá čísla a druhý byte mají být desetiny. Tyto však obsahují buď nulu, nebo velmi malou hodnotu. Je možné je ignorovat a zobrazovat pouze první byte. Další rozdíl, je ve startovacím LOW impulzu. U DHT-22 i AM2302 má trvat 1 až 2 milisekundy, zatímco u DHT-11 musí být delší, 18 až 20 milisekund. Podrobnosti viz komentáře v kódu.


všeobecné informace

Všechny zde uváděné zdrojáky mají stejnou strukturu, jsou vytvořeny podle stejné šablony. Na prvním řádku každého zdrojáku musí být direktiva stm8/, jinak překlad skončí chybou. Program má inicializační část (SETUP), kde je nastaven vrchol zásobníku, je vynulována paměť ram, nastaví se rychlost CPU a proběhne základní nastavení použitého hardware, například UART, CPI, I2C, GPIO, atd. Vyhrazené piny pro UART, SPI, I2C a analogy jsou v této tabulce:
STM8S103F3P6

určení jednotlivých pinů
Napájení5V, 3V3 a zem GND
GPIOvšechny piny An, Bn, Cn, Dn
UARTTX=pin D5, RX=pin D6
SPIMISO=pin C7, MOSI=pin C6, SCK=C5, CS/SS=pin A3
I2CSCL=pin B4, SDA=pin B5
ANALOGA0=pin C4, A1=pin D2, A2=pin D3, A3=pin D5, A4=pin D6
ST-LINKpiny pro programátor SWIM a NRST

V nekonečné smyčce (LOOP) se pak provádi samotná činnost. Úplně na konci je tabulka vektorů přerušení v segmentu vectit s popisy, které zařízení může přerušení vyvolat.
U modulů, které jsem v rámci svých možností odladil a otestoval, jsem vytvořil prográmek, který lze formou copy-paste vytáhnout (buď celý, nebo pouze potřebné kusy kódu) a použít jej v nějaké Vaší aplikaci. Zkopírovat se musí potřebný kód, proměnné v paměti a deklarace konstant (equ).

Na stránkách výrobce ST Microelectronics je ke stažení vývojové prostředí ST Visual develop, utilita ST Visual Programmer a dále jsou zde velmí podrobné manuály v PDF (v angličtině) odledně popisu mikrokontroléru a jeho instrukčního souboru.

Dúležité upozornění: Zde presentovaný modul mikrokontroléru má výstupy 5V, 3V3 a GND. Na výstupu 5V ve skutečnosti není 5 voltů, ale vstupní napětí, kterým celý tento modul napájíte, buď přes piny +/-, nebo přes konektor mikroUSB, což může být 4.5 - 15V. Buďte opatrní, co k tomu pinu (5V) připojíte, připojovaný modul můžete tímto zničit. Doporučuji modul napájet výhradně z 5V zdroje.

Vzkazník - dotazy, názory, připominky, hlášení chyb, atd:
případný E-mail nebude nikde zveřejněn, uveďte jej, pouze pokud si přejete odpověď.

Elektronika, ukázky pro Arduino a STM8, plus programování v Delphi (Lazarusu).
Všechna zapojení modulů v ukázkách (viz elektrická schémata) pracují s velmi malým napětím 3.3V až 12V a neobsahují návod na napájecí zdroj. Pokud se rozhodnete některé z těchto zařízení postavit, důrazně doporučuji používat zdroje s výstupním napětím maximálně 12V, podle schválených norem platných v ČR. Autor návodů za případné škody nepřebírá žádnou odpovědnost.
nahoru
tyto stránky jsou provozovány jako hobby, bez reklam a bez sběru osobních dat (c) 2026 iisivak.xf.cz