带有存储器功能的数字温度计-DS1624技术应用.docx

上传人:李医生 文档编号:8659546 上传时间:2020-12-15 格式:DOCX 页数:15 大小:139.60KB
返回 下载 相关 举报
带有存储器功能的数字温度计-DS1624技术应用.docx_第1页
第1页 / 共15页
带有存储器功能的数字温度计-DS1624技术应用.docx_第2页
第2页 / 共15页
带有存储器功能的数字温度计-DS1624技术应用.docx_第3页
第3页 / 共15页
带有存储器功能的数字温度计-DS1624技术应用.docx_第4页
第4页 / 共15页
带有存储器功能的数字温度计-DS1624技术应用.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《带有存储器功能的数字温度计-DS1624技术应用.docx》由会员分享,可在线阅读,更多相关《带有存储器功能的数字温度计-DS1624技术应用.docx(15页珍藏版)》请在三一文库上搜索。

1、34 带有存储器功能的数字温度计DS1624技术应用1 DS1624 基本原理DS1624是美国 DALLAS公司生产的集成了测量系统和存储器于一体的芯片。数字接口电路简单,与 I2C 总线兼容,且可以使用一片控制器控制多达 8 片的DS1624。其数字温度输出达 13 位,精度为 0.03125 。DS1624可工作在最低 2.7V 电压下,适用于低功耗应用系统。(1) DS1624 基本特性无需外围元件即可测量温度 测量范围为 55 125,精度为0.03125 测量温度的结果以13 位数字量(两字节传输)给出 测量温度的典型转换时间为1 秒 集成了 256 字节的 E2PROM非易性存储

2、器 数据的读出和写入通过一个2线( I2C)串行接口完成 采用 8 脚 DIP 或 SOIC封装,如图 2.34.1图2.34.1(2) 引脚描述及功能方框图其引脚描述如表1 所示:DS1624的功能结构图如图1图 4.34.2(3) DS1624 工作原理温度测量图图 4.34.3温度测量的原理结构图DS1624在测量温度时使用了独有的在线温度测量技术。 它通过在一个由对温度高度敏感的振荡器决定的计数周期内对温度低敏感的振荡器时钟脉冲的计数值的计算来测量温度。 DS1624在计数器中预置了一个初值 , 它相当于55。如果计数周期结束之前计数器达到 0,已预置了此初值的温度寄存器中的数字就会增

3、加,从而表明温度高于 55。与此同时,计数器斜坡累加电路被重新预置一个值,然后计数器重新对时钟计数,直到计数值为 0。2通过改变增加的每 1内的计数器的计数,斜坡累加电路可以补偿振荡器的非线性误差,以提高精度,任意温度下计数器的值和每一斜坡累加电路的值对应的计数次数须为已知。DS1624通过这些计算可以得到 0.03125 的精度,温度输出为 13 位,在发出读温度值请求后还会输出两位补偿值。 表 2 给出了所测的温度和输出数据的关系。这些数据可通过 2 线制串行口连续输出, MSB在前, LSB在后。表 2 温度与输出数据关系表温度数字量输出(二进制)数字量输出(十六进制)1250111,1

4、101, 0000,00007D00H25.0625 0001,1001, 0001,00001910H0.5 0000,0000, 1000,00000080H00000,0000, 0000,00000000H- 0.5 1111,1111, 1000,0000FF80H- 25.0625 1110,0110, 1111,0000E6F0H- 551100,1001, 0000,0000C900H由于数据在总线上传输时MSB在前,所以 DS1624读出的数据可以是一个字节 ( 分辨率为 1) ,也可以是两个字节, 第二个字节包含的最低位为 0.031 25。表 2 是 13 位温度寄存器中

5、存储温度值的数据格式高八位字节低八位字节SB14B13B12B11B10B9B8B7B6B5B4B3000表 3温度值的数据存储格式其中 S 为符号位,当S 0 时,表示当前的测量的温度为正的温度;当S1时,表示当前的测量的温度为负的温度。B14B3 为当前测量的温度值。最低三位被设置为 0。DS1624工作方式DS1621的工作方式是由片上的配置 / 状态寄存器来决定的,如表 4,该寄存器的定义如下:表 4配置 / 状态寄存器格式DONE1001011SHOT3其中 DONE为转换完成位,温度转换结束时置 1,正在进行转换时为 0;1SHOT为温度转换模式选择。 1SHOT为 1 时为单次转

