首页 > 算法 > 自动驾驶 > 18b20时序延时多少合适,18B20的温度转换的等待时间问题为什么实际延迟不用几百MS

18b20时序延时多少合适,18B20的温度转换的等待时间问题为什么实际延迟不用几百MS

来源:整理 时间:2023-01-11 15:16:27 编辑:亚灵电子网 手机版

1,18B20的温度转换的等待时间问题为什么实际延迟不用几百MS

请仔细看芯片手册,转换时间是跟据你所需要的精度而定的,DS18B20最少要93.57ms(9位时),最大750ms(12位时).在protues仿真的时候可以不按手册时间,但实际电路中一定要严格按照芯片手册要求来进行,否则温度转换不成功。如果等待的过程中,其他程序要求正常执行,此时需要用定时器/计数器来实现转换等待。

18B20的温度转换的等待时间问题为什么实际延迟不用几百MS

2,18B20的温度转换的等待时间问题为什么实际延迟不用几百MS

请仔细看芯片手册,转换时间是跟据你所需要的精度而定的,DS18B20最少要93.57ms(9位时),最大750ms(12位时).在protues仿真的时候可以不按手册时间,但实际电路中一定要严格按照芯片手册要求来进行,否则温度转换不成功。如果等待的过程中,其他程序要求正常执行,此时需要用定时器/计数器来实现转换等待。

18B20的温度转换的等待时间问题为什么实际延迟不用几百MS

3,单片机 急需221184Mhz的晶振的尽可能精确的延时函数单位为

看样子你是用的51单片机吧,一般都用的11.0592的,你用的大了点,但这也不影响;但你要注意它每执行一步用的时候为0.5微秒,所以:void delayus (unsigned x) for (;x>0;x--) _nop_();}然后你再用KEIL里的调试,去测一下大约用的时间
stc网站上是有下载的:http://www.mcu-memory.com/datasheet/stc/stc-user-code/stcmcu-ds18b20.rar你用其中1t的程序试试。

单片机 急需221184Mhz的晶振的尽可能精确的延时函数单位为

4,关于STM32读18B20的问题

18b20是单数据线传输的,所以需要一位一位的接收,另外先接收的是低位,所以每次接收到数据就与data的最高位进行或运算(这样不会修改data的其他位),接收完一位后,就要把数据data向右移一位,这样data的最高位就空余出来了,可以继续接收,如此循环比如0000 0000 B 接收到1进行或运算1000 0000B之后右移0100 0000B有接收到一个1或运算 1100 0000B如此循环或运算可以很好的进行位操作而不影响其他的位,因为最先接收到的是低位所以选择了右移,同理如果衔接受到的是高位则用左移。

5,求助关于ds18b20读时序的两个问题

问题1:说法并不矛盾,我理解的是在你拉低总线15US内必须释放总总线,但你拉低的宽度不能小于1US,如果小于1US,则1820可能检测不到。 注:我拿到的一个中文资料上解释也有误,明明是说写时序,它却翻译的是读时序,建议还是看下原版的英文资料。 问题2:对1820读数据的前提是你要先进行温度转换,或发送读取指令,也就是说你必须通过写0xbe读温度指令,才能读取,否则它就会当成是写了。当你正确发送读指令后,再读1它肯定不会当成是写1的 1820的时序比较复杂,建议把资料吃透的同时,还要多亲手操作,光看资料并不能完全解决问题。

6,ds18b20 如何读取数据

