在处理器控制的系统中,功耗与处理器的时钟速度成正比。如果处理器上的计算负载很小,则大部分功率都会被浪费。将处理器速度调制到尽可能慢的频率,同时保持执行手头任务的最低计算能力可以减少这种浪费。本应用笔记描述了使用DS1077通过PC主机控制来控制8051型微处理器的时钟速度。


介绍

DS1077为固态CMOS振荡器,能够产生8kHz至133kHz的频率 33.2MHz. 它可以用作固定频率的独立振荡器,或用作处理器控制的频率 发电机。两个同步振荡器输出的频率可由用户调节,子倍数为 主频率通过使用两个片上可编程预分频器和分频器。频率和 模式设置可“即时”配置,并使用1077线串行接口存储在EEPROM中,该接口可以 在一条2线总线上最多可容纳0个DS1。两个数字控制输入,CTRL1077 和 CTRL3 也是 能够控制频率或模式。此外,DS1077L是4V版本的 DS87,能够产生66.66kHz至3.5MHz的频率。在其余部分 除非另有说明,否则DS1077的1077V和<>V版本均参考 作为DS<>。

本应用笔记将举例说明DS1077的使用实例。展示DS1077的使用方法代替晶体来为 8051 微控制器和微芯片PIC 提供时钟™微控制器。这 应用笔记还将说明如何在单条1077线总线上使用多个DS2。最后,示例 8051 包括固件,以展示如何实现2线主站以及下层通信与总线上每个DS1077通信的例程。

系统概述

图1中的参考原理图显示了两个相互独立的系统。两个系统 工作频率由DS1077产生。在此示例中,尽管每个系统都独立于 它们都由一个公共的2线主控器控制。该 2 线主站可以是更大主机的一部分 需要控制其子系统的系统。主站可以决定降低工作频率 目前不需要的子系统,以节省电力,在某些情况下减少热量,或者可能甚至减少电磁干扰。有时使用DS1077可以避免高频运行 整个大型系统的时钟,如背板上的时钟。分发相对容易和安全得多低频 2 线总线。同样,也可以设想使用DS1077来减少系统。工作频率而不是微控制器(许多微型处理器会降低其速度甚至进入低电平 当前睡眠模式),因为DS1077可以降低整个系统的频率,而不仅仅是微型独自。综上所述,使用DS1077的应用可能很大很复杂,但为此,应用可能很复杂。 应用笔记中,示例原理图已大大简化,旨在说明几点。它显示了公共总线上的多个DS1077,也显示了DS1077可以直接驱动一些流行的微控制器。

使用DS1077作为系统时钟

