How low can arduino can go?
-
@AWI yes, it can communicate with the gateway normally.
Following is my test result- First code
/** */ #include <SPI.h> #include <MySensor.h> #include <avr/sleep.h> //#include <avr/wdt.h> MySensor gw; // watchdog interrupt //ISR (WDT_vect) { wdt_disable(); /* disable watchdog*/ } // end of WDT_vect void setup() { // pinMode(7,OUTPUT); // digitalWrite(7, HIGH); // gw.begin(); Serial.begin(115200); Serial.print("Setup"); } void loop() { // gw.powerUp(); //digitalWrite(7, HIGH); // gw.sendBatteryLevel(0); Serial.print("Loop"); Serial.flush(); // gw.powerDown(); //gw.sleep(30*1000); sleep(); // digitalWrite(7, LOW); // sleep(); } void sleep(){ // disable ADC ADCSRA = 0; // clear various "reset" flags MCUSR = 0; // allow changes, disable reset WDTCSR = bit (WDCE) | bit (WDE); // set interrupt mode and an interval WDTCSR = bit (WDIE) | bit (WDP3) | bit (WDP0); // set WDIE, and 1 second delay wdt_reset(); // pat the dog set_sleep_mode (SLEEP_MODE_PWR_DOWN); noInterrupts (); // timed sequence follows sleep_enable(); // turn off brown-out enable in software MCUCR = bit (BODS) | bit (BODSE); MCUCR = bit (BODS); interrupts (); // guarantees next instruction executed sleep_cpu (); // cancel sleep as a precaution sleep_disable(); }With this code I've got
- Test_Current_0 : 0.004 mA - Plain, Just Arduino (w/o LED, w/o Voltage Regulator)
- Test_Current_0 : 0,009 mA - Config in point 1 + Voltage Regulator (HT7333)
- Test_Current_0 : 1,58 mA - Config in point 2 + NRF24L01+
Another test
/** */ #include <SPI.h> #include <MySensor.h> #include <avr/sleep.h> //#include <avr/wdt.h> MySensor gw; // watchdog interrupt //ISR (WDT_vect) { wdt_disable(); /* disable watchdog*/ } // end of WDT_vect void setup() { // pinMode(7,OUTPUT); // digitalWrite(7, HIGH); gw.begin(); Serial.begin(115200); Serial.print("Setup"); } void loop() { //gw.powerUp(); //digitalWrite(7, HIGH); gw.sendBatteryLevel(0); Serial.print("Loop"); Serial.flush(); //gw.powerDown(); gw.sleep(30*1000); //sleep(); // digitalWrite(7, LOW); // sleep(); } void sleep(){ // disable ADC ADCSRA = 0; // clear various "reset" flags MCUSR = 0; // allow changes, disable reset WDTCSR = bit (WDCE) | bit (WDE); // set interrupt mode and an interval WDTCSR = bit (WDIE) | bit (WDP3) | bit (WDP0); // set WDIE, and 1 second delay wdt_reset(); // pat the dog set_sleep_mode (SLEEP_MODE_PWR_DOWN); noInterrupts (); // timed sequence follows sleep_enable(); // turn off brown-out enable in software MCUCR = bit (BODS) | bit (BODSE); MCUCR = bit (BODS); interrupts (); // guarantees next instruction executed sleep_cpu (); // cancel sleep as a precaution sleep_disable(); }Config is the same with no 3 (above), but the power consumption in sleep I take around 2.37 mA.
Is it maybe I've got bad NRF24L01+ ?
----- Updated
It seems my suspicion, it seems the cause of high power consumption is NRF24L01+ radio. I've checked all of my radio, it appears that 2 of 9 seems fake / bad condition.Thanks for contribution of @HarryDutch @AWI @Dheeraj @tbowmo @GuyP and others, so now I can play with other level of MySensor.
Thanks
@funky81 What power consumption did you end up with when in sleep mode with your NRFXXXXX connected? I am using the door/window sensor sample, when close it consumes 11.5 uA and when open it consumes 8.5uA (I wish that could be the other way around since the window will be closed most of the time).
-
@funky81 What power consumption did you end up with when in sleep mode with your NRFXXXXX connected? I am using the door/window sensor sample, when close it consumes 11.5 uA and when open it consumes 8.5uA (I wish that could be the other way around since the window will be closed most of the time).
-
@iask I haven't upload my latest door sketch to my node yet. But if I'm using above sketch, idle 4uA and around 18mA while transfer.
Do you have any issues like me before?
@funky81 Well I am not sure what else to try to get lower than 11.5uA. If you are getting 4uA then it's possible. I will have to try your sleep method
void sleep(){ // disable ADC ADCSRA = 0; // clear various "reset" flags MCUSR = 0; // allow changes, disable reset WDTCSR = bit (WDCE) | bit (WDE); // set interrupt mode and an interval WDTCSR = bit (WDIE) | bit (WDP3) | bit (WDP0); // set WDIE, and 1 second delay wdt_reset(); // pat the dog set_sleep_mode (SLEEP_MODE_PWR_DOWN); noInterrupts (); // timed sequence follows sleep_enable(); // turn off brown-out enable in software MCUCR = bit (BODS) | bit (BODSE); MCUCR = bit (BODS); interrupts (); // guarantees next instruction executed sleep_cpu (); // cancel sleep as a precaution sleep_disable(); }currently I am using
gw.sleep(INTERRUPT,CHANGE, 0); -
@funky81 Well I am not sure what else to try to get lower than 11.5uA. If you are getting 4uA then it's possible. I will have to try your sleep method
void sleep(){ // disable ADC ADCSRA = 0; // clear various "reset" flags MCUSR = 0; // allow changes, disable reset WDTCSR = bit (WDCE) | bit (WDE); // set interrupt mode and an interval WDTCSR = bit (WDIE) | bit (WDP3) | bit (WDP0); // set WDIE, and 1 second delay wdt_reset(); // pat the dog set_sleep_mode (SLEEP_MODE_PWR_DOWN); noInterrupts (); // timed sequence follows sleep_enable(); // turn off brown-out enable in software MCUCR = bit (BODS) | bit (BODSE); MCUCR = bit (BODS); interrupts (); // guarantees next instruction executed sleep_cpu (); // cancel sleep as a precaution sleep_disable(); }currently I am using
gw.sleep(INTERRUPT,CHANGE, 0); -
I use the @funky81 's sleep method but the nrf doesn't go to sleep so I draw 14ma. When I use the gw.sleep method, I draw +-26ua. Is it possible to go below? (without the nrf, my own pcb with atmega328 go to 5ua in sleep mode with your function (doesn't work with gw.sleep because it's a test without the nrf ;D)
-
I use the @funky81 's sleep method but the nrf doesn't go to sleep so I draw 14ma. When I use the gw.sleep method, I draw +-26ua. Is it possible to go below? (without the nrf, my own pcb with atmega328 go to 5ua in sleep mode with your function (doesn't work with gw.sleep because it's a test without the nrf ;D)
@Tibus do you have other nrf to try? I'm affraid you're using fake nrf.
30% of my nrf (out of 10), are fake...one more thing, sleep method in above post dont turn off nrf radio while sleep.
you can try gw.sleep() if you want turn off nrf radio while sleep (MyGateway gw) -
yes, when I use de gw.sleep it works great but I can't go lower than 26ua+-. My test with your function draw 14ma because the nrf doesn't go to sleep... But is there a method to go lower than 26ua with the nrf? I'm already verry happy of the 26ua but if I can go lower, it would be even better ;D
Do you things it's because I use fake nrf? where can i bought real nrf? The one I use is from electrodragon. -
yes, when I use de gw.sleep it works great but I can't go lower than 26ua+-. My test with your function draw 14ma because the nrf doesn't go to sleep... But is there a method to go lower than 26ua with the nrf? I'm already verry happy of the 26ua but if I can go lower, it would be even better ;D
Do you things it's because I use fake nrf? where can i bought real nrf? The one I use is from electrodragon.