Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Troubleshooting
  3. How low can arduino can go?

How low can arduino can go?

Scheduled Pinned Locked Moved Troubleshooting
powerarduino pro minlow consumption
29 Posts 10 Posters 21.4k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • funky81F funky81

    @AWI yes, it can communicate with the gateway normally.
    Following is my test result

    1. 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

    1. Test_Current_0 : 0.004 mA - Plain, Just Arduino (w/o LED, w/o Voltage Regulator)
    2. Test_Current_0 : 0,009 mA - Config in point 1 + Voltage Regulator (HT7333)
    3. 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

    I Offline
    I Offline
    iask
    wrote on last edited by iask
    #18

    @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).

    funky81F 1 Reply Last reply
    0
    • I iask

      @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).

      funky81F Offline
      funky81F Offline
      funky81
      wrote on last edited by
      #19

      @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?

      I 1 Reply Last reply
      0
      • funky81F funky81

        @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?

        I Offline
        I Offline
        iask
        wrote on last edited by
        #20

        @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);
        
        funky81F 1 Reply Last reply
        1
        • I iask

          @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);
          
          funky81F Offline
          funky81F Offline
          funky81
          wrote on last edited by
          #21

          @iask how is the result?

          1 Reply Last reply
          0
          • T Offline
            T Offline
            Tibus
            wrote on last edited by
            #22

            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)

            funky81F 1 Reply Last reply
            0
            • T Tibus

              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)

              funky81F Offline
              funky81F Offline
              funky81
              wrote on last edited by funky81
              #23

              @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)

              1 Reply Last reply
              0
              • T Offline
                T Offline
                Tibus
                wrote on last edited by
                #24

                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.

                funky81F 1 Reply Last reply
                0
                • T Tibus

                  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.

                  funky81F Offline
                  funky81F Offline
                  funky81
                  wrote on last edited by
                  #25

                  @Tibus my suggestion is that try other nrf radio.
                  Right now I can low as 10uA while sleeping

                  1 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    Tibus
                    wrote on last edited by
                    #26

                    ok thanks

                    1 Reply Last reply
                    0
                    • E Offline
                      E Offline
                      ericvdb
                      wrote on last edited by
                      #27

                      What do you guys use to measure such low currents?

                      funky81F 1 Reply Last reply
                      0
                      • E ericvdb

                        What do you guys use to measure such low currents?

                        funky81F Offline
                        funky81F Offline
                        funky81
                        wrote on last edited by
                        #28

                        Hi @ericvdb , you can use multi tester like in this link....

                        1 Reply Last reply
                        0
                        • B Offline
                          B Offline
                          brolly759
                          wrote on last edited by
                          #29

                          This is an old thread but Tibus, the problem I had was exactly yours with 26uA. I had to downgrade my Arduino software to 1.0.6 . Then I got normal numbers 3uA.

                          1 Reply Last reply
                          0
                          Reply
                          • Reply as topic
                          Log in to reply
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes


                          10

                          Online

                          11.7k

                          Users

                          11.2k

                          Topics

                          113.0k

                          Posts


                          Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                          • Login

                          • Don't have an account? Register

                          • Login or register to search.
                          • First post
                            Last post
                          0
                          • MySensors
                          • OpenHardware.io
                          • Categories
                          • Recent
                          • Tags
                          • Popular