立即注册 登录
返回首页

uid:155462的个人空间

日志

实时时钟控制

已有 505 次阅读2016-12-17 17:54 |个人分类:arduino| 时钟


摘要:随着使用正确的设备初始化和代码序列的精确计时和时钟闹钟操作变得更易于管理的任务。 

介绍
当我们读到一个时钟,因为我们都从小做,我们的眼睛“拍摄快照”目前的显示值。有人已经通过重新调整该显示器为您可读性的努力了。当微处理器需要访问实时时钟,最新的寄存器值的“快照”,必须重新定位成一个时间序列计算,我们都比较熟悉。
通过使用合适的设备初始化和代码序列的精确计时和时钟闹钟操作变得更易于管理的任务。
设备初始化
在第一功率应用到一个新的时钟分量,需要我的序列/ O指令可基于该特定的成分而改变。请参考寄存器结构的设备规范。作为一般准则,并假定电源稳定和I / O端口是可操作的,则建议:
  1. 允许写入芯片(如果一个软件写保护选项存在)
  2. 启用32kHz的RTC振荡器(如果没有自动启动)
  3. 定义硬件中断输出配置(多个)(如适用)
  4. 加载初始计数器值
使书写到RTC:这种独特的功能加入到某些组件设计(例如,DS1305),以防止意外的时钟变化。请参考写保护(WP)位解释产品说明书。
启用RTC振荡器:在一些传统设计(如DS12887DS1307),RTC振荡器不会自动启动在第一次开机。此操作功能是为了防止运输/储存期间电池的消耗,以及必须通过I / O被启用。与外观设计EOSC在控制寄存器位包括一个内置振荡器自动启动功能,在第一动力应用程序执行。在一些其它设计像DS1685,它也可能是必要的,以确定该晶体的负载电容设定为适当的振荡器的操作。
检查'OSF“:有些RTC组件包含一个振荡器停止标志(OSF),允许用户通过定期I / O监控振荡器工作。在初次上电,OSF将被设置。使振荡器,清晰OSF,然后定期验证OSF位保持逻辑0后。
OSF可以成为基于任何这些条件逻辑1:
  1. 功率的初始应用
  2. 在VCC和VBAT电压不足以维持振荡器运行
  3. EOSC位被设置为1,在停止振
  4. 在晶体的外部影响(泄漏,耦合等)
定义中断输出(多个):取决于特定成分和期望的应用,输出功能的定义,现在应该执行,以防止从被发送到微处理器意外信号。实时报警(S),看门狗中断,方波输出频率等组件编程选项,应选择以建立所需引脚/信号调理。
在具有实时报警装置,每个闹钟寄存器应首先被写入00H(如果二进制编码的十进制(BCD))或FFH(如二进制),以防止任何意外的匹配/中断产生。报警寄存器不出厂初始化,以及相关的报警标志可以在任何时间报警寄存器内容匹配实时计数出现。
加载初始计数器(时间)值:再次参照该产品的说明书和寄存器映射,计数器加载或读的顺序应执行从至少显著计数到最显著计数图1示出了计数器取向并进行功能的典型的BCD格式的实时时钟分量。
RTC计数器链。
图1. RTC计数器链。
每当写入RTC,至少可以显著计数器字节任何写复位内部1Hz的链条,允许任何计时计数器位之前,用户一秒钟之后递增。此1Hz的复位动作,以及同步技术,在时间同步部将进一步详细说明。
为了方便使用,寄存器定向在提升重量和地址,以便您的编程方便。
BCD格式
百分之一秒(如果是这样配置)

分钟
小时
天周的
日期
月份

