Uživatelské nástroje

Nástroje pro tento web


attiny84a

Toto je starší verze dokumentu!


Řešení založené na mikrokontroleru ATTINY84

Níže popsané zapojení dovoluje vzdálené programování nejen ESP čipu přes připojenou WIFI, ale také programu mikrokontroleru ATTINY84. Ke změně programu čidla nebo reakčního prvku hry na stanovišti tedy není potřeba prvek demontovat, ale stačí v něm přes WIFI přehrát program libovolného z vestavěných čipů.

Je k tomu potřeba navíc pouze jeden pin od každého čipu.

Mikrokontroler ATTINY84 disponuje celkem 12 piny pro program, počítáme-li i RESET, který se dá použít v nouzi nejvyšší také jako vstupně/výstupní pin.

Mikrokontroler je napojen jedním pinem k ESP8266 (stačí v provedení ESP-01, pozor nikoliv ESP-01S). Tento pin má dvě funkce v závisloti na tom, v jakém režimu se systém nachází.

  • Jednosměrné programování mikrokontroleru prostřednictvím OWL bootloaderu
  • Obousměrná 1-wire komunikace s ESP pro komunikaci s řídící jednotkou stanoviště

Tip: Pokud nechcete sami nahrávat čipy podle návodu níže, můžete si od nás objednat za nákladovou cenu a poštovné už naprogramovanou dvojici ESP-01 a ATTINY84.

OWL bootloader

One way bootloader je geniálním řešením kombinující jednosměrné programování s šifrováním kódu. A to v pouhých 512 bytech flash paměti.

Kódu v ESP tedy stačí zresetovat mikrokontroler a přes svůj hardwarový seriový port nastavenou rychlostí poslat jednorázově do mikrokontroleru nový program. Ověřít, že je program správně nahraný lze následně po jeho spuštění přes připravenou 1-wire komunikaci.

1-wire komunikace pro program

Stejný programovací „drát“, kterým je propojen ESP s ATTINY84 se používá i v programu mikrokontroleru k obousměrné komunikaci. Laskavý čtenář může namítnout, že ATTINY84 má přece hardwarovou podporu sériové komunikace USI, s níž je komunikace rychlá a spolehlivá. Proč ji tedy nevyužít?

Důvodů je několik. Chtěli jsme ponechat piny PA6 a PA5, kde je tato hardwarová podpora komunikace pro použití uživateli v jeho programu k implementaci čidla nebo reakčního prvku, aby se např. mohl snadno připojit k nějaké I2C sběrnici nebo k SPI.

Druhým důvodem je podpora i velmi úsporného čipu ATTINY13A, který je malý, ale nemá podporu USI.

A konečně třetím důvodem je více pinu pro použití v programu čidla - komunikační vrstva s ESP zabírá jen jeden pin.

Z výše popsané implementace, ale vyplývají i některé nevýhody. Komunikace s ESP je velmi pomalá - řádově kolem 2000 baudů při vniřním taktu mikrokontroleru 1 MHz. Komunikace s ESP, ale nepředpokládá výměnu velkého množství dat.

Pokud bude z nějakého důvodu potřeba rychlejší komunikace, je možné připojit navíc k ESP i zatím volné piny podprující seriovou komunikaci na hardwarové úrovni a komunikovat přes ně.

Taktování a spotřeba

Aktuální implementace počítá s taktováním mikrokontroleru 1 MHz (tedy s aktivním interním dělením nativní hodinové frekvence 8 MHz osmi - fuse CKDIV8 je aktivní). Při této rychlosti je spotřeba při napětí 3.3 V kolem 0.5 mA. To umožní, aby mikrokontroler „sledoval“ celý průběh hry i v aktivním stavu (je-li to potřeba), aniž by příliš čerpal cenou energii z baterie.

Příprava mikrokontroleru ATTINY84

Mikrokontroler je třeba nejprve koupit. Doporučujeme využít běžné prodejce dostupné u nás a neobjednávat mikrokontroler v Číně. Cena je obdobná a čínské zboží může být padělek, který se navíc nemusí projevit hned a dorazí obvykle mnohem později.

Cena za tento mikrokontroler se pohybuje při kusovém odběru kolem 36 Kč včetně DPH.

Zapsání OWL bootloaderu

Prvním krokem je zapsání OWL bootloaderu. Do paměti čipu a zapsání vhodné konfigurace pojistek (fuses).

Bootloader nelze někde stáhnout a není to ani vhodné (připravíme se tím o bezpečné šifrování), ale je potřeba ho vygenerovat připraveným nástrojem od autora.

Stačí stáhnout a rozbalit archiv ze stránek autora a v rozbaleném adresáři spustit následující příkaz:

owl --device=tn84 --rxport=a6 --clock=1000 --targetname=iles84

Tím dojde k vygenerování bootloaderu pomocí něhož budeme dále nahrávat program do mikrokontroleru. Vygenerovaný soubor iles84.hex najdete v podadresáři targets. Tento soubor je nyní potřeba nahrát do mikrokontroleru.

Nahrání bootloaderu do mikrokontroleru proběhne pouze jednorázově a pak už je možné nahrávat programy přes WIFI prostřednictvím ESP. Bootloader také nemůže být běžným programem poškozen.

