This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] BQ32002:连接 Arduino

Guru**** 2380860 points
Other Parts Discussed in Thread: BQ32002
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/960825/bq32002-connecting-with-arduino

器件型号:BQ32002

您好!

我正在使用 BQ32002 RTC 和 Arduino。使用 DS3231 RTC、我在 Arduino 串行监视器中获得了正确的日期和时间。

 但是、当我通过 Arduino 连接 BQ32002 RTC 时、我可以将时间设置为 RTC、但对于显示时间、它仅显示设置时间。

我认为 BQ32002的编程与 DS3231相同、但在这里它不充当时钟。

请帮助 我解决此问题。

此致、

Dhanya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dhanya、

    不清楚问题是什么。 您能否共享原理图? VCC 和 Vback 电压是多少?

    BQ32002和竞争对手器件之间的寄存器不相同。 地址0x00至0x06相似、但世纪数据的位置不同。 寄存器0x07及以上不匹配。 我建议检查寄存器设置是否正确。

    此外、需要确认振荡器是否正常工作

    此致、
    通道

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Lane、

    感谢你的答复。

    我已将 Vcc 提供为3.3V、但从 Vcc 为测试供电以来、我不会提供 Vback。

    [引用 USER="Lane Boyd ]此外、需要确认振荡器是否正常工作

    [/报价]

    如何检查振荡器是否工作?

    我可以将时间和日期写入 RTC、以及从 RTC 读取的相同时间。所以我认为振荡器不工作、它不充当时钟

    我还在发送代码。

    平路机、

    Dhanya

    #include "Wire.h"
    #define BQ32002_address 0x68
    //将正常的十进制数转换为二进制编码小
    
    
    数字节 dectoBcd (byte val)
    {
    return (val/10*16)+(val %10));
    }
    //将二进制编码小数转换为正常的十进
    制数 bcdToDecd (byte val)
    {
    return (((((((/16*16
    }+void
    )
    
    +16*10)+(Wire.begin();
    
    Serial.begin(9600);)设置为 void val
    //在此处设置初始时间:
    // DS3231秒、分钟、小时、天、日期、 月、年
    setDS3231time (30、35、11、3、12、1、20);
    }
    void setDS3231time (字节秒、字节分钟、字节小时、字节 dayOfWeek、字节
    dayOfMonth、 字节月、字节年)
    {
    //将时间和日期数据设置为 DS3231
    Wire.beginTransmission(BQ32002);
    Wire.write(0);//将下一个输入设置为从秒寄存
    器 Wire.write (decToBcd(second)开始;//将 seconds
    Wire.write (decToBcd(minute)设置为 seconds Wire.write(decToBcd(hour)
    ;// decToWedToWire=7day)
    ;/ decdToWedTobcd(day=7ded.shay);//
    //设置日期(1到31)
    Wire.write (decToBcd (Month));//设置 Month
    Wire.write (decToBcd (year));//设置年份(0到99)
    Wire.endTransmission ();
    }
    void readDS323.1 time (byte *second、
    byte *分钟、
    *Ofhour、
    byte *OfdayWeek、byte *OfWeek、*
    字节*每日字节*)
    字节*月、
    字节*年
    ){
    Wire.beginTransmission(BQ32002);
    Wire.write(0);//将 BQ32002寄存器指针设置为00h
    Wire.endTransmission ();
    Wire.requestFrom (BQ32002,7);
    //从寄存器00h 开始从 BQ32002请求七个字节的数据
    *second = bcdToDec (Wire.read()& 0x7bcdOfWire
    
    (& 0x7b.dec)
    ;*读取时间=*小时);*读取(bcdoft.dec ();*读取)= bcdome.dec (*);*读取)*。
    
    *month = bcdToDec (Wire.read());
    *year = bcdToDec (Wire.read());
    }
    void displayTime()
    {
    字节秒,分钟,小时,dayOfWeek,dayOfMonth, 月、年;
    //从 DS3231
    readDS323.1检索数据(&second、&minute、&hour、&dayOfWeek、&dayOfMonth、 月,
    年);
    //将其发送到串行监视器
    Serial.print (hour,DEC);
    //将字节变量转换为十进制数(显示时)
    
    serial.print (":");
    
    如果(分钟<10)
    {
    serial.print ("0");
    }
    serial.print (minute、DEC);
    
    serial.print (":");
    
    如果(second<10)
    {
    serial.print ("0");
    }
    serial.print (second、DEC);
    
    serial.print (");
    
    serial.print (dayOfMonth、DEC);
    
    serial.print ("/");
    serial.print (Month、DEC);
    serial.print ("/");
    serial.print (year、 Dec);
    Serial.print ("星期几:");
    switch (dayOfWeek){
    案例1:
    serial.println("星期日");
    中断;
    案例2:
    serial.println("Monday");
    中断;
    案例3:
    serial.println("Tuesday");
    中断;
    案例4:
    serial.println("星期三");
    中断;
    案例5:
    serial.println("星期四");
    中断;
    案例6:
    serial.println("Friday");
    中断;
    案例7:
    serial.println("星期六");
    break;
    }
    }
    void loop()
    {
    displayTime();//在串行监视器上显示实时时钟数据,
    delay (1000);//每秒
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dhanya、

    感谢您提供信息。 要检查振荡器是否正常工作、请读回的位(寄存器0x01位7)。 更多信息请见第13页表5下的说明。

    请注意、在上电期间、of 标志总是被置位、并且必须在初始化之后被清除、以便检测后续的振荡器故障事件

    此致、
    通道