世纪(如果配备)
二进制(秒)
00H - > FFH = 0 - > 255
00H - > FFH = 256 - > 65535
00H - > FFH = 65536 - > 16777215
00H - > FFH = 16777216 - > 4294967295。
时间同步
对于一些用户来说,设置时钟(写入RTC)的简单的动作可以完成在该应用程序的实时时钟的计时精度的目标。取决于初始化我们的设备时,所采取的照顾,当针对由该应用程序所控制的其他任务的执行重达几秒钟的初始时钟设定错误可以被认为是可接受的。
在其它应用中,可能期望的实时时钟与一个已知的时间标准同步,像WWV 1如前所述,写入至少显著计数器字节复位1Hz的计时链。图2说明了如何使用我重置1Hz的倒计时链2 C写的顺序秒注册的DS1340从机地址字节(D0H),注册地址(00H),以及“最新秒钟值'(03H),被传输到组件。异步1Hz的方波输出的两个有代表性的例子示来说明得到调整。
I / O启动时钟同步(如图I2C格式)。
图2. I / O启动时钟同步(我2所示的C格式)。
在数据字节(SCL 27日上升沿)的从机的应答,从同时1)拉SDA低到ACK接收数据字节,2)1Hz的倒计时链复位,3)新秒钟值(03H在图2的例子)被插入秒寄存器传送。
在第一个1Hz的SQW波形时,1Hz的信号是逻辑1的ACK时有发生。SQW被立即拉低。在ACK之后正是0.5秒时,SQW输出转换为高。正是ACK后1.0秒SQW被拉低,表示1秒已过因为写完成。读秒立即注册导致04H的内容。
在第二1Hz的SQW图,1Hz的信号是逻辑0时发生ACK,这样SQW信号保持低电平,直到该ACK,那里的1Hz的输出将变为高电平后,正是0.5秒正是ACK后1.0秒SQW被再次拉低,表明1秒已过因为写完成。读秒立即注册导致04H的内容。
对于产品3线或SPI I / O,等效触发图2中的第27 SCL上升沿或者是SCLK或芯片使能的下一个存在的过渡(CE或CS,使用输入管脚命名约定为准) 。
对于产品幻影的I / O,等效触发到图2中的第27 SCL上升沿是第72次写周期的串行数据包(包括64周期模式识别)的终止。
对于产品的字节宽I / O,相当于触发图2中的第27 SCL的上升沿将向秒寄存器是写周期的结束。
使用时间日历闹钟
上被一个或多个实时报警电路装置中,用户可以请求或者周期性或非周期性的中断事件在一些预定的时间发生。警报可以提前所需的事件的被设置为30天。
报警的编程建议使用一些简单的规则:
  1. 初始化所有报警寄存器到已知状态一次(报警不POR复位)
  2. 当启用报警电路不会改变实时时钟寄存器设置
  3. 启用了报警电路时,切勿更改报警寄存器设置
  4. 清除相关的报警标志之前使该报警器(或者你可以创建一个过早中断)
最常见的周期性的中断是“每日闹钟”,定在上午5:30,完全独立日历内容的激活。要忽略DAY /数据寄存器,我们将利用报警面具。
控制= 04H;上定义振荡器INT / SQW输出功能,报警关闭 报警1秒= 00H;0秒 报警1分钟= 30小时;30分钟 报警1小时= 45小时;凌晨5点在12小时模式 报警1日/日期= 80H;报警掩码设置成匹配“小时,分钟和秒” 状态= 00H;清除这两个报警标志 控制= 05H;立即启用报警1(A1IE = 1)
上午5:30下一次出现时,INT / SQW引脚将断言。
要清除中断,留在同一时间为第二天上午启用报警,清除相关的报警标志(A1F)。
要清除中断,并禁止任何未来的警报,清除相关警报启用(A1IE)。
当相关的报警被禁止,那些报警寄存器可以用于通用数据的存储。
结论
组件初始化程序,正确排序,应包括所有的RTC的硬件功能,对系统稳定运行所需的定义。如果需要的话,实时时钟也可以同步到外部时间的基础上,并且该同步的一个过程已经概述。另外,选择使用实时时钟的报警已被列入,重点对的I / O指令执行顺序。
参考
  1. WWV是标准的美国国家与技术研究所(NIST)HF波段收音机在Fort Collins站,科罗拉多州的呼号。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部