DS1804为数字电位器,具有EEPROM存储器,其接口主要设计为与按钮(人机接口)接口。通过仔细考虑这些按钮控制的功能,DS1804也可以通过按钮引脚直接连接到微控制器。本应用笔记以8051型处理器为例,描述了如何做到这一点。此外,本文还提供了汇编语言的源代码,以简化工程师在此类应用中使用DS1804的设计任务。涵盖的主题包括:
如何在不更新EEPROM的情况下更改电位计设置。
如何通过更改EEPROM来更改电位器设置。
如何将电流电位计设置写入EEPROM存储器。
介绍
DS1804非易失(NV)微调电位器非常适合用于任何需要偏置电压、电流或电阻的系统,无论是否手动调整。其递增/递减接口允许使用最少的外部硬件进行手动调整,或使用微型控制器进行自主操作。游标可以调整到100个位置之一,任何值都可以存储在器件的NV寄存器中,以在上电时选择游标值。该器件还提供多种小型封装选项,包括 8 引脚 DIP、SOIC、μSOP 和倒装芯片封装。
本应用笔记提供了使用达拉斯半导体DS1804C87 (520)微控制器控制DS8051的简单硬件和软件设置。
与DS1804通信的微控制器硬件设置
使用DS1804的主要优点之一是硬件和软件控制界面简单。电位计和微控制器之间只需要三个连接:片选、上/下选择和增量,分别位于图1中微控制器的引脚P6.1、P5.1和P4.1上。原理图上显示了用于支持 8051 程序的两个附加组件。第一个是经济振荡器芯片,可为 22 提供 22.8051 MHz 时钟;连接到 P1.0 的 LED 是第二个。作为程序中的状态指示器,LED 间歇性切换以显示程序仍在执行。
图1.DS87C520和DS1804连接原理图
DS1077可以用22.118 MHz晶体代替。DS87C520采用晶体时钟源操作的说明见达拉斯半导体的高速微控制器用户手册。需要注意的是,DS87C520能够以高达33 MHz的时钟工作;但是,软件中使用的延迟取决于时钟频率。以较高的时钟速率工作DS87C520可能会导致DS1804的时序故障,而以较低频率工作应该不会产生不良影响。
使用CS、INC和UD信号控制DS1804
DS1804的操作很简单,但需要了解一些细微差别才能可靠工作。首先,设备在 50ms 的过程中上电。尝试在该时间段之前向部件发出信息信号将不会成功。该器件还需要500μs才能将游标的值调整为上电期间存储在非易失寄存器中的值。
上电后,有两种方法可以递增或递减器件。第一种方法仅更改电位计游标位置的值。第二个改变游标的值,并将当前值写入非易失性寄存器。
在不写入非易失寄存器的情况下更改游标位置可通过以下方法完成:
将向上/向下选择输入调整为高以递增,或低以递减。
通过置位CS信号(低电平有效)使能芯片。
脉冲INC低n-1倍以输入/减少零件n倍。
再次断言 INC 低点(INC 的下降沿上部分再次减少/减少)。
通过取消断言 CS 来禁用芯片。
取消断言 INC 以完成写入。
要更改游标的值并将最终游标位置写入非易失寄存器,请完成 以下顺序:
将向上/向下选择输入调整为高以递增,或低以递减。
通过置位CS信号(低电平有效)使能芯片。
将增量信号脉冲低 n 次,以输入/递减零件 n 个位置。
通过取消断言 CS 来禁用芯片。
等待10ms,将当前游标位置写入NV寄存器。
另一个简单而有用的例程将游标位置的当前值存储到NV寄存器中。脉冲CS为低电平,而增量保持高电平,将游标的电流值存储到NV寄存器中。取消 CS 后,控制器应等待 10ms 时间,以便使用当前游标位置写入 NV 寄存器。
8051 DS1804 控制软件
有数百万种不同的例程可用于调整游标位置和写入DS1804的NV寄存器;但是,最简单的方法只需要四个例程。这些例程初始化DS1804,递增芯片一个游标位置,递减芯片一个游标位置,并将电流游标位置写入NV寄存器。这些例程在附录 A 中提供,称为 Init1804、Increment1804、Decrement1804 和 WriteNVreg。Increment1804和Decrement1804例程可以放在一个环路中,对DS1804进行n次输入/递减,一旦达到所需的游标位置,就可以通过调用WriteNVreg例程将其写入NV寄存器。如果需要在不编写主程序中的循环的情况下对DS1804进行n次输入/递减,则可以编写一个简短的例程,从堆栈或累加器接收n并实现循环的功能。
当每次调整期间选择 Up/Down 和 CS 的开销对于手头的应用程序来说太慢时,就会发生仅使用四个函数的垮台。因此,包括两个附加功能,用于演示芯片的输入/递减(每个方向五个间隔),只需选择方向和芯片选择输入。这些例程称为递增 1804x5 和递减 1804x5。
除了上述例程之外,软件中还驻留了另外三个例程以生成时序。它们被称为wait16us,wt和wait3sec。这些功能提供固定的1.6μs延迟、由R5、R6和R7中存储的值选择的可变延迟,以及主程序中使用的固定3秒延迟。
主节目序列
禁用所有中断。
切换 P1.0 上的 LED 以表示执行开始。
初始化DS1804时,将DS1804的三个输入全部设置为高电平并等待50ms。
等待 3 秒钟,切换 LED。3秒延迟允许用万用表读取DS1804的上电值,LED指示何时发生变化。
以1804个间隔突发递增DS5,共25个位置。在 3 个间隔的突发中的每一个之间添加了 5 秒的暂停,以允许万用表监控更改。当游标发生变化时,LED 将切换。
等待3秒,切换LED,递减DS1804 5个间隔。
将 NV 寄存器写入当前值。
等待3秒,切换LED,递增DS1804 1间隔。
等待3秒,切换LED,递减DS1804 1间隔。
通过无限循环完成执行。
主程序输出
假设您正在使用 V 执行程序抄送5V时,22 MHz晶体;万用表是 在 W 和 Gnd 之间连接;和循环 V抄送从 Gnd 到 5V 启动程序。的输出 DS1804如下。
当电源接通时,该器件将启动至NV寄存器中上次存储的值。如果值 NV寄存器之前已写入,然后它将显示该值;否则将显示伪随机 值在发货前由工厂存储在NV登记册中。游标输出将显示 万用表上的电压,对应于NV寄存器中存储的值3秒。输出 然后以 0.25V 步长递增,并保持每个值 3 秒钟,然后再继续下一个值 位置。对于1.25V的总电压变化,这将发生五次。然后游标电压将为 降低0.25V,该值将保持3秒。该值将存储在NV寄存器中,并且 将是部件启动到下次重新通电时的值。最后,游标电压将为 递增0.05V,然后递减0.05V,两个值均保持3秒。发光二极管 附加到 P1.0 将在每次更改发生之前直接每 3 秒切换一次。
如果芯片上电时游标值等于或大于3.76V,程序将 尝试将芯片递增到5V以上。这不会损坏器件,但输出将保持在5V,直到 发出递减命令。因此,在这种情况下,端电压将为4.75V。