

STC8H开发(十四): I2C驱动RX8025T高精度实时时钟芯片 - Milton
source link: https://www.cnblogs.com/milton/p/16479296.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

计时时钟芯片概览
常用的计时时钟芯片有 DS12C887, DS1302, DS1307, DS3231, RX8025, 各型号还有衍生型号. 可以看到到大部分是Dallas生产的芯片, RX8025的厂商是Epson. 其中
- DS1302 和 DS1307 可以看成是同一芯片的不同协议版本(SPI和I2C), 需要外接晶振, 如果晶振不带温补, 计时误差受温度影响较大.
- DS12C887是内建晶振的DS12C885, 在出厂时已经经过校准, 在+25°C时误差为±1分钟/月. DS12C887使用并口, 比较浪费IO资源, 另外体积也较大, 现在大都用于DIY用途.
- DS3231 自带温补晶振, 精度很高, 在[-40°C, 85°C]范围内误差 ±0.432秒/天(±13秒/月). 是当之无愧的明星型号, 市面上有成品模块, 有Arduino lib, 用起来相当方便.
- RX8025 也自建温补晶振, 精度与 DS3231 相当, 但是在市面上少见得多. 作为一个性价比非常高的型号, 有必要单独介绍一下.
RX8025T 简介

RX8025T 是高精度I2C实时时钟芯片, I2C总线地址为固定的0x64
- 400 kHz I2C接口
- 内置 32.768 kHz 温度补偿晶振(DTCXO), 计时精度很高
- 计时包含秒, 分, 时, 日, (周)日, 月, 年, 没有世纪. 对年份2000至2099有闰年补偿
- 1个可编程闹钟, 支持按天及按周天循环
- 方波输出, 定时器输出
- 贮存温度[-55°C, 125°C], 工作温度[-40°C, 85°C]
- 误差(3.0V电压)
- 温度范围[ 0°C, 50°C], 误差 ±10秒/月
- 温度范围[-40°C, 85°C], 误差 ±13秒/月
- 工作电压 1.6V - 5.5V (typical: 3.0V), 电压低于2.2V时, 温度补偿停止工作
- 时钟保持电压 1.2V - 5.5V
- 工作电流 0.8μA - 20 μA, 温补工作峰值电流900μA
RX8025T 与 RX8025SA/NB 的区别
注意, RX-8025T 与 RX-8025SA/NB 只是部分相同, Pin不兼容, 寄存器也不完全相同
- PIN: RX8025T 只有一个 /INT, RX8025SA 有两个 /INTA和/INTB
- 寄存器0x07:RX8025T 为 RAM 可以读写, RX8025SA 为 Digital Offset 用于调节 32.768 kHz 晶振精度
- 闹钟定义: RX8025T 为 0X08,0x09,0x0A, RX8025SA 为 周[0x08,0x09,0x0A], 日[0x0B,0x0C]
- 定时器: RX8025T 带一个双字节(12bit)计数器, RX8025SA 没有
- 小时格式: RX8025T 只支持24H, RX8025SA 区分12H和24H
RX8025T 与 DS3231 相比
二者精度都很高, 误差接近
- DS3231 有备用电池pin, RX8025T 没有
- DS3231 有两组闹钟, RX8025T 只有一组闹钟
- DS3231 没有定时器, RX8025T 有定时器
RX8025T 管脚和典型电路

PIN | Name | I/O | 说明 |
---|---|---|---|
1 | T1(CE) | Input | 厂商测试 (不连接) |
2 | SCL | Input | I2C的时钟 |
3 | FOUT | Output | C-MOS 输出, 由 FOE 控制. 当 FOE 为高电平时, 输出 32.768 kHz 信号, 当停止输出时, FOUT pin 表现为高阻态 (high impedance) |
4 | N.C. | ||
5 | TEST | Input | 厂商测试 (不连接) |
6 | VDD | 供电正电压 | |
7 | FOE | Input | 用于控制 FOUT pin 的输出. 当此pin为高电平时, FOUT pin 为输出模式, 低电平时 FOUT pin 停止输出. |
8 | N.C. | ||
9 | N.C. | ||
10 | /INT | Output | 这个 pin 用于输出闹钟信号, 定时器信号, 时钟更新信号等, 这个pin为开漏输出. |
11 | GND | 接地 | |
12 | T2(VPP) | 厂商测试 (不连接) | |
13 | SDA | I/O | I2C的数据输入输出, 输出时为 N-ch open drain, 需要上拉电阻. |
14 | N.C. |
带备用电池的电路

