<html><head><title>Re: PullUp NRF52842</title>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body>
<span style=" font-family:'Courier New'; font-size: 9pt;">Ten advertising_start() se volá jen jednou, před smyčkou.<br>
<br>
Vykuchaný main() z našeho projektu, vyházeny aplikační věci, ponecháno volání frameworku.<br>
<br>
<br>
int main(void)<br>
{<br>
bool erase_bonds = should_erase_bonds(); // implementace dle aplikace <br>
<br>
// Initialize.<br>
log_init(); <br>
timers_init();<br>
power_management_init();<br>
<br>
ble_subsystem_init();<br>
<br>
// Start execution.<br>
NRF_LOG_INFO("Program started.");<br>
application_timers_start();<br>
<br>
advertising_start(erase_bonds);<br>
<br>
// Enter main loop.<br>
while(true) {<br>
// tady je aplikacni logika, pokud potrebuje pumpovat svoji smycku<br>
// pokud staci event-driven od timeru, bude to zde prazdne <br>
<br>
idle_state_handle(); // vyhodnoti zda muze jit spat<br>
}<br>
} // main<br>
<br>
<br>
<br>
<br>
<br>
</span><table>
<tr>
<td width=2 bgcolor= #0000ff><br>
</td>
<td><span style=" font-family:'courier new'; font-size: 9pt;">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ý...<br>
<br>
Děkuji <br>
<br>
<br>
#include <stdbool.h><br>
#include <stdint.h><br>
#include "nrf.h"<br>
#include "nrf_delay.h"<br>
#include "nrf_soc.h"<br>
#include "nrf_ble_gatt.h"<br>
#include "nrf_ble_qwr.h"<br>
#include "nrf_sdh.h"<br>
#include "nrf_sdh_ble.h"<br>
#include "app_timer.h"<br>
#include "app_error.h"<br>
#include "ble_advdata.h"<br>
#include "ble_advertising.h"<br>
<br>
// Inicializace BLE a dalších potřebných komponent<br>
static void ble_stack_init(void) {<br>
ret_code_t err_code;<br>
<br>
// Inicializace SoftDevice<br>
err_code = nrf_sdh_enable_request();<br>
APP_ERROR_CHECK(err_code);<br>
<br>
// Inicializace BLE obsluhy<br>
err_code = nrf_sdh_ble_default_cfg_set(1, &ble_stack_init);<br>
APP_ERROR_CHECK(err_code);<br>
<br>
err_code = nrf_sdh_ble_enable(&ble_stack_init);<br>
APP_ERROR_CHECK(err_code);<br>
}<br>
<br>
static void advertising_init(void) {<br>
ret_code_t err_code;<br>
ble_advertising_init_t init = {0};<br>
<br>
// Parametry reklam<br>
ble_advdata_t adv_data;<br>
memset(&adv_data, 0, sizeof(adv_data));<br>
<br>
adv_data.name_type = BLE_ADVDATA_FULL_NAME;<br>
adv_data.include_appearance = false;<br>
adv_data.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;<br>
<br>
// Inicializace reklam<br>
init.advdata = adv_data;<br>
err_code = ble_advertising_init(&m_advertising, &init);<br>
APP_ERROR_CHECK(err_code);<br>
}<br>
<br>
static void advertising_start(void) {<br>
ret_code_t err_code;<br>
<br>
// Začít vysílat reklamy<br>
err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);<br>
APP_ERROR_CHECK(err_code);<br>
}<br>
<br>
static void enter_sleep_mode(void) {<br>
// Před uspáním vypneme některé periferie, aby se šetřila energie.<br>
NRF_POWER->TASKS_LOWPWR = 1;<br>
__WFE(); // Čekáme na přerušení nebo událost (jako je třeba vysílání reklamy)<br>
}<br>
<br>
int main(void) {<br>
// Nastavení 32kHz krystalu pro přesné časování<br>
NRF_CLOCK->TASKS_LFCLKSTART = 1; // Startujeme 32 kHz krystal<br>
while (NRF_CLOCK->EVENTS_LFCLKSTARTED == 0); // Čekáme na stabilizaci hodin<br>
<br>
// Inicializace BLE stacku a reklam<br>
ble_stack_init();<br>
advertising_init();<br>
<br>
// Hlavní smyčka<br>
while (true) {<br>
advertising_start();<br>
<br>
// Uspání mezi vysíláním reklam (čekání, než reklama skončí)<br>
enter_sleep_mode();<br>
}<br>
}<br>
<br>
<br>
<br>
Dne po 20. 1. 2025 17:28 uživatel Tomáš Hamouz <</span><a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:konfery.tomas.hamouz@seznam.cz">konfery.tomas.hamouz@seznam.cz</a><span style=" font-family:'courier new'; font-size: 9pt;">> napsal:<br>
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 <</span><a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:konfery.tomas.hamouz@seznam.cz">konfery.tomas.hamouz@seznam.cz</a><span style=" font-family:'courier new'; font-size: 9pt;">> 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 <</span><a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:fulda@seznam.cz">fulda@seznam.cz</a><span style=" font-family:'courier new'; font-size: 9pt;">> 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>
> </span><a style=" font-family:'courier new'; font-size: 9pt;" href="https://electronics.stackexchange.com/questions/600927/best-practices-for-low-power-consumption-battery-operated-i2c-pullups">https://electronics.stackexchange.com/questions/600927/best-practices-for-low-power-consumption-battery-operated-i2c-pullups</a><span style=" font-family:'courier new'; font-size: 9pt;"> <</span><a style=" font-family:'courier new'; font-size: 9pt;" href="https://electronics.stackexchange.com/questions/600927/best-practices-for-low-power-consumption-battery-operated-i2c-pullups">https://electronics.stackexchange.com/questions/600927/best-practices-for-low-power-consumption-battery-operated-i2c-pullups</a><span style=" font-family:'courier new'; font-size: 9pt;">><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 <</span><a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:edizon@seznam.cz">edizon@seznam.cz</a> <br>
<span style=" font-family:'courier new'; font-size: 9pt;">> <mailto:</span><a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:edizon@seznam.cz">edizon@seznam.cz</a><span style=" font-family:'courier new'; font-size: 9pt;">>> 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 </span><a style=" font-family:'courier new'; font-size: 9pt;" href="http://www.HW.cz">www.HW.cz</a><span style=" font-family:'courier new'; font-size: 9pt;"> <</span><a style=" font-family:'courier new'; font-size: 9pt;" href="http://www.HW.cz">http://www.HW.cz</a><span style=" font-family:'courier new'; font-size: 9pt;">><br>
> </span><a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><span style=" font-family:'courier new'; font-size: 9pt;"> <mailto:</span><a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><span style=" font-family:'courier new'; font-size: 9pt;">><br>
> </span><a style=" font-family:'courier new'; font-size: 9pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<span style=" font-family:'courier new'; font-size: 9pt;">> <</span><a style=" font-family:'courier new'; font-size: 9pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><span style=" font-family:'courier new'; font-size: 9pt;">><br>
> <br>
> <br>
> _______________________________________________<br>
> HW-list mailing list - sponsored by </span><a style=" font-family:'courier new'; font-size: 9pt;" href="http://www.HW.cz">www.HW.cz</a><br>
<span style=" font-family:'courier new'; font-size: 9pt;">> </span><a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<span style=" font-family:'courier new'; font-size: 9pt;">> </span><a style=" font-family:'courier new'; font-size: 9pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<span style=" font-family:'courier new'; font-size: 9pt;">_______________________________________________<br>
HW-list mailing list - sponsored by </span><a style=" font-family:'courier new'; font-size: 9pt;" href="http://www.HW.cz">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 9pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br>
<br>
<br>
<br>
<span style=" font-family:'courier new'; font-size: 9pt;">-- <br>
Best regards,<br>
Tomas mailto:</span><a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:konfery.tomas.hamouz@seznam.cz">konfery.tomas.hamouz@seznam.cz</a><br>
<span style=" font-family:'courier new'; font-size: 9pt;">_______________________________________________<br>
HW-list mailing list - sponsored by </span><a style=" font-family:'courier new'; font-size: 9pt;" href="http://www.HW.cz">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 9pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><span style=" font-family:'courier new'; font-size: 9pt;">_______________________________________________<br>
HW-list mailing list - sponsored by </span><a style=" font-family:'courier new'; font-size: 9pt;" href="http://www.HW.cz">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 9pt;" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 9pt;" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a></td>
</tr>
</table>
</body></html>