<div dir="auto"><div>Děkuji za mereni a analýzu. Ještě studuji jak v programu implementovat použití 32khz krystalu a vynuceného sleepu pri nečinnosti či mezi vysílání reklamy. Ptal jsem se GPT a ten mi odpověděl timto (otázka je zda jsem dobře položil dotaz...). Mohlo by to v principu být nějak takto? Ještě mi psal, že Zephyr už má nějaký power management implementovaný...</div><div dir="auto"><br></div><div dir="auto">Děkuji </div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">#include <stdbool.h></div><div dir="auto">#include <stdint.h></div><div dir="auto">#include "nrf.h"</div><div dir="auto">#include "nrf_delay.h"</div><div dir="auto">#include "nrf_soc.h"</div><div dir="auto">#include "nrf_ble_gatt.h"</div><div dir="auto">#include "nrf_ble_qwr.h"</div><div dir="auto">#include "nrf_sdh.h"</div><div dir="auto">#include "nrf_sdh_ble.h"</div><div dir="auto">#include "app_timer.h"</div><div dir="auto">#include "app_error.h"</div><div dir="auto">#include "ble_advdata.h"</div><div dir="auto">#include "ble_advertising.h"</div><div dir="auto"><br></div><div dir="auto">// Inicializace BLE a dalších potřebných komponent</div><div dir="auto">static void ble_stack_init(void) {</div><div dir="auto">    ret_code_t err_code;</div><div dir="auto"><br></div><div dir="auto">    // Inicializace SoftDevice</div><div dir="auto">    err_code = nrf_sdh_enable_request();</div><div dir="auto">    APP_ERROR_CHECK(err_code);</div><div dir="auto"><br></div><div dir="auto">    // Inicializace BLE obsluhy</div><div dir="auto">    err_code = nrf_sdh_ble_default_cfg_set(1, &ble_stack_init);</div><div dir="auto">    APP_ERROR_CHECK(err_code);</div><div dir="auto"><br></div><div dir="auto">    err_code = nrf_sdh_ble_enable(&ble_stack_init);</div><div dir="auto">    APP_ERROR_CHECK(err_code);</div><div dir="auto">}</div><div dir="auto"><br></div><div dir="auto">static void advertising_init(void) {</div><div dir="auto">    ret_code_t err_code;</div><div dir="auto">    ble_advertising_init_t init = {0};</div><div dir="auto"><br></div><div dir="auto">    // Parametry reklam</div><div dir="auto">    ble_advdata_t adv_data;</div><div dir="auto">    memset(&adv_data, 0, sizeof(adv_data));</div><div dir="auto"><br></div><div dir="auto">    adv_data.name_type = BLE_ADVDATA_FULL_NAME;</div><div dir="auto">    adv_data.include_appearance = false;</div><div dir="auto">    adv_data.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;</div><div dir="auto"><br></div><div dir="auto">    // Inicializace reklam</div><div dir="auto">    init.advdata = adv_data;</div><div dir="auto">    err_code = ble_advertising_init(&m_advertising, &init);</div><div dir="auto">    APP_ERROR_CHECK(err_code);</div><div dir="auto">}</div><div dir="auto"><br></div><div dir="auto">static void advertising_start(void) {</div><div dir="auto">    ret_code_t err_code;</div><div dir="auto"><br></div><div dir="auto">    // Začít vysílat reklamy</div><div dir="auto">    err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);</div><div dir="auto">    APP_ERROR_CHECK(err_code);</div><div dir="auto">}</div><div dir="auto"><br></div><div dir="auto">static void enter_sleep_mode(void) {</div><div dir="auto">    // Před uspáním vypneme některé periferie, aby se šetřila energie.</div><div dir="auto">    NRF_POWER->TASKS_LOWPWR = 1;</div><div dir="auto">    __WFE(); // Čekáme na přerušení nebo událost (jako je třeba vysílání reklamy)</div><div dir="auto">}</div><div dir="auto"><br></div><div dir="auto">int main(void) {</div><div dir="auto">    // Nastavení 32kHz krystalu pro přesné časování</div><div dir="auto">    NRF_CLOCK->TASKS_LFCLKSTART = 1; // Startujeme 32 kHz krystal</div><div dir="auto">    while (NRF_CLOCK->EVENTS_LFCLKSTARTED == 0); // Čekáme na stabilizaci hodin</div><div dir="auto"><br></div><div dir="auto">    // Inicializace BLE stacku a reklam</div><div dir="auto">    ble_stack_init();</div><div dir="auto">    advertising_init();</div><div dir="auto"><br></div><div dir="auto">    // Hlavní smyčka</div><div dir="auto">    while (true) {</div><div dir="auto">        advertising_start();</div><div dir="auto">        </div><div dir="auto">        // Uspání mezi vysíláním reklam (čekání, než reklama skončí)</div><div dir="auto">        enter_sleep_mode();</div><div dir="auto">    }</div><div dir="auto">}</div><div dir="auto"><br></div><div dir="auto"><br><br><div class="gmail_quote gmail_quote_container" dir="auto"><div dir="ltr" class="gmail_attr">Dne po 20. 1. 2025 17:28 uživatel Tomáš Hamouz <<a href="mailto:konfery.tomas.hamouz@seznam.cz">konfery.tomas.hamouz@seznam.cz</a>> napsal:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Měření na našem projeku s nRF82532<br>
<br>
Celý vysílací děj adverttisingu trvá 4ms (standardní 3 kanály).<br>
Při nastavení výkonu na 0 dBm (stačí min. na 10m) vyšel průměrný odběr při vysílání 3,9 mA.<br>
Bylo to zhruba koleno závislosti Pwr - Idd, při menším výkonu je už dominantní vlastní spotřeba MCU. <br>
<br>
Spotřeba byla počítaná jako integrál křivky, roztažené na celou obrazovku osciloskopu, měřeno na odporu.<br>
Máme tu sice 6.5 místný Keithley, ale pro ten pulzní odběr to měřilo hausnumera.<br>
<br>
V mezeře byla spotřeba cca 10uA, ale to zahrnuje celou desku včetně ostatního HW na desce.<br>
<br>
V příloze je zhruba průběh, ten malý hrbolek na začátku k tomu patří také.<br>
<br>
Tomáš<br>
<br>
<br>
<br>
Děkuji za odpověď. O BLE se příležitostně zajímám něco přes rok a vlastně si vzpomínám, že s tím skenováním máte pravdu a že reklama na nějaké delsi přenosy moc není (spis sem tam neco). Mohl bych příležitostně požádat o změření té spotřeby? Děkuji.<br>
<br>
MG<br>
<br>
Dne ne 19. 1. 2025 16:28 uživatel Tomas Hamouz <<a href="mailto:konfery.tomas.hamouz@seznam.cz" target="_blank" rel="noreferrer">konfery.tomas.hamouz@seznam.cz</a>> napsal:<br>
Jako zdroj 32kHz se může použít:<br>
- Xtal 32k - nejmenší spotřeba v klidu, součástky navíc<br>
- RC interní - nejjednodušší, přijatelná spotřeba v klidu, stačí na BLE, málo přesný na NFC<br>
- dělička z hlavního Xtalu - velká spotřeba v klidu<br>
<br>
LF hodiny slouží jen k časování ve spánku, ale ten procesor víceméně spí furt. Mají v SDK velmi hezký systém timerů, odvozený od LFC, který slouží pro spouštění funkcí dle potřeby, aniž by to zvyšovalo klidovou spotřebu. <br>
K vyslání advertisingu se samozřejmě CPU budí, ale pokud se stáhne vysílaný výkon a bude rozumná perioda, tak je střední hodnota odběru velmi malá. Teď z hlavy nevím, ale v pondělí můžu z práce poslat konkrétní čísla.<br>
<br>
Lepší je posílat data při připojení, pak je totiž otevřený komunikační kanál a data chodí spolehlivě. Pokud se posílají v advertisingu, musí taky protistrana mít spuštěný scanning a zatím všechna zařízení která jsem zkoušel do cca 1 min scanning skončí.<br>
<br>
Navíc, při standardním advertisingu se posílají 3 pakety (na 3 kanálech), kdežto při spojení jen jeden.<br>
<br>
Tomáš<br>
<br>
<br>
<br>
<br>
<br>
Díky za info. Ještě by mě zajímalo jak je to u NRF s 32khz krystalem. Dočetl jsem se, že z těch asi 3 možnosti jak dostat hodiny na nízké frekvence je externí 32khz krystal jediná možnost jak se dostat se stálou spotřebou na jednotky uA (mozna cca 10uA uz si to nepamatuji). Ostatní možnosti (delicka atd) už jsou se spotřebou na stovky uA. Nějak nemohu zatím najít info zda kdyz se přejde s hodinami na 32khz jestli ten procesor umí i něco jiného než jenom spat. Zda k vyslani reklamy není nutné procesor probudit nebo jak to je. Mám takovou ideu a spotřeba je rozhodující (NRF+akcelerometr nic vic). A zatím ještě nevím zda data z akcelerometru vysílat v rámci reklamy nebo jako service po připojení. Přičemž bych potřeboval při používání vyšší refresh dat z alcelerometru. Při nečinnosti klidně sem tam reklama, že to žije (akcelerometr může spat). Něco jako je iTag, ale chci data z akcelerometru a ne jenom pohyb/nepohyb, ale i XYZ. Tak přemýšlím jak na to a hlavně to umět pak prověřit co se týče spotřeby zda to sedí s tím co jsem zamyslel.<br>
<br>
MG<br>
<br>
Dne čt 16. 1. 2025 12:31 uživatel Jindrich Fucik <<a href="mailto:fulda@seznam.cz" target="_blank" rel="noreferrer">fulda@seznam.cz</a>> napsal:<br>
Tohle je něco, na co u microchipu také upozorňují v datasheetech.<br>
Pokud na lince nejsou puluppy a je jako vstup (chápej - je ve vzduchu), <br>
tak probíhá část vyhodnocování - například jestli daný vstup nemá vliv <br>
na wake up a tak. Takže pokud je dostatek šumu, tak spotřeba může vzrůst <br>
poměrně signifikantně. Pochopitelně pak na tom vstupu jsou ještě další <br>
periferie, které při změnách také něco vyhodnocují a probouzejí se k životu.<br>
<br>
Dne 15.01.2025 v 19:38 Michal Grunt napsal(a):<br>
> Tady jsem se dočetl, že pokud budou PU aktivní i během spánku tak budou <br>
> odebírat 0.x uA. Četl jsem to snad i jinde. Někdo měl problém v tom, že <br>
> ty PU pred spánkem vypnul, měl to pak ve spanku ve vzduchu a mělo to <br>
> spotřebu stovky uA.<br>
> <br>
> <a href="https://electronics.stackexchange.com/questions/600927/best-practices-for-low-power-consumption-battery-operated-i2c-pullups" rel="noreferrer noreferrer" target="_blank">https://electronics.stackexchange.com/questions/600927/best-practices-for-low-power-consumption-battery-operated-i2c-pullups</a> <<a href="https://electronics.stackexchange.com/questions/600927/best-practices-for-low-power-consumption-battery-operated-i2c-pullups" rel="noreferrer noreferrer" target="_blank">https://electronics.stackexchange.com/questions/600927/best-practices-for-low-power-consumption-battery-operated-i2c-pullups</a>><br>
> <br>
> Děkuji za graf že ktereho je jasné jaké hodnoty pro jaké rychlosti.<br>
> <br>
> Dne st 15. 1. 2025 10:04 uživatel Pavel Hudeček <<a href="mailto:edizon@seznam.cz" target="_blank" rel="noreferrer">edizon@seznam.cz</a> <br>
> <mailto:<a href="mailto:edizon@seznam.cz" target="_blank" rel="noreferrer">edizon@seznam.cz</a>>> napsal:<br>
> <br>
>     __<br>
>     Ještě jsem se podíval do DS:<br>
> <br>
> <br>
>     Na průměr v µA bude rozhodně potřeba ten Pu vypínat spolu s čidlem,<br>
>     případně kombinovat s externím ňáký 100k-několik M, aby to čidlo<br>
>     mezitím nějak nezblblo, pokud se mu teda nevypíná napájení.<br>
> <br>
>     PH<br>
> <br>
>     Dne 14.01.2025 v 17:26 Michal Grunt napsal(a):<br>
>>     Zdravím, plánuji mít NRF52832 a k tomu LIS2DW12. Je nutné mít na<br>
>>     I2C externí pullup nebo stačí interní v NRF? Zrovna dneska jsem<br>
>>     narazil na článek nebo spíš problém ve fóru kde tazatel řešil<br>
>>     větší spotřebu řádově stovky uA místo jednotky uA a řešilo se tam,<br>
>>     že by to mohly delat pullupy a to ještě nejspíš zapomenuté zapnuté<br>
>>     u nějaké sběrnice NRF, která se nepouzivala...<br>
>><br>
>>     Ještě doplňující dotaz jak se měří spotřeba v řádech uA?<br>
>     _______________________________________________<br>
>     HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer noreferrer" target="_blank">www.HW.cz</a> <<a href="http://www.HW.cz" rel="noreferrer noreferrer" target="_blank">http://www.HW.cz</a>><br>
>     <a href="mailto:Hw-list@list.hw.cz" target="_blank" rel="noreferrer">Hw-list@list.hw.cz</a> <mailto:<a href="mailto:Hw-list@list.hw.cz" target="_blank" rel="noreferrer">Hw-list@list.hw.cz</a>><br>
>     <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
>     <<a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a>><br>
> <br>
> <br>
> _______________________________________________<br>
> HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer noreferrer" target="_blank">www.HW.cz</a><br>
> <a href="mailto:Hw-list@list.hw.cz" target="_blank" rel="noreferrer">Hw-list@list.hw.cz</a><br>
> <a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
_______________________________________________<br>
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer noreferrer" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank" rel="noreferrer">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br>
<br>
<br>
<br>
-- <br>
Best regards,<br>
Tomas                            mailto:<a href="mailto:konfery.tomas.hamouz@seznam.cz" target="_blank" rel="noreferrer">konfery.tomas.hamouz@seznam.cz</a><br>
_______________________________________________<br>
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer noreferrer" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank" rel="noreferrer">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a>_______________________________________________<br>
HW-list mailing list  -  sponsored by <a href="http://www.HW.cz" rel="noreferrer noreferrer" target="_blank">www.HW.cz</a><br>
<a href="mailto:Hw-list@list.hw.cz" target="_blank" rel="noreferrer">Hw-list@list.hw.cz</a><br>
<a href="http://list.hw.cz/mailman/listinfo/hw-list" rel="noreferrer noreferrer" target="_blank">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
</blockquote></div></div></div>