7мА в режиме передачи для модулей на схеме DC-DC
16мА в режиме передачи для модулей на схеме LDO
2мкА во сне
Код: Выделить всё
/**
ТЕСТОВЫЙ СКЕТЧ КОНТРОЛЯ ПОНИЖЕННОГО ЭНЕРГОПОТРЕБЛЕНИЯ В РЕЖИМЕ СНА С ПРЕРЫВАНИЯМИ
После загрузки скетча рекомендуется сбросить питание с модуля.
*/
#define MY_RADIO_NRF5_ESB
#define MY_PASSIVE_NODE
#define MY_NODE_ID 100
#define MY_LED 27
#define MY_BUTTON_ADC_PIN 1 // номер пина АЦП смотреть в MyBoardNRF5.cpp
#include <MySensors.h>
bool detection;
void preHwInit() {
pinMode(MY_LED, OUTPUT);
}
void before()
{
NRF_POWER->DCDCEN = 1; // закоментировать если E73
NRF_UART0->ENABLE = 0;
}
void setup() {
analogReference(AR_INTERNAL);
lpComp();
led(2,1);
detection = false;
wait(5000);
}
void loop() {
sleep(10000);
if (detection) {
s_lpComp();
led(10,3);
detection=false;
NRF_LPCOMP->EVENTS_UP=0;
r_lpComp();
} else {
led(1,1);
}
}
void led(uint8_t flash, uint8_t iteration) {
for (int x = 0; x < iteration; x++) {
for (int i=0; i < flash; i++) {
digitalWrite(MY_LED, HIGH);
wait(30);
digitalWrite(MY_LED, LOW);
wait(70);
}
wait(500);
}
}
void lpComp() {
NRF_LPCOMP->PSEL=MY_BUTTON_ADC_PIN;
NRF_LPCOMP->ANADETECT=1; // детектирование EVENTS_UP.
NRF_LPCOMP->INTENSET=B0100; // активация прерывания для EVENTS_UP
NRF_LPCOMP->ENABLE=1;
NRF_LPCOMP->TASKS_START=1;
NVIC_SetPriority(LPCOMP_IRQn, 15);
NVIC_ClearPendingIRQ(LPCOMP_IRQn);
NVIC_EnableIRQ(LPCOMP_IRQn);
}
void s_lpComp() {
if ((NRF_LPCOMP->ENABLE) && (NRF_LPCOMP->EVENTS_READY)) {
NRF_LPCOMP->INTENCLR=B0100; //деактивация прерывания для LPCOMP
}
}
void r_lpComp() {
NRF_LPCOMP->INTENSET=B0100;
}
#if __CORTEX_M == 0x04
#define NRF5_RESET_EVENT(event) \
event = 0; \
(void)event
#else
#define NRF5_RESET_EVENT(event) event = 0
#endif
//В одну строку..
extern "C" { void LPCOMP_IRQHandler(void) {detection=true; NRF5_RESET_EVENT(NRF_LPCOMP->EVENTS_UP); NRF_LPCOMP->EVENTS_UP=0; MY_HW_RTC->CC[0]=(MY_HW_RTC->COUNTER+2);}}