Задача модуля - измерять давление отправлять его по NRF уходить в сон просыпаться через какое-то время и все по кругу.
Данные отправляются но в сон не уходит, сидит в loop`e и постоянно шлет данные даже на delay не смотрит что та м1 секунда.
Код сна взят из примеров ЛГБТ платы, удалось даже получить 17мкА но это при 32МГц, на 1МГц будет еще меньше, но суть в другом при попытке уйти в сон возможно контролер и уходит но после выхода и после переконфигурации портов модуль NRF уже не работает, и по потреблению не сказал бы что МК во сне, бывает даже что при явной команде в сон потребление увеличиваеться с 2мА до 10.
Все что сейчас получаеться это 2.5мА потребление.
Как отправить в сон правильно МК, и как потом заставить работать модуль, хоть модуль и клон нанки но работает так же по китайски
Отключал питание от радиомодуля, потребление не менялось особо
Данные отправляются но в сон не уходит, сидит в loop`e и постоянно шлет данные даже на delay не смотрит что та м1 секунда.
Код сна взят из примеров ЛГБТ платы, удалось даже получить 17мкА но это при 32МГц, на 1МГц будет еще меньше, но суть в другом при попытке уйти в сон возможно контролер и уходит но после выхода и после переконфигурации портов модуль NRF уже не работает, и по потреблению не сказал бы что МК во сне, бывает даже что при явной команде в сон потребление увеличиваеться с 2мА до 10.
Все что сейчас получаеться это 2.5мА потребление.
Как отправить в сон правильно МК, и как потом заставить работать модуль, хоть модуль и клон нанки но работает так же по китайски
Отключал питание от радиомодуля, потребление не менялось особо
C++:
// SWC --> D13
// SWD --> D12
// RST --> D10
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "lgt_LowPower.h"
#include <Adafruit_BMP280.h>
RF24 radio(10,9);
Adafruit_BMP280 bmp;
int tx_data[16];
float r2 = 56000;
float r1 = 47000;
void setup() {
initRadio();
//initBaro();
//analogReference(INTERNAL2V56);
//pinMode(A0,INPUT);
}
void initRadio(){
DDRB = 46; // установка пинов как было до сна
radio.begin(); // активировать модуль
radio.setAutoAck(true); // режим подтверждения приёма, 1 вкл 0 выкл
radio.openWritingPipe(0xC2C2C2C222); // network adress
radio.setChannel(10); // выбираем канал (в котором нет шумов!) такой же как на передатчике
radio.setPALevel(RF24_PA_MIN); // На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate(RF24_2MBPS); // скорость передачи данных должна быть такая же как на передатчике
radio.powerUp(); // начать работу
radio.stopListening();
}
void initBaro(){
bmp.begin();
bmp.setSampling(Adafruit_BMP280::MODE_FORCED, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500);
}
void checkBattery(){
float voltage = ((float)analogRead(A0) * 2.56 * ((r1 + r2) / r2)) / 1024;
if(voltage <= 3.3){}
}
void toSleep(){
radio.powerDown();
DDRB = 0x00; // Set all pins to input
DDRC = 0x00;
DDRD = 0x00;
DDRE = 0x00;
PORTB = 0xFF; // Set all input with internal pull up resistors
PORTC = 0xFF;
PORTD = 0xFF;
PORTE = 0xFF;
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
//LowPower.powerExtStandby(SLEEP_8S, ADC_OFF, BOD_OFF, TIMER2_OFF );
}
void loop() {
initRadio();
tx_data[0] = analogRead(A0);
radio.write(&tx_data, sizeof(tx_data));
delay(1000);
toSleep();
}