yangjiang 发表于 2014-9-25 18:27:09

发现极客知识库提供的arduino ds3231库函数似乎有点问题,请大侠指教。

最近迷上了单片机,我用ds3231作了一个时钟,用gettime函数提取时间,但偶然发现时间到了16点以后就变成10点,用gethour却没有问题,把自己的程序看了很多遍都没有发现问题,不得不怀疑库函数是不是有问题,由于是菜鸟一个,壮着胆子打开ds3231.cpp看了一下相关函数,果然发现库函数gettime多转了一次码,红色部分:
void DS3231::getTime(byte& year, byte& month, byte& date, byte& DoW, byte& hour, byte& minute, byte& second) {
        byte tempBuffer;
        bool PM;
        bool h12;

        Wire.beginTransmission(CLOCK_ADDRESS);
        Wire.write(uint8_t(0x00));
        Wire.endTransmission();
       
        Wire.requestFrom(CLOCK_ADDRESS, 7);

        second = bcdToDec(Wire.read());
        minute = bcdToDec(Wire.read());
        tempBuffer = bcdToDec(Wire.read());
        h12 = tempBuffer & 0b01000000;
        if (h12) {
                PM = tempBuffer & 0b00100000;
                hour = bcdToDec(tempBuffer & 0b00011111);
        } else {
                hour = bcdToDec(tempBuffer & 0b00111111);
        }

yangjiang 发表于 2014-9-25 23:35:28

的确是BCD码解码重复了,导致通过gettime函数得到的小时数出现问题,我将红色部分的代码做了修改,问题解决:
tempBuffer = (Wire.read();

zoologist 发表于 2014-9-26 08:43:22

不错啊,支持一下!!!

mondaywoo 发表于 2015-8-10 21:19:09

初学者学习

prosource 发表于 2015-12-12 12:00:10

既然发现了这个BUG,库函数是不是要更改一下,我发现现在库函数还是错的。

yuqingshan 发表于 2015-12-14 10:50:15

是啊,DS3231口可像有问题的,在20:00以后,十位数“2”变为“0”,无法显示20:00,21:00,23:00时间!

Joyce 发表于 2016-3-25 08:15:44

求一个arduino DS3231的库
页: [1]
查看完整版本: 发现极客知识库提供的arduino ds3231库函数似乎有点问题,请大侠指教。