Stránka 1 z 1

I2C a uspání

Napsal: 15 úno 2021, 07:44
od mpik
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í

Napsal: 15 úno 2021, 10:00
od ondraN
mpik píše:
15 úno 2021, 07:44
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ě.
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.

Re: I2C a uspání

Napsal: 15 úno 2021, 10:15
od mpik
Č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).

Re: I2C a uspání

Napsal: 15 úno 2021, 10:33
od ondraN
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/

Re: I2C a uspání

Napsal: 15 úno 2021, 20:25
od mpik
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.