Sdílejte chiptron.cz na sociálních sítích



RSS feeds

EasyTerm jako datalogger s SCD41 během pár minutTisk



O zařízení EasyTerm jsem tu už několikrát psal (tady a tady) - jednoduchý a všestranný pomocník při vývoji. S autorem projektu jsme dali dohromady první praktický článek a jak jinak bychom ho použili než jako datalogger? A třeba s SCD41 - čidlem pro měření koncentrace CO2, teploty a vlhkosti.



Ve zkratce o EasyTerm


Potřebujete displej pro svižné ovládání či monitorování vašich udělátek bez sáhodlouhého programování, integrování knihoven do vašeho kódu a komplikování vašeho zapojení? Nebo snad potřebujete univerzální “multitool” když by se šiklo dostat rychle nějaký PWM signál, komfortně vyčíst nějaký registr I2C čipu či vygenerovat analogový signál? Na to a MNOHEM více Vám poslouží český EasyTerm.

Veškeré kouzlo EasyTermu je vlastně v následující filosofii: Mám-li displej s různorodými widgety, které umožní parsování či doplňování textových řetězců, mohu ovládat/monitorovat mnohá zařízení se sériovým portem (nebo z pozice EasyTermu i být ovládán). Pokud ty řetězce mohou být zároveň i známými příkazy pro EasyTerm, mohu ovládat EasyTerm přes jeho vlastní displej. Pokud má EasyTerm rozhraní (jako například ADC, DAC, PWM, I2C, SPI a UART), mohu pak příkazem mimo obsluhu displeje generovat sinus, číst registr I2C obvodu, hýbat GPIO pinem, posílat něco po SPI atd. No a pokud spojím ty displejové widgety s těmi rozhraními, tak si klidně na displeji sestavím kontrolní panel a transformuji tak EasyTerm třeba na dotykově ovladatelný signálový generátor nebo dotykově ovladatelný I2C master. Nebo obojí. Nebo cokoliv.



EasyTerm (viz 7-tech.net) umí příkazy v “kompaktním” a tzv. “sebedokumentujícím” formátu. Pro přehlednost nejprve budu využívat “sebedokumentujícího” formátu a v podobných příkazech následně využiji onen “kompaktní” formát. Příkazy není třeba cucat z prstu (rozuměj z manuálu) - lze využít aplikaci CmdBuilder.

Použití s terminálem


SCD41 (LaskaKit) jsem propojil s EasyTerm dvěma vodiči na I2C interface a dalších dvou k napěťovému výstupu (VOUT). EasyTerm mám připojen k PC přes USB - sériový port - stejně jako třeba s Arduinem.
Nejprve povolíme napěťový výstup VOUT (3.3V) EasyTermu, inicializujeme I2C interface a nastavíme I2C adresu na adresu SCD41 (0x62)

SYS VoutState=1; I2C Init=1 Address=62;
To slovo sebedokumentující bych jinak řekl: Rozumím tomu, co píšu. To značně zjednodušuje práci.

A můžeme rovnou spustit periodické měření zápisem 0x21b1 do SCD41 (viz katalogový list SCD.)
I2C wr=21b1;

Po uplynutí asi 5 sekund by měly být k vyčtení první hodnoty. Vyčtení hodnot spočívá v zápisu operace (0xEC05) a v následném čtení. Každý kdo trochu zná I2C ví, že vyčtení registru zpravidla probíhá nejprve zápisem adresy registru či zápisem operace, dále provedením tzv. “restart condition” a zahájením vyčítání.
EasyTerm má na to srozumitelnou operaci:
I2C wrrd=ADRESA_REGISTRU,POČET_BAJTU_K_VYČTENÍ

Takže zavoláme tento příkaz:
I2C wrrd=ec05,9;