6、换模式, DS1624在收到启动温度转换命令 EEH后进行一次温度转换。 1SHOT为 0 时为连续转换模式,此时 DS1624将连续进行温度转换, 并将最近一次的结果保存在温度寄存器中。 该位为非易失性的。片内 256 字节存储器操作控制器对 DS1624的存储器编程有两种模式:一种是字节编程模式,另一种是页编程模式。在字节编程模式中,主控制器发送地址和一个字节的数据到DS1624。在主器件发出开始( START)信号以后,主器件发送写控制字节即 1001A2A1A00 (其中 R/W控制位为低电平“ 0”)。指示从接收器被寻址, DS1624接收后应答,再由主器件发送访问存储器指令( 17

7、H)后, DS1624接收后应答,接着由主器件发送的下一个字节字地址将被写入到 DS1624的地址指针。主器件接收到来自DS1624的另一个确认信号以后,发送数据字节,并写入到寻址的存储地址。DS1624再次发出确认信号,同时主器件产生停止条件 STOP,启动内部写周期。在内部写周期 DS1624将不产生确认信号。在页编程模式中, 如同字节写方式, 先将控制字节、 访问存储器指令( 17H)、字地址发送到 DS1624,接着发 N个数据字节,其中以 8 个字节为一个页面。主器件发送不多于一个页面字节的数据字节到 DS1624,这些数据字节暂存在片内页面缓存器中,在主器件发送停止信号以后写入到存

8、储器。 接收每一个字节以后,低位顺序地址指针在内部加 1。高位顺序字地址保持为常数。如果主器件在产生停止条件以前要发送多于一页字的数据, 地址计数器将会循环, 并且先接收到的数据将被覆盖。 像字节写操作一样, 一旦停止条件被接收到, 则内部写周期将开始。存储器的读操作在这种模式下, 主器件可以从 DS1624的 EEPROM中读取数据。主器件在发送开始信号之后, 主器件首先发送写控制字节 1001A2A1A00,主器件接收到 DS1624 应答之后,发送访问存储器的指令( 17H),收到 DS1624的应答之后,接着发送字地址将被被写入到 DS1624的地址指针。这时 DS1624发送应答信号

9、之后, 主器件并没有发送停止信号, 而是重新发送 START开始信号,接着又发送读控制字节1001A2A1A01,主器件接收到 DS1624应答之后,开始接收 DS1624送出来的数据,主器件每接收完一个字节的数据之后,都要发送一个应答信号给 DS1624,直到主器件发送一个非应答信号或停止条件来结束 DS1624的数据发送过程。DS1624的指令集数据和控制信息的写入读出是以表 5 和表 6 所示的方式进行的。在写入信息时,主器件输出从器件 ( 即 DS1624)的地址,同时 R/W位置 0。接收到响应位后,4总线上的主器件发出一个命令地址, DS1624接收此地址后,产生响应位,主器件就向

10、它发送数据。 如果要对它进行读操作, 主器件除了发出命令地址外, 还要产生一个重复的启动条件和命令字节,此时 R/W位为 1,读操作开始。下面对它们的命令进行说明。访问存储器指令 17H:该指令是对 DS1624的 EEPROM进行访问,发送该指令之后,下一个字节就是被访问存储器的字地址数据。访问设置寄存器指令 ACH:如果 R/W位置 0,将写入数据到设置寄存器。发出请求后,接下来的一个字节被写入。 如果 R/W位置 1,将读出存在寄存器中的值。读温度值指令 AAH:即读出最后一个测温结果。 DS1624产生两个字节,即为寄存器内的结果。开始测温指令 EEH:此命令将开始一次温度的测量,不需

11、再输入数据。在单次测量模式下,可在进行转换的同时使 DS1624保持闲置状态。在连续模式下,将启动连续测温。停止测温指令 22H:该命令将停止温度的测量,不需再输入数据。此命令可用来停止连续测温模式。发出请求后,当前温度测量结束,然后 DS1624保持闲置状态。直到下一个开始测温的请求发出才继续进行连续测量。表 5主机对 DS1624写操作通信格式I2C主器件DS1624主器件DS1624主器件DS1624I2通发送控应答发送访应答发送的应答C信制字节问数据字通开(DS162DS1624节信始4 地址的指令停和写操止作)表 6主机对 DS1624读操作通信格式I2主器件DS主器DSI2主器DS

12、数据主机数主IC发送控16件发16C件发16字节应答据机2通制字节24送访24通送控240字非C信( DS16应问应信制字应节应通开24 地址答DS162答开节答1答信始和写操4 的指始(DS1停作)令624 地止址和读操作)52 实验任务用一片 DS1624完成本地数字温度的测量, 并通过 8 位数码管显示出测量的温度值。其硬件电路图如图3 电路原理图图 4.34.44 系统板上硬件连线(1) 把“单片机系统”区域中的P0.0 P0.7 用 8 芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。(2) 把“单片机系统”区域中的P2.0 P2.7 用 8 芯排线连接到“动态数码显示”

13、区域中的S1S2S3S4S5S6S7S8端子上。(3) 把 DS1624芯片插入到“二线总线模块”区域中的8 脚集成座上,注意芯片不插反。(4) 把“二线总线模块”区域中的 PIN1 PIN2 分别用导线连接到“单片机系统”区域中的 P1.6 和 P1.7 端子上。(5) 把“二线总线模块”区域中的PIN4 PIN5PIN6 分别用导线连接到“电源模块”区域中的GND端子上。65 程序设计内容(1) 由于 DS1624是 I2C 总线结构的串行数据传送, 它只需要 SDA和 SCL 两根线完成数据的传送过程。因此,我们在进行程序设计的时候,也得按着 I2C 协议来对 DS1624芯片数据访问。

