Mysensors не уходит PowerDown

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Всем привет

Вопрос к знатокам Mysensors

Собрал простейший температурный сенсор BME280. Планирую батарейное питание
Atmega328 на внуреннем незонаторе, NRF24 и BME280 все
Питание планируется напрямую от двух AA

Написано, что функия sleep() отправляет контроллер и радио в сон, но потребление при этом 5мА

Завел NRF24 питание на 8-ю ногу, прописал POWER_PIN. Потребление уменьшилось до 2мА, но все равно много.

Если начинаю дергать питание NRF вручную, то в сон совсем не переходит

Если убрать NRF из гнезда - потребление в режиме сна 0.4мА

Куда еще копать? Русскоязычное сообщество Mysensors похоже в анабиозе

#include <Wire.h>
#include <avr/sleep.h>    // Sleep Modes
#include <SPI.h>
#include "SparkFunBME280.h"

//Датчик температуры с батарейным питанием

// Enable debug prints to serial monitor
//#define MY_DEBUG 
#define MY_RF24_CE_PIN 9
#define MY_RF24_CS_PIN 10
#define MY_RF24_POWER_PIN 8
#define MY_PASSIVE_NODE
// Enable and select radio type attached
#define MY_RADIO_NRF24
// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
// #define MY_RF24_PA_LEVEL RF24_PA_LOW
#define MY_RF24_PA_LEVEL RF24_PA_MAX
//#define MY_DEBUG_VERBOSE_RF24

// RF channel for the sensor net, 0-127
//#define RF24_CHANNEL     125
#define MY_NODE_ID 50

//RF24_250KBPS for 250kbs, RF24_1MBPS for 1Mbps, or RF24_2MBPS for 2Mbps
//#define RF24_DATARATE      RF24_250KBPS
#define MY_TRANSPORT_WAIT_READY_MS 1
#include <MySensors.h>  

//MySensors node;
BME280 bme;
// Define sensor node childs
#define CHILD_ID_VCC   0
#define CHILD_ID_TEMP  1
#define CHILD_ID_HUM   2
#define CHILD_ID_PRESS 3
MyMessage msgVcc(CHILD_ID_VCC, V_VOLTAGE);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage msgHum(CHILD_ID_HUM, V_HUM);
MyMessage msgPress(CHILD_ID_PRESS, V_PRESSURE);


float readVcc();


void setup()
{
  Serial.begin(115200);
  Serial.println("Reading basic values from BME280");
//  node.begin();
//  pinMode(8,OUTPUT);
//  digitalWrite(8,LOW);
  sendSketchInfo("Temp/num/press sensor", "1.0");
  present(CHILD_ID_TEMP, S_TEMP,"Temperature,C");
  present(CHILD_ID_HUM,  S_HUM,"Humidity, %");
  present(CHILD_ID_PRESS, S_BARO,"Pressure");
  Wire.begin();

//  byte error, address;
//  int nDevices;

  bme.setI2CAddress(0x76); //Connect to a second sensor


  if (bme.beginI2C() == false) //Begin communication over I2C
  {
    Serial.println("The sensor did not respond. Please check wiring.");
//    while(1); //Freeze
  }
  pinMode(15,OUTPUT);
  digitalWrite(15,HIGH);
  delay(200);
  digitalWrite(15,LOW);
  bme.setMode(MODE_SLEEP); //Sleep for now 
}

void loop()
{
  digitalWrite(15,HIGH);
  float vcc = readVcc();
  bme.setMode(MODE_FORCED); //Sleep for now 
  float t   = bme.readTempC();
  float h   = bme.readFloatHumidity();
  float p   = bme.readFloatPressure()/133;
  float a   = bme.readFloatAltitudeMeters();
  bme.setMode(MODE_SLEEP); //Sleep for now 
  
  Serial.print("Humidity: ");
  Serial.print(h, 0);
  Serial.print(" Pressure: ");
  Serial.print(p, 0);
  Serial.print(" Alt: ");
  Serial.print(a, 1);
  Serial.print(" Temp: ");
  Serial.print(t, 2);
  Serial.print(" Vcc: ");
  Serial.print(vcc);
  Serial.println();
  
//  digitalWrite(8,HIGH);
  RF24_powerUp(); 
  send(msgVcc.set(vcc,2));
  send(msgTemp.set(t,1));
  send(msgHum.set(h,0));
  send(msgPress.set(p,0));

  digitalWrite(15,LOW);
  RF24_powerDown(); 
//  digitalWrite(8,LOW);
  sleep(5000,false);
}


/**
 * Читаем напряжение питания
 */
float readVcc() {
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = (1100L * 1023)/result;
  float ret = ((float)result)/1000;
  return ret;
}

 

 

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Не крупноват МК для такой банальной работы? 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017
sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

andycat пишет:

Не крупноват МК для такой банальной работы? 

Mysensors - тяжелая библиотека. В Atmega8 не лезет. Зато без допиливания интегрируется с системой умного жома Majordomo и кучу других интересных плюшек имеет.

То что вы дали, простая отображалка. Здесь как раз вопросов нет. Все и так отлично работает, хватает примеров BME280 библиотеки. Мне нужен транспорт.

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Всем ссори
Проблема решилась заменой NRF24 на другой аналогичный модуль. Видимо это в сон не входит по какой то причини
Сейчас с тем же кодом потребление во время сна 11мкА