0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实时时钟为微控制器系统增加了精确的计时功能

星星科技指导员 来源:ADI 作者:ADI 2023-02-21 10:09 次阅读

MAXQ610微控制器不包括电池备份的实时时钟(RTC),但1-Wire®网络的灵活性使得可以在任何基于MAXQ1904的应用中直接添加DS610 RTC i按钮®。与DS1904通信、设置时钟和控制值以及与原始秒数之间的时间值转换,都可以在MAXQ610的能力范围内,即使使用汇编语言也是如此。本应用笔记说明如何在基于MAXQ610的应用中增加RTC功能。显示了实现此应用程序的演示代码。本文的原理和技术同样适用于其它基于MAXQ®的微控制器,该微控制器具有能够驱动1-Wire通信协议的通用I/O (GPIO)引脚。

介绍

许多微控制器包括定时器电路,但只有少数微控制器包括电池备份实时时钟(RTC)。然而,许多应用需要RTC,使用1-Wire网络可以轻松添加RTC。本文介绍如何将支持1-Wire协议的RTC添加到基于微控制器的系统中。包含必要的代码。本文解释了同样适用于通用I/O (GPIO)引脚能够驱动1-Wire通信协议的微控制器的原理和技术。

设计目标

本演示展示了如何使用1-Wire接口实现以下操作的方法:

读取所选 RTC 的 64 位 ROM ID

启动和停止 RTC

读取 RTC 的当前值

将 RTC 设置为新值

该演示还将以可读格式显示当前 RTC 值,即从原始秒转换为年/月/日/时间格式。它将允许用户通过增加各种转换值(例如,年,月,日)来修改时钟值,而不是计算并输入秒的新值。

对于存储日期/时间值秒数的任何应用程序,我们必须选择一个零基线。对于此应用程序,该基线是 1 年 2000 月 12 日上午 00:00:00000000,其原始秒数为零 (<>h)。

系统设置

1-Wire接口是本文的基础。它允许您将支持1-Wire协议的RTC添加到任何微控制器中。本例将使用DS1904 RTC i按钮®。该应用使用MAXQ610微控制器,因为它可以很容易地与RTC通信,设置时钟和控制值,并在原始秒和相应的日历日期之间进行转换,即使使用汇编语言也是如此。

低功耗MAXQ610非常适合便携式应用,但缺少电池供电的RTC。但是,您可以使用其GPIO引脚之一将此微控制器连接到专用RTC。微控制器的演示代码是使用基于汇编的MAX-IDE环境编写的。设计工作在Maxim评估(EV)板MAXQ610-KIT上。源代码、项目文件和其他文档均可下载

运行应用程序

您需要以下硬件来运行演示代码:

MAXQ610评估板

5V 直流电源

串行到JTAG或USB到JTAG接口板

