极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 162973|回复: 58

arduino学习笔记38 - Arduino + DS1307 RTC时钟模块与经典总结

[复制链接]
发表于 2012-4-25 16:19:22 | 显示全部楼层 |阅读模式
本帖最后由 Randy 于 2013-3-15 09:51 编辑


之前遇到了问题,也一直没头绪,没办法解决,经过查阅了相关的资料和论坛里朋友们的回答,于是今天经过测试把问题都解决掉了,这个问题,就是DS1307模块不能正常显示的问题,我手上有一块单独的DS1307模块,不像之前弘毅站长写的那个帖子,他里面还包含了DS18B20、EEPROM的功能在里面,我写这个帖子的目的是为了初学者手上只有DS1307而没有DS18b20或者是没有EEPROM模块的。这时候就是单纯的找这样的帖子,今天我花点时间来整理一下。毕竟总结才会让我记得深刻或者方便以后不记得了而查阅方便吧,希望老鸟们和菜鸟们都喜欢,不喜欢可以指出哦。毕竟我知识有限,慢慢学习吧!

进入正题:


描述:
是一款低功耗,具有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的要点,写下来介绍一下它的连接方法。




这个是我的实际产品,采用的是IIC接法方式,和Arduino连接是非常方便简单的!




连接方法是:

DS1307的SCL接Arduino(A5), SDA接Arduino(A4),剩下的就是VCC与GND对接起来即可,电压选择的是5V的。


连接好以后,我们来看一下代码,因为器件采用的是IIC通信方式,所以写代码也是比较容易得。

主要代码如下:
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>

  3. LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

  4. void setup()
  5. {
  6.   lcd.init();                      // initialize the lcd

  7.   // Print a message to the LCD.
  8.   lcd.backlight();
  9.   lcd.print("www.geeetech.com!");
  10. }

  11. void loop()
  12. {
  13. }
复制代码
通过以上的讲解,你可能对DS1307时钟芯片有一些大概的了解了,但是我们在使用过程中,难免会出现问题的情况,我自己也总结了一些方法,现在也写出来给大家看看,借鉴借鉴,如有不妥,务必提出,谢谢!

经过一段时间的总结,发现了问题所在,先告诉大家是怎么解决的。我试了25个板子,都可以进行工作了。

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

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

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

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


如果大家还有什么问题,可以回帖一起学习哦!分享快乐!


  
顺便把所用到的libraries也贴出来,目的是为了让大家不费劲的去找,爱上我们这样国内比较全面的论坛,谢谢!





这个是正确的库,之前那个少了一个.H文件,不好意思哈!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-12-22 10:33:31 | 显示全部楼层
zintiger 发表于 2012-12-21 20:18
用你的这个代码,编译上传成功,但运行时显示全是F,郁闷呢。

问题找到了,同时发生两个问题。一是接线问题,我用的是Leonardo板,本身就有SCL和SDA针,而之前的几乎所有例题都是针对UNO的,使用A4和A5接SCL,SDA。通过查阅官方网站上的手册,发现了这个问题。第二,硬件问题,满以为问题解决了,可还是不行。检查之:模块上的电池座做工粗糙些,拿下电池竟然OK了,原来是电池触点影响的,重新装,好了。希望我的经验能对网友有所帮助。
回复 支持 1 反对 0

使用道具 举报

发表于 2012-4-25 19:56:27 | 显示全部楼层
本帖最后由 wing 于 2012-4-25 19:58 编辑

sha fa~~~~~

上面您说到的"产品",您意思是您有这个东西出售?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-25 22:40:27 | 显示全部楼层
wing 发表于 2012-4-25 19:56
sha fa~~~~~

上面您说到的"产品",您意思是您有这个东西出售?

呵呵,你需要吗?这个淘宝上有销售的哦!
回复 支持 反对

使用道具 举报

发表于 2012-4-26 10:09:30 | 显示全部楼层
刚到这里来学习Arduino,可惜权限不够下载不到!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-4-26 14:46:23 | 显示全部楼层
xhm0924 发表于 2012-4-26 10:09
刚到这里来学习Arduino,可惜权限不够下载不到!

好像去掉了吧,你再看一下是否能下载,欢迎常驻本论坛,好东西还在后头呢!
回复 支持 反对

使用道具 举报

发表于 2012-5-10 15:02:51 | 显示全部楼层
最近正在惦记做个小时钟玩玩,谢谢分享
回复 支持 反对

使用道具 举报

发表于 2012-5-10 15:03:18 | 显示全部楼层
求 淘宝观摩地址~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-10 18:24:27 | 显示全部楼层
幻生幻灭 发表于 2012-5-10 15:03
求 淘宝观摩地址~

不是淘宝的,网站来的,这样就不怎么划算了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-18 22:26:25 | 显示全部楼层
bg7idj 发表于 2012-5-18 12:32
能给个用5110显示的程序?谢谢!

http://www.geek-workshop.com/forum.php?mod=viewthread&tid=713  这个帖子有两个程序你自己去琢磨吧!
回复 支持 反对

使用道具 举报

发表于 2012-5-20 20:08:32 | 显示全部楼层
有木有连接电路图啊, 是不是用1602 做显示的,如果是怎么调整时间,谢谢指教一二。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-20 22:29:44 | 显示全部楼层
本帖最后由 Randy 于 2012-5-20 22:30 编辑
acdc0616 发表于 2012-5-20 20:08
有木有连接电路图啊, 是不是用1602 做显示的,如果是怎么调整时间,谢谢指教一二。


DS1307的SCL接Arduino(A4), SDA接Arduino(A5),剩下的就是VCC与GND对接起来即可,电压选择的是5V的。不是用LCD1602显示的哦,是用arduino的串口监视窗口查看的,用LCD1602显示的话,不需要什么调整,你只需要添加1602的相应指令即可!
回复 支持 反对

使用道具 举报

发表于 2012-5-22 14:00:25 | 显示全部楼层
examples里面的东西貌似都不能直接编译, 错误提示  no matching function for call to 'DS1307:S1307(int, int)'
在Uno, Duemilanove, Mega均不行,请教原因。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-22 15:22:44 | 显示全部楼层
lionelg 发表于 2012-5-22 14:00
examples里面的东西貌似都不能直接编译, 错误提示  no matching function for call to 'DS1307:S1307(int ...



看我的编译是正常的呀,请问您是否把下载下来的整个文件夹放到了arduino IDE里的libraries了呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2012-5-22 17:42:28 | 显示全部楼层
放了,rtc编译正常,其他的不行,比如lcd1602的那个

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-5-22 18:39:39 | 显示全部楼层
lionelg 发表于 2012-5-22 17:42
放了,rtc编译正常,其他的不行,比如lcd1602的那个



已经解决,您可以重新下载库,进行编译看结果哦!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 20:34 , Processed in 0.046112 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表