arduino学习笔记38 - Arduino + DS1307 RTC时钟模块与经典总结
本帖最后由 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通信方式,所以写代码也是比较容易得。
主要代码如下:#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);// set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.print("www.geeetech.com!");
}
void loop()
{
}通过以上的讲解,你可能对DS1307时钟芯片有一些大概的了解了,但是我们在使用过程中,难免会出现问题的情况,我自己也总结了一些方法,现在也写出来给大家看看,借鉴借鉴,如有不妥,务必提出,谢谢!
经过一段时间的总结,发现了问题所在,先告诉大家是怎么解决的。我试了25个板子,都可以进行工作了。
我总结一下解决方法的可能性!
第一: 确保您DS1307模块上的4.7K电阻是否接入电路当中。
第二: 查看一下您的掉电给电的纽扣电池是否插入电池座里。(这个原因不是很明确,但是在我没插电池时,有些模块测试不行,一旦确保电路接入4.7K电阻和电池时,完全可以工作了)!
第三: 查看一下电路连接是否正确,电路连接很简单,4根线。(VCC、GND、SCL、SDA)
第四: 如果发现在IDE编译程序时,不能成功,那就是可能是自己的操作不当或者不会操作(比如是不会把express 放入libraries所导致编译的错误,方法请参照本论坛的相关帖子,谢谢)!
只要确保以上的步骤是正确的,那应该会没什么困难的进行工作,如果还有一个问题,那就是PCB板本身存在的问题咯。
如果大家还有什么问题,可以回帖一起学习哦!分享快乐!
顺便把所用到的libraries也贴出来,目的是为了让大家不费劲的去找,爱上我们这样国内比较全面的论坛,谢谢!
这个是正确的库,之前那个少了一个.H文件,不好意思哈!
zintiger 发表于 2012-12-21 20:18 static/image/common/back.gif
用你的这个代码,编译上传成功,但运行时显示全是F,郁闷呢。
问题找到了,同时发生两个问题。一是接线问题,我用的是Leonardo板,本身就有SCL和SDA针,而之前的几乎所有例题都是针对UNO的,使用A4和A5接SCL,SDA。通过查阅官方网站上的手册,发现了这个问题。第二,硬件问题,满以为问题解决了,可还是不行。检查之:模块上的电池座做工粗糙些,拿下电池竟然OK了,原来是电池触点影响的,重新装,好了。希望我的经验能对网友有所帮助。 本帖最后由 wing 于 2012-4-25 19:58 编辑
sha fa~~~~~
上面您说到的"产品",您意思是您有这个东西出售? wing 发表于 2012-4-25 19:56 static/image/common/back.gif
sha fa~~~~~
上面您说到的"产品",您意思是您有这个东西出售?
呵呵,你需要吗?这个淘宝上有销售的哦! 刚到这里来学习Arduino,可惜权限不够下载不到! xhm0924 发表于 2012-4-26 10:09 static/image/common/back.gif
刚到这里来学习Arduino,可惜权限不够下载不到!
好像去掉了吧,你再看一下是否能下载,欢迎常驻本论坛,好东西还在后头呢!;P 最近正在惦记做个小时钟玩玩,谢谢分享 求 淘宝观摩地址~ 幻生幻灭 发表于 2012-5-10 15:03 static/image/common/back.gif
求 淘宝观摩地址~
不是淘宝的,网站来的,这样就不怎么划算了! bg7idj 发表于 2012-5-18 12:32 static/image/common/back.gif
能给个用5110显示的程序?谢谢!
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=713这个帖子有两个程序你自己去琢磨吧! 有木有连接电路图啊, 是不是用1602 做显示的,如果是怎么调整时间,谢谢指教一二。 本帖最后由 Randy 于 2012-5-20 22:30 编辑
acdc0616 发表于 2012-5-20 20:08 static/image/common/back.gif
有木有连接电路图啊, 是不是用1602 做显示的,如果是怎么调整时间,谢谢指教一二。
DS1307的SCL接Arduino(A4), SDA接Arduino(A5),剩下的就是VCC与GND对接起来即可,电压选择的是5V的。不是用LCD1602显示的哦,是用arduino的串口监视窗口查看的,用LCD1602显示的话,不需要什么调整,你只需要添加1602的相应指令即可! examples里面的东西貌似都不能直接编译, 错误提示no matching function for call to 'DS1307::DS1307(int, int)'
在Uno, Duemilanove, Mega均不行,请教原因。 lionelg 发表于 2012-5-22 14:00 static/image/common/back.gif
examples里面的东西貌似都不能直接编译, 错误提示no matching function for call to 'DS1307:S1307(int ...
看我的编译是正常的呀,请问您是否把下载下来的整个文件夹放到了arduino IDE里的libraries了呢? 放了,rtc编译正常,其他的不行,比如lcd1602的那个
lionelg 发表于 2012-5-22 17:42 static/image/common/back.gif
放了,rtc编译正常,其他的不行,比如lcd1602的那个
已经解决,您可以重新下载库,进行编译看结果哦!