JTAG编程电缆(2×5带状电缆,带0.100in引脚连接器

直通 DB9 串行接口电缆

具有可用 COM 端口或 USB 转串行适配器的电脑

DS1904L-F5# RTC i按钮

DS9094F+ 通孔安装 i按钮夹

代码在MAXQ610评估板上运行。原型设计区域安装了一个 i 按钮夹 (DS9094F+),在 i 按钮夹中插入了一个 DS1904L-F5# RTC i按钮。然后从 i按钮夹进行连接:

将i按钮夹的接地引脚(与DS1904背面/未标记侧接触的夹顶侧标有“+”的引脚)连接到MAXQ610评估板上的GND测试点之一。

将iButton夹子的数据引脚(夹子内侧接触DS1904正面/标记侧的引脚)连接到MAXQ2评估板上的端口引脚P0.3 (接头引脚P1.610)。

您还需要以下软件:

MAX-IDE汇编语言开发环境,用于MAXQ微控制器

微控制器工具包 (MTK) 或其他具有“哑终端”模式的终端仿真器

MAX-IDE环境的最新安装包和文档可在MAXQ RISC微控制器页面找到。

RTC的数据通过1-Wire协议串行传输;只需要一个数据引线和一个接地回路。该 RTC 包含一个唯一的 64 位 ID,在 ROM 中出厂光刻,以及一个作为二进制计数器实现的 RTC/日历。它位于耐用的MicroCan包装中,可防尘,防潮和防震。该封装几乎可以安装在任何表面上,包括印刷电路板 (PCB) 和塑料钥匙扣。运行时,RTC 为使用微控制器的任何电子设备或嵌入式应用添加日历日期、时间和日期戳、秒表、小时计、间隔计时器和日志功能。

RTC 包含一个分辨率为 32 秒的 1 位计数器,可提供大约 136 年的范围。保持时钟运行所需的所有硬件,包括32kHz晶体和电池,都密封在内部。所得器件的使用寿命超过 10 年,在室温为 +2°C 时,时钟精度约为每月 ±25 分钟。 工作模式(停止或运行)和时钟计数器的值可通过1-Wire接口读取或写入。

驱动1-Wire网络

1-Wire接口通过单线和单接地回路提供电源和通信。这意味着单个端口引脚使微控制器能够与1-Wire传感器通信。为在1-Wire网络上工作开发了各种传感器和其他组件。

1-Wire网络采用单主机和多个从机,采用多点配置。时序要求非常灵活,允许所有从站以高达16kbps的通信速度与主站同步。每个1-Wire传感器都有一个全球唯一的64位ROM ID,因此1-Wire主站可以单独、精确地选择从机,无论它们在网络上的物理位置如何。

1-Wire线路以漏极开路模式工作:主站(以及从机,当需要输出时)通过将线路拉至地来指示“零”,或者通过让线路浮高来指示“一”。此操作通常通过线路和V之间连接的分立上拉电阻来实现抄送.端口引脚具有弱上拉模式的微控制器(如MAXQ610)可以简单地将端口引脚切换回该模式,让线路高悬;无需外部电阻。由于主机和从机将线路拉低且从不主动拉高,因此1-Wire网络以有线OR配置工作。这种方法可防止多个从站同时尝试在1-Wire总线上传输时发生线路冲突。

为了驱动1-Wire网络,微控制器使用软件在单个引脚上生成时隙。所有时隙均由1-Wire主机启动,因此当1-Wire线路未与从器件通信时,微控制器无需监控<>-Wire线路。

复位时隙宽约为 1ms。在前半段时段,主机(MAXQ610)将1-Wire线保持在低电平。时隙进行到一半时,它释放1-Wire线并使其漂浮在高处。线路上存在的任何1-Wire从站都会在后半段通过复位并拉下线路来响应。然后,从站产生存在脉冲,向主站指示一个或多个从站存在并准备通信。

写入时隙的宽度为60μs至120μs,由主机用于将位(0或1)传输到一个或多个从机。两种类型的写入时隙都从主站将线路拉低至少一微秒开始。为了传输 1,主站随后在剩余的时间段内释放线路(让它高浮动)。为了传输 0,主站将线路保持低电平,直到时隙结束。

读取时隙的宽度为60μs至120μs,由主机用于从从器件读取位(0或1)。时隙从主站将线路拉低至少一微秒开始。然后,主机释放线路,允许从机将其保持在低电平(0)或使其浮动到高处(1)。在时隙的中途,主机对线路进行采样,以从从机读取位值。

MAXQ610在12MHz频率下以每微秒约12个指令周期运行,因此在软件中使用端口引脚(P1.2)即可轻松执行标准的0-Wire协议。它以类似的方式实现读取时隙。注意,1-Wire总线上的所有数据字节首先传输最低有效位(LSB)。

1-Wire总线上的上拉电阻值根据网络上的器件数量而变化,但通常额定值为4kΩ至5kΩ。相反,MAXQ610端口引脚上的弱上拉电阻在15kΩ至40kΩ之间变化,取决于工作电压。为了避免1-Wire总线从低电平状态高电平浮动时出现过长的时间间隔,该代码会短暂驱动具有正常高电平状态的总线(通过P2.0),在将P2.0设置为正常的弱上拉模式之前,将总线“捕捉”到高电平状态。此操作不会对1-Wire总线造成中断,前提是避免了从机可能尝试将总线拉低的时间间隔。或者,您可以在1-Wire总线上放置一个物理外部上拉电阻,然后在标准低电平模式下驱动端口引脚(对于零状态),将端口引脚驱动至三态模式(对于高状态)。

启动、停止和设置时钟

由于1-Wire总线上可能存在多个1-Wire器件,因此与这些器件的通信分两个阶段进行。总线主控器首先选择一个1-Wire器件进行通信,然后发出通信信号²总线主控器发送复位脉冲后,1-Wire总线上的所有从器件将返回到默认的未选中状态。然后,总线主站可以使用几个命令来选择将在第二阶段与之通信的设备。以下命令使用与每个从设备关联的 64 位 ROM ID。所有1-Wire器件都支持这些命令。

跳过 ROM [CCh]

此单字节命令激活总线上的所有从设备。如果只有一个1-Wire器件,或者总线主控器需要向总线上的所有1-Wire器件发送相同的命令,则此功能非常有用。上述应用总线上只有一个器件(例如DS1904 RTC),因此总线主控器(例如MAXQ610微控制器)在读取或写入RTC之前始终使用此命令激活RTC。

读取只读存储器 [33小时]

此单字节命令激活总线上的所有从设备,并使它们将其64位ROM ID值传输回总线主站。由于它激活所有从设备,因此只能用于单从系统。否则,多个从设备在尝试同时传输其ROM ID时将导致数据冲突。由于总线上只有一个器件(DS1904),MAXQ610在开始时使用此命令读取DS1904的ROM ID。

匹配光盘 [55h]

此命令从1-Wire总线上的多个从机中选择一个从机。总线主站传输此命令后,通过传输要选择的从设备的64位ROM ID进行跟进。具有匹配ROM ID的器件通过进入活动状态进行响应,而总线上的所有其他器件进入非活动状态,等待总线主站的下一次1-Wire复位。(此处描述的应用程序中未使用此命令。

搜索 ROM [F0h]

此命令允许总线主站使用迭代发现过程来确定1-Wire总线上一个或多个从器件的ROM ID值³(此处描述的应用中未使用此命令。

读取和写入时钟和控制值

当总线主站使用跳过ROM或读取ROM命令选择1-Wire从器件(即RTC、DS1904)时,该器件即可接受特定于它的1-Wire命令。这些命令(图 1)详述如下:

读取时钟 [66h]

该命令允许总线主站读取DS1904的器件控制字节和4字节(32位)RTC值。器件控制字节确定驱动RTC的32kHz振荡器是运行还是停止。如下面的代码所示,只有一个命令同时读取设备控制字节和时钟值。即使不需要这两个值,也必须在设备输出时钟数据之前读取设备控制字节。

写入时钟 [99h]

作为读取时钟的补充,该命令允许总线主机为器件控制字节和DS1904 4字节时钟计数器设置新值。请注意,在新值生效之前,必须写入全部5个字节并发送一个1-Wire复位脉冲。上述应用代码包括单独设置器件控制字节和时钟值的例程,首先从DS5读取1904字节数据(1字节器件控制加上4字节时钟计数器),然后写回数据并进行适当的更改。

poYBAGP0J-mANaVXAABPsew4GJQ688.gif?imgver=1


图1.这些DS1904时钟功能命令取自数据资料

转换时间和日期值

若要将原始秒数转换为可打印形式,应用程序将分别确定每个日期和时间字段(年、月、日、小时、分钟和秒)的值,从最大的字段(年)开始向下工作:

秒≥(每年秒数),从秒数中减去(每年秒数)并增加年份。

秒≥(每月秒数),从秒数中减去(每月秒数)并增加月。

秒数≥(每天秒数),从秒数中减去(每天秒数)并增加“天”。

秒数≥(每小时秒数),从秒数中减去(每小时秒数)并增加小时数。

当秒≥ 60 时,从秒中减去 60 并增加分钟。

秒的剩余值是第二个字段。

即使总线主站为除法提供硬件支持,简单的除法运算也不足以计算前两个字段值(年和月)。这是因为每个字段单位的秒数会因闰年(影响年和月的值)和每月天数(仅影响月)的影响而变化。例如,从 2000 年(闰年)开始:

2000 年每年的秒数)= 366(天)× 24(小时/天)× 60(分钟/小时)× 60(秒/分钟)= 31,622,400 秒。

标准年份少一天(365 天),这会将秒/年更改为 (31,622,400 - 86,400) = 31,536,000。

因为每四年是闰年,所以我们按如下方式计算年份(请注意,此伪代码中的第 2、3 和 4 项是相同的)。

如果秒≥(每闰年的秒数),则从秒中减去(每闰年的秒数)并递增年份,否则停止。

如果“秒数”≥(每年秒数),请从“秒数”中减去(每年秒数)并递增“年份”,否则停止。

如果“秒数”≥(每年秒数),请从“秒数”中减去(每年秒数)并递增“年份”,否则停止。

如果“秒数”≥(每年秒数),请从“秒数”中减去(每年秒数)并递增“年份”,否则停止。

返回第 1 行。

“月份”字段的值以类似的方式计算:

如果秒≥(一月为秒),则从秒中减去(一月为秒)并递增月,否则停止。

如果秒≥(二月为秒),则从秒中减去(二月为秒)并递增月,否则停止。

如果秒≥(三月为秒),则从秒中减去(三月为秒)并递增月份,否则停止。

继续完成剩余的几个月。

运行演示

要运行演示,请加载并运行应用程序。然后使用DB9串行电缆将MAXQ610评估板从J1 SKT连接到PC上的COM1。启动 MTK(或其他终端模拟器)并以 1 波特打开 COM38400。初始输出应类似于以下内容:

@
ID: 24B91231000000B2  AC  18F83065

+   18F83065   Apr 10 2013, 02:15:01 pm 
+   18F83066   Apr 10 2013, 02:15:02 pm
+   18F83067   Apr 10 2013, 02:15:03 pm
+   18F83068   Apr 10 2013, 02:15:04 pm
+   18F83069   Apr 10 2013, 02:15:05 pm

第二行代码包含DS1904 ROM ID值(24B91231000000B2)、器件控制字节(AC)和当前时钟值(18F83065)。后续行中的“+”值表示时钟正在运行。时间值的刷新和显示频率与更改频率一样高,应为每秒一次。按“-”停止时钟。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6809

    浏览量

    147636
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112036
  • 电池
    +关注

    关注

    82

    文章

    9811

    浏览量

    123523
收藏 人收藏

    评论

    相关推荐

    实时时钟芯片应用设计时必须要考虑的事项

    实时时钟芯片(RTC)允许一个系统能同步或记录事件,给用户一个易理解的时间参考,这里分享一些实时时钟芯片的设计资料,以及工程师在应用设计时应为了避开设
    发表于 07-25 11:08 5251次阅读
    <b class='flag-5'>实时时钟</b>芯片应用设<b class='flag-5'>计时</b>必须要考虑的事项

    STM32 RTC实时时钟(一)

    STM32处理器内部集成了实时时钟控制器(RTC),因此在实现实时时钟功能时,无须外扩时钟芯片即可构建
    的头像 发表于 07-22 15:41 2858次阅读
    STM32 RTC<b class='flag-5'>实时时钟</b>(一)

    实时时钟芯片DS3231应用笔记,使用指南,FAQ全集

    0ppm的精度,最终达到提高时钟精度的目的。 实时时钟RTC DS3231与8051微控制器的接口本应用笔记介绍了DS3231与8051微控制器的连接方式,并提供了一个基本的接口程序。
    发表于 03-14 11:05

    PCF2127AT PCF2129AT TCXO提供微控制器应用的BBS

    计时,BBSPCF2127AT / PCF2129AT TCXO提供微控制器应用。 PCF212xAT是CMOS实时时钟(RTC)和日历IC,集成了温度补偿晶体(Xtal)振荡
    发表于 03-20 06:45

    定时中的实时时钟(RTC)

    实时时钟(RTC)是专用于维持一秒时基的计时器。此外,RTC通常用于在软件或硬件中跟踪时钟时间和日历日期。RTC的许多功能是非常专业的,是维持高精度和非常可靠的操作所必需的。
    发表于 09-03 22:47

    NuMicro™ 家族中那些系列的芯片支持实时时钟(RTC)控制器

    NUC100、NUC200、Nano100与NUC442/NUC472系列芯片支持的实时时钟控制器,其他系列芯片则无。 多数NuMicro™ 家族芯片的实时时钟控制器是不需要独立的电源
    发表于 06-27 06:08

    ST微控制器EMC设计指南

    对更高性能、复杂性和成本降低的持续需求要求半导体行业开发具有高密度设计技术和 更高的时钟频率。这从本质上增加了噪声发射和噪声灵敏度。因此,应用程序开发人员现在必须在 固件设计、PCB布局和系统级。本说明旨在解释ST
    发表于 10-10 06:58

    基于实时时钟芯片X1228的电源控制器设计

    基于实时时钟芯片X1228的电源控制器设计:介绍多功能实时时钟芯片X1228的内部结构、功能、特点以及在开放式实验室管理
    发表于 05-12 17:13 53次下载

    实时时钟芯片应用

    。另外,实时时钟芯片一般内置闰年补偿系统计时很准确。其采用备份电池供电,在系统断电时仍可以工作。实时时钟芯片的这些优点,使得其广泛应用于需
    发表于 03-16 15:31 14次下载
    <b class='flag-5'>实时时钟</b>芯片应用

    AutoVue增加了PCB什么功能

    增加了在PCB布局或原理图与3D之间进行交叉探测的功能
    的头像 发表于 08-14 08:12 2075次阅读

    实时时钟芯片M41T62主要特性介绍

    可直接由锂电池供电,工作电流仅为350nA。很多高整合度微控制器都有一个片上实时时钟,但是这些芯片的功能通常很有限,且需要增加一个外部晶振。与采用
    发表于 08-28 13:30 2110次阅读
    <b class='flag-5'>实时时钟</b>芯片M41T62主要特性介绍

    新的三端稳压器增加了功能

    新的三端稳压器增加了功能
    发表于 04-23 11:22 3次下载
    新的三端稳压器<b class='flag-5'>增加了</b><b class='flag-5'>功能</b>

    将硬件实时时钟 (RTC) 和篡改管理单元 (TAMP) 与 STM32 微控制器一起使用

    将硬件实时时钟 (RTC) 和篡改管理单元 (TAMP) 与 STM32 微控制器一起使用
    发表于 11-21 08:11 1次下载
    将硬件<b class='flag-5'>实时时钟</b> (RTC) 和篡改管理单元 (TAMP) 与 STM32 <b class='flag-5'>微控制器</b>一起使用

    AN4759_如何使用STM32L1和L4系列微控制器在低功耗模式下的硬件实时时钟

    AN4759_如何使用STM32L1和L4系列微控制器在低功耗模式下的硬件实时时钟
    发表于 11-21 17:07 0次下载
    AN4759_如何使用STM32L1和L4系列<b class='flag-5'>微控制器</b>在低功耗模式下的硬件<b class='flag-5'>实时时钟</b>

    业界转向MEMS以获得精确实时时钟

    实时时钟 (RTC) 不断发展,通过变得更小、更准确来跟上其使用和应用的变化。这种演变和适应背后的主要驱动力是一种新的谐振器技术——微机电系统(MEMS)。本应用笔记探讨了计时精度的进步,并探讨了更
    的头像 发表于 01-09 15:22 1002次阅读