14、有关 I2C 协议参看有关资料,这里不详述。 对于 AT89S51单片机本身没有 I2C 硬件资源,所以必须用软件来模拟 I2C 协议过程。(2) 要从 DS1624中读取温度值,首先启动DS1624的内部温度 A/D 开始转换,对应着有相应的命令用来启动开始温度转换,有关 DS1624 的指令集参考前面的叙述。 一般情况下, DS1624经过一次温度的变换,需要经过 1 秒钟左右的时间,所以等待1 秒钟后,即可读取内部的温度值,对于读取的温度值,仍然通过DS1624的指令集来完成温度的读取。但所有有数据的传送过程必须遵循I2C 协议。6 C 语言源程序#include #include un

15、signed char code displaybit=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f;unsigned char code displaycode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00;unsigned char code dotcode32=0,3,6,9,12,16,19,22,25,28,31,34,38,41,44,48,50,53,56,59,63,66,69,72,75,78,81,84,88,91,

16、94,97;sbit SDA=P16;sbit SCL=P17;unsigned char displaybuffer8=0,1,2,3,4,5,6,7;unsigned char eepromdata8;unsigned char temperdata2;unsigned char timecount;unsigned char displaycount;bit secondflag=0;unsigned char secondcount=0;unsigned char retn;unsigned int result;unsigned char x;unsigned int k;7unsi

17、gned int ks;void delay(void);void delay10ms(void);void i_start(void);void i_stop(void);void i_init(void);void i_ack(void);bit i_clock(void);bit i_send(unsigned char i_data);unsigned char i_receive(void);bit start_temperature_T(void);bit read_temperature_T(unsigned char *p);void delay(void)_nop_();_n

18、op_();_nop_();_nop_();_nop_();_nop_();void delay10ms(void)unsigned int i;for(i=0;i1000;i+)delay();void i_start(void)SCL=1;delay();SDA=0;delay();SCL=0;delay();void i_stop(void)8SDA=0;delay();SCL=1;delay();SDA=1;delay();SCL=0;delay();void i_init(void)SCL=0;i_stop();void i_ack(void)SDA=0;i_clock();SDA=

19、1;bit i_clock(void)bit sample;SCL=1;delay();sample=SDA;_nop_();_nop_();SCL=0;delay();return(sample);bit i_send(unsigned char i_data)unsigned char i;for(i=0;i8;i+)SDA=(bit)(i_data & 0x80);i_data=i_data1;9i_clock();SDA=1;return(i_clock();unsigned char i_receive(void)unsigned char i_data=0;unsigned cha

20、r i;for(i=0;i8;i+)i_data*=2;if(i_clock() i_data+;return(i_data);bit start_temperature_T(void)i_start();if(i_send(0x90)if(i_send(0xee)i_stop();delay();return(1);elsei_stop();delay();return(0);elsei_stop();delay();return(0);10bit read_temperature_T(unsigned char *p)i_start();if(i_send(0x90)if(i_send(0

21、xaa)i_start();if(i_send(0x91)*(p+1)=i_receive();i_ack();*p=i_receive();i_stop();delay();return(1);elsei_stop();delay();return(0);elsei_stop();delay();return(0);elsei_stop();delay();return(0);void main(void)P1=0xff;timecount=0;displaycount=0;11TMOD=0x21;TH1=0x06;TL1=0x06;TR1=1;ET1=1;ET0=1;EA=1;if(sta

22、rt_temperature_T() / 向 DS1624发送启动 A/D 温度转换命令,成功则启动 T0 定时 1s。secondflag=0;secondcount=0;TH0=55536/256;TL0=55536%256;TR0=1;while(1)if(secondflag=1)secondflag=0;TR0=0;if(read_temperature_T(temperdata)/T0 定时 1s 时间到,读取 DS1624的温度值for(x=0;x3;displaybuffer0=(dotcoderesult)%10;displaybuffer1=(dotcoderesult)/

23、10;12if(start_temperature_T()/ 温度值数据处理完毕,重新启动DS1624开始温度转换secondflag=0;secondcount=0;TH0=55536/256;TL0=55536%256;TR0=1;void t0(void) interrupt 1 using 0 /T0用于定时 1s 时间到secondcount+;if(secondcount=100)secondcount=0;secondflag=1;TH0=55536/256;TL0=55536%256;void t1(void) interrupt 3 using 0 /T1定时 1ms用数码管的动态刷新timecount+;if(timecount=4) /T1定时 1ms到timecount=0;if (displaycount=5)P0=(displaycodedisplaybuffer7-displaycount | 0x80); /在该位同时还要显示小数点elseP0=displaycodedisplaybuffer7-displaycount;P2=displaybitdisplaycount;displaycount+;if(displaycount=8)displaycount=0;1314

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1