RX8025T 的寄存器
Addr | Name | 说明 |
---|---|---|
0x00 | SEC | 计时秒, BCD码[0, 59], 前六位有效 |
0x01 | MIN | 计时分钟, BCD码[0, 59], 前六位有效 |
0x02 | HOUR | 计时小时, BCD码[0, 23], 24小时制, 前五位有效 |
0x03 | WEEK | 计时日(周天), 每一个bit代表一天, 从bit0至bit6依次为周日, 周一, ..., 周六 |
0x04 | DAY | 计时日, BCD码[1, 31], 前五位有效 |
0x05 | MONTH | 计时月, BCD码[1, 12], 前四位有效 |
0x06 | YEAR | 计时年, BCD码[0, 99], 全八位有效 |
0x07 | RAM | 非功能, 可读写区域 |
0x08 | MIN Alarm | 闹钟分钟, BCD码[0, 59], 前六位有效. 第七位AE标识是否忽略(不参与比较), 0:否, 1:是 |
0x09 | HOUR Alarm | 闹钟小时, BCD码[0, 23], 前五位有效. 第七位AE标识是否忽略 |
0x0A | WEEK Alarm / DAY Alarm | 闹钟日(周天/日), 由 WADA 寄存器控制 |
闹钟周天, 每一个bit代表一天, 从bit0至bit6依次为周日至周六, 第七位AE标识是否忽略 | ||
闹钟日, BCD码[1, 31], 前五位有效, 第七位AE标识是否忽略 | ||
0x0B | Timer Counter 0 | 计数器的低8位, HEX码(正常数值) |
0x0C | Timer Counter 1 | 计数器的高4位, HEX码(正常数值) |
0x0D | Extension Register | 扩展功能寄存器 |
0x0E | Flag Register | 标志位寄存器 |
0x0F | Control Register | 控制位寄存器 |
STC8H 驱动 RX8025T
P32 -> SCL
P33 -> SDA
GND -> GND
3.3V -> VCC
代码下载地址
代码会将 RX8025T 时间设置为 2022-07-16 10:10:10, 然后每隔一秒显示一次时间, 数值为十六进制
10-10-10-40-16-07-22-01-00-04-00-00-00-00-00-40-
11-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
12-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
13-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
14-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
15-10-10-40-16-07-22-01-00-04-00-00-00-00-20-40-
读写时间的方法
__XDATA uint8_t buff[7];
uint8_t RX8025T_Write(uint8_t reg, uint8_t dat)
{
return I2C_Write(RX8025T_I2C_ADDR, reg, &dat, 1);
}
// 初始化, 清除标志位, 关闭中断
uint8_t RX8025T_Init(void)
{
// Reset all flags
RX8025T_Write(RX8025T_REG_FLAG, 0x00);
// Default , turn off all interrupts
RX8025T_Write(RX8025T_REG_CONTROL, 0x40);
return HAL_OK;
}
// 读取时间
uint8_t RX8025T_GetTime(uint8_t *t)
{
I2C_Read(RX8025T_I2C_ADDR, RX8025T_REG_SECOND, t, 16);
return HAL_OK;
}
// 设置时间
uint8_t RX8025T_SetTime(uint8_t *t)
{
RX8025T_Write(RX8025T_REG_SECOND, t[0]);
RX8025T_Write(RX8025T_REG_MINUTE, t[1]);
RX8025T_Write(RX8025T_REG_HOUR, t[2]);
RX8025T_Write(RX8025T_REG_WEEKDAY, t[3]);
RX8025T_Write(RX8025T_REG_DAY, t[4]);
RX8025T_Write(RX8025T_REG_MONTH, t[5]);
RX8025T_Write(RX8025T_REG_YEAR, t[6]);
return HAL_OK;
}
main方法示例
int main(void)
{
uint8_t i;
SYS_SetClock();
// UART1 configuration: baud 115200 with Timer2, 1T mode, no interrupt
UART1_Config8bitUart(UART1_BaudSource_Timer2, HAL_State_ON, 115200);
GPIO_Init();
I2C_Init();
RX8025T_Init();
time[0] = 0x10; // second
time[1] = 0x10; // minute
time[2] = 0x10; // hour
time[3] = 0x40; // week day
time[4] = 0x16; // day
time[5] = 0x07; // month
time[6] = 0x22; // year
RX8025T_SetTime(time);
while(1)
{
RX8025T_GetTime(time);
for (i = 0; i < BUFF_SIZE; i++)
{
UART1_TxHex(time[i]);
UART1_TxChar('-');
}
UART1_TxString("\r\n");
SYS_Delay(1000);
}
}
Recommend
-
48
Go语言开发(十四)、Go语言常用标准库四一、heap1、heap简介heap仅仅提供了最小堆的操作,没有提供堆的数据结构,堆的数据结构必须由开发者自己实现。heap提供了一个heap.Interface接口来作为堆的操作和堆的数据结构(开发者自己实现)之间的桥梁,堆的数据结构必...
-
29
自动驾驶领域:一种实时高精度的城市道路场景语义分割方法 Original...
-
8
Documentation/rtc.txt http://blog.csdn.net/yaozhenguo2006/article/details/6820218 ...
-
9
写了好几章的东西,再回头读的时候发现有些内容写的不理想,没有表达出自己所想要表达的意思。这次写一个补遗,把我认为需要重新解释和着重说明的内容再唠一唠。反正我多说两句,您就可以多理解一些。按此等形式,我感觉下次应该找个小弟当副编辑,专门用于...
-
13
NEC成功开发全球首个可扩展到全连接量子退火架构的基本单元 致力于生产高精度实用型量子退火机
-
7
Robust Self-Supervised LiDAR Odometry Via Representative Structure Discovery and 3D Inherent Error Modeling(RAL 2022& ICRA2022)Motivation激光雷达在自动驾驶中是个必要的传感器,但是激光雷达由于自身数据的稀疏...
-
6
OpenHarmony - ArkUI(TS)开发翻页时钟 作者:梁青松 2022-07-20 15:32:25 时钟翻页效果,用到四个Text组件,使用堆叠容器Stack,底层:用到两个裁剪过后的Text上下显示;顶层:也是用两个裁剪后的Text做动画...
-
5
作者:梁青松 本文正在参加星光计划3.0–夏日挑战赛 本项目基于
-
2
可编程 USB 转串口适配器开发板 DS1302 时钟芯片参数读取与修改 精选 原创 稳控科技
-
5
实时时钟(RTC)模块解决方案,助力智能照明系统实现自动化控制 2023-06-02 18:37:52 Micro Crystal瑞士微晶提供多种类型和规格的实时时钟(RTC)模块解决方案,以满足不同客户的需求。我们的技术团队能够根据客...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK