【mcuclub】时钟模块DS1302

news/2024/11/19 0:46:37/

一、实物图

 

二、原理图

编号名称功能
1VCC2双供电配置中的主电源供应引脚。DS1302工作于 VCC1和VCC2中较大者.当VCC2比VCC1高0.2V 时,VCC2 给 DS1302供电。当VCC1比VCC2高时, VCC1给DS1302供电
2X132.768kHz晶振引脚
3X2
4GND电源地
5CE使能引脚。输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法
6I/O数据输入/输出引脚。三线接口时的双向数据线
7SCLK串行时钟引脚, 用来同步串行接口上的数据动作
8VCC1备用电源引脚。在使用涓流充电的系统中,这个管脚连接到可再充能量源

电路图中一些电阻电容作用:


VCC2引脚的电容主要用于滤波,而串联一个电阻可以有效防止电源对芯片的冲击。

晶振两端的电容主要用于起振的,如果不接,会导致时间快几秒,但是时间的精确性主要取决于晶振频率。

VCC1接的是一个纽扣电池,当VCC2的电源断电时,VCC1给芯片供电,这样时钟就会继续运行。

三个上拉电阻作用:

DS1302的数据脚(I/O)是双向的,如果只用单片机弱上拉,双向通讯不成功,可能是因为弱上拉时端口电平翻转慢,造成读数不准。

CE脚和SCLK脚是单向的,可以不用接上拉电阻,单片机弱上拉是可以的。

晶振为什么选取32.768kHz:

时钟系统中,秒是一个重要的时间单位,1秒正是1Hz,如果要提高时间精度,那这个1Hz必须要准确。我们知道,在数字世界里,只有0和1两种可能,下面看一个计算:2^15 = 32768 = 32.768K

2的15次方正好等于32768,反过来讲,如果要把32.768K的时钟频率经过15次分频的话,得到的频率正好是1Hz。所以时钟芯片内部经过15次分频就得到了1Hz,即1s。

三、简介

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

四、内部框图

 

五、通信协议

DS1302的通信是SPI的变异种类,它用了 SPI 的通信时序,但是通信的时候没有完全按照 SPI 的规则来。SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:

1、MOSI – 主器件数据输出,从器件数据输入

2、MISO – 主器件数据输入,从器件数据输出

3、SCLK – 时钟信号,由主器件产生

4、/CS – 从器件使能信号,由主器件控制

而DS1302是三种信号,其中I/O替代了MOSI和MISO,利用1根数据线进行数据输入和输出。

六、寄存器地址定义

 

该寄存器显示了时钟的地址信息,操作时往对应的地址写入值就行,也就是说如果想写入秒,往对应的寄存器写入0x80;表示小时的地址的第7位可选为12小时制还是24小时制,WP是写保护位

时钟暂停标志(CH):

秒寄存器的位7被定义为时钟暂停标志,当此位置1时,时钟振荡器暂停,DS1302进入漏电流小于100nA的低功耗备用模式;当此为置0时时钟开始,初始加电状态未定义。

写保护位(WP):

