I2C a uspání
I2C a uspání
Mám dotaz, jak zajistit, že je vše odesláno před přechodem do režimu uspání? Něco jako Serial.flush(), což čeká na odeslání všeho do sériové linky. Evidentně se mi vše neodešle a protože se nenastaví aktivace alarmu na DS3231, nevyvolá pak přerušení a zařízení se neprobudí. Jen někdy. Takže určitě dochází k tomu, že zařízení usne ještě před odesláním. Předpokládám, že Wire knihovna pracuje s přerušením od časovače a data se odesílají z nějakého buferu postupně.
Re: I2C a uspání
U I2C nic takového není. Jediné řešení asi je, zapamatovat si čas posledního odeslání dat a nedovolit uspání dříve, než uplyne čas potřebný pro odeslání celého množství. Pokud zařízení bude pracovat dlouhou dobu, je třeba i ošetřit přetečení 64bit millis počítadla.mpik píše: ↑15 úno 2021, 07:44Mám dotaz, jak zajistit, že je vše odesláno před přechodem do režimu uspání? Něco jako Serial.flush(), což čeká na odeslání všeho do sériové linky. Evidentně se mi vše neodešle a protože se nenastaví aktivace alarmu na DS3231, nevyvolá pak přerušení a zařízení se neprobudí. Jen někdy. Takže určitě dochází k tomu, že zařízení usne ještě před odesláním. Předpokládám, že Wire knihovna pracuje s přerušením od časovače a data se odesílají z nějakého buferu postupně.
Re: I2C a uspání
Čas mě nehoní, můžu čekat i několik sekund před uspáním.
Ona situace, kdy to bez uspání funguje a s uspáním jen někdy je dost těžko pochopitelná, myslel jsem že se nevybavuje přerušení, ale pak jsem zjistil, že nefunguje jeho zdroj - z hodin RTC. Přitom nastavený čas alarmu je správný, jen je evidentně třeba po nastavení času nahodit příznak povolení a vyvolání přerušení. Což dělám, ale asi ne vždy to doběhne. Datasheet 3231 neobsahuje mnoho údajů, nezjistil jsem tam třeba ani jak dlouho trvá signál přerušení (experimentálně - až do jeho shození v programu).
Ona situace, kdy to bez uspání funguje a s uspáním jen někdy je dost těžko pochopitelná, myslel jsem že se nevybavuje přerušení, ale pak jsem zjistil, že nefunguje jeho zdroj - z hodin RTC. Přitom nastavený čas alarmu je správný, jen je evidentně třeba po nastavení času nahodit příznak povolení a vyvolání přerušení. Což dělám, ale asi ne vždy to doběhne. Datasheet 3231 neobsahuje mnoho údajů, nezjistil jsem tam třeba ani jak dlouho trvá signál přerušení (experimentálně - až do jeho shození v programu).
Re: I2C a uspání
Asi by nebylo od věci se na to podívat log. analyzátorem. Ten nejjednodušší, ale plně dostačující i s analýzou I2C protokolu je tady
https://www.laskarduino.cz/sl-usb8ch-lo ... lu--24mhz/
https://www.laskarduino.cz/sl-usb8ch-lo ... lu--24mhz/
Re: I2C a uspání
Tak to vypadá, že to funguje. Náhodou jsem ty dvě funkce (zápis a usínání) spouštěl hned po sobě a nevěděl jsem, že TWI jde zpožděně. Střihlo se to do sebe. Stačilo s tím usínáním chvilku počkat.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů