CC2430驱动DS18B20-1
ZigBee CC2430或CC2530仿真器之驱动安装
ZigBee CC2430/CC2530仿真器之驱动安装
本文对ZigBee CC2430/CC2530仿真器的安装进行说明:
首先请已安装IAR Embedded Workbench for 8051,因为本仿真器的驱动就在这个软件里面。
然后插上仿真器,电脑会自动检测到硬件Chipcon SRF04EB,会出现如下界面(硬件向导)
按上图的步骤完成后,按<下一步>,进入到下面的界面:
选择上图红圈的位置,其他的都不要选,这样选择可以以最快的速度安好驱动。
点击<浏览>,此时会选择驱动程序的路径,默认安装IAR的话,会在这里:
搞定上面后,ZigBee仿真器的安装就成功99.9%了,哈哈,还等什么,<确认>吧!这时会自动进入上一个界面,别忘记点<下一步>哟。
一路下一步,只到成功……,如果在你的右下角提示,你的硬件已经安装成功,表明已OK了。
当然如是你确保有没有真的安装上,可以在设备管理器中查看。
看到红色的那个框没有,是什么,哈哈。
有了这一项,能确保你的ZigBee仿真器已安装成功了。
那么恭喜你,你的ZigBee之路可以开始了……
Good Luck。
ds18b20工作原理
ds18b20工作原理
DS18B20温度传感器是一种数字温度传感器,采用"1-wire"
(单总线)接口通信,其工作原理如下:
1. 传感器结构:DS18B20传感器由温度传感器芯片、电源线
和数据线组成。
芯片内部包含温度传感器、模数转换器和存储器。
2. 电源供电:传感器通过电源线从计算机、微控制器或其他设备中获取供电。
传感器的VDD和GND引脚用于供电。
3. 温度测量:传感器使用其内部温度传感器测量环境温度。
当温度变化时,传感器内部的温度传感器会产生电压变化。
4. 模数转换:传感器内部的模数转换器将温度传感器测量到的电压转换为数字信号。
转换后的数字信号可以在数据线上传输。
5. 通信协议:传感器使用1-wire接口协议进行通信。
该协议
允许使用单根数据线进行数据传输。
传感器通过数据线将温度数据发送给主控设备。
6. 数据读取:主控设备发送读取指令给传感器,传感器将温度数据通过数据线返回给主控设备。
主控设备可以通过读取传感器返回的数据来获取环境温度。
总结:DS18B20温度传感器工作原理基于温度传感器芯片和
模数转换器的结构,在供电后,传感器通过测量温度传感器的
电压变化来获取环境温度,并通过1-wire接口协议将温度数据传输给主控设备。
DS18B20详细使用方法
DS18B20的详细使用方法1.DS18B20概述DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
2、DS18B20产品的特点〔1〕.只要求一个端口即可实现通信。
〔2〕.在DS18B20中的每个器件上都有独一无二的序列号。
〔3〕.实际应用中不需要外部任何元器件即可实现测温。
〔4〕.测量温度范围在-55。
C到+125。
C之间。
〔5〕.数字温度计的分辨率用户可以从9位到12位选择。
〔6〕.内部有温度上、下限告警设置。
3、DS18B20引脚图及引脚功能介绍TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
〔底视图〕图1表1DS18B20详细引脚功能描述4.DS18B20的使用方法由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
DS18B20的复位时序DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。
DS18B20在完成一个读时序过程,至少需要60us才能完成。
温度传感器ds18b20 在Zigbee芯片CC2430中的应用
温度传感器ds18b20 在Zigbee芯片CC2430中的应用以下资料是参考ds18b20的pdf资料、网上一些驱动例子、Zigbee 硬件宏定义、并结合我之前实习期间所学的知识整理的,希望对有需要的同学有所帮助。
ds18b20 H文件:/***************************************************************** Name: DS_18B20_Head.h ** csy ** Date: 2010\12\31 *****************************************************************/#ifndef DS_18B20_Head_H#define DS_18B20_Head_H#include "ioCC2430.h"//ds18b20 pin#define DQ P1_4//ds18b20 delay parmater:#define Delay_600us 600#define Delay_60us 60#define Delay_40us 40#define Delay_30us 30#define Delay_5us 5#define Delay_3us 3#define Delay_1us 1//command to ds18b20#define Command_Skip_Rom 0XCC // Skip ROM#define Command_Read_Register 0XBE // Read Scratch Pad#define Command_Start_Conversion 0X44 // Start Conversionvoid ds18b20_delay(unsigned int useconds);unsigned char ds18b20_reset(void);unsigned char ds18b20_read_byte(void);void ds18b20_write_byte(unsigned char val);unsigned int ds18b20_Read_Temperature(void);//CC2430 IO 宏定义copy from hal.h// Example usage:// IO_DIR_PORT_PIN(0, 3, IO_IN); // Set P0_3 to input// IO_DIR_PORT_PIN(2, 1, IO_OUT); // Set P2_1 to output#define IO_DIR_PORT_PIN(port, pin, dir) \do { \if (dir == IO_OUT) \P##port##DIR |= (0x01<<(pin)); \else \P##port##DIR &= ~(0x01<<(pin)); \}while(0)// Where port={0,1,2}, pin={0,..,7} and dir is one of:#define IO_IN 0#define IO_OUT 1#endif/////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////ds18b20 C文件/***************************************************************** Name: DS_18B20.c ** csy ** Date: 2010\12\31 *****************************************************************/#include "DS_18B20_Head.h"/*****************************************************************function :ds18b20_delay **Input :unsinged int **Return :unll **Description :1us *****************************************************************/void ds18b20_delay(unsigned int useconds){for(;useconds>0;useconds--);}/******************************************************************************* *function :ds18b20 reset * *Input :null * *Return :unsigned char presence: 0=presence, 1 = no part * *Description :test wether reset ok? * ********************************************************************************/ unsigned char ds18b20_reset(void){unsigned char presence;IO_DIR_PORT_PIN(1, 4, IO_OUT);DQ = 0;ds18b20_delay(Delay_600us);IO_DIR_PORT_PIN(1, 4, IO_IN);ds18b20_delay(Delay_40us); // wait for presencepresence = DQ; // get presence signalds18b20_delay(Delay_600us); // wait for end of timeslotreturn(presence); // presence signal returned}/*****************************************************************function :ds18b20_read_byte **Input :null **Return :unsigned char :dat **Description :read one byte from ds18b20 *****************************************************************/unsigned char ds18b20_read_byte(void){unsigned char i;unsigned char dat;for(i=8;i>0;i--){dat>>=1;IO_DIR_PORT_PIN(1, 4, IO_OUT);DQ = 0; // pull DQ low to start timeslotds18b20_delay(Delay_30us); //wait for the TYP timeIO_DIR_PORT_PIN(1, 4, IO_IN);if(DQ)dat|=0x80;ds18b20_delay(Delay_60us); //wait end of read timeslotIO_DIR_PORT_PIN(1, 4, IO_OUT);}return dat;}/*****************************************************************function :ds18b20_write_byte **Input :unsigned char :dat **Return :null **Description :write one byte to ds18b20 *****************************************************************/void ds18b20_write_byte(unsigned char dat){unsigned char i;for (i=8; i>0; i--){IO_DIR_PORT_PIN(1, 4, IO_OUT);DQ = 0; // pull DQ low to start timeslotds18b20_delay(Delay_30us);DQ = dat&0x01;ds18b20_delay(Delay_30us); // hold value for remainder of timeslot DQ = 1;dat>>=1;}}/*************************************************************************function :ds18b20_Read_Temperature **Input :unll **Return :unsigned int: x **Description :read temperature value from ds18b20 **************************************************************************///读取温度unsigned int ds18b20_Read_Temperature(void){union{unsigned char c[2];unsigned int x;}temp;if(!ds18b20_reset()) //if reset complete ?{ds18b20_write_byte(Command_Skip_Rom);ds18b20_write_byte(Command_Read_Register);temp.c[0]=ds18b20_read_byte();temp.c[1]=ds18b20_read_byte();ds18b20_reset();ds18b20_write_byte(Command_Skip_Rom);ds18b20_write_byte(Command_Start_Conversion);temp.x=(unsigned int)(temp.c[1]<<8)|temp.c[0];return temp.x;}return 0;}。
基于CC2430和DS18B20的无线测温系统设计
本文从低功耗、小体积、使用简单等方面考虑,基于射频SoC CC2430和数字温度传感器DS18B20设计了一个无线测温系统,整个系统由多个无线节点和1个基站组成。无线节点工作在各个测温地点,进行温度数据采集和无线发送。基站与多个节点进行无线通信,并通过数码管将数据显示出来,同时可以通过RS-232串口将数据发送给PC。
基站接收到数据后,将温度信息通过数码管(或液晶显示屏)显示出来,根据需要,还可以通过RS-232接口与PC进行通信。为简化系统,本设计直接用CC2430的I0口驱动数码管,但是I0口不具备数据保持能力,需要外接一定大小的上拉电阻,显示方法采用扫描法。采用一个蜂鸣器作为报警装置,当温度超过设定范围时,鸣叫报警。射频天线采用单鞭天线。
3引脚封装的DS18B20形如一只三极管,其内部结构如图2所示。主要由四部分组成:64位光刻ROM、温度传感器、非易失性的温度报警触发器和配置寄存器。此外,还有电源检测模块、存储和控制逻辑器、中间结果缓存器和8位循环冗余校验码(CRC)发生器。
ROM中的64位序列号是出厂前被光刻好的,可以看作该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。DS18B20内部的RAM由9个字节的高速缓存器和E2PROM组成,数据先写入高速缓存器,经校验后再传送给E2PROM。通过DS18B20功能命令对RAM进行操作。
芯片本振信号既可由外部有源晶体提供,有晶振1为基于CC2430芯片的ZigBee在智能交通系统中的应用 32 MHz, 晶振2为32.768 kHz。 射频输入/输出匹配电路主要用来匹配芯片的输入输出阻抗,使其输入输出阻抗为60 Ω,同时为芯片内部的PA及LNA提供直流偏置。
有关于iic以及ds18b20驱动的解读
有关于iic以及ds18b20驱动的解读对于任何一个芯片的使用都离不开对芯片手册的解读,手册中的时序图以及协议必须完全的知晓,才能将芯片正确的使用起来:首先来了解一下使用iic协议的比较常见的AT24C02 这款芯片:通过手册我们可以知道:这款芯片有A0、A1、A2着三个地址管脚,将这三个管脚任意的接上VCC或者是GND都可以构成这款芯片的序列号、在实际的使用中就能够通过总线来进行寻址,然后发送地址,就能对应某一个芯片,并且由此可知,总线上最多可以连接8个这样的芯片,只要改变管脚的三个地址位,就能轻松实现对不同的芯片的控制。
芯片上除了这三个地址管脚之外还有一个WP,是用来写保护的,当这个管脚上是高电平的时候,是没有办法将我们所要的数据写进这款芯片中的,只有当它为低电平的时候才能对这款芯片进行操作。
正常情况下,在使用的时候都是通过硬件电路直接将这个管脚连在GND上。
还有就是Vcc跟Vss分别接上+5V和地,SDA和SCL分别是我们这款芯片的数据位和时钟位,也是我们操作这款芯片的重点。
根据手册的解读,我们可以了解到在时钟线为高电平的时候,数据线要保持不变,如果数据线在时钟线高电平期间,由高电平变为低电平,说明了iic总线协议的开始,如果由低电平变为高电平时,说明了总线协议的结束。
在时钟线为低电平的时候才允许数据线进行跳变并进行传输数据。
在解读时序图的时候底下着两张图很重要。
因为这两张图包含了在写时序图当中的一点细节。
如果这些细节没有处理好的话就会出现芯片不会正常工作的状况。
接下类介绍各个驱动的书写和处理:1、起始信号:由上面的时间表查出来的时间显示,起始信号建立的时间至少是4.7us。
因为时序图是完全按照现实的时间走向画出来的,所以从左向右可以想象成是一个时间轴。
然后看上面这张起始信号的图有可以知道,显示SCL由低电平变为高电平然后保持至少4us的时间。
SDA才开始由高电平变为低电平,在低电平的这段时间查表就可知,这个起始信号保持的时间至少是4us。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,其工作原理是基于温度对半导体材料电阻值的影响。
该传感器采用单总线接口,能够直接与微处理器或者其他数字电路连接。
DS18B20传感器内部包含一个温度传感器,一个模数转换器和一个数字接口电路。
温度传感器由一个特殊的半导体材料制成,该材料的电阻值随温度的变化而变化。
模数转换器将传感器测量到的电阻值转换为数字信号,并通过数字接口电路将其传输给外部设备。
DS18B20传感器的数字接口采用单总线协议,即数据线和电源线共用一根路线。
这种设计使得传感器的连接变得简单,只需一根线就可以实现数据传输和供电。
传感器通过发送特定的命令来与外部设备进行通信,并将温度数据传输给外部设备。
DS18B20传感器具有以下特点:1. 高精度:DS18B20传感器能够提供高精度的温度测量,精度可达±0.5℃。
2. 宽温度范围:传感器能够在-55℃到+125℃的温度范围内正常工作。
3. 多点测量:可以通过在同一总线上连接多个DS18B20传感器,实现多点温度测量。
4. 低功耗:传感器在工作时功耗非常低,通常为1mW。
5. 高可靠性:DS18B20传感器采用了数字信号传输和单总线协议,具有较高的抗干扰能力和可靠性。
DS18B20传感器的应用广泛,常见于温度监测系统、气象站、电子设备等领域。
其优点包括简单的连接方式、高精度的温度测量、稳定可靠的性能等。
在实际应用中,可以根据需要选择不同封装形式的DS18B20传感器,如TO-92封装、SOIC封装等。
总结:DS18B20是一种基于温度对半导体材料电阻值的影响来实现温度测量的数字温度传感器。
其工作原理是通过测量半导体材料的电阻值来获取温度信息,并通过单总线接口将温度数据传输给外部设备。
DS18B20传感器具有高精度、宽温度范围、低功耗、多点测量和高可靠性等特点,广泛应用于各种温度监测系统和电子设备中。
ds18b20工作原理
ds18b20工作原理1. 简介DS18B20是一种数字温度传感器,广泛应用于各种温度测量领域。
它以数字方式输出温度数据,具有精确度高、响应速度快、使用方便等特点,因此备受欢迎。
本文将详细介绍DS18B20的工作原理。
2. 传感器结构DS18B20传感器由一个温度传感单元、一个模数转换器和一个序列控制器组成。
温度传感单元采用特殊材料制成,它对温度变化非常敏感。
当温度发生变化时,温度传感单元的电阻也会发生变化。
模数转换器负责将温度传感单元的电阻变化转换为数字信号。
它能够准确测量电阻变化并将其表示为数字值。
序列控制器负责控制传感器的工作状态。
它通过传输协议与主控设备进行通信,并接收主控设备发送的指令。
3. 工作原理DS18B20使用单线制数字信号传输方式。
传感器内部有一个独特的序列号标识,主控设备可以通过这个序列号对传感器进行识别和通信。
工作过程如下:步骤1:主控设备发送复位脉冲,使DS18B20进入准备接收命令的状态。
步骤2:主控设备发送读写脉冲,将指令发送给DS18B20。
步骤3:DS18B20接收到指令后,进行相应的处理。
如果是读取温度数据的指令,则将温度数据转换为数字信号,并通过数据传输线发送给主控设备。
步骤4:主控设备接收到DS18B20发送的温度数据后,进行进一步处理和显示。
4. 优点DS18B20传感器具有以下几个优点:4.1 高精度:DS18B20能够提供高精度的温度测量结果,通常可以达到0.5℃的精度。
4.2 响应速度快:DS18B20具有快速响应的特点,能够在很短的时间内提供准确的温度测量结果。
4.3 数字输出:DS18B20以数字信号的方式输出温度数据,无需额外的模数转换器,方便与数字系统集成。
4.4 单线制:DS18B20采用单线制数字信号传输方式,减少了接口数量,节省了成本和空间。
5. 应用领域DS18B20传感器广泛应用于各种温度测量领域,如:5.1 家电领域:DS18B20被应用于空调、冰箱、洗衣机等家电产品中,用于温度控制和保护。
cc2430与ds18b20组合,数据采集程序
dia_V=12;
xsenserdat[11]=0x30+dia_V/10;
xsenserdat[12]='.';
xsenserdat[13]=0x30+dia_V%10;
xsenserdat[14]='#';
xsenserdat[15]='#';
/*void Read_dian()
{
BYTE diaya[]="word";
//contionuousMode(diaya,sizeof(diaya),0x17,1);
eventnum=0;
}
*/
void Read_V(BYTE *xsenserdat) //电压读取并发送函数并没有写具体的函数
SET_OUT; //设p0.7为输出
SET_DQ; //回到初始p0.7=1;l
return 1;
}
void write_1820(uchar x) //18B20写函数
{
uchar m;
SET_OUT; //设p0.7为输出
write_1820(0xCC); //发出转换命令 搜索器件
write_1820(0x44); //启动
for(j=20;j>1;j--)
Delay_nus(50000);
// Delay(5);
init_1820(); //复位18b20
// temp=teml/16 + temh*16;
temp=temh; //把高八位给TEMP
temp=temp<<7; //把高八位移到整型数据类型的高八位
单总线温度传感器DS18B20简介
单总线温度传感器DS18B20简介DS18B20是DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、搞干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。
它具有3引脚TO-92小体积封装形式,温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
以上特点使DS18B20非常适用于远距离多点温度检测系统。
DS18B20外形及引脚说明外形及引脚如图2所示:图2 管脚排列图在TO-92和SO-8的封装中引脚有所不同,具体差别请查阅PDF手册,在TO-92封装中引脚分配如下:1(GND):地2(DQ):单线运用的数据输入输出引脚3(VDD):可选的电源引脚DS18B20工作过程及时序DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。
高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。
初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。
初始时,计数器1预置的是与-55℃相对应的一个预置值。
以后计数器1每一个循环的预置数都由斜率累加器提供。
为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。
计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。
基于CC2430与DS18B20的粮库温度传感器网络
基于CC2430与DS18B20的粮库温度传感器网络
1 传感器网络体系结构一个典型的传感器网络的体系结构包括分布式的传感器节点、网关节点、互联网和用户界面等。
在传感器网络中,节点布置在
被监测区域内。
每个传感网络装备有一个连接到传输网络的网关。
网关通过传
输网络把被测数据从传感区域传到提供远程连接和数据处理的基站,基站再通
过Internet 连到远程数据库。
最后采集到的数据经分析、挖掘后通过一界面提
供给终端用户。
本系统主要结构是每个CC2430 模块挂接多个DS18820 温度传感器。
温度传感器按一定规律布置在粮库中,通过单总线与当前CC2430 模块连接;利用无线传感器网络组网技术将这些CC2430 模块组网,并把数据发送到本仓数据集中器,通过网桥将数据集中器与当地监控主机连接,如图1 所示。
最后通过Internet 将远程终端用户与当地监测系统连接,实现远程网络化
粮库数量监控,如图2 所示。
2 传感器布置模型平房仓粮堆温度数据信息采集系统监测点布置平面示意图如图
3 所示。
仓内温度传感器的设定是相对东、南、西、北侧墙向内每侧各
布置3 组温度传感器,其中每组间距为1 m;东、南、西、北各侧由墙向内布置的间距分别是0.25 m、0.25 m、0.5 m、1.0 m、1.0 m……。
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,采用了一种特殊的温度传感技术,微处理器驱动的温度变频。
它具有体积小、精度高、数字输出等优势,在许多应用领域得到了广泛的应用。
下面将详细介绍DS18B20的工作原理。
DS18B20传感器的核心部分是温度传感器芯片和数据线,它们通过一根三线的数据线来进行通信。
温度传感器芯片内部包含了一个温度传感器和一个ROM存储器,用来存储设备的唯一标识和一些配置信息。
在通信过程中,主机通过发送一系列命令和数据给传感器,传感器则返回温度数值和其他相关信息。
传感器的工作过程可以分为三个阶段:初始化、读取温度和休眠。
首先是初始化阶段。
主机会发送复位命令给传感器,使其进入初始化状态。
在初始化过程中,传感器会进行一些自检和配置操作,如检查电源电压是否正常、读取ROM存储器中的数据等。
如果初始化成功,传感器会发送一个存在应答信号给主机。
初始化完成后,主机可以开始读取温度。
主机发送读温度命令给传感器,传感器收到命令后会开始测量温度并将结果转换成数字信号。
传感器通过数据线将温度数值传输给主机。
传感器采用了一种特殊的变频技术,将温度数值转换为频率信号。
频率信号的周期和占空比与温度成正比。
主机通过计算频率信号的周期和占空比,可以得到温度的数值。
最后是休眠阶段。
传感器在完成温度读取后,会进入休眠状态以节省能量。
主机可以发送唤醒命令给传感器,使其从休眠状态中恢复。
DS18B20采用了一种基于时序的通信协议,通过数据线来传输命令和数据。
通信的过程非常简单,通过发送和接收不同的时序信号来实现不同的功能。
主机通过拉低数据线一定时间来发送数据,通过释放数据线来接收数据。
传感器根据主机发送的时序信号来判断主机的命令并进行相应的处理。
总结起来,DS18B20的工作原理是通过初始化、读取温度和休眠三个阶段来完成温度测量。
它采用了温度变频的技术,将温度转换为频率信号,通过数据线与主机进行通信。
CC2430+DS18B20测温程序
//------------------------------------------DS18B20.c-------------------------------------------#include "DS18B20.h"UINT8 sensor_data_value[2];UINT8 flag;void Delay_nus(UINT16 s){while (s--){asm("NOP");asm("NOP");asm("NOP");}}////////////////void init_1820(void){SET_OUT;SET_DQ;//输出1CL_DQ;Delay_nus(550);//拉低一段时间SET_DQ;//释放SET_IN;//输入Delay_nus(40); //释放总线后等待15-60uswhile(IN_DQ) {;}//等待回复Delay_nus(240);//回复的低电平在60到240usSET_OUT;SET_DQ;//回到初始DQ=1;}////////////////////void write_1820(UINT8 x){UINT8 m;SET_OUT;for(m=0;m<8;m++){CL_DQ;if(x&(1<<m)) //写数据,从低位开始SET_DQ;elseCL_DQ;Delay_nus(40); //15~60usSET_DQ;}SET_DQ;}////////////////////UINT8 read_1820(void){UINT8 temp,k,n;temp=0;for(n=0;n<8;n++){CL_DQ;SET_DQ;SET_IN;k=IN_DQ; //读数据,从低位开始if(k)temp|=(1<<n);elsetemp&=~(1<<n);Delay_nus(70); //60~120usSET_OUT;}return (temp);}////////////////////////////////void read_data(void)UINT8 temh,teml;init_1820(); //复位18b20write_1820(0xcc); // 发出转换命令搜索器件write_1820(0x44); //启动Delay_nus(500);init_1820();write_1820(0xcc);write_1820(0xbe);teml=read_1820(); //读数据temh=read_1820();sensor_data_value[0]=teml;sensor_data_value[1]=temh;}////////////处理数据部分/////////////////unsigned int DataChange(void){UINT8 temh,teml;UINT16 num;read_data();teml=sensor_data_value[0];temh=sensor_data_value[1];num= temh;//将两个字节整合到一个unsigned int中num<<=8;num |= teml;num=num*0.0625*100;return(num);//返回值}//---------------------------END----------------------------------------------------- //----------------主函数中的测试函数-----已通过测试---------void main(void){unsigned int T;init_1820();delay(100);do{T=DataChange(); //读取温度值,是一个4位的十进制数,如:2345display_int(T);//显示温度函数,这个需在该函数中增加小数点,如:23.45 }while(1);}*///------------------------------------------DS18B20.h-------------------------------------------#ifndef DS18B20_H#define DS18B20_H#include "ioCC2430.h"#include "hal.h"//----------定义DS18B20的数据位为P2_4---------------#define CL_DQ P2_4=0#define SET_DQ P2_4=1#define SET_OUT P1DIR|=0x02#define SET_IN P1DIR&=~0x02#define IN_DQ P2_4extern unsigned char sensor_data_value[2];void Delay_nus(UINT16 n) ;void write_1820(unsigned char x) ;unsigned char read_1820(void);unsigned int DataChange(void);void init_1820(void) ;void read_data(void);unsigned int strtoint(unsigned char* numStr, int iLength);void inttostr(unsigned int in,unsigned char *str,unsigned char strLen);#endif。
S3C2440上ds18b20驱动
S3C2440 上ds18b20 驱动
DS18B20 是Dallas 公司生产的数字温度传感器,具有体积小、适用电压宽、经济灵活的特点。
它内部使用了onboard 专利技术,全部传感元件及转换电路集成在一个形如三极管的集成电路内。
DS18B20 有电源线、地线及数据线3 根引脚线,工作电压范围为3~5.5 V,支持单总线接口。
一、开发环境
主机:VirtualBox--Fedora 9
开发板:Mini2440--128MB Nand, Kernel:2.6.32.2
编译器:arm-linux-gcc-4.3.2
二、DS18B20 的结构和工作原理
DS18B20 的外部结构如图1 所示。
其中,VDD 为电源输入端,DQ 为数字信号输入/输出端,GND 为电源地。
DS18B20 内部结构主要包括4 部分:64 位光刻ROM、温度传感器、非易失的温度报警触发器TH 和TL、配置寄存器,如图2 所示。
CC2530协议栈的DS18B20驱动
本驱动只适用于Zigbee协议栈中!!!一共两个文件:ds18b20.c和ds18b20.h ds18b20.c#include"iocc2530.h"#include"OnBoard.h"#include "ds18b20.h"#define Ds18b20IO P1_1 //温度传感器引脚void Ds18b20Delay(unsigned int k);void Ds18b20InputInitial(void);void Ds18b20OutputInitial(void);unsigned char Ds18b20Initial(void);void Ds18b20Write(unsigned char infor);unsigned char Ds18b20Read(void);//时钟频率为32Mvoid Ds18b20Delay(unsigned int k){while (k--){asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");}}void Ds18b20InputInitial(void)//设置端口为输入{P0DIR &= 0xfd;}void Ds18b20OutputInitial(void)//设置端口为输出{P0DIR |= 0x02;}//ds18b20初始化初始化成功返回0x00,失败返回0x01unsigned char Ds18b20Initial(void){unsigned char Status = 0x00;unsigned int CONT_1 = 0;unsigned char Flag_1 = 1;Ds18b20OutputInitial();Ds18b20IO = 1; //DQ复位Ds18b20Delay(260); //稍做延时Ds18b20IO = 0; //单片机将DQ拉低Ds18b20Delay(750); //精确延时大于480us 小于960usDs18b20IO = 1; //拉高总线Ds18b20InputInitial();//设置IO输入while((Ds18b20IO != 0)&&(Flag_1 == 1))//等待ds18b20响应,具有防止超时功能{ //等待约60ms左右CONT_1++;Ds18b20Delay(10);if(CONT_1 > 8000)Flag_1 = 0;Status = Ds18b20IO;}Ds18b20OutputInitial();Ds18b20IO = 1;Ds18b20Delay(100);return Status; //返回初始化状态}void Ds18b20Write(unsigned char infor){unsigned int i;Ds18b20OutputInitial();for(i=0;i<8;i++){if((infor & 0x01)){Ds18b20IO = 0;Ds18b20Delay(6);Ds18b20IO = 1;Ds18b20Delay(50);}else{Ds18b20IO = 0;Ds18b20Delay(50);Ds18b20IO = 1;Ds18b20Delay(6);}infor >>= 1;}}unsigned char Ds18b20Read(void){unsigned char Value = 0x00;unsigned int i;Ds18b20OutputInitial();Ds18b20IO = 1;Ds18b20Delay(10);for(i=0;i<8;i++){Value >>= 1;Ds18b20OutputInitial();Ds18b20IO = 0;// 给脉冲信号Ds18b20Delay(3);Ds18b20IO = 1;// 给脉冲信号Ds18b20Delay(3);Ds18b20InputInitial();if(Ds18b20IO == 1) Value |= 0x80;Ds18b20Delay(15);}return Value;}//温度读取函数unsigned char ReadDs18B20(void){unsigned char V1,V2; //定义高低8位缓冲unsigned char temp; //定义温度缓冲寄存器Ds18b20Initial();Ds18b20Write(0xcc); // 跳过读序号列号的操作Ds18b20Write(0x44); // 启动温度转换Ds18b20Initial();Ds18b20Write(0xcc); //跳过读序号列号的操作Ds18b20Write(0xbe); //读取温度寄存器等(共可读9个寄存器)前两个就是温度V1 = Ds18b20Read(); //低位V2 = Ds18b20Read(); //高位temp = ((V1 >> 4)+((V2 & 0x07)*16)); //转换数据return temp;}//温度读取函数带1位小数位float floatReadDs18B20(void){unsigned char V1,V2; //定义高低8位缓冲unsigned int temp; //定义温度缓冲寄存器float fValue;Ds18b20Initial();Ds18b20Write(0xcc); // 跳过读序号列号的操作Ds18b20Write(0x44); // 启动温度转换Ds18b20Initial();Ds18b20Write(0xcc); //跳过读序号列号的操作Ds18b20Write(0xbe); //读取温度寄存器等(共可读9个寄存器)前两个就是温度V1 = Ds18b20Read(); //低位V2 = Ds18b20Read(); //高位//temp = ((V1 >> 4)+((V2 & 0x07)*16)); //转换数据temp=V2*0xFF+V1;fValue = temp*0.0625;return fValue;}ds18b20.h#ifndef __DS18B20_H__#define __DS18B20_H__extern unsigned char Ds18b20Initial(void);extern unsigned char ReadDs18B20(void);extern float floatReadDs18B20(void);#endif。
DS18B20温度传感器详细注解及驱动程序解析
DS18B20独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条线即可实现微处理器与DS18B20的双向通讯。
测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
工作电源:3.0~5.5V/DC(可以数据线寄生电源)在使用中不需要任何外围元件。
测量结果以9~12位数字量方式串行传送。
如果使用51单片机的话,那么中间那个引脚必须接上4.7K~10K的上拉电阻,否则,由于高电平不能正常输入/输出,要么通电后立即显示85℃,要么用几个月后温度在85℃与正常值上乱跳。
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
读ROM 33H 读DS1820温度传感器ROM中的编码(即64位地址)发出此命令之后,接着发出64 位ROM 编码,访问单总线上与该编码相符合ROM 55H对应的DS1820 使之作出响应,为下一步对该DS1820 的读写作准备。
用于确定挂接在同一总线上DS1820 的个数和识别64 位ROM 地址。
为搜索ROM FOH操作各器件作好准备。
跳过ROM CCH 忽略64 位ROM 地址,直接向DS1820 发温度变换命令。
告警搜索ECH 执行后只有温度超过设定值上限或下限的片子才做出响应。
RAM命令启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75m温度变换44Hs)。
结果存入内部第0、1字节RAM中。
1、复位操作复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
DS18B20驱动调试要点
实现一个字节读与写。需要把握的一点就是代码里面的延时一定要是在DS18B20时序的允许范围内,因为DS18B20是一个对时序精度要求很高的器件。
/********************************************************************************
3.DS18B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示复位成功。
4.DS18B20拉低电平60~240us之后,会释放总线。
DS18B20复位C代码:
static void Ini tDS18B20(void)
{
DS18B20_INPUT;
SETDQ;
RESETDQ;
详细的芯片说明具体可参看Datasheet
2.
DS18B20一般都是充当从机的角色,而单片机就是主机。单片机通过一线总线访问DS18B20的话,需要经过以下
几个步骤:
1.DS18B20复位。
2.执行ROM指令。
3.执行DS18B20功能指令(RAM指令)。
一般我们都是使用单点,也就是说单线总线上仅有一个DS18B20存在而已。所以我们无需刻意读取ROM里边的
DS18B20写逻辑0的步骤如下:
1.单片机拉低电平大约10~15us。
2.单片机持续拉低电平大约20~45us的时间。
3.释放总线
DS18B20写逻辑1的步骤如下:
1.单片机拉低电平大约10~15us,。
2.单片机拉高电平大约20~45us的时间。
3.释放总线
DS18B20读逻辑0的步骤如下:
CC2430与DS18B20的粮库温度传感器网络设计
CC2430与DS18B20的粮库温度传感器网络设计
陈得民
【期刊名称】《单片机与嵌入式系统应用》
【年(卷),期】2009(000)012
【摘要】讨论传感器网络体系结构,给出CC2430模块外围电路的硬件设计,对DS18B20温度传感器进行分析;根据我国粮仓特点对温度传感器进行了布置,阐述了系统中传感器网络的关键技术,并编写了相关程序,实现了网络化粮库温度监测.【总页数】4页(P60-63)
【作者】陈得民
【作者单位】河南许继集团有限公司
【正文语种】中文
【相关文献】
1.基于CC2430片内温度传感器温度检测系统的设计 [J], 刘渝灿
2.基于CC2430片内温度传感器的温度监测系统 [J], 蔡文晶;秦会斌;程春荣
3.基于CC2430片上温度传感器的温度监控系统 [J], 蒋凌云;马奥;吕亚超;吴智宇
4.基于CC2430温湿度监测的无线传感器网络设计 [J], 刘玉英;史旺旺
5.基于CC2430的ZigBee无线传感器网络设计与实现 [J], 郭栋;秦明芝;王伟敏因版权原因,仅展示原文概要,查看原文内容请购买。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,采用单总线接口进行通信。
它基于热敏电阻原理,可以测量环境温度,并将温度转换为数字信号输出。
DS18B20传感器由三个主要部分组成:热敏电阻、数字转换器和总线接口。
热敏电阻是DS18B20的核心部分。
它是一种特殊的电阻,其电阻值随温度的变化而变化。
热敏电阻通常由铜、镍或铂等材料制成。
DS18B20使用的热敏电阻是由铜和镍合金制成的。
数字转换器是将热敏电阻的电阻值转换为数字信号的部分。
DS18B20使用的数字转换器采用了Delta-Sigma技术,它可以将连续的模拟信号转换为数字信号。
数字转换器将热敏电阻的电阻值转换为二进制码,并通过总线接口发送给主控制器。
总线接口是DS18B20与主控制器之间的通信通道。
DS18B20采用单总线接口,这意味着只需要一条数据线来进行通信。
总线接口使用了一种特殊的通信协议,称为1-Wire协议。
在1-Wire协议中,主控制器通过发送特定的命令来读取DS18B20传感器的温度值。
DS18B20传感器的工作原理如下:1. 初始化:主控制器发送初始化命令,DS18B20传感器接收到命令后进入初始化状态。
2. 转换开始:主控制器发送转换开始命令,DS18B20传感器开始测量环境温度。
3. 转换完成:DS18B20传感器完成温度测量后,将温度值转换为数字信号,并通过总线接口发送给主控制器。
4. 读取温度值:主控制器发送读取温度值命令,DS18B20传感器将数字信号发送给主控制器。
5. 解析温度值:主控制器接收到数字信号后,将其解析为实际温度值。
DS18B20传感器的温度分辨率可以通过配置寄存器进行设置,通常可以达到0.0625°C的分辨率。
DS18B20传感器具有以下特点:1. 精度高:DS18B20传感器的温度测量精度可以达到±0.5°C。
2. 数字输出:DS18B20传感器输出的是数字信号,可以直接与数字系统进行通信。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
| EDN Asia | EDN Japan | EDN Europe | EDN Australia
站长统计 站长统计
+加为好友 +发站内信
+博客精华 +推荐文章
最近加入的小组
《基于FPGA的快速系统原型开发》翻译 《深入浅出玩转FPGA》书友会 MSP430讨论小组 EDN助学—FPGA/CPLD学习小组 博客公告
我的分类
博客日历
<2011年5月>
/*延时函数,延时单位1ms左右*/
void delay(int a);
/*延时函数 ,延时1us左右*/
void Delay_nus(uint16 s);
/*初始化单总线*/
void dsInit(void);
/*读取温度转换数值*/
int getTmpValue(void);
/*注意在得到的温度值是负数的时候是用补码表示的,由于处于测试阶段室温为正,暂时没有对其进行处理
DS18B20(温度传感器)为排针下面的器件,其DQ引脚连接至P0.0,使用时对应连接CC2430相同引脚。
*/
#define ds P0_0//ds18b20的dq位连接到了P0.0脚
//////////////////////////////songjie加的/////////////////////////////////////////
//默认应该是16M晶振
//
#include "ioCC2430.h" // 申明该文件中用到的头文件
/////////////////////////////////////////函数原型/////////////////////////////
该用户于2011/5/16 23:15:43编辑过该文章
1
上一篇:[没有上一篇了]
下一篇:CC2430 驱动DS18B20(续)
阅读(576) | 评论(0) | 收藏(0) | 举报
转发至:会!
for(j=125;j>0;j--);
}
}
void dsInit(void)
{ //对于16MHz时钟来说大概是3.125us这只是计算的并不知道是否准确
P0SEL&=0xfe;//将P0.0口设置为普通IO口
SET_OUT;// P0DIR|=0x01; //先设置为输出口
myApp_ReadTemperature()中的这个 myApp_ReadTemperature()换成我的驱动,结果就可以正常运转了具体如下:
本程序参考的文件在前两篇日志中说明了,在此声明其中引用的代码版权归原作者,本人在此表示感谢
本人萧对本程序内容享有版权,转载或引用任何内容、资料,
请注明作者本人 萧 和 出处。谢谢。
Delay_nus(550);//要求480us~960us的低电平
ds=1;//产生一个上升沿,并释放总线进入等待应答状态
SET_IN;//当b20检测到上升沿就会wait15us~60us然后
//拉低总线,60~240us
Delay_nus(30);
CC2430驱动DS18B20 -- wobuzai's Blog用户:
密码:
保存一月登录关闭
EDN首页 博客首页 登录 | 注册
wobuzai 档案 相册
wobuzai's Blog
首页
个人信息
博主:wobuzai
密码:
保存一月登录关闭日志档案
发表于 2011/5/16 23:11:55
标签: CC2430 DS18B20 驱动 温度 传感器
CC2430驱动DS18B20CC2430驱动DS18B20
经过验证之后,结果终于出来了,在SimpleApp程序的SimpleSensor程序中用的应该是默认的16Mhz晶振,这样我的驱动就可以直接在上面跑了,哈哈,用DS18B20程序代替原SimpleApp程序中的温度采集函数(路径即调用关系为SimpleSensor——>SimpleSensor.c——>uint8
最新日志
· CC2430 驱动DS18B20(续)
· CC2430驱动DS18B20
更多>>
最新评论
rainedn
评论 2011/5/18 15:46:52
很不错,很细致。
友情链接
博客统计
文章:2篇
评论:1篇
访问:1174
访客记录
hhuwxf mage100 pcli-218 zhengwei2008 rainedn emot 用户:
#define SET_OUT P0DIR|=0x01//设置为输出口
#define SET_IN P0DIR&=0xfe//设置为输入口
void delay(int a)
{
int i;
int j;
for(i=a;i>0;i--)
{
while(ds){;}//检测到应答后就会跳出循环
//while(~ds);//等待其持续的低电平结束
Delay_nus(200);
SET_OUT;
ds=1;//回到初始状态
}
系统分类: 通信网络 | 用户分类: 无分类 | 来源: 原创 | 【推荐给朋友】 | 【添加到收藏夹】
日一二三四五六
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234
博客广告
日志档案
2011年份 (2)
ds=1;//手册说初始化的时候拉低480~960us,但考虑到2430会初始化自己一段时间,所以在初始化开始之前
ds=0; //可能有一段时间了,所以这里不是直接拉低,而是先给ds=1告诉18b20开始拉低初始化了,否则它不知道从哪到哪算480us。
/*发送读数据命令的,发送此命令后要连续读连个字节*/
void sendReadCmd(void); Leabharlann /*开始温度采集函数*/
void sendChangeCmd(void);
/*写一个字节*/
void writeByte(unsigned char dat);
/*读一个字节*/
unsigned char readByte(void);
/*读取其中一位*/
unsigned char readBit(void);
///////////////////////////////////////////////函数定义////////////////////////////////////////////
最新评论 请登录后发表评论 About EDN China - 编辑部 - 广告部 - 发行部 - 读者往来 - Privacy Policy - 网站导航 -
电子网站大全 - 帮助
2011 EDN China -- Use of this website is subject to its terms of use.