任务介绍
本次任务属于Make Blocks第二期的任务,有很多的分任务进行选择,我们本次选择的是设计一个实时时钟模块,具体任务如下:
板卡尺寸:小于40mmx40mm
支持实时时钟、日历功能
接口:I2C
主要器件:需在DigiKey官网有售
打开得捷官网,搜索实时时钟,可以看到有很多各种各样的实时时钟,不过通过对比发现有很多各种类型的实施中,更能差异也比较大,这里我们选择了一下内置晶振的芯片,带备电,这样的芯片更符合我们设计这次模块的需求,功能齐全,外部电路简单。
设计思路
目前的要求是设计一款实时时钟模块,主要接口参考Grove的适配的接口,包括版型也是一样差不多的。在接口方面进行可能多的将引脚引出来,
设计框图如下:
功能介绍
本次设计的是一个实时时钟模块,通过IIC接口进行通信控制,可以输出时间和日历,通过2.54mm插针可以进行功能扩展,支持备电接入。
硬件介绍
我们本次设计的是RX8130实时时钟模块,主要接口参考Grove的适配的接口。RX8130是一款精密的实时时钟芯片,采用CMOS工艺制造,具有低功耗、高精度和强抗干扰能力等特点。该芯片内部集成了温度补偿电路和电池电量检测电路,能够在极端环境下保持稳定的计时和日期功能。支持串行接口,其核心特色在于集成了高精度的32.768 kHz晶体振荡器。该实时时钟不仅提供了全面的日历和时钟计数功能,涵盖了年、月、日、星期、时、分、秒等详细信息,还增设了实用的时间闹钟、间隔计时器以及时间更新中断等多元化功能。此外,借助其先进的备用电池充电控制机制和灵活的接口电源输入引脚设计,RX8130CE能够轻松适应多种供电电路需求,确保在各种应用场景下都能稳定可靠地运行。
原理图和PCB模块介绍
原理图
PCB
实时时钟单元提供精准的计时功能,内置32.768kHz的晶振提供基准,支持备电的接入,主要的接口是IIC接口,扩展功能通过2.54mm插针提供。
实物图
软件调试
我们通过对不同软件调试的对比,最后还是选用了arduino进行基本的功能调试,来验证硬件部分的可用性,基本代码如下:
#include <Arduino.h>
#include <ArtronShop_RX8130CE.h>
#include <Wire.h>
#include <time.h>
ArtronShop_RX8130CE rtc(&Wire);
void setup() {
Serial.begin(115200);
Wire.begin();
while(!rtc.begin()) {
Serial.println("RX8130CE init error !");
delay(1000);
}
struct tm t;
t.tm_hour = 16;
t.tm_min = 30;
t.tm_sec = 0;
t.tm_mday = 23;
t.tm_mon = 8 - 1; // 0 - 11
t.tm_year = 2025 - 1900; // since 1900
if (rtc.setTime(t)) {
Serial.println("Set time successful!");
} else {
Serial.println("Set time to RTC fail !");
}
}
void loop() {
// Get time from RTC
struct tm tt;
if (rtc.getTime(&tt)) {
Serial.print("year:");
Serial.print(tt.tm_year + 1900);
Serial.print(" mon:");
Serial.print(tt.tm_mon);
Serial.print(" day:");
Serial.print(tt.tm_mday);
Serial.print(" hour:");
Serial.print(tt.tm_hour);
Serial.print(" min:");
Serial.print(tt.tm_min);
Serial.print(" sec:");
Serial.print(tt.tm_sec);
Serial.println(" ");
} else {
Serial.println("Get time from RTC fail !");
}
delay(1000);
}
在这里我们通过基本的时间设置功能,自定义了一个时间,然后在loop循环中不断的定时打印,看到的就是我们设定之后时间数据了,基本上就是每秒的变化了。
运行效果
设定的时间如下:
串口打印如下:
心得体会
本次设计的模块对于硬件的来说相对还是比较简单的,都属于数字接口的芯片,我们主要注意一下例如IIC接口要上拉,注意供电要加一些去耦电容之类的细节,节省上就不会有太大的问题,软件调试建议选择arduino或者mpy等等这些有现成库的方式进行快速验证,在确保硬件没有问题的前提下进行进一步的设计。