I2C a uspání

Odpovědět
mpik
Příspěvky: 3
Registrován: 15 úno 2021, 07:35
Reputation: 0

I2C a uspání

Příspěvek od mpik » 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ě.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: I2C a uspání

Příspěvek od ondraN » 15 úno 2021, 10:00

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.

mpik
Příspěvky: 3
Registrován: 15 úno 2021, 07:35
Reputation: 0

Re: I2C a uspání

Příspěvek od mpik » 15 úno 2021, 10:15

Č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).

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: I2C a uspání

Příspěvek od ondraN » 15 úno 2021, 10:33

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/

mpik
Příspěvky: 3
Registrován: 15 úno 2021, 07:35
Reputation: 0

Re: I2C a uspání

Příspěvek od mpik » 15 úno 2021, 20:25

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.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů