极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19305|回复: 5

OCROBOT 实时时钟模块(RTC pcf8563)调试实录 ③ 时钟频率发生器的应用

[复制链接]
发表于 2015-4-1 11:10:37 | 显示全部楼层 |阅读模式
本帖最后由 迷你强 于 2015-4-1 14:27 编辑

       书接上文(上文传送门),上次我们用这个模块做了一个时钟,这都没什么,标准的RTC玩法,今天我们稍微玩点高级的,就是clockOut管脚的使用,从字面意思上就是时钟输出管脚嘛。其实人家本来就是,从这个管脚可以提供时钟信号的输出,基本上就是脉冲信号了,我们可以利用这个信号做点事情。
        信号输出的范围基本上是下面这几个频率
SQW_DISABLE     关闭模式   (如果你完全用不着时钟频率输出,就选择此项关闭,节约能量)
SQW_32KHZ       32KHZ输出(32.768KHZ)
SQW_1024HZ     1024HZ输出
SQW_32HZ         32HZ输出
SQW_1HZ           1HZ输出

就是上面这些种类,通过程序配置,根据实际情况,可以作为时钟源来用,当然我们今天讲的不是时钟源用法,是邪派玩法,就是将这个时钟信号作为外部中断信号来用,定时唤醒arduino来完成任务。
  
      怎么用呢?设计是这样的,我们先将模块配置成1hz输出模式,让其提供1HZ的脉冲信号,然后arduino配置成掉电休眠模式(最节电模式),收到中断唤醒信号后,启动执行一个周期继续休眠,这样的好处是,在经过低功耗设计的设备上,能以极低的功耗完成任务。

我们先配置模块



经典的I2C电路

下载代码
  1. #include <Wire.h>
  2. #include <Rtc_Pcf8563.h>
  3. Rtc_Pcf8563 rtc;
  4. void setup() {
  5. rtc.setSquareWave(SQW_1HZ);   //配置语句 1hz
  6.   pinMode(13,OUTPUT);
  7. }

  8. void loop() {
  9.   digitalWrite(13, HIGH);
  10.   delay(1000);
  11.     digitalWrite(13, LOW);
  12.   delay(1000);
  13. }
复制代码



很简单的程序,程序下载进去后,看到13号灯正常1秒闪烁,就说明已经配置好了。。非常非常简单
这时候如果您的万用表或者其他仪器带频率测量功能,就可以去测量板子上OUT管脚, 会有1hz的频率输出

这是后我们改变电路来模拟休眠唤醒

大家再下载一个新库-低功耗库



这个库提供了简单方便的休眠语法,大家有兴趣自己研究,我们将在以后经常给大家介绍用法

看代码

  1. #include "LowPower.h"

  2. // 定义外部中断脚
  3. const int wakeUpPin = 2;  

  4. void wakeUp()
  5. {
  6. }

  7. void setup()
  8. {
  9.     pinMode(wakeUpPin, INPUT);   
  10.     pinMode(13,OUTPUT);
  11. }

  12. void loop()
  13. {
  14.     // 启动外部中断,模式是从低到高变动
  15.     attachInterrupt(0, wakeUp, FALLING);

  16. /*这段程序是模拟你自己的功能性程序,比如传感器检测什么的*/
  17. digitalWrite(13, HIGH);
  18.   delay(100);              
  19.   digitalWrite(13, LOW);
  20. /**************************************************/

  21. //掉电休眠模式启动  
  22. LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
  23. }
复制代码




上面的程序很简单,配置好了中断,然后让13号led灯亮100毫秒,然后灭掉,整个系统随即休眠。并继续等待唤醒信号。

关于不清楚中断功能的读者,可以从下面的传送门去阅读相关教程
传送门



看图连线,去掉了I2C 然后连上了中断脚,与信号输出脚。 目前理论上时钟模块,会每秒钟唤醒单片机一次,让他闪一下灯,上电试试看吧~~~~





关于功耗的简单介绍

我们做实验用的mangoII这款控制板并不是针对低功耗设计的,上面有很多的稳压器件,还有很多的led灯。所以无论你怎么休眠都不能达到良好的功耗降低效果,如果使用我们随后推出的α系列主板的话,就可以达到非常好的功耗控制,基本上两节5号电池用一年不是梦。本实验只是从原理上介绍了低功耗及外部唤醒的一些知识,明天还有一篇

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2015-4-1 16:54:06 | 显示全部楼层
1秒钟太短,10分钟或1小时的怎么弄?
回复 支持 反对

使用道具 举报

发表于 2015-4-1 21:31:58 | 显示全部楼层
谢谢分享学习一下
回复 支持 反对

使用道具 举报

发表于 2015-4-1 23:43:19 | 显示全部楼层
根據蕊片資料,可用的觸發有CLKOUT與INT兩個端口
CLKOUT最長提供1HZ的輸出,超過這間隔就不適用
INT則是由鬧鈴與倒數計時兩種定時器控制
倒計時可以做到最大255分鐘

另外,DS3231提供兩個鬧鈴,理論上可以每小時觸發兩次
DS1302沒有這些功能,但是這三個都有1HZ輸出
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-2 00:09:52 | 显示全部楼层
huan 发表于 2015-4-1 16:54
1秒钟太短,10分钟或1小时的怎么弄?

欲知后事如何,且听下回分解
回复 支持 反对

使用道具 举报

发表于 2015-9-3 21:34:51 | 显示全部楼层
搞一套成品出来,放淘宝上。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

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

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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