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. OpenHardware.io
  3. 💬 MyMultisensors

💬 MyMultisensors

Scheduled Pinned Locked Moved OpenHardware.io
328pmotionatsha204amulti sensorhumiditytemperaturepirambiant lightlow powercoincell
176 Posts 33 Posters 61.2k Views 35 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.
  • alexsh1A Offline
    alexsh1A Offline
    alexsh1
    wrote on last edited by
    #147

    @scalz Can you please enlighten me re PIR? There are two inputs D6 and D7. I cannot understand why and how to manage them in a sketch? Previously, I only used one digital input.

    scalzS 1 Reply Last reply
    0
    • alexsh1A alexsh1

      @scalz Can you please enlighten me re PIR? There are two inputs D6 and D7. I cannot understand why and how to manage them in a sketch? Previously, I only used one digital input.

      scalzS Offline
      scalzS Offline
      scalz
      Hardware Contributor
      wrote on last edited by scalz
      #148

      @alexsh1
      You need to use pinchange interrupts. I won't reinvent a howto, there are multiple on google, like the one from Gammon here
      https://gammon.com.au/forum/?id=11488&reply=6#reply6

      pinchange can only detect toggle. it's up to you to detect the pin state in the interrupt routine.
      Mysensors sleep() doesn't handle pinchange. so in this case, just use sleep(ms). and test for the irq flag when it wakes up

      In a previous post, I extracted and showed you the few functions needed for this. I thought it was enough documented!

      ISR (PCINT1_vect) 
      {
        if (digitalRead(AMBIANT_LIGHT_PIN)) 
          irqLight = false;  
        else 
          irqLight = true; 
      }  
      
      ISR (PCINT2_vect) 
      {
        if((PIND & (1 << PIND6)) == 0x40 ) {  
      	  myPirSensor.pirhCount++;  
      		myPirSensor.irqPir = true;  
      	}
        if((PIND & (1 << PIND7)) == 0x80 ) {  
      	  myPirSensor.pirlCount++;  
      		myPirSensor.irqPir = true;  
      	}        
      } 
      
      /* ======================================================================
      Function: pirIntEnable
      Purpose : Enable pin change for PIR interrupt
      Input   : -
      Output  : -
      Comments:  
      ====================================================================== */ 
      void pirIntEnable() 
      {
        // Enable pin change for D6, D7
        PCMSK2 |= bit (PCINT22);  
        PCMSK2 |= bit (PCINT23);  
        PCIFR  |= bit (PCIF2);   // clear any outstanding interrupts
        PCICR  |= bit (PCIE2);   // enable pin change interrupts for D0 to D7 
      }
      /* ======================================================================
      Function: pirIntDisable
      Purpose : Disable pin change for PIR interrupt
      Input   : -
      Output  : -
      Comments:  
      ====================================================================== */ 
      void pirIntDisable() 
      {
        // Disable pin change for D6, D7
        PCICR  ^= bit (PCIE2);   // disable pin change interrupts for D0 to D7 
      }
      /* ======================================================================
      Function: lightIntEnable
      Purpose : Enable pin change for OPT3001 interrupt
      Input   : -
      Output  : -
      Comments:  
      ====================================================================== */ 
      void lightIntDisable() 
      {
        PCMSK1 |= bit (PCINT9);  
        PCIFR  |= bit (PCIF1);   // clear any outstanding interrupts
        PCICR  |= bit (PCIE1);   // enable pin change interrupts for A0 to A5   
      }
      /* ======================================================================
      Function: Light_IntDisable
      Purpose : Disable pin change for OPT3001 interrupt
      Input   : -
      Output  : -
      Comments:  
      ====================================================================== */ 
      void lightIntDisable() 
      {
        PCICR  ^= bit (PCIE1);   // disable pin change interrupts 
      }
      

      So if we add this, in the MySensors Motion example, as a very basic example, this should look like this:
      (untested, no time, but it should be close or maybe working)

      // Enable debug prints
      // #define MY_DEBUG
      
      // Enable and select radio type attached
      #define MY_RADIO_NRF24
      //#define MY_RADIO_NRF5_ESB
      //#define MY_RADIO_RFM69
      //#define MY_RADIO_RFM95
      
      #include <MySensors.h>
      
      uint32_t SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
      
      #define PIR_SETTLE_TIME 300000
      
      #define PIR_INT_PINH 6   // The digital input you attached your motion sensor. 
      #define PIR_INT_PINL 7   // The digital input you attached your motion sensor.
      #define CHILD_ID 1   // Id of the sensor child
      
      // Initialize motion message
      MyMessage msg(CHILD_ID, V_TRIPPED);
      
      volatile bool irqPirHigh = false;
      
      /* ======================================================================
      Pin change Interrupt Service Routine for D0 to D7
      ====================================================================== */
      ISR (PCINT2_vect) 
      {
        // Pin change interrupt!  
        // if one of the PIR pins is HIGH, we have a pulse
        if((PIND & (1 << PIND6)) == 0x40 || (PIND & (1 << PIND7)) == 0x80 ) {   
           irqPirHigh = true; 
        }    
      } 
      /* ======================================================================
      Function: pirIntEnable
      Purpose : Enable pin change for PIR interrupt
      Comments:  
      ====================================================================== */ 
      void pirIntEnable() 
      {  
        // Enable pin change for D6, D7
        PCMSK2 |= bit (PCINT22);  
        PCMSK2 |= bit (PCINT23);  
        PCIFR  |= bit (PCIF2);   // clear any outstanding interrupts
        PCICR  |= bit (PCIE2);   // enable pin change interrupts for D0 to D7 
      }
      /* ======================================================================
      Function: pirIntDisable
      Purpose : Disable pin change for PIR interrupt
      Comments:  
      ====================================================================== */ 
      void pirIntDisable() 
      {
        // Disable pin change for D6, D7
        PCICR  ^= bit (PCIE2);   // disable pin change interrupts for D0 to D7 
      }
      /* ======================================================================
        Function: before
        Purpose : set pin states
        Comments: before setup Mysensors init
        ====================================================================== */
      void before()
      {
        hwDigitalWrite(PIR_INT_PINH, LOW);
        hwPinMode(PIR_INT_PINH, INPUT);      // sets the motion sensor digital pinH as input
        hwDigitalWrite(PIR_INT_PINH, LOW);
        hwPinMode(PIR_INT_PINL, INPUT);      // sets the motion sensor digital pinL as input  
      }
      
      void setup()
      {
        // do setup stuff like waiting for pir to settle, send states at init etc.
        sleep(PIR_SETTLE_TIME);
        
        // enable pin change interrupt to enable PIR/motion detection
        pirIntEnable();   
          
      }
      
      void presentation()
      {
      	// Send the sketch version information to the gateway and Controller
      	sendSketchInfo("Motion Sensor", "1.0");
      
      	// Register all sensors to gw (they will be created as child devices)
      	present(CHILD_ID, S_MOTION);
      }
      
      void loop()
      {    
        // irq ?
        if (irqPirHigh) {
          // We got a HIGH pulse on PIR pins!! 
          // increment a pulse counter, etc.
          // test pulse counter then send or not
          send(msg.set("1"));     
          irqPirHigh = false; 
        }
        else {  
          // increment timer counters, to reset motion state etc 
          // do stuff    
        }
      
        // Sleep until timer or a pin change interrupt
        sleep(SLEEP_TIME);     
        Serial.println("Wake up!");  
      }
      

      Remember it detect pin change, so it will wake up at each pin change state.
      I can't make this example more noob and simple. then add all your variables for states, timers, improve power consumption etc, as you wish.

      Or, it's perhaps easier to use the example from carywinn above. he posted his sketch which use a lib to handle pinchange. (on my side I don't need a lib for this, and it also saves memory).

      I hope it's clear about pinchange, so I'm done at explaining it ;)

      alexsh1A 1 Reply Last reply
      0
      • scalzS scalz

        @alexsh1
        You need to use pinchange interrupts. I won't reinvent a howto, there are multiple on google, like the one from Gammon here
        https://gammon.com.au/forum/?id=11488&reply=6#reply6

        pinchange can only detect toggle. it's up to you to detect the pin state in the interrupt routine.
        Mysensors sleep() doesn't handle pinchange. so in this case, just use sleep(ms). and test for the irq flag when it wakes up

        In a previous post, I extracted and showed you the few functions needed for this. I thought it was enough documented!

        ISR (PCINT1_vect) 
        {
          if (digitalRead(AMBIANT_LIGHT_PIN)) 
            irqLight = false;  
          else 
            irqLight = true; 
        }  
        
        ISR (PCINT2_vect) 
        {
          if((PIND & (1 << PIND6)) == 0x40 ) {  
        	  myPirSensor.pirhCount++;  
        		myPirSensor.irqPir = true;  
        	}
          if((PIND & (1 << PIND7)) == 0x80 ) {  
        	  myPirSensor.pirlCount++;  
        		myPirSensor.irqPir = true;  
        	}        
        } 
        
        /* ======================================================================
        Function: pirIntEnable
        Purpose : Enable pin change for PIR interrupt
        Input   : -
        Output  : -
        Comments:  
        ====================================================================== */ 
        void pirIntEnable() 
        {
          // Enable pin change for D6, D7
          PCMSK2 |= bit (PCINT22);  
          PCMSK2 |= bit (PCINT23);  
          PCIFR  |= bit (PCIF2);   // clear any outstanding interrupts
          PCICR  |= bit (PCIE2);   // enable pin change interrupts for D0 to D7 
        }
        /* ======================================================================
        Function: pirIntDisable
        Purpose : Disable pin change for PIR interrupt
        Input   : -
        Output  : -
        Comments:  
        ====================================================================== */ 
        void pirIntDisable() 
        {
          // Disable pin change for D6, D7
          PCICR  ^= bit (PCIE2);   // disable pin change interrupts for D0 to D7 
        }
        /* ======================================================================
        Function: lightIntEnable
        Purpose : Enable pin change for OPT3001 interrupt
        Input   : -
        Output  : -
        Comments:  
        ====================================================================== */ 
        void lightIntDisable() 
        {
          PCMSK1 |= bit (PCINT9);  
          PCIFR  |= bit (PCIF1);   // clear any outstanding interrupts
          PCICR  |= bit (PCIE1);   // enable pin change interrupts for A0 to A5   
        }
        /* ======================================================================
        Function: Light_IntDisable
        Purpose : Disable pin change for OPT3001 interrupt
        Input   : -
        Output  : -
        Comments:  
        ====================================================================== */ 
        void lightIntDisable() 
        {
          PCICR  ^= bit (PCIE1);   // disable pin change interrupts 
        }
        

        So if we add this, in the MySensors Motion example, as a very basic example, this should look like this:
        (untested, no time, but it should be close or maybe working)

        // Enable debug prints
        // #define MY_DEBUG
        
        // Enable and select radio type attached
        #define MY_RADIO_NRF24
        //#define MY_RADIO_NRF5_ESB
        //#define MY_RADIO_RFM69
        //#define MY_RADIO_RFM95
        
        #include <MySensors.h>
        
        uint32_t SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)
        
        #define PIR_SETTLE_TIME 300000
        
        #define PIR_INT_PINH 6   // The digital input you attached your motion sensor. 
        #define PIR_INT_PINL 7   // The digital input you attached your motion sensor.
        #define CHILD_ID 1   // Id of the sensor child
        
        // Initialize motion message
        MyMessage msg(CHILD_ID, V_TRIPPED);
        
        volatile bool irqPirHigh = false;
        
        /* ======================================================================
        Pin change Interrupt Service Routine for D0 to D7
        ====================================================================== */
        ISR (PCINT2_vect) 
        {
          // Pin change interrupt!  
          // if one of the PIR pins is HIGH, we have a pulse
          if((PIND & (1 << PIND6)) == 0x40 || (PIND & (1 << PIND7)) == 0x80 ) {   
             irqPirHigh = true; 
          }    
        } 
        /* ======================================================================
        Function: pirIntEnable
        Purpose : Enable pin change for PIR interrupt
        Comments:  
        ====================================================================== */ 
        void pirIntEnable() 
        {  
          // Enable pin change for D6, D7
          PCMSK2 |= bit (PCINT22);  
          PCMSK2 |= bit (PCINT23);  
          PCIFR  |= bit (PCIF2);   // clear any outstanding interrupts
          PCICR  |= bit (PCIE2);   // enable pin change interrupts for D0 to D7 
        }
        /* ======================================================================
        Function: pirIntDisable
        Purpose : Disable pin change for PIR interrupt
        Comments:  
        ====================================================================== */ 
        void pirIntDisable() 
        {
          // Disable pin change for D6, D7
          PCICR  ^= bit (PCIE2);   // disable pin change interrupts for D0 to D7 
        }
        /* ======================================================================
          Function: before
          Purpose : set pin states
          Comments: before setup Mysensors init
          ====================================================================== */
        void before()
        {
          hwDigitalWrite(PIR_INT_PINH, LOW);
          hwPinMode(PIR_INT_PINH, INPUT);      // sets the motion sensor digital pinH as input
          hwDigitalWrite(PIR_INT_PINH, LOW);
          hwPinMode(PIR_INT_PINL, INPUT);      // sets the motion sensor digital pinL as input  
        }
        
        void setup()
        {
          // do setup stuff like waiting for pir to settle, send states at init etc.
          sleep(PIR_SETTLE_TIME);
          
          // enable pin change interrupt to enable PIR/motion detection
          pirIntEnable();   
            
        }
        
        void presentation()
        {
        	// Send the sketch version information to the gateway and Controller
        	sendSketchInfo("Motion Sensor", "1.0");
        
        	// Register all sensors to gw (they will be created as child devices)
        	present(CHILD_ID, S_MOTION);
        }
        
        void loop()
        {    
          // irq ?
          if (irqPirHigh) {
            // We got a HIGH pulse on PIR pins!! 
            // increment a pulse counter, etc.
            // test pulse counter then send or not
            send(msg.set("1"));     
            irqPirHigh = false; 
          }
          else {  
            // increment timer counters, to reset motion state etc 
            // do stuff    
          }
        
          // Sleep until timer or a pin change interrupt
          sleep(SLEEP_TIME);     
          Serial.println("Wake up!");  
        }
        

        Remember it detect pin change, so it will wake up at each pin change state.
        I can't make this example more noob and simple. then add all your variables for states, timers, improve power consumption etc, as you wish.

        Or, it's perhaps easier to use the example from carywinn above. he posted his sketch which use a lib to handle pinchange. (on my side I don't need a lib for this, and it also saves memory).

        I hope it's clear about pinchange, so I'm done at explaining it ;)

        alexsh1A Offline
        alexsh1A Offline
        alexsh1
        wrote on last edited by
        #149

        @scalz said in 💬 MyMultisensors:

        uint32_t SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)

        You are a star - I must admit that setting it up is a bit more fiddly. This is the first time I come across pinchange interrupts and excellent link you provided. Thank you

        alexsh1A 1 Reply Last reply
        0
        • alexsh1A Offline
          alexsh1A Offline
          alexsh1
          wrote on last edited by
          #150

          Did anyone manage to find a good case for this sensor? Maybe 3D printed one?

          1 Reply Last reply
          0
          • dbemowskD Offline
            dbemowskD Offline
            dbemowsk
            wrote on last edited by
            #151

            I will gladly design a nice 3D printable case if someone can donate a board. I see that there are multiple battery options, so I would design a case that would fit all battery options.

            Vera Plus running UI7 with MySensors, Sonoffs and 1-Wire devices
            Visit my website for more Bits, Bytes and Ramblings from me: http://dan.bemowski.info/

            alexsh1A 1 Reply Last reply
            0
            • dbemowskD dbemowsk

              I will gladly design a nice 3D printable case if someone can donate a board. I see that there are multiple battery options, so I would design a case that would fit all battery options.

              alexsh1A Offline
              alexsh1A Offline
              alexsh1
              wrote on last edited by alexsh1
              #152

              @dbemowsk Thanks for volunteering!
              I can probably order new boards (they come in batches of 3) from oshpark and send you one or two. They are 1.93 x 1.00 inch (49.0 x 25.4 mm).
              Unfortunately, the boards I have with CR2450 battery holders and these are extremely fragile to be posted (they are soldered to little pads may come off easily).

              1 Reply Last reply
              0
              • alexsh1A alexsh1

                @scalz said in 💬 MyMultisensors:

                uint32_t SLEEP_TIME = 120000; // Sleep time between reports (in milliseconds)

                You are a star - I must admit that setting it up is a bit more fiddly. This is the first time I come across pinchange interrupts and excellent link you provided. Thank you

                alexsh1A Offline
                alexsh1A Offline
                alexsh1
                wrote on last edited by
                #153

                @scalz I did just notice that I have about 30-32uA sleep consumption, which is too high. This is very consistent through 3 sensors. Any ideas why I have such high consumption? Obviously, there is a chance my multimeter is not giving me correct reading, but so far my Brymen BM869S has been very much spot on!

                1 Reply Last reply
                0
                • scalzS Offline
                  scalzS Offline
                  scalz
                  Hardware Contributor
                  wrote on last edited by scalz
                  #154

                  @alexsh1 looks weird, because there is nothing special on the board which could consumes like that, all parts are ultra low power..I tested mine with uCurrent gold device.
                  so I would say if it's consistent on 3sensors boards, it could be:

                  • software
                  • bad caps, out of specs parts..(I usually order my parts at Mouser, arrow etc..)

                  what do you get when using sketch J from gammon for example + shutdown sensors in case, no serial connected.

                  alexsh1A 2 Replies Last reply
                  0
                  • scalzS scalz

                    @alexsh1 looks weird, because there is nothing special on the board which could consumes like that, all parts are ultra low power..I tested mine with uCurrent gold device.
                    so I would say if it's consistent on 3sensors boards, it could be:

                    • software
                    • bad caps, out of specs parts..(I usually order my parts at Mouser, arrow etc..)

                    what do you get when using sketch J from gammon for example + shutdown sensors in case, no serial connected.

                    alexsh1A Offline
                    alexsh1A Offline
                    alexsh1
                    wrote on last edited by
                    #155

                    @scalz Sketch J is giving 1.5mA consumption.

                    1 Reply Last reply
                    0
                    • scalzS Offline
                      scalzS Offline
                      scalz
                      Hardware Contributor
                      wrote on last edited by scalz
                      #156

                      @alexsh1
                      so you get 1.5mA with sketch J but 35uA with your code ?? something is wrong..you may have forgotten to shutdown some peripherals.
                      with sketch J, you need to shutdown everything on your board in case peripherals are not well initialized. So that implies you include libs for radio etc in sketch J. Then disconnect your ftdi for power consumption tests. the PIR sensor itself won't consume more than 2-3uA, I tested it too.
                      On other side, sketch J is just a basic test, because almost same code is used in MySensors lib for sleep()

                      Sometimes I read people saying they have x uA power consumption for 328p standalone in deep sleep mode, but this is strange because here, on different 328p design, I have always been able to confirm the current consumption from the datasheet which is nA range. But I always used uCurrent..and reliable capa (X7R etc), hopefully I never got one capa extra leaking so far.
                      There is no magics, especially for this board, you should get what datasheets say..
                      When I made this board, I started by soldering only 328p circuit and checked power consumption, then tested step by step additional peripheral.

                      alexsh1A 1 Reply Last reply
                      0
                      • scalzS scalz

                        @alexsh1
                        so you get 1.5mA with sketch J but 35uA with your code ?? something is wrong..you may have forgotten to shutdown some peripherals.
                        with sketch J, you need to shutdown everything on your board in case peripherals are not well initialized. So that implies you include libs for radio etc in sketch J. Then disconnect your ftdi for power consumption tests. the PIR sensor itself won't consume more than 2-3uA, I tested it too.
                        On other side, sketch J is just a basic test, because almost same code is used in MySensors lib for sleep()

                        Sometimes I read people saying they have x uA power consumption for 328p standalone in deep sleep mode, but this is strange because here, on different 328p design, I have always been able to confirm the current consumption from the datasheet which is nA range. But I always used uCurrent..and reliable capa (X7R etc), hopefully I never got one capa extra leaking so far.
                        There is no magics, especially for this board, you should get what datasheets say..
                        When I made this board, I started by soldering only 328p circuit and checked power consumption, then tested step by step additional peripheral.

                        alexsh1A Offline
                        alexsh1A Offline
                        alexsh1
                        wrote on last edited by
                        #157

                        @scalz No, I copied and pasted sketch J so no radio peripherals included.
                        Strange that I have the same consumption on both boards - I think caps may be the reason! I'll try to desolder a few and test it again.

                        1 Reply Last reply
                        0
                        • scalzS Offline
                          scalzS Offline
                          scalz
                          Hardware Contributor
                          wrote on last edited by scalz
                          #158

                          @alexsh1
                          where did you source your passive parts like capa, especially the bigger like 100uF ? (for curiosity)
                          I guess you sourced others ic like opamp and comparator from a known source.

                          alexsh1A 1 Reply Last reply
                          0
                          • scalzS scalz

                            @alexsh1
                            where did you source your passive parts like capa, especially the bigger like 100uF ? (for curiosity)
                            I guess you sourced others ic like opamp and comparator from a known source.

                            alexsh1A Offline
                            alexsh1A Offline
                            alexsh1
                            wrote on last edited by
                            #159

                            @scalz different sources - arrow.com for opamp.
                            For caps and resistors it is Aliexpress :))

                            1 Reply Last reply
                            0
                            • scalzS Offline
                              scalzS Offline
                              scalz
                              Hardware Contributor
                              wrote on last edited by scalz
                              #160

                              oki maybe try removing some of the big capa to see if it improves, use a simpler sketch where you just powerdown everything. there is no reason you don't get the low power consumption.
                              regarding sketch J, yes, for sure you got 1.5ma because others peripherals were not initialized/shutdown

                              alexsh1A 2 Replies Last reply
                              0
                              • scalzS scalz

                                oki maybe try removing some of the big capa to see if it improves, use a simpler sketch where you just powerdown everything. there is no reason you don't get the low power consumption.
                                regarding sketch J, yes, for sure you got 1.5ma because others peripherals were not initialized/shutdown

                                alexsh1A Offline
                                alexsh1A Offline
                                alexsh1
                                wrote on last edited by
                                #161

                                @scalz I have desoldered all caps down to 1uF. Tried a different bootloader. However, I cannot get consumption down. I have opt3001 + atsha204a + AT25DF512C (all obtained from a good source). All resistor values are correct (resistor tolerance is 1%). Not sure what else I can do...

                                1 Reply Last reply
                                0
                                • scalzS scalz

                                  oki maybe try removing some of the big capa to see if it improves, use a simpler sketch where you just powerdown everything. there is no reason you don't get the low power consumption.
                                  regarding sketch J, yes, for sure you got 1.5ma because others peripherals were not initialized/shutdown

                                  alexsh1A Offline
                                  alexsh1A Offline
                                  alexsh1
                                  wrote on last edited by alexsh1
                                  #162

                                  @scalz I managed to narrow down the problem. Consumption (no radio attached) with Si7021 and opt3001 is 4.8uA, but with flash it goes up to 29uA while sleeping. This is a batch of AT25DF512C-MAHN-T I received from the US so quality is not an issue here. Seems to me that flash is not sleeping?

                                  My tests are showing that CJ2305 MOSFET consumption is negligible

                                  1 Reply Last reply
                                  0
                                  • scalzS scalz

                                    @alexsh1 looks weird, because there is nothing special on the board which could consumes like that, all parts are ultra low power..I tested mine with uCurrent gold device.
                                    so I would say if it's consistent on 3sensors boards, it could be:

                                    • software
                                    • bad caps, out of specs parts..(I usually order my parts at Mouser, arrow etc..)

                                    what do you get when using sketch J from gammon for example + shutdown sensors in case, no serial connected.

                                    alexsh1A Offline
                                    alexsh1A Offline
                                    alexsh1
                                    wrote on last edited by alexsh1
                                    #163

                                    @scalz said in 💬 MyMultisensors:

                                    @alexsh1 looks weird, because there is nothing special on the board which could consumes like that, all parts are ultra low power..I tested mine with uCurrent gold device.
                                    so I would say if it's consistent on 3sensors boards, it could be:

                                    • software
                                    • bad caps, out of specs parts..(I usually order my parts at Mouser, arrow etc..)

                                    what do you get when using sketch J from gammon for example + shutdown sensors in case, no serial connected.

                                    @scalz
                                    Here we go - you said "software" and I tested SPIFlash lib modified by lowpowerlab and consumption has gone down to 15uA with flash onboard vs 30uA with Mysensors SPIFlash. For whatever season, the default MySensors SPIFlash (drivers\SPIFlash) is giving a higher consumption with flash.initialize() and flash.sleep(). @tbowmo Thomas, any ideas please?

                                    @scalz What lib are you using for flash to get such a low uA?

                                    tbowmoT 1 Reply Last reply
                                    0
                                    • alexsh1A alexsh1

                                      @scalz said in 💬 MyMultisensors:

                                      @alexsh1 looks weird, because there is nothing special on the board which could consumes like that, all parts are ultra low power..I tested mine with uCurrent gold device.
                                      so I would say if it's consistent on 3sensors boards, it could be:

                                      • software
                                      • bad caps, out of specs parts..(I usually order my parts at Mouser, arrow etc..)

                                      what do you get when using sketch J from gammon for example + shutdown sensors in case, no serial connected.

                                      @scalz
                                      Here we go - you said "software" and I tested SPIFlash lib modified by lowpowerlab and consumption has gone down to 15uA with flash onboard vs 30uA with Mysensors SPIFlash. For whatever season, the default MySensors SPIFlash (drivers\SPIFlash) is giving a higher consumption with flash.initialize() and flash.sleep(). @tbowmo Thomas, any ideas please?

                                      @scalz What lib are you using for flash to get such a low uA?

                                      tbowmoT Offline
                                      tbowmoT Offline
                                      tbowmo
                                      Admin
                                      wrote on last edited by
                                      #164

                                      @alexsh1

                                      It's been a while (a couple of years now) since I looked at the first sensebender micro.. (other than the data that they submit to my gateway :) )

                                      So I'm not entirely sure what is going on..

                                      alexsh1A 1 Reply Last reply
                                      0
                                      • scalzS Offline
                                        scalzS Offline
                                        scalz
                                        Hardware Contributor
                                        wrote on last edited by scalz
                                        #165

                                        @alexsh1
                                        yes the mosfet power consumption is negligeable (nA), else there would be a problem ;)

                                        I had to make some changes to get such low power, I agree (including spiflash lib you're right). actually i have too much work, rather 'lazy' and no time to sort my libs.sorry.

                                        Note: Spiflash lib from lowpowerlab (mysensors too i guess..) doesn't use the lowest power mode in sleep function.

                                        Does the sensebender micro have a spiflash too?? then that would explain some posts I read..

                                        As usual datasheets to the rescue, did you take a look? would have saved you time.
                                        Easy one, in datasheet you can read:

                                        • 200nA Ultra Deep Power Down current (Typical)
                                        • 5μA Deep Power-Down Current (Typical)
                                        • 25uA Standby current (Typical)
                                        • 4.5mA Active Read Current (Typical

                                        why don't you get this super low <uA ??
                                        section 12-5 of the datasheet is what you need, use the right opcode (command) which is 0x79 for ultra deep powerdown. create your own or tweak sleep function in lib
                                        So now you can save at least 5uA + (other sensors not optimized maybe) + multimeter imprecision
                                        I hope this helps!

                                        alexsh1A 1 Reply Last reply
                                        0
                                        • scalzS scalz

                                          @alexsh1
                                          yes the mosfet power consumption is negligeable (nA), else there would be a problem ;)

                                          I had to make some changes to get such low power, I agree (including spiflash lib you're right). actually i have too much work, rather 'lazy' and no time to sort my libs.sorry.

                                          Note: Spiflash lib from lowpowerlab (mysensors too i guess..) doesn't use the lowest power mode in sleep function.

                                          Does the sensebender micro have a spiflash too?? then that would explain some posts I read..

                                          As usual datasheets to the rescue, did you take a look? would have saved you time.
                                          Easy one, in datasheet you can read:

                                          • 200nA Ultra Deep Power Down current (Typical)
                                          • 5μA Deep Power-Down Current (Typical)
                                          • 25uA Standby current (Typical)
                                          • 4.5mA Active Read Current (Typical

                                          why don't you get this super low <uA ??
                                          section 12-5 of the datasheet is what you need, use the right opcode (command) which is 0x79 for ultra deep powerdown. create your own or tweak sleep function in lib
                                          So now you can save at least 5uA + (other sensors not optimized maybe) + multimeter imprecision
                                          I hope this helps!

                                          alexsh1A Offline
                                          alexsh1A Offline
                                          alexsh1
                                          wrote on last edited by alexsh1
                                          #166

                                          @scalz Yes, sensebender micro does have flash and using spiflash from mysensors. I never managed to get it below 20uA in the deep sleep, but then I never looked into the libs. My sensebender micro is running from two AA batteries and 20uA is just fine. It does make difference though if running on a coin cell.

                                          When you say ultra deep power down, which mode are you referencing?
                                          There are six sleep modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby, and Extended Standby.

                                          The datasheet - yes, I am referencing to it from time to time. I guess I'll have to dive in if I want to get it sorted. I would need to get Ucurrent Gold or get one built to measure such a low current.

                                          EDIT: For CR2032 3uA would be a self-discharge current (1% a month)

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


                                          15

                                          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