Arduino与Proteus仿真实例-DS3232高精度实时时钟驱动仿真

DS3232高精度实时时钟驱动仿真

1、DS3232介绍

DS3232是一款低成本温度补偿晶体振荡器 (TCXO),具有非常精确的温度补偿集成实时时钟 (RTC) 和236 字节的电池供电 SRAM。此外,DS3232 集成了电池输入,并在设备的主电源中断时保持准确计时。晶体谐振器的集成提高了设备的长期精度,并减少了生产线上的零件数量。DS3232 可在商业和工业温度范围内使用,并采用行业标准的 20 引脚、300 密耳 SO 封装。
RTC 维护秒、分、小时、日、日期、月和年信息。对于少于 31 天的月份,月末的日期会自动调整,包括闰年的更正。时钟以 24 小时或 12 小时格式运行,并带有 AM/PM 指示器。提供了两个可编程的时间警报和一个可编程的方波输出。地址和数据通过 I2C 双向总线串行传输。精密温度补偿电压基准和比较器电路监控 VCC 的状态以检测电源故障、提供复位输出并在必要时自动切换到备用电源。此外,RST 引脚作为按钮输入进行监控,以产生 µP 复位。

在这里插入图片描述

DS3232的引脚功能如下:

引脚序号 名称 描述
1, 2, 7–14, 19 N.C. 无连接。 内部未连接。 必须接地。
3 32kHz 32kHz 推挽输出。 如果使用 EN32kHz = 0 或 BB32kHz = 0 禁用,则 32kHz 引脚的状态会低。
4 VCC 主电源的直流电源引脚。 该引脚应使用 0.1μF 至 1.0μF 的电容去耦。
5

I

N

T

\over INT

INT​/SQW | 低电平有效中断或方波输出。 该开漏引脚需要一个外部上拉电阻。 如果不使用,它可以保持打开状态。 该多功能引脚由控制寄存器 (0Eh) 中的 INTCN 位的状态决定。 当 INTCN 设置为逻辑 0 时,该引脚输出方波,其频率由 RS2 和 RS1 位决定。 当 INTCN 设置为逻辑 1 时,计时寄存器与任一闹钟寄存器之间的匹配会激活

I

N

T

\over INT

INT​/SQW 引脚(如果启用了闹钟)。 由于首次通电时 INTCN 位设置为逻辑 1,因此该引脚默认为中断输出且警报禁用。 上拉电压最高可达 5.5V,与 VCC 上的电压无关。 如果不使用,该引脚可以悬空。 |
| 6 |

R

S

T

\over RST

RST​ | 低电平有效复位。 该引脚是开漏输入/输出。 它指示VCC相对于VPF规范的状态。 当 VCC低于VPF时,

R

S

T

\over RST

RST​ 引脚被驱动为低电平。 当VCC超过VPF时,对于

R

S

T

\over RST

RST​,

R

S

T

\over RST

RST​ 引脚被驱动为高阻抗。 低电平有效、开漏输出与去抖动按钮输入功能相结合。 该引脚可以通过按钮复位请求激活。 它有一个内部50k标称值上拉电阻到 VCC。不应连接外部上拉电阻。 如果晶体振荡器被禁用,

R

S

T

\over RST

RST​ 将被绕过并且

R

S

T

\over RST

RST​ 立即变高。 |
| 15 | GND | 接地 |
| 16 |

V

B

A

T

V_{BAT}

VBAT​ | 备用电源输入。 当使用VBAT输入作为主电源的器件时,该引脚应使用 0.1μF 至 1.0μF 的低泄漏电容去耦。 当使用 VBAT 输入作为备用电源的器件时,不需要电容器。 如果不使用VBAT,则接地。 该设备已通过 UL 认证,可确保在与一次锂电池一起使用时防止反向充电。 |
| 17 | SDA | 串行数据输入/输出。 该引脚是 I2C 串行接口的数据输入/输出。 该开漏引脚需要一个外部上拉电阻。 上拉电压最高可达 5.5V,与VCC上的电压无关。 |
| 18,20 | SCL | 串行时钟输入。 该引脚是 I2C 串行接口的时钟输入,用于同步串行接口上的数据移动。 只需要连接到一个引脚。 另一个引脚必须连接到相同的信号或悬空。 无论 VCC 上的电压如何,该引脚都可以使用高达 5.5V 的电压。 |

DS3232典型的应用电路如下

在这里插入图片描述

2、仿真电路原理图

在这里插入图片描述

3、仿真代码实现

本次使用到如下开源库:

演示代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/\*\*
\* DS1307, DS3231 and DS3232 RTCs basic library
\*
\* Really tiny library to basic RTC functionality on Arduino.
\*
\* Supported features:
\* \* SQuare Wave Generator
\* \* Fixed output pin for DS1307
\* \* RAM for DS1307 and DS3232
\* \* temperature sensor for DS3231 and DS3232
\* \* Alarms (1 and 2) for DS3231 and DS3232
\* \* Power failure check for DS3231 and DS3232
\*
\* See uEEPROMLib for EEPROM support.
\*
\* @copyright Naguissa
\* @author Naguissa
\* @url https://github.com/Naguissa/uRTCLib
\* @url https://www.foroelectro.net/librerias-arduino-ide-f29/rtclib-arduino-libreria-simple-y-eficaz-para-rtc-y-t95.html
\* @email naguissa@foroelectro.net
\*/
#include "Arduino.h"
#include "uRTCLib.h"


// uRTCLib rtc;
uRTCLib rtc(0x68);


void setup() {
delay (2000);
Serial.begin(9600);
Serial.println("Serial OK");

#ifdef ARDUINO\_ARCH\_ESP8266
URTCLIB_WIRE.begin(0, 2); // D3 and D4 on ESP8266
#else
URTCLIB_WIRE.begin();
#endif

rtc.set(0, 42, 16, 6, 2, 5, 15);
// RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
}

void loop() {
rtc.refresh();

Serial.print("RTC DateTime: ");
Serial.print(rtc.year());
Serial.print('/');
Serial.print(rtc.month());
Serial.print('/');
Serial.print(rtc.day());

Serial.print(' ');

Serial.print(rtc.hour());
Serial.print(':');
Serial.print(rtc.minute());
Serial.print(':');
Serial.print(rtc.second());

Serial.print(" DOW: ");
Serial.print(rtc.dayOfWeek());

Serial.print(" - Temp: ");
Serial.print(rtc.temp() / 100);

Serial.println();

delay(1000);
}

4、仿真结果

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/121240610