Máte tyto možnosti, jak nahrát bootloader a nastavit pojistky:

  • Použít čip ESP8266 jako SPI programátor s knihovnou ESP8266AVRISP - podrobný popis, jak na to
  • Použít k tomu jakékoliv Arduino, návod je např tady
  • Jiná možnost, např pokud máte nějaky programátor na čipy Atmel

Vzdálené programování ATTINY84 přes WIFI

Máte-li v mikrokontroleru připraven bootloader, stačí připojit jeho pin PA6 na TX pin ESP8266 a můžete ho nyní programovat vzdáleně.

V programu ESP8266 je otevřen TCP/IP port 328, který naslouchá a když do něj pošlete předem připravený kód programu (pozor nestačí jen přeložený HEX soubor), tak ho ESP8266 zapíše na svůj seriový port a přes něj se dostane až k OWL bootloaderu. Pokud je program a jeho šifrování validní, bude ATTINY84 přeprogramován.

Aby mohl OWL bootloader pokus o programování ověřit (a umožnit) musí být přeložený HEX soubor pro mikrokontroler nejprve zakódován nástrojem owl, který jako parametr dostane soubor bootloaderu, který je aktivní v ATTINY.

Příkaz pro vytvoření zakódovaného programu pro přenos je:

./owl -tn=iles84 -ff=./mujprogram.hex -tf=mujprogram

Tento příkaz v adresáři transmissions vytvoří soubor mujprogram_iles84.hex, který už může být přenesen přes WIFI do mikrokontroleru.

Stačí k tomu jakýkoliv program umožňující otevřít TCP/IP socket a poslat do něj soubor. Např. netcat:

nc -N 192.168.15.211 328 < transmissions/mujprogram_iles84.hex

kde 192.168.15.211 je IP adresa přidělená ESP.

Po zaslání programu do ESP, musí ESP ještě zresetovat ATTINY, aby se spustil bootloader. K tomu je využit pin GPIO2, který je připojen přímo k pinu RESET mikrokontroleru.

Alarm z centrály

Některé reakční prvky hry se potřebují dozvědět, že na stanovišti hry došlo ke změnám a logika řízení od nich vyžaduje reakci. Pokud by jedinou komunikací s centrální řídící jednotkou stanoviště bylo ESPNow, musel by každý reakční prvek pravidelně probouzet ESPNow, aby se dozvěděl, jestli se něco nestalo (polling). To je nepraktické kvůli zbytečnému plýtvání energie baterie a kvůli zpoždění, ke kterému by tím docházelo.

Řešením tohoto problému je přidat k reakčním prvkům přijímač RF 433 MHz. Jeho jedinou funkcí bude přijmout alarm s určitým kódem konkrétního reakčního prvku nebo obecným kódem, který probouzí všechny. Po přijetí této zprávy od centrální jednotky si příjemce aktivuje ESP8266, kterým se už domluví s řídící jednotkou stanoviště na detailech, co je přesně potřeba udělat.

Většina čidel tento přijímač nebude v průběhu hry potřebovat. Přesto může mít smysl ho instalovat, pokud předpokládáme, že čidlu budeme potřebovat aktualizovat firmware. Potom je možné firmware aktualizovat i bez nutnosti čidlo fyzicky aktivovat.

Rušení a konflikty na RF 433

Komunikace na frekvenci 433 MHz bývá zatížena rušením. Jedná se obvykle o velmi jednoduchou komunikaci, kdy se signál na frekvenci 433 MHz buď vysílá anebo nevysílá. Jednoduchým kódováním pomocí času a změn (vysílání a nevysílaní) signálu je možné poslat do okolí data.

Problém nastává v případě, že se dva účastníci komunikace rozhodnou vysílat současně - „překřikují se“. Tomu obecně nelze zabránit a norma jen nedovoluje provozovat příliš silný vysílač. Tím ale bývá omezen dosah, který bývá v ideálních podmínkách okolo 100 m.

Na stanovišti hry, zvlášť pokud bude na odlehlém míste někde v lese, ale není předpoklad přiliš velkého rušení od cizích zařízení na této frekvenci.

Navíc komunikace bude pouze jednocestná od řídicí jednotky směrem k jednotlivým prvkům hry a nehrozí tak, že bude docházet k mnoha konfliktům.

Vývoj a debug log

K odesílaní logovacích dat z ATTINY během vývoje čidla nebo reakčního prvku se používá stejná 1-wire komunikace, po níž se komunikuje s ESP.

Pokud je ESP01 připojen k WIFI síti stačí si otevřít socket na portu 329 a na něm už bude přímo výstup z volání funkce log na ATTINY.

Přípojení k log socketu:

nc 192.168.15.211 329

Zajímavostí vývoje zařízení je tak jeho úplné oddělení od Vašeho počítače. Veškerá komunikace včetně programování obou čipů probíhá bezdrátově a vyvíjené zařízení je napájené přímo z baterie. I vlastní vývoj tak může probíhat přímo ve finálním umístění, což usnadní testování.

Schéma zapojení

Zajímavé knihovny

attiny84a.1628457320.txt.gz · Poslední úprava: autor: martin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki