加载中…
个人资料
捷泰技术geeetech
捷泰技术geeetech
  • 博客等级:
  • 博客积分:0
  • 博客访问:135,451
  • 关注人气:86
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

Arduino Uno + DS1307 RTC时钟模块演示实验与经典总结

(2012-06-01 17:25:44)
标签:

存储区

方波

地址计数器

器件

rtc

本公司生产的DS1307是I2C总线接口的日历时钟芯片,片内有8个特殊寄存器和56B的SRAM,是一种低功耗BCD码的8引脚实时时钟芯片。具体可以显示年份,月份,星期,日期,时,分,秒,具有自动调节日期功能。可自动调速每月天数及闰年,具有自动掉电保护和上电复位功能。本产品在设计上采用经典的时钟电路,外部接上一个32..768KHz的晶体振荡器。可以利用51,AVR,ARDUINO,PIC,ARM等单片机控制此模块进行工作。

 

一、 实时时钟DS1307 介绍

描述:


是一款低功耗,具有56字节非失性RAM的全BCD码时钟日历实时时钟芯片,地址和数据通过两线双向的串行总线的传输,芯片可以提供秒,分,小时等信息,每一个月的天数能自动调整。并且有闰年补偿功能。AM/PM 标志位决定时钟工作于24小时或12小时模式,芯片有一个内置的电源感应电路,具有掉电检测和电池切换功能。

特点:

可对秒,时,分,每月的天数,月份,每周的天数进行记数,并具有闰年补偿功能。记年上线2100。   
56字节非失性的RAM   
两线串行接口   
可编程方波输出   
自动掉电检测和切换电路   
在电池备份模式下,功耗小于500nA   
工业级的工作温度: -40 到80   
8脚DIP和SOIC封装

主要参数:

存储器配置:64 x 8Bit   
电源电压范围:4.5V to 5.5V   
芯片封装类型:DIP   
针脚数:8   
工作温度范围:0°C to +70°C   
封装类型:DIP   
工作温度最低:0°C   
工作温度最高:70°C   
中断类型:全天时间   
器件标号:1307   
器件标记:DS1307+   
存储器容量:56 bytes   
存储器类型:RAM   
接口类型:Serial, I2C   
时钟频率:32.768kHz   
温度范围:商用   
特点:方波输出   
电压, Vcc 最大:5V   
电源电压 最大:5.5V   
电源电压 最小:4.5V   
类型:RTC   
芯片标号:1307   
表面安装器件:通孔安装   
输出数:1 

DS1307是低功耗、两线制串行读写接口、日历和时钟数据按BCD码存取的时钟/日历芯片。
它提供秒、分、小时、星期、日期、月和年等时钟日历数据。另外它还集成了如下几点功能:
56 字节掉电时电池保持的NV SRAM 数据存储器
可编程的方波信号输出
掉电检测和自动切换电池供电模式
DS1307 把8 个寄存器和56 字节的RAM 进行了统一编址,具体地址和寄器数据组织格
式如下表:
表 7-1 DS1307 内存组织结构
格 式
地址 数据
7 6 5 4 3 2 1 0
00 SECONDS CH 秒10 位 秒个位
01 MINUTES 0 分10 位 分个位
10HR
02 HOURS 0
12
24 A/P
小时
10 位
小时个位
03 DAY 0 0 0 0 0 星期
04 DATE 0 0 日期10 位 日期个位
05 MONTH 0 0 0 月10 位月个位
06 YEAR 年10 位 年个位
07 CONTROL OUT 0 0 SQWE 0 0 RS1 RS0
08
---
3fh
RAM
56 byte
用户数据存储区
在读写过程中DS1307 内部维护一个地址指针,通过写操作可对它负值,读和写每一字
节时自动加一,当指针越过DS1307 内部RAM 尾部时指针将返回到0 地址处。
DS1307 的时钟和日历数据按BCD 码存储。
方波信号输出功能:
方波信号输出功能从SQW/OUT 引脚输出设置频率的方波,CONTROL 寄存器用于控制
SQW/OUT 脚的输出。
BIT7(OUT):此位表示在方波输出被禁止时SQW/OUT 脚的逻辑电平,在SQWE=0
(输出禁止)时若OUT 为1 则SQL/OUT 脚为高电平, 反之亦然。
BIT4(SQWE)方波输出允许/禁止控制位,1 有效。
BIT0(RS0)、BIT1(RS1)用于设定输出波形的频率,如下表:
RS1 RS0 输出频率(Hz)
0 0 1
0 1 4096
1 0 8192
1 1 32768
要注意的是,00h 地址的第7 位为器件时钟允许位(CH),由于在在开始上电时内部RAM
内容随机,所以在初始化时将CH 位设零(时钟允许)是非常重要的。
DS1307 在TWI 总线上是个从器件,地址(SLA)固定为1101000。
DS1307 写操作– TWI 被控接收模式
主控器件按如下顺序将数据写入到DS1307 寄存器或内部RAM 中:
1.START 信号
2.写SLA+W(0xd0)字节,DS1307 应答(ACK)
3.写1 字节内存地址(在以下第四步写入的第一字节将存入到DS1307 内该地址处,DS1307
应答)
4.写数据(可写多个字节,每一字节写入后DS1307 内部地址计数器加一,DS1307 应答)
5.STOP 信号
DS1307 读操作– TWI 被控发送模式
主控器件按如下顺序将DS1307 寄存器或内部RAM 数据读取:
1、START 信号
2、写SLA+R(0xd1)字节,DS1307 应答(ACK)
3、读数据(可读多个字节,读取数据的DS1307 内部地址由上次写操作或读操作决定,读取
每一字节DS1307 内部地址计数器加一,主器件应答,读取最后一字节时主器件回应一NACK
信号)
4、STOP 信号

 

