DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别

[DIY]DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别

水晶城堡在设计之初,采用全直插设计理念,保证玩家在自行DIY的过程中,不会因为焊接贴片元器件而烦恼。所以水晶城堡电路板上使用的所有原器件都是直插封装,所有IC都是DIP封装。

其中RTC模块采用的是达拉斯DS1302,配合5PPM的石英晶体。
虽然水晶城堡的走时精度已经能满足一般需要,但对于追求高精度的用户来讲,DS3231SN才是最佳选择。
DS3231SN最大的特点是:1. 内部集成温度补偿晶体(TCXO);
2. 采用高速(400KHz)IIC通讯总线;
3. 工业级标准,工作温度-40至85摄氏度;并且在0至+40的温度范围内,能够提供最大1分钟每年的及时精度。所以DIY了一块使用了DS3231SN作为主要器件的高精度RTC模块。
其实在我的其他时钟上,用得都是DS3231SN这颗RTC芯片(比如我的QS18-12辉光钟,YS13-3荧光钟,LED点阵动画时钟等等),经过大量实践证明,温补晶振的确准却度高。
虽然官方数据是±1分钟每年,但是实际我感觉在室内温度变化不大的情况下,能够做到20秒/年。

模块上集成了3.3V LDO模块,为DS3231提供工作电压。并且集成了稳压和上拉电阻。
该模块专门为IV-11荧光管电子钟【水晶城堡】设计,直接将DS1302摘下,将该模块装入即可。
装入后,MCU会自动识别当前的RTC模块是DS1302还是DS3231,并采用不同方式进行通讯并正确运行。
当然,这需要程序上做好相应的检测功能及相应的功能函数。
SHOW一下该模块的实物图片以及安装到水晶城堡电路板上以后的效果:










其实在自动识别方面,做起来也不难,需要在开机的时候检测一下是DS1302还是DS3231芯片。

大致思路是这样:
1、需要一个全局变量,用于开机时存储检测结果,以便以后的操作识别是DS3231还是DS1302;
2、硬件上DS1302需要3跟I/O口,DS3231只需要两根;
3、开机瞬间,首先默认为DS1302,因为DS1302内部有RAM,所以可以选择2-3个字节进行写操作。写完以后立即读取内容,如果内容与写入的内容一致,则表示当前安装的是DS1302,否则即认为是DS3231。

经过反复测试,这个检测方法很好用。

其次是程序读写这两种芯片:

对于主函数来讲,对于获取时间和日期以及设定时间和日期,统统交给同一个函数来处理,在这个函数里面,再分别针对不同的芯片进行相应操作。
下面我贴出来我的获取时间日期和设定时间日期的函数。
鸡鸣狗盗而已,欢迎拍砖!

你可能感兴趣的:(DIY一块DS3231的高精度时钟模块,让时钟DS3231/DS1302自动识别)