控制寄存器的位7是写保护位,前7位(位0至位6被强制为0且读取时总是读0,在任何对时钟或RAM的写操作以前,位7必须为0;当为高时,写保护位禁止任何寄存器的写操作,初始加电状态未定义;因此,在试图写器件之前应该清除WP位。

命令字:

命令字启动每一次数据传输时需要配置,第7位固定为1,如果是0则禁止对DS1302的写入,第6位写1则是读取或写入RAM区,写0则读取或写入时钟,第1~5位是地址,即要操作的地址,秒的地址是从0开始;第0位置1是read,对地址进行读取,置0是write,对地址进行写入

例如要读取月信息,则往命令字寄存器写0x89,如要写入月信息,则往命令字寄存器写0x88,对应了RTC左边的地址。

七、时序解析

 

CE输入驱动高启动所有的数据传输。CE输入有两个功能。首先,CE打开控制逻辑,允许访问的移位寄存器的地址/命令序列。其次,CE提供了一个终止单字节或多字节数据传输方法。

一个时钟周期是由一个下降沿之后的上升沿序列。对于数据传输而言,数据必须在有效的时钟的上升沿输入,在时钟的下降沿输出。如果CE为低,数据传输终止。

对于数据输入︰

开始的8个SCLK周期,输入写命令字节,数据字节在后8个SCLK周期的上升沿输入。数据输入位0开始。

代码如下:

void Ds1302_Write_Byte(uchar addr, uchar dat)

{

   uchar i;

   DS1302_CE = 1;                        //启动DS1302总线

   //写入目标地址:addr

   addr = addr & 0xFE;                 //最低位置0,寄存器0位为0时写,为1时读

   for(i = 0; i < 8; i++)

   {

      DS1302_IO = addr & (0x01 << i);

      DS1302_SCLK = 1;

      DS1302_SCLK = 0;

   }

   //写入数据:dat

   for(i = 0; i < 8; i++)

   {

      DS1302_IO = dat & (0x01 << i);

      DS1302_SCLK = 1;

      DS1302_SCLK = 0;

   }

   DS1302_CE = 0;                        //停止DS1302总线

}

对于数据输出︰

开始的8个SCLK周期,输入一个读命令字节,数据字节在后8个SCLK周期的下降沿输出。注意,第一个数据字节的第一个下降沿发生后,命令字的最后一位被写入。当CE仍为高时。如果还有额外的SCLK周期,DS1302将重新发送数据字节,这使DS1302具有连续突发读取的能力。

代码如下:

uchar Ds1302_Read_Byte(uchar addr)

{

   uchar i,dat = 0x00;

   DS1302_CE = 1;                        //启动DS1302总线

   //写入目标地址:addr

   addr = addr | 0x01;                 //最低位置1,寄存器0位为0时写,为1时读

   for(i = 0; i < 8; i++)

   {

      DS1302_IO = addr & (0x01 << i);

      DS1302_SCLK = 0;

      DS1302_SCLK = 1;

   }

   //输出数据:dat

   for(i = 0; i < 8; i++)

   {

      DS1302_SCLK = 1;

      DS1302_SCLK = 0;

      if(DS1302_IO)

       dat |= (0x01 << i);

   }

   DS1302_CE = 0;                        //停止DS1302总线

   DS1302_IO = 0;                        //读取后将IO设置为0,否则读出的数据会出错

   return dat;

}

八、BCD码

BCD码(Binary Coded Decimal‎),用4位二进制数来表示1位十进制数

例:0001 0011表示13,1000 0101表示85,0001 1010不合法

在十六进制中的体现:0x13表示13,0x85表示85,0x1A不合法

BCD码转十进制:DEC=BCD/16 * 10+BCD%16; (2位BCD)

十进制转BCD码:BCD=DEC/10 * 16+DEC%10; (2位BCD)

因为时钟芯片内存放的是BCD码,所以直接读取出来的话会不准确,要转为十进制来显示。

九、流程设计

首先初始化引脚,然后初始化DS1302,设置CE为高,设置是读操作还是写操作,然后写入8位目标地址,接下来如果是写操作,则写入数据,如果是读操作,则读取数据,最后设置CE为低,结束操作。


http://www.ppmy.cn/news/894756.html

相关文章

STM32F103操作DS1302时钟芯片串口显示(标准库和HAL库)

目录 DS1302的性能指标 DS1302的寄存器及片内RAM 标准库实现 HAL库实现 源码链接 单片机型号&#xff1a;STM32F103C8T6 在日常生活中&#xff0c;很多情况下会需要使用时间&#xff0c;单片机中虽然也是有定时器但并不能较为准备的实现计时功能&#xff0c;而且定时计时…

高等数学❤️第一章~第二节~极限❤️极限的概念与性质~函数极限(自变量趋于有限值时的极限)详解

【精讲】高等数学中函数极限&#xff1a;自变量趋于有限值时的极限 博主&#xff1a;命运之光的主页 专栏&#xff1a;高等数学 目录 【精讲】高等数学中函数极限&#xff1a;自变量趋于有限值时的极限 导言 二、函数极限自变量趋于有限值的判定方法 三、函数极限自变量趋于…

【LLM】Langchain使用[三](基于文档的问答)

文章目录 一、基于文档的问答1. 创建向量存储2. 不同类型的chain链 二、本地知识库问答Reference 一、基于文档的问答 1. 创建向量存储 使用Dock Array内存搜索向量存储&#xff0c;作为一个内存向量存储&#xff0c;不需要连接外部数据库创建向量存储&#xff1a;导入一个索…

MySQL8.0 msi 版本安装教程

MySQL8.0 msi 版本安装教程 MySQL8.0 msi 版本安装教程 1> 官网下载安装包 MySQL官网下载地址如下&#xff1a;https://dev.mysql.com/downloads/mysql/ 说明&#xff1a; 如果需要8.0版本下的其他小版本&#xff0c;可以参考下图&#xff1a; 如需5.7及其之前版本&#…

mysql-installer-community.msi新手安装教程(详细图文)

安装 先去官网下载需要的msi,在这放出官网下载地址 这里我具体以5.7.25.msi为安装例子,除了最新版安装界面有些变动以往的都是差不多的。 过去的版本在这里 打开5.7的下载页面,点击图片进入到5.7版本的msi下载页面 第一个是在线安装,安装时需要连接网络 第二个离线,我们…

MongoDB数据库和可视化工具Studio 3T的安装及问题调试

目录 1.MongoDB的安装及测试 2.可视化工具Studio 3T的安装及测试 1.MongoDB的安装及测试 1.官网下载数据库(.msi格式文件&#xff0c;并非.zip文件) https://www.mongodb.com/ 2.按照提示一步步安装&#xff0c;注意&#xff1a;不要勾选“Install MongoDB Compass”,否…

【Unity面试篇】Unity 面试题总结甄选 |Unity进阶篇 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点&#xff1a;&#x1f431;‍&#x1f3cd;2023年Unity面试题大全&#xff0c;共十万字面试题总结【收藏一篇足够面试&#xff0c;持续更新】为了方便大家可以重点复习某个模块&#xff0c;所以将各方面的知识点进行了拆分并更新整理了新…

Java设计模式之结构型-享元模式(UML类图+案例分析)

目录 一、基本概念 二、UML类图 三、角色设计 四、案例分析 1、基本实现 2、游戏角色 五、总结 一、基本概念 享元模式是一种结构型设计模式&#xff0c;主要用于减少创建大量相似对象所占用的内存&#xff0c;它通过共享技术来有效支持大量细粒度的对象。 二、UML类图…