欢迎来到天天文库
浏览记录
ID:38711125
大小:358.00 KB
页数:4页
时间:2019-06-18
《基于ATmega单片机的DS18B20温度采集系统》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实用技术基于ATmega单片机的DS18B20温度采集系统摘要:本文提出利用ATmega单片机控制DS18B20工作对实时的温度进行采集并显示,介绍DS18B20温度传感器的工作原理以及AVR单片机如何对该传感器进行控制。由于该系统对环境温度能够实时显示,所以该系统有一定的推广价值。关键词:AVR单片机DS18B20温度传感器1前言在工农业生产中,温度是重要的物理量之一,DS18B20作为新一代的数字式传感器可以直接把温度转化为相应的数字量,这种测温方式可靠方便,ATmega单片机在速度和效率方面要好于PIC及8051单片机,这款
2、单片机在海尔等公司得到了广泛的应用。该测温方式外围线路少、可靠性高、性价比好。2DS18B20的工作原理DS18B20支持“一线总线”接口,在一定程度上提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费产品等。DS18B20可以程序设定为9-12位的分辨率,精度为0.50C。其具体工作时序图如下:图1DS18B20的初始化时序图对于DS18B20操作时首先应将它复位。将DQ线拉低480至960μs,再将数据线拉高15至60μs,然后,DS18B20发出60至240μs的低电平信号(存在脉冲
3、),这时主机才能对它进行其它操作。具体时序图如图1所示。图2DS18B20读“1”时序图区读操作:主机将数据线从高电平拉至低电平1μs以上,再使数据线升为高电平,从而产生读起始信号。从主机将数据线从高电平拉至低电平起15μs至60μs,主机读取数据。在读时间间隙的结尾,数据线引脚被外部上拉电阻拉到高电平。所有读时间隙必须最少60μs,包括两个读周期间者至少1μs的恢复时间。具体时序图如图2所示。图3DS18B20写“1”时序图写操作:当主机将数据线从高电平拉至低电平,产生写起始信号。有两种写时间隙:写1时间隙和写0时间隙。数据线电
4、平变低后,DS18B20在15μs到60μs这段时间内对数据线进行检测,如数据线为高电平则写1;若为低电平,则写0,完成了一个写周期。时间写周期间至少有1μs的恢复时间,所有的写间隙必须至少持续60μs。具体时序图如图3所示。3温度采集系统的硬件设计该系统主要有两部分组成,一部分是温度采集部分,一部分是温度显示部分。均采用LED显示。DS18B20数据线接AVR单片机的PB7,数据线和Vcc间接一4.7k上拉电阻。显示部分用了AVR单片机的三个I/O口,分别PB0、PB1、PB2。在单片机与LED显示管之间有两片74LS595移位
5、寄存器,一片控制位码操作,一片控制段码操作。寄存器的特点是能使采集到的温度能够串行输入,并行输出。先移位后通过同步时钟锁存。具体的硬件结构框图如图4。按键控制电路Atmega16单片机温度采集显示报警图4系统的硬件总体框图2温度采集系统的软件部分系统的主程序如图5所示。图5系统主程序流程图软件系统的主程序:voidmain(void)//主函数{uinti;OSCCAL=0Xa2;//系统时钟校准,不同的芯片和不同的频率io_init();//mega8初始化convert1_1820();//温度转换(1850us---754次
6、)led_row1=count*10;//转换结果(扩大100倍)led_assign();//数据分配for(i=0;i<200;i++)led_list1();//温度显示}部分子程序:voidinit_1820(){PORTB
7、=(1<<7);PORTB&=~(1<<7);delay(300);//480us以上(仿真时可以200)PORTB
8、=(1<<7);DDRB&=~(1<<7);delay(15);//15~60us(仿真时不得少于13)DDRB
9、=(1<<7);PORTB
10、=(1<<7);delay(40);//6
11、0~240us}write_1820(ucharx){ucharm;for(m=0;m<8;m++){PORTB&=~(1<<7);if(x&(1<12、=(1<<7);elsePORTB&=~(1<<7);delay(10);//15~60usPORTB13、=(1<<7);}PORTB14、=(1<<7);}ucharread_1820(){uchartemp,k,n;temp=0;for(n=0;n<8;n++){PORTB&=~(1<<7);delay(2);PORTB15、=(1<<7);DDRB16、&=~(1<<7);k=(PINB&(1<<7));//读数据,从低位开始if(k)temp17、=(1<18、=(1<<7);}return
12、=(1<<7);elsePORTB&=~(1<<7);delay(10);//15~60usPORTB
13、=(1<<7);}PORTB
14、=(1<<7);}ucharread_1820(){uchartemp,k,n;temp=0;for(n=0;n<8;n++){PORTB&=~(1<<7);delay(2);PORTB
15、=(1<<7);DDRB
16、&=~(1<<7);k=(PINB&(1<<7));//读数据,从低位开始if(k)temp
17、=(1<18、=(1<<7);}return
18、=(1<<7);}return
此文档下载收益归作者所有