首页 > 编程知识 正文

单总线对引脚要求,单总线通信芯片

时间:2023-05-05 14:40:40 阅读:125098 作者:1511

另一方面,单总线协议(1-wire )1.定义)主机和从机通过一条总线通信,采用半双工通信方式,单线=时钟线数据线控制线(电源线) )。 在理想情况下,一条总线上的从设备的数量几乎不受限制。

这是2.特点达拉斯半导体公司发表的通信技术。 采用一条信号线,可以同时传输时钟和数据,而且数据传输是双向的。

3.优点:单总线技术线路简单,硬件开销少,成本低廉,总线易于扩展和维护等。

二、单总线通信过程中所有单总线设备都要求采用严格的通信协议保证数据的完整性。 该协议定义了几种信号类型:复位脉冲、响应脉冲、写入0、写入1、读取0和读取1。 所有这些信号,除了响应脉冲以外,都从主机发送同步信号。 另外,与许多串行通信格式的不同之处在于,发送所有命令和数据的字节的下位处于上位(多数字节的上位)。

(1)初始化序列)复位和响应脉冲初始化过程 = 复位脉冲 + 从机应答脉冲。

主机下调单总线480 ~ 960 us,产生复位脉冲,释放总线进入接收模式。 主机开放总线时,会产生从低电平跳至高电平上升沿,单总线设备检测到上升沿后,延迟15 ~ 60 us,单总线设备降低总线60 ~ 240 us,使响应脉冲主机接收到来自从机的响应脉冲,表明单总线设备已就绪,初始化过程已完成。

初始化的时序图如下所示。

)2)写间隙有写0时的间隙和写1时的间隙两种。

拉低数据线后,在15 ~ 60 us的时间窗口内对数据线进行采样。 如果数据线为低电平,则写入0;如果数据线为高电平,则写入1。 为了在主体上形成灯1点间隙,需要降低数据线。 在写入时间隙开始后的15 us内允许提升数据线。 如果主机出现0插槽写入,则必须降低数据线以保持60 us。

写入时间隙的时序图如下所示。

)读取间隙)主机拉下总线(是,至少保持1 us后,释放总线,必须在15 us内读取数据。

因为单总线设备仅在主机发出读插槽时才向主机传输数据,所以在主机发出读命令之后,单总线设备必须立即生成读插槽,以便从设备传输数据。 所有读插槽至少需要60us,并且两个独立的读插槽之间至少需要1us的恢复时间。 每个读插槽由主机启动,至少将总线1us下调(如图5所示)。 主机启动读插槽后,单总线设备开始在总线上发送0或1。 当从站发送1时,总线保持在高电平; 如果要发送0,请拉下公共汽车。 发送0后,从机在该时隙结束后释放总线。 通过上拉电阻将巴士恢复到空闲状态。 从站发送的数据在开始时隙后,维持有效时间15us。 因此,主机必须在读插槽中释放总线,并在插槽开始后15us内对总线状态进行采样。

读取时间隙的时序图如下所示。

三.当主机操作具有多个DS18B20的设备时,DS18B20的主机首先连接到一个总线设备,并使用搜索rom(foh )命令读取其序列号(33H )

如果只有一个DS18B20测温,则不需要搜索ROM、读取ROM或匹配ROM操作。 命令只需跳过rom(cch )命令,即可指示温度转换(44h )和读取温度(BEh )操作。

# include ' ds18b20.h ' # include ' delay.h '//实验台:重置STM 32 f 103//d s18 b 20 void d d s18 b 20 _ rst (void ) ds18b 20 降低//dqdelay_us(750 ) 750us DS18B20_DQ_OUT=1; //dq=1delay_us(15; //15等待us//ds18b 20响应//未检测到返回1:ds18b20的存在//返回03360u8ds18b20_check(void ) ) { u8 retry=0; DS18B20_IO_IN (; //setpg 11输入while (ds18b 20 _ dq _ in { retry 200 ) retry; dlay_us(1; (; if (恢复=200 )返回1; else retry=0; while (! ds18b20_dq_inretry240({retry; dlay_us(1; (; if (恢复=240 )返回1; 返回0; 从DS18B20读取1位//返回值:1/0u8ds18b20_read_bit(void ) { u8数据; DS18B20_IO_OUT (; //setpg 11 output d s18 b 20 _ dq _ out=0; dlay_us(2; DS18B20_DQ_OUT=1; DS18B20_IO_IN (;

//SET PG11 INPUTdelay_us(12);if(DS18B20_DQ_IN)data=1; else data=0; delay_us(50); return data;}//从DS18B20读取一个字节//返回值:读到的数据u8 DS18B20_Read_Byte(void) { u8 i,j,dat; dat=0;for (i=1;i<=8;i++) { j=DS18B20_Read_Bit(); dat=(j<<7)|(dat>>1); } return dat;}//写一个字节到DS18B20//dat:要写入的字节void DS18B20_Write_Byte(u8 dat) { u8 j; u8 testb;DS18B20_IO_OUT();//SET PG11 OUTPUT; for (j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if (testb) { DS18B20_DQ_OUT=0;// Write 1 delay_us(2); DS18B20_DQ_OUT=1; delay_us(60); } else { DS18B20_DQ_OUT=0;// Write 0 delay_us(60); DS18B20_DQ_OUT=1; delay_us(2); } }}//开始温度转换void DS18B20_Start(void) { DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0x44);// convert} //初始化DS18B20的IO口 DQ 同时检测DS的存在//返回1:不存在//返回0:存在 u8 DS18B20_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE); //使能PORTG口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PORTG.11 推挽输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_SetBits(GPIOG,GPIO_Pin_11); //输出1DS18B20_Rst();return DS18B20_Check();} //从ds18b20得到温度值//精度:0.1C//返回值:温度值 (-550~1250) short DS18B20_Get_Temp(void){ u8 temp; u8 TL,TH;short tem; DS18B20_Start (); // ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);// skip rom DS18B20_Write_Byte(0xbe);// convert TL=DS18B20_Read_Byte(); // LSB TH=DS18B20_Read_Byte(); // MSB if(TH>7) { TH=~TH; TL=~TL; temp=0;//温度为负 }else temp=1;//温度为正 tem=TH; //获得高八位 tem<<=8; tem+=TL;//获得底八位 tem=(float)tem*0.625;//转换if(temp)return tem; //返回温度值else return -tem; } #ifndef __DS18B20_H#define __DS18B20_H #include "sys.h" // ////IO方向设置#define DS18B20_IO_IN() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}#define DS18B20_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;}IO操作函数 #defineDS18B20_DQ_OUT PGout(11) //数据端口PA0 #defineDS18B20_DQ_IN PGin(11) //数据端口PA0 u8 DS18B20_Init(void);//初始化DS18B20short DS18B20_Get_Temp(void);//获取温度void DS18B20_Start(void);//开始温度转换void DS18B20_Write_Byte(u8 dat);//写入一个字节u8 DS18B20_Read_Byte(void);//读出一个字节u8 DS18B20_Read_Bit(void);//读出一个位u8 DS18B20_Check(void);//检测是否存在DS18B20void DS18B20_Rst(void);//复位DS18B20 #endif 总结

单总线技术以其线路简单、硬件开销少、成本低廉、软件设计简单优势而有着无可比拟的应用前景。基于单总线技术能较好地解决传统识别器普遍存在的携带不便、易损坏、易受腐馈、易受电磁干扰等不足,可应用于高度安全的门禁、身份识别等领域。其通信可靠简单,很容易实现。因此单总线技术有着广阔的应用前景,是值得产注的一个发展领域。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。