A ktualizováno v dubnu 2020
Měření analogových veličin mikropočítačem a přenos dat do PC
Všeobecně Na několika stránkách této publikace byly uvedeny čelní panely přístrojů, které se zobrazují na PC nebo hodnoty přístrojů, které se zobrazují na webu, kam je posílá server domácí měřící ústředny. Několik hamů, čtenářů mých článků mi poslalo hezký mail, s přáníčkem, zda bych nepopsal alespoň jeden jednoduchý ADC převodník, který používám. To dělám s radostí tímto článkem. Cíle a vlastnosti zařízení 1. Vymyslet, navrhnout a simulací vyzkoušet takové zařízení cestou z Prahy do Českých Budějovic (tj. za maximálně 2 hodiny) 2. Odladit program v simulátoru na notebooku. 3. Použít levný čip, nikoliv Raspberry nebo Arduino. To by se samozřejmě dalo použít také. Použité principy 1. V zařízení bude čip, který bude připojený k sériovému portu, na kterém bude naslouchat, až přijde pokyn (zvolil jsem tři po sobě jdoucí bajty pro jeho adresu). 2. Program v čipu bude očumovat sériový port a čekat, až přijdou ty tři bajty. 3. Jakmile budou ty tři bajty po sobě odpovídat hlavičce (preambuli) zapsané v čipu (použil jsem 254, 086, 086, hexadecimálně FE, 56, 56), bude program pokračovat tak, že přečte na dvou vstupech dvou analogově digitálních převodníků ADC dvě hodnoty připojeného napětí. Každá hodnota je vyjádřená jedním bajtem (použil jsem b0 a b1). 4. Tyto bajty budou odeslány jako data po sériovém portu zařízení Elfin, které je předá přes WiFi do PC. Program nepotřebuje dalšího komentáře a jeho fungování je zjevné z komentovaného výpisu v basicu. Hlavní smyčka běží mezi řádky č. 5 až 19. Na řádku č. 6 program očumuje, až přijde za sebou kombinace bajtů 254, 086, 086. Jakmile taková kombinace přijde, program vyčte hodnoty ADC a uloží je do proměnných b0 a b1 (řádky 13 a14). Na řádku 15 je instrukce odešle do PC přes seriovou linku po WiFi (zařízení Elfin, popsáno jinde na mém webu). Pro zpracování používám před bajty stejnou preambuli 254, 086, 086, aby program na PC poznal, který ADC mu data poslal. Hardware Použil jsem nejlacinější z rodiny čipů PICAXE, typ 08M2. Důvody: 1. Čip stojí v ČR asi 60 Kč 2. K programování nepotřebuji žádný programátor. 3. Vývojové prostředí (PICAXE Editor 6) je zadarmo. 4. Čip se dá naprogramovat z vývojového prostředí přes sériový port. 5. Vývojové prostředí má simulátor, ve kterém si lze právě napsaný program vyzkoušet cestou ve vlaku. 6. Jednoduché programování PICAXE se za okamžit naučí jak děti školou povinné, tak senioři 60+++. Jedná se o jednoduché, výrobcem čipů pedagogicky dobře zvládnuté metody. Použité piny Použil jsem všechny piny, protože jsem nepotřeboval všechny tři ADC převodníky, stačily mi dva, protože adresuji více čipů, které jsou levné. Tímto použitím jsem schopen měřit mnoho hodnot s více čipy. Piny na programování lze vyvést na samostatný konektor (nepoužívám) nebo čip programovat v zařízení s paticí, převodníkem USB na RS232 a 2 rezistory (mám takový bastl a už jsem ho popsal). Piny pro komunikaci jsou uvedené na obrázku vpravo dole:
Vyzkoušení programu Ve vláčku lze program vyzkoušet na simulátoru, který je součástí vývojového prostředí PICAXE Editor 6. Vlevo dole na obrazovce jsou špičky (piny) čipu. Když klikneme pravým tlačítkem na vstupy ADC, zobrazí se nám "potenciometr", kterým nastavíme napětí na vstupu a hodnota je ukazovaná jako dekádické číslo 0-255 - vpravo. Nastavil jsem si na špičkách C.1 a C.2 hodnoty 166 a 167, abych si je poznal. Po napsání programu můžeme provést kontrolu syntaxe. Občas se může vloudit chyba nebo nepochopíme instrukci správně. Například, že se odesílané bajty píšou do závorky. |
Program spustíme v simulátoru takto - viz obrázek vpravo. Postup 1. Program uložíme. 2. Přepneme na záložku Simulate. 3. Klikneme na tlačítko "Run". Program se rozběhne. Nejdřív vykoná skok do procedury "piny_na_low". V této pproceduře se nastaví pin C.3 na low a též, jako výstupní. Potom se program dostane k hlavní smyčce (řádek 5, návěští main:) a začne se vykonávat. To znamená, že se zastaví na řádku číslo 6 a začne vyčkávat, až přijde po sériovém portu sekvence tří bajtů, v mém případě 254,086,086. Na simulátoru musíme tuto sekvenci poslat z vestavěného terminálu takto - viz obrázek dole. Abyste viděli to, co já, nastavte si terminál takto: Tj. aby ukazoval přijatá data dekadicky (as deciaml). |
Data odešleme kliknutím na "Send" a vidíme toto: Program odeslal a terminál přijal tři bajty preambule, podle které poznám, který čip odpověděl a dva bajty dat, zde b0 = 166 a b1 = 167.
Závěr Nemám co dodat. Program je jednoduchý, funkční a napsaný způsobem polopaticky popsaným pro seniory a radioamatéry, kteří potřebují zařízení rychle vyvinout, ale nemají už čas nebo náladu učit se složitým věcem, byť z principu správným. Vymyšlení a naprogramování je zvládnutelné mnohem dříve, než za ty dvě plánované hodiny. Můžeme ještě zkoušet, napsat komentáře atd. Zastavím se u dovednosti v přepočtu dekadických hodnot na bajty. Ani já ji nemám a používám jednoduchý program z dob, kdy jsem se učil programovat - vpravo. Ten funguje na notebooku, i když nejde ve vlaku Internet. Vidíte, že dekadické hodnotě 166 odpovídá hexadekadická A6. |
Poznámky 1. Čip PICAXE 08 M2 převádí pomocé instrukce readadc hodnotu napětí na pinu ADC na číslo. Hodnota musí být v rozmezí od 0V do + Vcc (napájecí napětí čipu na špičce 1, označené též +V). 2. Komu by nestačil 8 bitový převod (nabývá jen 256 hodnot), může použít převod 10 bitový (rozsah převodníku). Pak se nevystačí pro přenos dat s jedním bajtem, ale s jedním slovem (doporučuji nahlédnout do manuálu). 3. Různé detektory s logaritmickým zesilovačem (používané k měření výkonů, příklad zde) pracují s výstupem, který lze přímo připojit na ADC. Takto jednoduché zařízení přenese data do PC, kde je snadno zpracujeme matematicky (přičtení offsetů, vynásobení konstantou, provedením korekce podle kalibrační tabulky, atd.). Takové věci uděláme v programu pro PC velmi snadno, ale hlavně rychle. Na mikropočítači by nám to sežralo mnohem víc času. 4. Program na sériové lince neotravuje posíláním dat. Tato odešle na vyžádání z řídícího počítače. Jak to funguje, jsme si popsali.
TU 73, Mira, ok1ufc