|
本帖最后由 迷你强 于 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电路
下载代码 - #include <Wire.h>
- #include <Rtc_Pcf8563.h>
- Rtc_Pcf8563 rtc;
- void setup() {
- rtc.setSquareWave(SQW_1HZ); //配置语句 1hz
- pinMode(13,OUTPUT);
- }
- void loop() {
- digitalWrite(13, HIGH);
- delay(1000);
- digitalWrite(13, LOW);
- delay(1000);
- }
复制代码
很简单的程序,程序下载进去后,看到13号灯正常1秒闪烁,就说明已经配置好了。。非常非常简单
这时候如果您的万用表或者其他仪器带频率测量功能,就可以去测量板子上OUT管脚, 会有1hz的频率输出
这是后我们改变电路来模拟休眠唤醒
大家再下载一个新库-低功耗库
这个库提供了简单方便的休眠语法,大家有兴趣自己研究,我们将在以后经常给大家介绍用法
看代码 - #include "LowPower.h"
- // 定义外部中断脚
- const int wakeUpPin = 2;
- void wakeUp()
- {
- }
- void setup()
- {
- pinMode(wakeUpPin, INPUT);
- pinMode(13,OUTPUT);
- }
- void loop()
- {
- // 启动外部中断,模式是从低到高变动
- attachInterrupt(0, wakeUp, FALLING);
- /*这段程序是模拟你自己的功能性程序,比如传感器检测什么的*/
- digitalWrite(13, HIGH);
- delay(100);
- digitalWrite(13, LOW);
- /**************************************************/
- //掉电休眠模式启动
- LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
- }
复制代码
上面的程序很简单,配置好了中断,然后让13号led灯亮100毫秒,然后灭掉,整个系统随即休眠。并继续等待唤醒信号。
关于不清楚中断功能的读者,可以从下面的传送门去阅读相关教程
传送门
看图连线,去掉了I2C 然后连上了中断脚,与信号输出脚。 目前理论上时钟模块,会每秒钟唤醒单片机一次,让他闪一下灯,上电试试看吧~~~~
关于功耗的简单介绍
我们做实验用的mangoII这款控制板并不是针对低功耗设计的,上面有很多的稳压器件,还有很多的led灯。所以无论你怎么休眠都不能达到良好的功耗降低效果,如果使用我们随后推出的α系列主板的话,就可以达到非常好的功耗控制,基本上两节5号电池用一年不是梦。本实验只是从原理上介绍了低功耗及外部唤醒的一些知识,明天还有一篇 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|