5、单片机与DS1307模块的电路连接原理图

Arduino <wbr>Uno <wbr>+ <wbr>DS1307 <wbr>RTC时钟模块演示实验与经典总结

6、实验所需的实物模块

Arduino <wbr>Uno <wbr>+ <wbr>DS1307 <wbr>RTC时钟模块演示实验与经典总结

7、下面我们可以看一下此模块与Arduino 连接时的顺序

Arduino <wbr>Uno <wbr>+ <wbr>DS1307 <wbr>RTC时钟模块演示实验与经典总结

连接方法是:

DS1307的SCL接Arduino(A4), SDA接Arduino(A5),剩下的就是VCC与GND对接起来即可,电压选择的是5V的。连接好以后,我们来看一下代码,因为器件采用的是IIC通信方式,所以写代码也是比较容易得。

 

8一个关于DS1307的测试程序:

 

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by  mattt on the Arduino forum and modified by D. Sjunnesson

void setup()
{
  Serial.begin(9600);

  RTC.stop();
  RTC.set(DS1307_SEC,1);        //set the seconds
  RTC.set(DS1307_MIN,20);     //set the minutes
  RTC.set(DS1307_HR,17);       //set the hours
  RTC.set(DS1307_DOW,4);       //set the day of the week
  RTC.set(DS1307_DATE,1);       //set the date
  RTC.set(DS1307_MTH,6);        //set the month
  RTC.set(DS1307_YR,12);         //set the year
  RTC.start();

}

void loop()
{

  Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
  Serial.print(":");
  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
  Serial.print(":");
  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
  Serial.print("      ");                 // some space for a more happy life
  Serial.print(RTC.get(DS1307_DATE,false));//read date
  Serial.print("/");
  Serial.print(RTC.get(DS1307_MTH,false));//read month
  Serial.print("/");
  Serial.print(RTC.get(DS1307_YR,false)); //read year
  Serial.println();

  delay(1000);

}

编译下载后,然后通过串口监视窗口可以看到结果是这样的。

 

Arduino <wbr>Uno <wbr>+ <wbr>DS1307 <wbr>RTC时钟模块演示实验与经典总结

 

下面是我自己在处理板子的时候总结的一些小经验,有帮助的话,回帖支持一下,谢谢!

第一: 确保您DS1307模块上的4.7K电阻是否接入电路当中。
第二:查看一下您的掉电给电的纽扣电池是否插入电池座里。(这个原因不是很明确,但是在我没插电池时,有些模块测试不行,一旦确保电路接入4.7K电阻和电池时,完全可以工作了)!

第三: 查看一下电路连接是否正确,电路连接很简单,4根线。(VCC、GND、SCL、SDA)

第四: 如果发现在IDE编译程序时,不能成功,那就是可能是自己的操作不当或者不会操作(比如是不会把express 放入libraries  所导致编译的错误,方法请参照本论坛的相关帖子,谢谢)!

只要确保以上的步骤是正确的,那应该会没什么困难的进行工作,如果还有一个问题,那就是PCB板本身存在的问题咯。

 

如果您想购买实验所需要的模块,请到此淘宝链接查看:http://item.taobao.com/item.htm?spm=a1z10.3.0.63.8Ylwat&id=18543256909&     谢谢!

0

阅读 评论 收藏 禁止转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有