DS18B20是温度传感器,读写数据有一定的时序:1、写操作(1) 数据线先置低电平“0”。(2) 延时确定的时间为15微秒。(3) 按从低位到高位的顺序发送字节(一次只发送一位)。(4) 延时时间为45微秒。(5) 将数据线拉到高电平。(6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。(7) 最后将数据线拉高。2、读操作(1)将数据线拉高“1”。(2)延时2微秒。(3)将数据线拉低“0”。(4)延时3微秒。(5)将数据线拉高“1”。(6)延时5微秒。(7)读数据线的状态得到1个状态位,并进行数据处理。(8)延时60微秒。3、例程//温度传感器:DS18B20//显示方式:LED#include <reg51.h>#define uchar unsigned charsbit keyup=P1^0;sbit keydn=P1^1;sbit keymd=P1^2;sbit out=P3^7; //接控制继电器sbit DQ = P3^4; //接温度传感器18B20uchar t[2],number=0,*pt; //温度值uchar TempBuffer1[4]=uchar Tmax=18,Tmin=8;uchar distab[]=uchar dismod=0,xiaodou1=0,xiaodou2=0,currtemp;bit flag;void t0isr() interrupt 1 TH0=(65536-5000)/256; TL0=(65536-5000)%256; switch(number) case 0: P2=0x08; P0=distab[TempBuffer1[0]]; break; case 1: P2=0x04; P0=distab[TempBuffer1[1]]; break; case 2: P2=0x02; P0=distab[TempBuffer1[2]]&0x7f; break; case 3: P2=0x01; P0=distab[TempBuffer1[3]]; break; default: break; } number++; if(number>3)number=0;}void delay_18B20(unsigned int i) while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void) bit x=0; do DQ=1; delay_18B20(8); DQ = 0; //单片机将DQ拉低 delay_18B20(90); //精确延时 大于 480us DQ = 1; //拉高总线 delay_18B20(14); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败,继续初始化 }while(x); delay_18B20(20);}/***********ds18b20读一个字节**************/ unsigned char ReadOneChar(void) unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); } return(dat);}/*************ds18b20写一个字节****************/ void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i--) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat>>=1; }}/**************读取ds18b20当前温度************/unsigned char *ReadTemperature(unsigned char rs) unsigned char tt[2]; delay_18B20(80); Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0x44); //启动温度转换 delay_18B20(80); Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度 tt[0]=ReadOneChar(); //读取温度值低位 tt[1]=ReadOneChar(); //读取温度值高位 return(tt);}void covert1(void) //将温度转换为LED显示的数据 uchar x=0x00,y=0x00; t[0]=*pt; pt++; t[1]=*pt; if(t[1]&0x080) //判断正负温度 TempBuffer1[0]=0x0c; //c代表负 t[1]=~t[1]; /*下面几句把负数的补码*/ t[0]=~t[0]; /*换算成绝对值*********/ x=t[0]+1; t[0]=x; if(x==0x00)t[1]++; } else TempBuffer1[0]=0x0a; //A代表正 t[1]<<=4; //将高字节左移4位 t[1]=t[1]&0xf0; x=t[0]; //将t[0]暂存到X,因为取小数部分还要用到它 x>>=4; //右移4位 x=x&0x0f; //和前面两句就是取出t[0]的高四位 y=t[1]|x; //将高低字节的有效值的整数部分拼成一个字节 TempBuffer1[1]=(y%100)/10; TempBuffer1[2]=(y%100)%10; t[0]=t[0]&0x0f; //小数部分 TempBuffer1[3]=t[0]*10/16; //以下程序段消去随机误检查造成的误判,只有连续12次检测到温度超出限制才切换加热装置 if(currtemp>Tmin)xiaodou1=0; if(y<Tmin) xiaodou1++; currtemp=y; xiaodou2=0; } if(xiaodou1>12) out=0; flag=1; xiaodou1=0; } if(currtemp<Tmax)xiaodou2=0; if(y>Tmax) xiaodou2++; currtemp=y; xiaodou1=0; } if(xiaodou2>12) out=1; flag=0; xiaodou2=0; } out=flag;}void convert(char tmp) uchar a; if(tmp<0) TempBuffer1[0]=0x0c; a=~tmp+1; } else TempBuffer1[0]=0x0a; a=tmp; } TempBuffer1[1]=(a%100)/10; TempBuffer1[2]=(a%100)%10;}void keyscan( )uchar keyin; keyin=P1&0x07; if(keyin==0x07)return; else if(keymd==0) dismod++; dismod%=3; while(keymd==0); switch(dismod) case 1: convert(Tmax); TempBuffer1[3]=0x11; break; case 2: convert(Tmin); TempBuffer1[3]=0x12; break; default: break; } } else if((keyup==0)&&(dismod==1)) Tmax++; convert(Tmax); while(keyup==0); } else if((keydn==0)&&(dismod==1)) Tmax--; convert(Tmax); while(keydn==0); } else if((keyup==0)&&(dismod==2)) Tmin++; convert(Tmin); while(keyup==0); } else if((keydn==0)&&(dismod==2)) Tmin--; convert(Tmin); while(keydn==0); } xiaodou1=0; xiaodou2=0;}main() TMOD=0x01; TH0=(65536-5000)/256; TL0=(65536-5000)%256; TR0=1; ET0=1; EA=1; out=1; flag=0; ReadTemperature(0x3f); delay_18B20(50000); //延时等待18B20数据稳定 while(1) pt=ReadTemperature(0x7f); //读取温度,温度值存放在一个两个字节的数组中 if(dismod==0)covert1(); keyscan(); delay_18B20(30000); }}1

7,单片机温度控制器DS18B20的时序问题

for循环表示一个字节的8个bit位;if(DQ)就是用来判断当前DQ所对应的那条IO是高还是低,若是高,则执行dat |= 0x80,否则不执行;而dat是采用右移循环的,每右移一位,则dat的最高位会被填零,因此读到IO为高时,需要或0x80来置位dat的最高位.这个程序虽然能用,但写得不够规范,比如if(DQ),就最好跟一个花括号.最好从一开始就养成规范化的习惯,对以后的工作非常有帮助.此外,这个程序可以直接用于DS18B20距离很近的情况下,但若是距离较远,信号在较长的线路上会出现一定的滞后,信号波形的上升率会下降,因此更合理的做法是,将两次给脉冲之间的延时,分成两份,给0之后延时一部分,给1之后再延时一部分,这样可以减少单总线在长距离时的出错率.

8,求助关于读写ds18b20时序的两个问题

太巧了,我刚好也在弄DS18B20,花了近两天时间,终于把它搞定了,对你的问题我还是有信心的。 问题一:第二种说法正确,你可以参考它的权威数据手册。 问题二:你不说我还真没发现,DS18B20的写1时序与读1时序真的完全相同,观察力刚刚的,佩服。不过个人认为没关系,每次对DS18B20操作,都是先由主机复位DS18B20,再发送诸如跳过ROM等指令(此时的DS18B20默认为接收状态);待主机发送完这些指令后,DS18B20自动进入发送状态,主机进入接收状态并开始接收数据,最后完成通信。 简而言之,DS18B20复位后,首先默认进入接收状态,接收完控制指令后,自动进入发送状态,最后结束通信。所以ds18b20的写1时序与读1时序还是不一样的。这仅是我个人观点,仅供参考。

9,ds18b20 读值时序是什么

读位:1、将总线拉低,延时1μs;2、拉高(释放总线),延时15μs;3、读取返回值。返回值就是和18b20接线的那个IO口的状态
问题1:说法并不矛盾,我理解的是在你拉低总线15us内必须释放总总线,但你拉低的宽度不能小于1us,如果小于1us,则1820可能检测不到。 注:我拿到的一个中文资料上解释也有误,明明是说写时序,它却翻译的是读时序,建议还是看下原版的英文资料。 问题2:对1820读数据的前提是你要先进行温度转换,或发送读取指令,也就是说你必须通过写0xbe读温度指令,才能读取,否则它就会当成是写了。当你正确发送读指令后,再读1它肯定不会当成是写1的 1820的时序比较复杂,建议把资料吃透的同时,还要多亲手操作,光看资料并不能完全解决问题。

10,18b20实现温度测量对初始化和读写的时序问题很是困惑有经验的

主机将总线拉低最短480us,之后释放总线。由于5kΩ上拉电阻的作用,总线恢复到高电平。DS18B20检测到上升沿后等待15到60us,发出存在脉冲:拉低总线60-240us。至此,初始化和存在时序完毕。 所有的写时隙必须至少有60us的持续时间。相邻两个写时隙必须要有最少1us的恢复时间。所有的写时隙(写0和写1)都由拉低总线产生。为产生写1时隙,在拉低总线后主机必须在15us内释放总线(拉低的电平要持续至少1us)。由于上拉电阻的作用,总线电平恢复为高电平,直到完成写时隙。 为产生写0时隙,在拉低总线后主机持续拉低总线即可,直到写时隙完成后释放总线(持续时间60-120us)。 写时隙产生后,DS18B20会在产生后的15到60us的时间内采样总线,以此来确定写0还是写1。 DS18B20只有在主机发出读时隙时才能发送数据到主机。因此,主机必须在BE 命令,B4命令后立即产生读时隙以使DS18B20提供相应的数据。另外,在44命令,B8命令后也要产生读时隙。 所有的读时隙必须至少有60us的持续时间。相邻两个读时隙必须要有最少1us的恢复时间。所有的读时隙都由拉低总线,持续至少1us后再释放总线(由于上拉电阻的作用,总线恢复为高电平)产生。DS18B20输出的数据在下降沿产生后15us后有效。因此,释放总线和主机采样总线等动作要在15us内完成。
文章TAG:18b20时序延时多少合适时序延时多少

最近更新

  • BA6208是什么芯片,BA6247是什么芯片?BA6208是什么芯片,BA6247是什么芯片?

    什么是芯片,它的用途是什么?BABA:镁光的MLC闪存芯片,单芯片,本地主控芯片BA,这是PCItoISA桥芯片的最后一张图,右边是BIOS芯片。都是信号解调芯片,芯片正面连接调谐器芯片,调谐器芯片为开关电源.....

    自动驾驶 日期:2024-04-10

  • 松下npm贴片机多少钱,买松下贴片机多少钱松下npm贴片机多少钱,买松下贴片机多少钱

    买松下贴片机多少钱5元2,问下全新的松下贴片机cm602Lnmejm8a12吸嘴0402芯片的的要300万1000万都有你好!大概20万左右,市场的行情是这样,可以去问问。打字不易,采纳哦!3,买一台松下贴片机要多.....

    自动驾驶 日期:2024-04-10

  • A9智能电视处理器能跑多少分,A9频率14怎么442系统和422系统安兔兔跑分一样A9智能电视处理器能跑多少分,A9频率14怎么442系统和422系统安兔兔跑分一样

    A9频率14怎么442系统和422系统安兔兔跑分一样2,海信LED网络电视所用的A9CPU是怎样档次的CPU3,Mstar6A918处理器的主要参数4,a9处理器相当于骁龙多少5,三星a9安兔兔跑分50000多分正常吗6,苹.....

    自动驾驶 日期:2024-04-10

  • 03db是多少,30wt等于多少03db是多少,30wt等于多少

    30wt等于多少wt%是重量百分比的意思,如重量百分含量为30。即100公斤物质中,某元素含量为30公斤。0.32,33cl等于多少ml厘升cl是体积单位为酿酒行业以及调酒师的常用术语进行单位转换的话1.....

    自动驾驶 日期:2024-04-10

  • 占空比多少有意义,占空比控制有什么优点占空比多少有意义,占空比控制有什么优点

    占空比控制有什么优点2,100占空比有何意义3,氩弧焊机的占空比在脉冲的过程中起到什么作用4,万用表上的占空比是什么意思什么是占空比占空比是什么意思5,占空比有什么作用谁来指点一下6,什么.....

    自动驾驶 日期:2024-04-10

  • 电路正负极颠倒危害,锂电池正负极接反电路正负极颠倒危害,锂电池正负极接反

    损坏电路元件:电动自行车电池正负极接反后,通电后会损坏电路元件。一旦正负极颠倒,电动自行车电池正负极接反会导致以下情况:保险丝熔断:电动自行车电池正负极接反后,保险丝一旦通电就会.....

    自动驾驶 日期:2024-04-10

  • 电路图中网孔,电路中网格的概念电路图中网孔,电路中网格的概念

    网格电流法只适用于平面电路图。网状:在确定的电路图中,最简单的不能细分的回路称为网状,下面的电路图中有几个分支,电路拓扑又称电路图,即电路结构,是对电路图的再次抽象,网状:将电路画在平.....

    自动驾驶 日期:2024-04-10

  • 电路板的硬件调试,简述硬件电路的设计流程电路板的硬件调试,简述硬件电路的设计流程

    电路板制作完成后,将购买的元件焊接到PCB板上,然后对电路板进行测试和调试。印刷电路板的测试和调试计划,拿到电路板的第一件事是查看是否有大型设备型号和引脚,更换电路板的高昂成本也成.....

    自动驾驶 日期:2024-04-10