🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Core2 RTC challenge

    Core 2
    2
    7
    11.0k
    Loading More Posts
    • 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.
    • S
      sheepDog
      last edited by sheepDog

      Hello,

      the Core2 contains an RTC component, the BM8563. The RTC library has so far only a few functions and uses e.g. the status register does not return.

      I have now expanded the library to include these alarm functions:

         void GetAlarm (RTC_AlarmTypeDef * RTC_AlarmStruct);
         void SetAlarm (RTC_AlarmTypeDef * RTC_AlarmStruct);
      
         void enableAlarm ();
         void disableAlarm ();
         void resetAlarm ();
         bool alarmActive ();
      

      At start the functions worked very well, but now I can no longer use the BM8563 in normal way. At the start it always outputs the date 05.01.00 and a time from 00:07:00 to 00:07:07 and then starts again from 00:07:00. Other Arduino-libraries also show the same effect.

      Resetting all registers from 00 to 0E to the value zero didn't help either, does anyone have an idea?

      felmueF 1 Reply Last reply Reply Quote 0
      • felmueF
        felmue @sheepDog
        last edited by

        @sheepdog said in Core2 RTC challenge:

        e.g. the status register does not return.

        Hi @sheepDog

        could you please elaborate what you mean by 'status register does not return'? How did you read it? I don't see a function in the RTC library to read a register so I assume you wrote your own function?

        Reading the two RTC status registers works fine for me and they both return 0x00 which I guess is expected.

        I've read the status registers with below function:

        uint8_t RTC::ReadReg(uint8_t reg)
        {
            Wire1.beginTransmission(0x51);
            Wire1.write(reg);
            Wire1.endTransmission();
            Wire1.requestFrom(0x51, 1);
            return Wire1.read();
        }
        
        Serial.println(M5.Rtc.ReadReg(0x00));
        Serial.println(M5.Rtc.ReadReg(0x01));
        

        Maybe try to use a fresh copy of M5Core2 library (w/o your alarm code modifications) to verify your RTC behaves as expected?

        Thanks
        Felix

        GPIO translation table M5Stack / M5Core2
        Information about various M5Stack products.
        Code examples

        1 Reply Last reply Reply Quote 0
        • S
          sheepDog
          last edited by

          Hello @felmue,

          thanks for your answer. I meant that writing the value 0 in all status registers would not reset the BM8563!

          I used a similar function for reading and writing:

          
          void RTC::readBytes(uint8_t reg, uint8_t nbytes, uint8_t *data) {
            Wire1.beginTransmission(BM8563_ADDRESS);
            Wire1.write(reg);
            Wire1.endTransmission();
            Wire1.requestFrom(BM8563_ADDRESS, nbytes);
            uint8_t index = 0;
            while( Wire1.available() )
                data[index++] = Wire1.read();
          }
          
          
          void RTC::writeBytes(uint8_t reg, uint8_t nbytes, uint8_t *data) {
            Wire1.beginTransmission(BM8563_ADDRESS);
            Wire1.write(reg);
            for (uint8_t i = 0; i < nbytes; i++)
                Wire1.write(data[i]);
            Wire1.endTransmission();
          }
          

          In the meantime I found an old fashion solution, because a fresh copy of M5Core2 library didn't not help. The problem was inside the registers of BM8563.

          I disconnected the M5Core2 from USB and wait until the battery was empty. Now it's working again.
          the problem was to factory reset the BM8563.

          1 Reply Last reply Reply Quote 0
          • felmueF
            felmue
            last edited by

            Hi @sheepDog

            hmm, are you saying that by writing something 'bad' into one (or more) of he RTC registers you were able to make it misbehave until it was 'factory reset' due to power loss?

            I wonder if writing back a backup of all registers (from when RTC was running ok) would help getting a misbehaving RTC back on track w/o the need to let the battery run out?

            Anyhow, I am glad you got it working again.

            Thanks
            Felix

            GPIO translation table M5Stack / M5Core2
            Information about various M5Stack products.
            Code examples

            1 Reply Last reply Reply Quote 0
            • S
              sheepDog
              last edited by

              Hi @felmue,

              yes, I believe that I wrote incorrect values in one (or more) of the RTC registers and that the BM8563 was factory or default reset due to the dead (!) battery.

              Before I wrote back all registers with data sheet informations and so the RTC did not get back on track.

              Thanks,
              Uwe

              1 Reply Last reply Reply Quote 0
              • felmueF
                felmue
                last edited by

                Hi Uwe

                I did a test and removed the battery from my Core2 and let it sit for a couple of hours, but that did not reset RTC as it was still powered by the backup battery. How long did you wait for the battery to run out? Just curious to figure out what might have gone wrong with your RTC.

                I did a second test and also removed the RTC backup battery and then read all RTC registers. Except for register 0x02 and 0x03 all came back with value 0x00, which I guess makes sense.

                Thanks
                Felix

                GPIO translation table M5Stack / M5Core2
                Information about various M5Stack products.
                Code examples

                1 Reply Last reply Reply Quote 0
                • S
                  sheepDog
                  last edited by

                  Hi @felmue,

                  I started M5Core2-Factory test, disconnected USB and go away. About 5 hours later I came back and tried to switch on M5Core. Nothing happened.

                  I connected USB, flashed the M5Core2 with the factory test program and everything worked fine.

                  At the last day I used my RTC-library with alarm functions and more and it worked continuously.

                  Cheers

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post