A odpověď je třeba tato (ty hodnoty se budou lišit na základě koncentrace co2, teploty a vlhkosti v okolí čidla
I2C wrrd=07 70 D7 62 21 BA 8A 87 A1

Abych převedl tyto bajty, musel bych se podívat do datasheetu součástky, najít vzorce a počítat.
EasyTerm má však konfigurovatelný “read format”. V tomto případě poslouží “read format” typu “expression”, což je vlastně rovnice jejíž značky $i se nahradí vyčtenými bajty o indexu i a rovnice se poté vypočítá.

I2C ReadFormat="ef(CO2:($0<<8)+$1,Temp:-45+175*((($3<<8)+$4)/2**16),RH:100*(($6<<8)+$7)/2**16)";
Prostě kontrol cizí, kontrol vlastní.

Provedeme opět příkaz pro vyčtení registru výsledků:
I2C wrrd=ec05,9;

EasyTerm nyní vrátil toto:
I2C wrrd=CO2:1679,Temp:22.179108,RH:53.027344
Halelůja, mám srozumitelný hodnoty - a taky bych si mohl vyvětrat.

A když mám data, můžu je hodit do grafu.

Použití jako HMI


Autor doporučuje pro přehled zobrazit logovací okno:
displayLog y=400 h=80;

Zobrazíme si trojici formulářů (widget jehož obsah se vyplní na základě parsovací masky):
DisplayForm x=10 y=30 Width=100 GraphicsThickness=3 Font=18b Text="CO2" ParseMask="CO2:%d,";

DF x=110 y=30 w=100 gt=3 f=18b t="Temp" pm="Temp:%.2f,";

DF x=220 y=30 w=100 gt=3 f=18b t="RH" pm="RH:%.2f\r\n";

Zobrazíme si navíc graf pro hodnoty CO2. Můžeme se inspirovat parsovací maskou prvního formuláře:
displayPlot x=10 y=210 w=310 h=180 mode=approximated pm="CO2:%d,";

A nyní stačí vykonávat příkazy pro vyčtení, tedy I2C wrrd=ec05,9
To je ale nepraktické. Můžeme však použít tzv. TIMER příkaz, jemuž tento příkaz předáme jako parametr jeho akce:

TIM period=5500 state=1 action="I2C wrrd=ec05,9";

A teď se nám pravidelně aktualizují data a zároveň se kreslí graf.



A jak udělat to, aby nám tento “dashboard-obrazovka” zůstal i po vypnutí EasyTermu? Přece nebudeme příště opět "programovat".
Řešením je ty příkazy zapouzdřit do widgetů tlačítek. Zobrazíme si čtveřici tlačítek - první povolí napěťový výstup a inicializuje I2C. Druhé nám umožní odpojit napájení SCD41, třetí zahájí periodický převod zápisem do SCD41 a nastaví TIMER. Poslední tlačítko periodický převod ukončí.

displayButton x=10 y=100 w=150 h=50 f=18b t="Initialize" a="SYS vs=1+I2C i=1 a=62 rf="ef(CO2:($0<<8)+$1,Temp:-45+175*((($3<<8)+$4)/2**16),RH:100*(($6<<8)+$7)/2**16)"";

DB x=161 y=100 w=150 h=50 f=18b t="Power-down" a="SYS vs=0";

DB x=10 y=151 w=150 h=50 f=18b t="Start periodic" a="I2C wr=21b1+TIM p=5500 s=1 a="I2C wrrd=ec05,9"";

DB x=161 y=151 w=150 h=50 f=18b t="Stop periodic" a="TIM s=0+I2C wr=3f86";

A nyní uložíme layout do paměti flash:
saveLayout bankId=0;

A nakonec nastavíme commandOnInit (tj příkaz který se vykoná po zapnutí EasyTermu) aby se zavolal příkaz pro načtení layoutu!
SYS CommandOnInit="LoadLayout bankId=0";

Závěrem


Ano, vymysleli jsme příklad s SCD41, který lze jednoduše připojit k Arduino a využít knihoven od Sensirion - to ale nebyl cíl. Cílem bylo ukázat, jak snadno a přitom flexibilně lze využít EasyTerm s téměř čímkoliv. V praxi lze EasyTerm totiž použít na monitorování či ovládání od jednoduchých čidel přes složitá zařízení s vlastním mikrokontrolérem a FW - často postačí propojit UARTy a máte ovládací/monitorovací panel, aniž by vás vůbec napadlo, že k vaší drobné destičce s několika málo piny půjde vůbec nějaký displej připojit! A za chvíli máte i vlastní dashboard! A když tohle zrovna nepotřebujete, tak si jej třeba transformujete na dotykově ovladatelný signálový generátor, napěťový logger, I2C master a tak dále. Ale o tom zase třeba příště!

Více informací a e-shop naleznete na stránce 7-tech.net

Upozornění

Administrátor těchto stránek ani autor článků neručí za správnost a funkčnost zde uvedených materiálů.
Administrátor těchto stránek se zříká jakékoli odpovědnosti za případné ublížení na zdraví či poškození nebo zničení majetku v důsledku elektrického proudu, chybnosti schémat nebo i teoretické výuky. Je zakázané používat zařízení, která jsou v rozporu s právními předpisy ČR či EU.
Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva.
Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ.
10,887,250 návštěv