DS1302菜鸟级讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VCC2 连接的 5v 是工作电压,VCC1 连接的 3v 是后备工作电压。充电寄存器就控制 VCC2 流向 VCC1 之间的“阻值”和“二极管的降压”。 在这里补充一些题外话:当 VCC2 有电源输入时,VCC1 是停止供电的,但同一时间也可以为 VCC1 进行细流充电(这要看 VCC1 是否连接着可充电电池)。一旦 VCC2 停止供电,VCC1 就开始工作, 与此同时细流充电就变成没有意义了。
RS 位组合的阻值选择表
细流公式
渴求细流的公式可以由上右表求出,阻值位 R1,diode drop 为二极管的降压,0.7v (一个二极管),1.4 (串联二极管)。不过我比较有爱,将他分成六个等级,为了编程更方便。
#define LV6 #define LV5 #define LV4 #define LV3 #define LV2 #define LV1
慧净小店:http://shop37031453.taobao.com 开发板超市:http://hi.baidu.com/hlmcu
慧争电子免费共享资料、欢迎复制共享、没有版权。 HJ-2G 多功能 AVR/51 二合一开发板学习笔记
注意
读一个字节和写一个字节有明显的不一样,先是写地址字节,然后再读数据字节,写地址字 节时上升沿有效,而读数据字节时下降沿有效,当然前提是 RST 信号必须拉高。写地址字 节和读数据字节同是 LSB 开始。
慧争电子免费共享资料、欢迎复制共享、没有版权。 HJ-2G 多功能 AVR/51 二合一开发板学习笔记
第 12 章 DS1302
12.1 概述 DS1302 实时时钟芯片我真的为她着迷呀。什么原因导致我为她着迷?自己接触 后您自然而然会明白的。本片笔记的手法与前几章写笔记的手法明显而外的不 同,因为介绍 DS1302 芯片不像是介绍单片机内部的资源一样,都有参考步骤可 言,但设置 DS1302 的方法太多样化了,让新手很不容易。
12.6 DS1302 的地址字节
DS1302 的地址字节,也可以作为命令字节。A0~A4 是用来选择地址的位,而 BIT0 是 制定该地址字节是写入还是读取,BIT6 是作为选择 RAM 还是 CLOCK 的区别。其实这 也没有什么困难的啦。
慧净小店:http://shop37031453.taobao.com 开发板超市:http://hi.baidu.com/hlmcu
再重申一次,读一个字节和写一个字节是不一样,在 写一个字节 的时候,AVR 的 IO 口一 直保持输出状态,相反的在 读一个字节的时候 AVR 的 IO 口先是输出状态,然后是输入状 态,且必须改变时钟信号的顺序。(补充一点题外话,我在编辑时序的时候,由于疏忽了一 点“小错误”,后果却是很严重。)
12.3 DS1302 时钟|日期|控制|爆发寄存器 在介绍 DS1302 的时序图中不都是,先地址字节,然后数据字节码?那么地址字 节和数据字节又有什么关系呢?(看看下面的图)
首先是按寄存器的地址字节,声明的宏定义。SEC 为开始,亦即 0x80,随后都是+2。宏定义 中的地址字节没有包括了,BIT0 写/读 的控制位。
//配置
#define CLKOFF 0x80
#define CLKON 0x00
#define T12
0x80
#define T24
0x00
#define LOCK 0x80
第十:爆发寄存器?(Burst Mode)地址字节:0x92 这个寄存器的功能可以用软件来模拟,无视他把。
12.4 DS1302 的 RAM DS1302 真的很厚道,还设立了 31 个字节的 RAM 空间,RAM 空间的开始地址字节是 0x94。RAM 空间可以让使用着任意发挥,你可以把它当做外存储器,但是前提 DS1302 必须一直供电。要访问任意空间也很简单,如下表:
12.8 DS1302 头文件的理解
自带来的 DS1302 头文件,没有自己定义的好。这一章笔记,主要是以头文件的方式解释。这 是我认为,新手最简单习得的办法。
//命令,地址 #define SEC 0x80 #define MIN 0x82 #define HOUR 0x84 #define DAY 0x86 #defineMONTH 0x88 #define WEEK 0x8A #define YEAR 0x8C #define CTRL 0x8E #define CHRG 0x90 #define BRUST 0xBE #define RAM 0xC0
第二:分钟寄存器 地址字节;0x82 八位寄存器,高四位记录十位 (BIT7 除外) ,低四位记录个位
第三:时钟寄存器 地址字节;0x84 八位寄存器,高四位记录十位 (BIT7,BIT6 除外) ,低四位记录个位。时钟寄存器的最 高位,决定了时间是以 24 小时制,还是 12 小时制。逻辑 1 为 12 小时致,逻辑 0 为 24 小时致。至于 24 小时致是默认的,为什么这么说呢?该解释与秒钟寄存器很相似,因 为每一次我们为时钟寄存器赋值的时候,由于时钟最大值是 23 小时(0x23),还是 11 小时(0x11),自然而然最高位我们都会赋 0 值。
#define UNLOCK 0x00
#define LV6 0xA5
#define LV5 0xA9
#define LV4 0xA6
#define LV3 0xAA
#define LV2 0xA7
#define LV1 0xAB
第七:年寄存器 地址字节:0x8C 八位寄存器,高四位记录十位,低四位记录个位。
第八:控制寄存器 地址字节:0x8E 八位寄存器,仅 BIT7 有用,BIT7 亦即 WP 位(Write Protect),逻辑 0 解除写保护,逻 辑 1 开启写保护。换一句话说,每一次写其他寄存器 WP 位必须先置 0。
我们一个一个寄存器来看吧:
第一:秒钟寄存器 地址字节;0x80 其实呀,我很佩服该芯片的设计人员,将芯片设计得很贴心,为什么呢?因为秒钟寄存 器,除了记 录秒钟以外,还控制了 DS1302 的时钟开关(晶振开始工作,或者晶振禁止 工作)。该位第 7 位 CH,当写入逻辑 1 时 DS1302 停止工作,时间的计时保持最后一次 的状态,如果写入逻辑 0 DS1302 则开始工作,时间从最后一次状态中继续计时。
慧争电子免费共享资料、欢迎复制共享、没有版权。 HJ-2G 多功能 AVR/51 二合一开发板学习笔记
Байду номын сангаас12.7 简单归纳
控制 DS1302 的是 RST 信号,拉低无效,拉高有效。而 DS1302 是串行输入,串行读入。写入 一个字节和读取一个字节的时序不同。写入一个字节都是上跳沿有效,读入一个字节先是上跳 沿有效,然后下降沿有效。地址字节也可称为命令字节,BIT6 控制了对 RAM/CLOCK 的访问 控制,而 BIT0 决定了地址|命令字节的写入还是读出的特性。DS1302 有 31 个字节的 RAM 空 间。除此之外,还有细流充电的功能。秒寄存器决定了 DS1302 开始工作与否,而时钟寄存 器有 12 小时制和 24 小时制之分。每当要写入任何一个寄存器|RAM 空间,写入控制寄存器的 WP 位必须置 0,解除写保护。
换成另一句话说,每一次写入秒钟,都会使 DS1302 工作,但这又是为什么呢?秒钟寄 存器是八位寄存器,高四位中的 BIT4~BIT6(BIT7 除外)记录十位,而低四位记录个 位。秒钟的计算最多也是 59,如果换成十六进制的话是 0x59。所以呢,最高位基本上 都是用不到,但我们每一次向秒钟寄存器进行初始化的时候,都会很自然的把最高位 BIT7 记录成 0,CH 位为逻辑 0,DS1302 就开始工作。
12.2 芯片介绍
VCC2 GND VCC1 SCLK I/O RST
工作电源 电源地 后备电源 时钟信号 数据输入输出 复位信号|片选信号
我在看视频教程时,老时觉得很奇怪的,为什么老师会把 RST 信号说成片选信 号呢?这也难怪的,因为在 DS1302 的时序图,RST 信号的角色有如片选信号。
众多的芯片中,往往最后的 PIN 都是工作电源的输入。可是 DS1302 却是很奇特 , VCC2 是工作电源的输入而 VCC1 却是后备电源的输入,或者是充电的电流的经 过,更详细的介绍在后面的内容会继续介绍。
慧净小店:http://shop37031453.taobao.com 开发板超市:http://hi.baidu.com/hlmcu
慧争电子免费共享资料、欢迎复制共享、没有版权。 HJ-2G 多功能 AVR/51 二合一开发板学习笔记
第九:充电寄存器?(Trickle Charge)地址字节:0x90 这是开启细流充电的寄存器,写保留。后面有详细的解释。
0xA5 0xA9 0xA6 0xAA 0xA7 0xAB
//0.7 降压,2k 阻值,2.15mA //1.4 降压,2k 阻值,1.80mA //0.7 降压,4k 阻值,1.07mA //1.7 降压,4k 阻值,0.90mA //0.7 降压,8k 阻值,0.50mA //1.4 降压,8k 阻值,0.45mA
地址字节 0x90+0 0x90+1 ... ... 0x90+31
第N个 第 0 个 RAM 第 1 个 RAM ... ... 第 31 个 RAM
嗯,使用 RAM 空间的方法很自由,自己发挥想象力吧。
12.5 细流充电 Trickle Charge 在前几个 Article,介绍了 DS1302 有后备供电的输入,亦即 VCC1 引脚,DS1302 允许 透过控制内部的充电寄存器,经 VCC2 向 VCC1 流入的充电细流(很小很小的电流)。 我们看一看 Hj-2G 的硬件布局吧:
第四:日寄存器 地址字节:0x86 八位寄存器,高四位记录十位(实际上仅有 BIT4~5 被使用),低四位记录个位。
第五:月寄存器 地址字节:0x88 八位寄存器,高四位记录十位(实际上仅有 BIT4 被使用),低四位记录个位。
第六:周寄存器 地址字节:0x8A 八位寄存器,仅有低四位被使用(BIT0~3),用来记录个位。
慧净小店:http://shop37031453.taobao.com 开发板超市:http://hi.baidu.com/hlmcu
慧争电子免费共享资料、欢迎复制共享、没有版权。 HJ-2G 多功能 AVR/51 二合一开发板学习笔记
上面的图说明了每个寄存器的定义和地址字节,而每个地址字节的 LSB 可以是 0 或者 1,逻辑 0 代 表写,逻辑 1 代表读。如果忽略每个地址字节的 LSB,十六进制则是 0x80+i,而 i 每一次累加 2。
慧净小店:http://shop37031453.taobao.com 开发板超市:http://hi.baidu.com/hlmcu
慧争电子免费共享资料、欢迎复制共享、没有版权。 HJ-2G 多功能 AVR/51 二合一开发板学习笔记
以上是 Trickle Charge 的概念图,充电控制寄存器的高四位(BIT7~4)是 TCS,Trickle Charger Select 位,仅 1010 才会开启充电功能。而 BIT3~2 是 DS,Diode Select 位,01 选择一个 diode,10 选择两 个 diode 串联。BIT1~0 是 RS,Resistor Select 位,两位组成了 3 个阻值的选择。浏览下表:
SCLK 是串行时钟信号的输入,而 I/O 则是串行数据输入输出。X1,X2 是晶振 32.768kHz 的输入,数据手册中有记录晶振的两端需无极电容,手册中的记录是 6pf,但是在众多的 AVR 学习板中会看到 23pf,27pf 的出现。
12.3 时序分析
以上是 DS1302 一个字节写入的时序图。第一个字节是地址字节,第二个字节是数据字节。 RST 信号必须拉高,否则数据的输入是无效的。换一句话说,RST 信号控制数据|时间信号 输入的开始和结束。 地址字节和数据字节的读取时上升沿有效,而且是由 LSB 开始读入。