Po niekoľkých predchádzajúcich dňoch trápenia sa s tým, aby verzia Arduino Pro Micro 3.3V zaspala a prebúdzala sa, som konečne mal osvietenie a podarilo sa mi dosiahnuť požadovaný výsledok. Umožnilo to obrovské množstvo zdokumentovanej práce, na ktorú som konečne narazil. Odkazy sú na konci príspevku, ako vždy. Tiež dokazujú, že nie som jediný, kto sa pokúša zostrojiť batériovo napájané zariadenia na zaznamenávanie dát. Obe moje akademické práce sa navyše týkali správy energie a zaznamenávania dát, hoci to bolo pred rokmi. Sú verejne dostupné v sekcii git, ak má niekto záujem.

Zapojenie #

Tabuľka zapojenia a prehľadná vizualizácia zapojenia vo Fritzing sú nižšie:

Pin Pro MicroPin modulu DS3132
GNDGND
D2SDA
D3SCL
D4VCC
D7SQW/INT

Zapojenie modulu DS3132 k Arduino Pro Micro 3.3V

Kód #

Kód, ktorý sa zdá fungovať, hoci ešte nie je úplne otestovaný v praxi. Poznámka: na stiahnutie závislostí bol použitý Platformio a sú špecifikované v platformio.ini.

Fáza setup začína nastavením pinu D4 na vysokú úroveň, čím sa napája čip DS3132. Tým sa spustí jeho interný TXO oscilátor, ak ešte nie je spustený, a nastaví sa čas a dátum. Potom sa povolí Alarm 1 (rozlíšenie sekúnd), ktorý generuje prerušenie na SQW/INT na module, pripojenom na D7. D7 je zároveň jediný nekomunikačný pin na ATmega32u4, ktorý má externé prerušenie, ako som diskutoval vo včerajšom príspevku.

Časť loop potom opäť napája čip DS3132 Real-Time Clock (RTC) cez D4, nastaví alarm za secondsTillNextWakup sekúnd do budúcnosti a pokračuje vypnutím Micro, aby sa ušetrilo čo najviac energie. Keď nastane alarm, vygeneruje sa prerušenie, ktoré prebudí Micro, to nakonfiguruje ďalší alarm ešte ďalej do budúcnosti a znova zaspí. Cyklus sa opakuje.

Poznámky #

Je ešte niekoľko vecí, ktoré treba zvážiť:

  1. Musím urobiť skutočné merania spotrebovaného prúdu a vykonať ďalšie hodnotenia na osciloskope. Urobím to, akonáhle sa vrátim do laboratória.
  2. Odporová sieť RP1 na module DS3132 bola odstránená z dôvodu možnosti úniku prúdu cez pull-up, ktorý poskytuje pre linky SDA a SCL. Knižnica Wire sa zdá byť nastavená tak, aby povolila interné pull-upy Micro pre komunikáciu I2C tak či tak, ale pravdepodobne sú o rád slabšie než odporúčané (50k vs 5k). Napriek varovaniam to však funguje. Existujú náznaky, že táto úprava nemusí byť potrebná pre dosky 3.3V.
  3. I2C na DS3132 sa zdá fungovať aj bez nastavenia pinu VCC na vysokú úroveň cez D4 po tom, čo RTC už beží na záložnej batérii. Toto pravdepodobne potrebuje ďalšie preskúmanie. Datasheet hovorí, že I2C môže bežať aj na batérii a rád by som pochopil, ako možno optimalizovať spotrebu prúdu, keďže som do tejto témy investoval čas a úsilie.

Toto je 62. príspevok #100daystooffload.

Odkazy #