在参考原理图中,U1(DS1077Z-125)用于生成U3(8051 微控制器。用于开发附录 A 中发现的固件的特定 8051 是 DS87C520.DS87C520的工作频率高达33MHz。由于U1是125MHz版本 在DS1077中,OUT0只能产生125MHz、62.5MHz、31.025MHz和15.625MHz。虽然这会 如果我们的应用只需要全速和半速(使用66MHz版本的DS1077),那就没问题了, 但同样,对于固件的开发,希望将微控制器一直运行到千赫范围。OUT0 没有分频器,只有一个除以 1、2、4 或 8 的预分频器。另一方面,除了预分频器之外,OUT1 还有一个分频器,可以将频率进一步除以 2 到 1025。因此,选择了 OUT1 来为 8051 计时。然后,OUT0 仍可用于为系统的其他组件提供时钟。为了简单起见,没有使用 CTRL0 和 CTRL1,而是与 GND 相关联。然而 请注意,如果使用 CTRL0 和 CTRL1 输入禁用输出或输入,则必须小心 省电模式,因为微控制器的晶体输入浮动会导致不必要的振荡或 错误时钟。

ccoovdvuszt.gif
图1.参考原理图。

参考原理图所示的第二个系统为U2,DS1077为U1的OSC4引脚提供时钟。 PIC 微控制器。同样,DS1077代替固定频率晶体。此处使用的事先知情同意 示例可以工作在高达 20MHz 的频率,因此与 8051 示例一样,使用 OUT1 以利用 的 2-1025 分频器,仅由 OUT1 提供。OUT0 可由 系统。但是,如果未使用任一输出,因此未连接,则明智的做法是禁用 使用相应的 CTRL 引脚未使用的输出。这将导致供应明显减少电流,以及降低不必要的EMI辐射的可能性。虽然,与 8051 系统一样, 简单性 CTRL0 和 CTRL1 未使用并接地。

像往常一样,提供足够的解耦很重要。同样,重要的是 去耦电容C1和C2具有良好的高频性能,并且物理位置很近尽可能使用短PCB走线,使每个DS1077都走线。

使用DS1077优于晶体的优势

DS1077可能优于晶体有几个重要原因。一、DS1077 频率可以改变。实际上,它可以即时更改,甚至可以禁用。其次,DS1077提供 双路、同步、可单独控制的输出。此外,DS1077 无需使用杂乱的油箱晶体在其谐波频率之一下工作时的电路(对于高于30MHz的晶体)。最后, DS1077比晶体更不容易受到振动的影响。

控制DS1077

DS1077可用于固定频率应用和变频应用。在固定频率下 应用中,不需要2线主站,CTRL输入是可选的。但对于 需要控制频率或模式、CTRL 输入和/或 2 线主站的应用必须 根据所需的灵活性使用。

CTRL0 和 CTRL1 输入

如果应用需要指示DS1077进入关断模式以节省能源,或者如果 应用程序想要关闭(三态)振荡器输出,则必须使用 CTRL0 和 CTRL1。 虽然没有特定的2线命令进入省电模式或禁用输出,但有 可以在固件中完成的一些技巧以达到相同的结果。例如,当 CTRL 输入是 在已知状态下,可以设置或清除 MUX寄存器中的相应位,以打开和关闭所需的 功能。

2线接口

当应用需要生成除 1、2、4 或 8 以外的频率时,则 2 线接口是必需的。与现有2线总线的接口很简单。只需连接SDA和SCL(和GND)。确保 总线某处包含总线上拉电阻。这些是参考原理图中的R1和R2。 虽然本例中(找元器件现货上唯样商城)使用了4.7kΩ电阻,但可能需要根据总线进行调整。电容、总线上的设备数量以及所需的通信速度。但是,4.7kΩ 会 适用于大多数应用程序。如果没有现有的总线,则可以使用微型创建一个总线。附录 A 中提供了 8051 微控制器的示例固件。此外,如果 2 线接口不会 在应用中使用,确保SDA和SCL绑定到明确定义的逻辑电平,而不是离开 浮动。

请注意,在本例中,同一总线上有多个DS1077。为了2线主站为了与每个DS1077单独通信,每个DS8都需要有一个唯一的地址。总线中的三位寄存器允许总线上同时最多连接1077个DS1。U000被编程为地址为“2”,而U001 被编程为地址为“2”。有关1077线通信的示例,请参考DS1077或 DS<>L数据资料以及附录A中列出的固件。

DS1077控制2线主机

读到这里,人们可能想知道为什么在示例应用中使用额外的2线主站。 当有两个精细的微控制器能够生成所需的2线协议时 与DS1077通信。虽然可以做到,但很危险,必须格外小心。第一个所有,当微控制器的频率发生变化时,2线例程的时序也会发生变化。此外,就像 对于 8051 示例和 PIC 示例,某些微器件可能具有最低工作频率规格 添加到最大频率。最后,禁用输出是不可能的,因为微会不再计时,因此无法再发出命令以重新启用振荡器。但如果 必须这样做,检查正在使用的微控制器的数据表非常重要。

固件

基于 8051 的系统的固件包含在附录 A 中。它旨在展示一个较低的示例需要与DS1077通信的层例程。但是,请注意,固件实现了开环 系统。闭环非常特定于应用程序。但为了说明示例 与DS1077通信,基于菜单的开环示例是有益的。一个PC终端程序是 用于发出DS1077s命令。然后可以在固件中查找命令以准确查看 正在执行什么。基本菜单命令如下:

读取选定的DS1077并显示寄存器
编辑多路复用字
编辑 DIV 字词
编辑总线字
写入DS1077,地址为“000”
写入DS1077,地址为“000”
写入DS1077,地址为“001”
写入DS1077,地址为“001”
更改固件 2 线通信地址

由于DS1077设置存储在EEPROM中,因此DS1077上电至存储在EEPROM中的值。 可以使用相应的菜单命令写入 MUX、DIV 和 BUS 寄存器的值。菜单命令 2 至 8 的固件显示了如何执行 2 线写入的示例,而菜单 命令 1 显示 2 线读取。最后,菜单命令 9 显示了如何更改 2 线地址,该地址将 被解决。

以下是将1234h写入DS1077地址“000”的DIV寄存器的示例:

LCALL START2WIRE ; 2-WIRE START

MOV A,#0B0H ; DEVICE IDENTIFIER, SLAVE ADDRESS, WRITE
LCALL WRITEBITS ; SEND COMMAND BYTE
LCALL ACKSLAVEWRITE ; CHECK FOR SLAVE ACKNOWLEDGE
MOV A,#01H ; ACCESS DIV COMMAND
LCALL WRITEBITS ; SEND COMMAND BYTE
LCALL ACKSLAVEWRITE ; CHECK FOR SLAVE ACKNOWLEDGE
MOV A,#12H
LCALL WRITEBITS ; SEND MSB
LCALL ACKSLAVEWRITE ; CHECK FOR SLAVE ACKNOWLEDGE
MOV A,#34H
LCALL WRITEBITS ; SEND LSB
LCALL ACKSLAVEWRITE ; CHECK FOR SLAVE ACKNOWLEDGE
LCALL STOP2WIRE ; 2-WIRE STOP
To write the same to the DS1077 at address ’001’ , simply replace:
MOV A,#0B0H ; DEVICE IDENTIFIER, SLAVE ADDRESS, WRITE
with the following:
MOV A,#0B2H ; DEVICE IDENTIFIER, SLAVE ADDRESS, WRITE

下面是在地址“1077”DIV寄存器处读取DS000的示例。

LCALL START2WIRE ; 2-WIRE START

MOV A,#0B0H ; DEVICE IDENTIFIER, SLAVE ADDRESS, READ
LCALL WRITEBITS ; SEND COMMAND BYTE
LCALL ACKSLAVEWRITE ; CHECK FOR SLAVE ACKNOWLEDGE
MOV A,#01H ; READ DIVREG COMMAND
LCALL WRITEBITS ; SEND COMMAND BYTE
LCALL ACKSLAVEWRITE ; CHECK FOR SLAVE ACKNOWLEDGE
LCALL START2WIRE ; REPEATED 2-WIRE START
MOV A,#0B1H ; DEVICE IDENTIFIER, SLAVE ADDRESS, READ
LCALL WRITEBITS ; SEND COMMAND BYTE
LCALL ACKSLAVEWRITE ; CHECK FOR SLAVE ACKNOWLEDGE
LCALL READBITS ; READ DATA FROM DS1077 A
MOV DIVDATAMSB,A ; SAVE MUX MSB TO A VARIABLE
LCALL ACKSLAVEREAD ; ACK SLAVE SO WE CAN READ NEXT BYTE
LCALL READBITS ; READ DATA FROM DS1077 A
MOV DIVDATALSB,A ; SAVE MUX LSB TO A VARIABLE
;LCALL ACKSLAVEREAD; NO ACK - NO MORE TO READ
LCALL STOP2WIRE ; 2-WIRE STOP