Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
2018:thermometer [2019/01/14 20:20] Ondřej Jeřábek [Firmware] |
2018:thermometer [2019/01/14 20:46] (aktuální) Ondřej Jeřábek [Firmware a eagle] |
||
---|---|---|---|
Řádek 40: | Řádek 40: | ||
===== Schéma zapojení ===== | ===== Schéma zapojení ===== | ||
- | V napájecí části je hned na vstupu zařazen tranzistor pro zamezení přepólování vlivem otočené knoflíkové baterie. Jelikož použitý typ CR2450 má nominální napětí 3V, není třeba dále provádět žádné úpravy a lze jej rovnou použít k napájení celého teploměru. | + | V napájecí části je hned na vstupu zařazen tranzistor pro zamezení přepólování vlivem otočené knoflíkové baterie. Jelikož použitý typ CR2450 má nominální napětí 3V, není třeba dále provádět žádné úpravy a lze jej rovnou použít k napájení celého teploměru. Zapojení ostatních periferií k mikrokontroléru je standardní dle doporučení v dokumentaci. |
- | + | ||
- | Zapojení jednotlivých periferií k mikrokontroléru je standardní. | + | |
{{ :2018:thermometer:thermometer_sch.png?400 |}} | {{ :2018:thermometer:thermometer_sch.png?400 |}} | ||
Řádek 59: | Řádek 58: | ||
Celý firmware je vyvíjen za použití volně dostupného prostředí Kinetis Design Studio určeného především pro mikrokontroléry NXP řady Kinetis. Pro usnadnění práce bylo použito Kinetis-SDK spolu s knihovnami pro ovládání E-Ink displeje a kreslení na něm. | Celý firmware je vyvíjen za použití volně dostupného prostředí Kinetis Design Studio určeného především pro mikrokontroléry NXP řady Kinetis. Pro usnadnění práce bylo použito Kinetis-SDK spolu s knihovnami pro ovládání E-Ink displeje a kreslení na něm. | ||
- | Celý firmware se zdrojovými soubory je přiložen na konci této práce. | + | Celý firmware se zdrojovými soubory je přiložen na konci této práce. Pro úspěšné buildnutí je třeba stáhnout si příslušné SDK (odkaz je na konci) a navést k němu cestu pomocí systémové proměnné KSDK-PATH v nastavení proměnného prostředí operačního systému. |
===== Hlavní program ===== | ===== Hlavní program ===== | ||
Samotný hlavní program vypadá relativně jednoduše, avšak velkou část výpočetního času zabere výpočet obrazu zobrazovaného E-ink displejem. Na začátku při startu je prováděna inicializace pinů mikrokontroléru spolu s nastavením taktovacího kmitočtu. Následně dochází ke konfiguraci okolních periferií. Ty zatím aktuálně nevyužité, jako je bezdrátový modul, nebo flash paměť se převedou do low-power režimu. | Samotný hlavní program vypadá relativně jednoduše, avšak velkou část výpočetního času zabere výpočet obrazu zobrazovaného E-ink displejem. Na začátku při startu je prováděna inicializace pinů mikrokontroléru spolu s nastavením taktovacího kmitočtu. Následně dochází ke konfiguraci okolních periferií. Ty zatím aktuálně nevyužité, jako je bezdrátový modul, nebo flash paměť se převedou do low-power režimu. | ||
- | Taktéž se provádí měření napětí baterie. V případě nedostatečného napětí je mikrokontrolér uspán a rozblikána červená LED. Program v tomto místě končí v nekonečné smyčce, kde čeká na výměnu baterie. Pokud ovšem napětí baterie dostačuje, pokračuje inicializací měřicího čidla a E-ink displeje. | + | Taktéž se provádí měření napětí baterie. V případě nedostatečného napětí je mikrokontrolér uspán a rozblikána červená LED. Program v tomto místě končí v nekonečné smyčce, kde čeká na její výměnu. Pokud ovšem napětí baterie dostačuje, pokračuje inicializací měřicího čidla a E-ink displeje. |
- | Hlavní smyčka není úplně periodická, jak se může na první pohled zdát, ale bývá pozastavena v každém cyklu úsporným režimem, kdy mikrokontrolér přechází do spánku (viz kapitola Řízení spotřeby). Taktéž bývá průběžně prováděno měření napětí baterie, parametrů okolního prostředí (teplota, tlak, vlhkost) a obnova dat na displeji. | + | Hlavní smyčka není úplně periodická, jak se může na první pohled zdát, ale bývá pozastavena v každém cyklu úsporným režimem, kdy mikrokontrolér přechází do spánku (viz kapitola Řízení spotřeby). Taktéž bývá průběžně prováděno měření napájecího napětí, parametrů okolního prostředí (teplota, tlak, vlhkost) a obnova dat na displeji. |
===== Řízení spotřeby ===== | ===== Řízení spotřeby ===== | ||
Řádek 115: | Řádek 114: | ||
<code cpp> | <code cpp> | ||
- | uint8_t bmp_read_data(int16_t * temp, uint16_t * humid, uint32_t * press) { | + | uint8_t bmp_read_data(int16_t * temp, uint16_t * humid, uint32_t * press) |
+ | { | ||
uint8_t press_raw[3]; | uint8_t press_raw[3]; | ||
uint8_t temp_raw[3]; | uint8_t temp_raw[3]; | ||
Řádek 155: | Řádek 155: | ||
Vykreslování veškerých obrazovek a obsluha tlačítek je definována ve zdrojovém souboru **ui.c**. Periodicky volaná funkce v hlavní smyčce **//ui_handle()//** obsluhuje reakce na stisknutá tlačítka následovaná vykreslováním daných typů obrazovek. V momentě vytváření obrazu se mění výkonový režim na Fast mode, k vůli vyšší výpočetní náročnosti. Výsledek je rovnou odesílán do E-ink displeje a po jeho kompletním odeslání se spustí překreslení. V rámci probíhající obnovy displeje se mikrokontrolér z důvodu úspory energie uspí. Probuzení zajistí přerušení od pinu busy. | Vykreslování veškerých obrazovek a obsluha tlačítek je definována ve zdrojovém souboru **ui.c**. Periodicky volaná funkce v hlavní smyčce **//ui_handle()//** obsluhuje reakce na stisknutá tlačítka následovaná vykreslováním daných typů obrazovek. V momentě vytváření obrazu se mění výkonový režim na Fast mode, k vůli vyšší výpočetní náročnosti. Výsledek je rovnou odesílán do E-ink displeje a po jeho kompletním odeslání se spustí překreslení. V rámci probíhající obnovy displeje se mikrokontrolér z důvodu úspory energie uspí. Probuzení zajistí přerušení od pinu busy. | ||
- | Funkce pro vykreslování využívají volně dostupnou knihovnu přímo od výrobce displeje Waveshare. Obsahuje několik druhů fontů s různou velikostí a funkce vykreslující geometrické tvary. Nejdůležitější částí, bez které není možno E-ink vůbec řídit je obnovovací sekvence tvořená look-up tabulkou, která musí být nahrána do displeje. Její podobu definuje výrobce a zajistí správné obnovení. Pro tento typ displeje existují dva typy tabulek. Jedna provádí částečný update, kdežto druhá aktualizuje celý displej. | + | Funkce pro vykreslování využívají volně dostupnou knihovnu přímo od výrobce displeje Waveshare. Obsahuje několik druhů fontů s různou velikostí a funkce vykreslující geometrické tvary. Nejdůležitější částí, bez které není možno E-ink vůbec řídit je obnovovací sekvence tvořená look-up tabulkou, která musí být do něj nahrána. Její podobu definuje výrobce a zajistí správné obnovení. Pro tento typ displeje existují dva typy tabulek. Jedna provádí částečný update, kdežto druhá aktualizuje celý displej. |
<code cpp> | <code cpp> | ||
Řádek 188: | Řádek 188: | ||
Navrhované zařízení je plně funkční a lze jej využívat jako plnohodnotný domácí teploměr schopný zobrazovat i detailnější informace jako vlhkost či atmosférický tlak. Z naměřených hodnot jsou průběžně vytvářeny grafy, díky kterým si lze prohlédnout změny za posledních 24 hodin. Taktéž si lze vyvolat minimální a maximální naměřené hodnoty za celou dobu provozu teploměru, případně je lze v menu vynulovat. | Navrhované zařízení je plně funkční a lze jej využívat jako plnohodnotný domácí teploměr schopný zobrazovat i detailnější informace jako vlhkost či atmosférický tlak. Z naměřených hodnot jsou průběžně vytvářeny grafy, díky kterým si lze prohlédnout změny za posledních 24 hodin. Taktéž si lze vyvolat minimální a maximální naměřené hodnoty za celou dobu provozu teploměru, případně je lze v menu vynulovat. | ||
- | Aktuální návrh je také velice úsporný na baterii, kdy v režimu nečinnosti odebírá pouze 7 μA. Měření teploty s překreslením displeje se provádí jednou za 5 minut se skokovým nárůstem spotřeby trvajícím přibližně 0,3 - 1 sekundu. Dle propočtů tedy vychází celková průměrná spotřeba na 50 µA a při použití baterie CR2450 s kapacitou 500 mAh činí výdrž přibližně 1 rok. Bohužel se v průběhu vývoje se vyskytly potíže s nedostatečným napájením na obnovu E-Ink displeje. Chyba byla prozatím vyřešena použitím tužkových baterií a bude opravena v další iteraci revizí hardwarového návrhu. | + | Aktuální návrh je také velice úsporný na baterii, kdy v režimu nečinnosti odebírá pouze 7 μA. Měření teploty s překreslením displeje se provádí jednou za 5 minut se skokovým nárůstem spotřeby trvajícím přibližně 0,3 - 1 sekundu. Dle propočtů tedy vychází celková průměrná spotřeba na 50 µA a při použití baterie CR2450 s kapacitou 500 mAh činí výdrž přibližně 1 rok. Bohužel se v průběhu vývoje vyskytly potíže s nedostatečným napájením na obnovu E-Ink displeje. Chyba byla prozatím vyřešena použitím tužkových baterií a bude opravena v další iteraci revizí hardwarového návrhu. |
Návrh lze dále v budoucnu rozšířit o venkovní teplotní čidlo, nebo přímo meteostanici, která bude svá naměřená data bezdrátově odesílat tomuto teploměru a ten se postará o jejich vyhodnocení a zobrazení. Výhodné by bylo také použít jiný bezdrátový modul, například s technologií LoRa umožňující komunikaci se vzdálenějším senzorem či připojení do LoRaWAN IoT sítě. | Návrh lze dále v budoucnu rozšířit o venkovní teplotní čidlo, nebo přímo meteostanici, která bude svá naměřená data bezdrátově odesílat tomuto teploměru a ten se postará o jejich vyhodnocení a zobrazení. Výhodné by bylo také použít jiný bezdrátový modul, například s technologií LoRa umožňující komunikaci se vzdálenějším senzorem či připojení do LoRaWAN IoT sítě. | ||
Řádek 199: | Řádek 199: | ||
{{ youtube>AyAU04ToL1Y?medium |}} | {{ youtube>AyAU04ToL1Y?medium |}} | ||
+ | |||
+ | |||
+ | ====== Firmware a schémata ====== | ||
+ | {{ :2018:thermometer:thermometer.zip |}} | ||
====== Zdroje ====== | ====== Zdroje ====== |