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. My Project
  3. nRF5 action!

nRF5 action!

Scheduled Pinned Locked Moved My Project
1.9k Posts 49 Posters 1.5m Views 44 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.
  • R rmtucker

    @d00616 said in nRF5 Bluetooth action!:

    @rmtucker said in nRF5 Bluetooth action!:

    Yes being able to change the prescaler dynamically would help a great deal as 125ms / 582.542 hours is not really useful for most applications with a 250ms overrun.

    The sleep() function is now more precise for sleeping <512s:

    https://github.com/mysensors/MySensors/pull/909

    The PR is waiting for merge.

    Hmm just tried the latest commit and it is giving me 306ms for sleep(10000).
    Something not quite right.

    N Offline
    N Offline
    NeverDie
    Hero Member
    wrote on last edited by
    #751

    @rmtucker
    How are you measuring how long it's sleeping?

    R 1 Reply Last reply
    0
    • N NeverDie

      @rmtucker
      How are you measuring how long it's sleeping?

      R Offline
      R Offline
      rmtucker
      wrote on last edited by
      #752

      @NeverDie said in nRF5 Bluetooth action!:

      @rmtucker
      How are you measuring how long it's sleeping?

      Just using hwMillis() before and after sleep and subtracting one from the other.
      It was just reading + 250ms until @d00616 commited some changes a few hours ago.

      R N 2 Replies Last reply
      0
      • R rmtucker

        @NeverDie said in nRF5 Bluetooth action!:

        @rmtucker
        How are you measuring how long it's sleeping?

        Just using hwMillis() before and after sleep and subtracting one from the other.
        It was just reading + 250ms until @d00616 commited some changes a few hours ago.

        R Offline
        R Offline
        rmtucker
        wrote on last edited by
        #753

        something wrong in here:-

        // Calculate sleep time and prescaler
        		if (ms<512000) {
        			// prescaler 0, 30.517 μs resolution -> max 512 s sleep
        			MY_HW_RTC->PRESCALER =  0;
        			// Set compare register to 1/30.517 µs to garantee event triggering
        			// A minimum of 2 ticks must be guaranteed
        			// (1000/32768)<<12 == 125
        			MY_HW_RTC->CC[0] = max((ms<<12 / 125), 2);
        		} else {
        			// 8 Hz -> max 582.542 hours sleep.
        			MY_HW_RTC->PRESCALER = 4095;
        			// Set compare register to 1/125ms
        			// A minimum of 2 ticks must be guaranteed
        			MY_HW_RTC->CC[0] = max((ms / 125), 2);
        		}
        
        1 Reply Last reply
        0
        • R rmtucker

          @NeverDie said in nRF5 Bluetooth action!:

          @rmtucker
          How are you measuring how long it's sleeping?

          Just using hwMillis() before and after sleep and subtracting one from the other.
          It was just reading + 250ms until @d00616 commited some changes a few hours ago.

          N Offline
          N Offline
          NeverDie
          Hero Member
          wrote on last edited by NeverDie
          #754

          @rmtucker said in nRF5 Bluetooth action!:

          @NeverDie said in nRF5 Bluetooth action!:

          @rmtucker
          How are you measuring how long it's sleeping?

          Just using hwMillis() before and after sleep and subtracting one from the other.
          It was just reading + 250ms until @d00616 commited some changes a few hours ago.

          I thought so. The point being: doesn't millis stop when you're deep sleeping? Well, at least on an Arduino it does. Not sure what it does on the nRF5.

          R 1 Reply Last reply
          0
          • N NeverDie

            @rmtucker said in nRF5 Bluetooth action!:

            @NeverDie said in nRF5 Bluetooth action!:

            @rmtucker
            How are you measuring how long it's sleeping?

            Just using hwMillis() before and after sleep and subtracting one from the other.
            It was just reading + 250ms until @d00616 commited some changes a few hours ago.

            I thought so. The point being: doesn't millis stop when you're deep sleeping? Well, at least on an Arduino it does. Not sure what it does on the nRF5.

            R Offline
            R Offline
            rmtucker
            wrote on last edited by rmtucker
            #755

            @NeverDie
            No the nrf5 has a rtc.(Real time Counter)
            It can even keep time while sleeping.(just found this out myself!).
            That is a great leap forward on the arduino.

            R 1 Reply Last reply
            0
            • R rmtucker

              @NeverDie
              No the nrf5 has a rtc.(Real time Counter)
              It can even keep time while sleeping.(just found this out myself!).
              That is a great leap forward on the arduino.

              R Offline
              R Offline
              rmtucker
              wrote on last edited by
              #756

              Try it just print the time out then put it to sleep for a minute then print the time out again.

              R 1 Reply Last reply
              0
              • R rmtucker

                Try it just print the time out then put it to sleep for a minute then print the time out again.

                R Offline
                R Offline
                rmtucker
                wrote on last edited by rmtucker
                #757

                The problem must be this line but i don't speak nrf5.:frowning:

                			// (1000/32768)<<12 == 125
                			MY_HW_RTC->CC[0] = max((ms<<12 / 125), 2);```
                R 1 Reply Last reply
                0
                • R rmtucker

                  The problem must be this line but i don't speak nrf5.:frowning:

                  			// (1000/32768)<<12 == 125
                  			MY_HW_RTC->CC[0] = max((ms<<12 / 125), 2);```
                  R Offline
                  R Offline
                  rmtucker
                  wrote on last edited by rmtucker
                  #758

                  The only other thing it could be is the deletion of this line in the commit.

                  
                  nrf5_rtc_event_triggered = false 
                  
                  1 Reply Last reply
                  0
                  • d00616D d00616

                    @NeverDie said in nRF5 Bluetooth action!:

                    Thanks! I just now ordered one of your boards so that in the future we can share a common platform for comparing numbers.

                    Ok. I have measured my Ebyte with the same sketch and in the µA range of my VC165 multimeter. Sleep current is 9.9µA with two ports in INPUT_PULLUP and one Port in OUTPUT_H0H1 mode. (b.t.w. this module costs actually 3,82€)

                    @scalz said in nRF5 Bluetooth action!:

                    in that case, you need to set it as a floating input i think, like it's generally at reset.
                    In datasheet, section 20 (p111), is explained how works the GPIO. You have a Bit for disconnecting it. See the PIN_CNF[n] registers. For instance, p.140, you can see how it looks for the P0.10, and the Bit 1.
                    This should do the job..

                    Should I add a DISCONNECTED mode to hwPinMode()?

                    R Offline
                    R Offline
                    rmtucker
                    wrote on last edited by
                    #759

                    @d00616

                    MY_HW_RTC->CC[0] = max((ms<<12 / 125), 2);

                    Should be:-

                    MY_HW_RTC->CC[0] = max(((ms << 12) / 125), 2));

                    R mfalkviddM d00616D 3 Replies Last reply
                    1
                    • R rmtucker

                      @d00616

                      MY_HW_RTC->CC[0] = max((ms<<12 / 125), 2);

                      Should be:-

                      MY_HW_RTC->CC[0] = max(((ms << 12) / 125), 2));

                      R Offline
                      R Offline
                      rmtucker
                      wrote on last edited by
                      #760

                      @d00616

                      Just checked and it now returns 10002 for a sleep(10000).
                      Much better after the above alteration.

                      1 Reply Last reply
                      0
                      • N Offline
                        N Offline
                        NeverDie
                        Hero Member
                        wrote on last edited by
                        #761

                        Epilog: I made the changes so that just prior to taking a measurement the sense pin is hwPinMode'd to an input pin, and then immediately after the measurement I disconnect it. Seems to be working, and without the usurious power drain I was experiencing previously. :)

                        R 1 Reply Last reply
                        0
                        • N NeverDie

                          Epilog: I made the changes so that just prior to taking a measurement the sense pin is hwPinMode'd to an input pin, and then immediately after the measurement I disconnect it. Seems to be working, and without the usurious power drain I was experiencing previously. :)

                          R Offline
                          R Offline
                          rmtucker
                          wrote on last edited by
                          #762

                          @NeverDie said in nRF5 Bluetooth action!:

                          Epilog: I made the changes so that just prior to taking a measurement the sense pin is hwPinMode'd to an input pin, and then immediately after the measurement I disconnect it. Seems to be working, and without the usurious power drain I was experiencing previously. :)

                          Good news
                          So what is the current usage now when sleeping?

                          N 1 Reply Last reply
                          0
                          • R rmtucker

                            @NeverDie said in nRF5 Bluetooth action!:

                            Epilog: I made the changes so that just prior to taking a measurement the sense pin is hwPinMode'd to an input pin, and then immediately after the measurement I disconnect it. Seems to be working, and without the usurious power drain I was experiencing previously. :)

                            Good news
                            So what is the current usage now when sleeping?

                            N Offline
                            N Offline
                            NeverDie
                            Hero Member
                            wrote on last edited by
                            #763

                            @rmtucker said in nRF5 Bluetooth action!:

                            @NeverDie said in nRF5 Bluetooth action!:

                            Epilog: I made the changes so that just prior to taking a measurement the sense pin is hwPinMode'd to an input pin, and then immediately after the measurement I disconnect it. Seems to be working, and without the usurious power drain I was experiencing previously. :)

                            Good news
                            So what is the current usage now when sleeping?

                            About 6ua on this particular Ebyte nRF52832. I'm pretty sure it would be higher on my other Ebyte nRF52832, though I haven't measured it again. Haven't tested any additional ones as of yet.

                            1 Reply Last reply
                            0
                            • R rmtucker

                              @d00616

                              MY_HW_RTC->CC[0] = max((ms<<12 / 125), 2);

                              Should be:-

                              MY_HW_RTC->CC[0] = max(((ms << 12) / 125), 2));

                              mfalkviddM Offline
                              mfalkviddM Offline
                              mfalkvidd
                              Mod
                              wrote on last edited by
                              #764

                              @rmtucker very nice work, thanks for locating the problem.

                              It occurs because 12/125 will be evaluated before the bit shift. http://en.cppreference.com/w/c/language/operator_precedence for details.

                              1 Reply Last reply
                              1
                              • R rmtucker

                                @d00616

                                MY_HW_RTC->CC[0] = max((ms<<12 / 125), 2);

                                Should be:-

                                MY_HW_RTC->CC[0] = max(((ms << 12) / 125), 2));

                                d00616D Offline
                                d00616D Offline
                                d00616
                                Contest Winner
                                wrote on last edited by
                                #765

                                @rmtucker said in nRF5 Bluetooth action!:

                                MY_HW_RTC->CC[0] = max((ms<<12 / 125), 2);
                                Should be:-
                                MY_HW_RTC->CC[0] = max(((ms << 12) / 125), 2));

                                Thank you. This was the result of merging some commits. I haven't seen I reversed that change. I had tested the code before merging some commits into one.

                                Actually I check the result of sleep(511999) and sleep(512001). When it's finished I fix that in MySensors.

                                1 Reply Last reply
                                0
                                • S scalz

                                  for unused pins, it should be floating, not pullup. set the pin register you need to 0x02.
                                  Something like that
                                  NRF_GPIO->PIN_CNF[ulPin] = 0x02;
                                  that will put pin in same state like it's on reset. Everything disabled/default, floating, with disconnect bit set.
                                  (see datasheet gpio).

                                  @d00616 said in nRF5 Bluetooth action!:

                                  Should I add a DISCONNECTED mode to hwPinMode()?

                                  make sense to have it for input too.. i agree :simple_smile:

                                  d00616D Offline
                                  d00616D Offline
                                  d00616
                                  Contest Winner
                                  wrote on last edited by
                                  #766

                                  @scalz said in nRF5 Bluetooth action!:

                                  @d00616 said in nRF5 Bluetooth action!:

                                  Should I add a DISCONNECTED mode to hwPinMode()?

                                  make sense to have it for input too.. i agree

                                  What's the best name for this mode? DISCONNECTED or INPUT_DISCONNECTED. I prefer the first variant.

                                  I have to play a little bit with the port modes. Maybe it saves some current when the serial port pins are put into the disconnected mode while sleeping.

                                  S 1 Reply Last reply
                                  0
                                  • d00616D Offline
                                    d00616D Offline
                                    d00616
                                    Contest Winner
                                    wrote on last edited by
                                    #767

                                    @d00616 said in nRF5 Bluetooth action!:

                                    Actually I check the result of sleep(511999) and sleep(512001). When it's finished I fix that in MySensors.

                                    Is fixed in development branch.
                                    https://github.com/mysensors/MySensors/pull/917

                                    1 Reply Last reply
                                    0
                                    • d00616D d00616

                                      @scalz said in nRF5 Bluetooth action!:

                                      @d00616 said in nRF5 Bluetooth action!:

                                      Should I add a DISCONNECTED mode to hwPinMode()?

                                      make sense to have it for input too.. i agree

                                      What's the best name for this mode? DISCONNECTED or INPUT_DISCONNECTED. I prefer the first variant.

                                      I have to play a little bit with the port modes. Maybe it saves some current when the serial port pins are put into the disconnected mode while sleeping.

                                      S Offline
                                      S Offline
                                      scalz
                                      Hardware Contributor
                                      wrote on last edited by scalz
                                      #768

                                      @d00616 said in nRF5 Bluetooth action!:

                                      @scalz said in nRF5 Bluetooth action!:

                                      @d00616 said in nRF5 Bluetooth action!:

                                      Should I add a DISCONNECTED mode to hwPinMode()?

                                      make sense to have it for input too.. i agree

                                      What's the best name for this mode? DISCONNECTED or INPUT_DISCONNECTED. I prefer the first variant.

                                      I have to play a little bit with the port modes. Maybe it saves some current when the serial port pins are put into the disconnected mode while sleeping.

                                      agree too for the first one should be enough :simple_smile:
                                      yes, for lower power consumption, better disconnect pins which are not needed.
                                      it's the same for a simple 328p though (setting the right pin states).

                                      1 Reply Last reply
                                      0
                                      • N Offline
                                        N Offline
                                        NeverDie
                                        Hero Member
                                        wrote on last edited by
                                        #769

                                        As a follow-up to rmtucker's line of inquiry, what is currently the shortest deep sleep that's supported? Is it one millisecond, or something else?

                                        R d00616D 2 Replies Last reply
                                        0
                                        • N NeverDie

                                          As a follow-up to rmtucker's line of inquiry, what is currently the shortest deep sleep that's supported? Is it one millisecond, or something else?

                                          R Offline
                                          R Offline
                                          rmtucker
                                          wrote on last edited by rmtucker
                                          #770

                                          @NeverDie
                                          Theoretically it is 2 clock ticks at 32768khz so 0.000061035secs i think.
                                          But how long it takes to go into sleep mode and come out of sleep mode i am not sure.
                                          But of course the sleep function only allows millis.

                                          1 Reply Last reply
                                          1

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          18

                                          Online

                                          12.0k

                                          Users

                                          11.2k

                                          Topics

                                          113.4k

                                          Posts


                                          Copyright 2025 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