亚洲精品影院一区二区-亚洲精品永久一区-亚洲精品中文一区不卡-亚洲精品中文字幕久久久久久-国产亚洲精品aaa大片-国产亚洲精品成人a在线

您好,歡迎光臨電子應(yīng)用網(wǎng)![登錄](méi) [免費(fèi)注冊(cè)] 返回首頁(yè) | | 網(wǎng)站地圖 | 反饋 | 收藏
在應(yīng)用中實(shí)踐
在實(shí)踐中成長(zhǎng)
  • 應(yīng)用
  • 專(zhuān)題
  • 產(chǎn)品
  • 新聞
  • 展會(huì)
  • 活動(dòng)
  • 招聘
當(dāng)前位置:電子應(yīng)用網(wǎng) > 新聞中心 > 正文

基于DS18B20與TMS320LF2407A的溫度測(cè)量系統(tǒng)

2008年12月10日10:53:30 微計(jì)算機(jī)信息 我要評(píng)論(2)字號(hào):T | T | T
前  言

DS18B2普遍都是和單片機(jī)配合使用,很少有關(guān)于DSP與DS18B20的連接的接口報(bào)道,所以此文詳細(xì)介紹了TMS320LF2407與DS18B20的連接方法,并且很詳細(xì)的介紹了如何用C語(yǔ)言完成精確的軟件延時(shí),從而完成DS18B20與TMS320LF2407之間的基于單線總線協(xié)議的數(shù)據(jù)通訊。

1 DS18B20的時(shí)序

1. 1  復(fù)位時(shí)序

復(fù)位使用DS18B20時(shí),首先需將其復(fù)位,然后才能執(zhí)行其它命令。復(fù)位時(shí),主機(jī)將數(shù)據(jù)線拉為低電平并保持480us~960us,然后釋放數(shù)據(jù)線,再由上拉電阻將數(shù)據(jù)線拉高15~60us,等待DS18B20發(fā)出存在脈沖,存在脈沖有效時(shí)間為60~240us,這樣,就完成了復(fù)位操作。

1.2  寫(xiě)時(shí)序

在主機(jī)對(duì)DS18B20寫(xiě)數(shù)據(jù)時(shí),先將數(shù)據(jù)線置為高電平,再變?yōu)榈碗娖剑摰碗娖綉?yīng)大于1us。在數(shù)據(jù)線變?yōu)榈碗娖胶?5us內(nèi),根據(jù)寫(xiě)“1”或?qū)憽?”使數(shù)據(jù)線變高或繼續(xù)為低。DS18B20將在數(shù)據(jù)線變成低電平后15us~60us內(nèi)對(duì)數(shù)據(jù)線進(jìn)行采樣。要求寫(xiě)入DS18B20的數(shù)據(jù)持續(xù)時(shí)間應(yīng)大于60us而小于120us,兩次寫(xiě)數(shù)據(jù)之間的時(shí)間間隔應(yīng)大于1us。

1.2  讀時(shí)序

讀時(shí)隙當(dāng)主機(jī)從DS18B20讀數(shù)據(jù)時(shí),主機(jī)先將數(shù)據(jù)線置為高電平,再變?yōu)榈碗娖剑摰碗娖綉?yīng)大于1us,然后釋放數(shù)據(jù)線,使其變?yōu)楦唠娖健S18B20在數(shù)據(jù)線從高電平變?yōu)榈碗娖降?5us內(nèi)將數(shù)據(jù)送到數(shù)據(jù)線上。主機(jī)可在15us后讀取數(shù)據(jù)線.。

2 TMS320LF2407與DS18B20的連接

DS18B20有三個(gè)引腳。其與TMS320LF2407A的接線圖如下。VDD管腳接5V電壓給傳感器供電。DQ管腳為數(shù)據(jù)線,與TMS320LF2407A的IOPA6連接的同時(shí),還要接一個(gè)4.7K的上拉電阻,并接到5V的電源上,使數(shù)據(jù)線在空閑狀態(tài)下能自動(dòng)上拉為高電平。GND管腳接地。



3 軟件設(shè)計(jì)

3.1 精確的軟件定時(shí)的實(shí)現(xiàn)

眾所周知,TMS320LF2407的內(nèi)核屬于C2000系列的處理器,處理速度達(dá)到30MIPs,也就是每條指令所花的時(shí)間理論上只有33ns。但是實(shí)際情況是,由于DSP外部電路的數(shù)據(jù)處理速度和數(shù)據(jù)調(diào)用等因素,往往處理速度達(dá)不到這個(gè)數(shù)量級(jí)。那怎樣測(cè)出每條指令的處理時(shí)間從而計(jì)算出軟件延時(shí)程序的精確時(shí)間呢?計(jì)算方法如下:

1、延時(shí)程序的C語(yǔ)言代碼為:
for(loopindex=0;loopindex 其中l(wèi)oopindex 為unsigned int,無(wú)符號(hào)整形數(shù)值, N為常量,根據(jù)所要求的延時(shí)時(shí)間,計(jì)算得出。具體算法在下面給出。
2、這個(gè)for語(yǔ)句在CCS中的編譯器編譯后所產(chǎn)生的匯編語(yǔ)言為:

LACL #0h
SACL *, 0
LACL *
SUB N(計(jì)算得到的循環(huán)次數(shù))
BCND 轉(zhuǎn)移的地址,GEQ
LACC *, 0
ADD #1h
SACL *, 0
LACL *
SUB N(計(jì)算得到的循環(huán)次數(shù))
BCND 轉(zhuǎn)移的地址,LT

這些匯編語(yǔ)句所占用的時(shí)間可以計(jì)算成公式:DELAY=(9N+4)*單個(gè)指令周期。

3、測(cè)試出一個(gè)指令周期

系統(tǒng)所用晶振為20M,倍頻以后的時(shí)鐘頻率為40M,定時(shí)器1的分頻為1,也就是說(shuō)定時(shí)器的計(jì)時(shí)周期為25ns。開(kāi)啟定時(shí)器,單步運(yùn)行上面的匯編語(yǔ)句,看定時(shí)器每次運(yùn)行后所增加的數(shù)值。測(cè)試得到,在每次單步運(yùn)行占一個(gè)指令周期的匯編語(yǔ)句后,定時(shí)器的數(shù)值增加10。也就是說(shuō),每個(gè)單指令周期的指令占用的時(shí)間為:25ns*10=250ns,也就是0.25us。

4、延時(shí)程序的較終計(jì)算公式為:
DELAY =(9n+4)*0.25us。
由公式可以看出,當(dāng)n=0時(shí),DELAY=1us,當(dāng)n=65535時(shí),DELAY= 150ms。

3.2 主要程序

由于文章篇幅的關(guān)系,這里只給出復(fù)位程序、讀字節(jié)程序和整個(gè)讀溫度的主程序,寫(xiě)命令字的程序可以根據(jù)上面所述的時(shí)序自行編寫(xiě)。
#define nop()   {asm( nop );}
#define DATA_PORT  PADATDIR
#define DATA_MODE  0x0040
#define  DATA_OUT   0x4000
#define  DATA_BIT   0x0040
#define PIN_HIGH()   {PADATDIR=PADATDIR|DATA_OUT|DATA_BIT;}
#define PIN_LOW()  {DATA_PORT=(PADATDIR|DATA_OUT)&(~DATA_BIT);}
#define PIN_LEAVE()  {DATA_PORT=DATA_PORT&(~DATA_OUT)|DATA_BIT;}
/* 傳感器復(fù)位程序 */
unchar reset(void)
{  unchar retval;
unint loopindex=0;
    PIN_HIGH();
    nop();nop();nop();nop(); /* 延時(shí)1us*/
PIN_LOW();
for(loopindex=0;loopindex<213;loopindex++){;} /*置總線為低電平并保持至少480us */
PIN_HIGH();
for(loopindex=0;loopindex<26;loopindex++){;} /*等電阻拉高總線并保持15-60us */
PIN_LEAVE(); /*接受應(yīng)答信號(hào)*/
nop();
if((DATA_PORT & DATA_BIT) == 0x0000)
{  retval = 0;  }
else
{  retval = 1;  }
PIN_HIGH();
    for(loopindex=0;loopindex<106;loopindex++){;} /*延時(shí)60-240us */
    return(retval); /*返回應(yīng)答信號(hào) */
}
/* 從傳感器中讀一個(gè)字節(jié) */
void read_byte(unchar *ReadByte)        
{
    int i;
    unchar temp=0;
unint loopindex=0;    
    PIN_HIGH();
    for(i=0;i<8;i++)
    {
        temp=temp>>1;
      PIN_LOW();
  nop();nop();nop();nop(); /*延時(shí)2us */
  nop();nop();nop();nop();
  PIN_HIGH();    
  for(loopindex=0;loopindex<6;loopindex++){;}  /* 延時(shí)14us */
  PIN_LEAVE();
  nop();
  if((DATA_PORT & DATA_BIT) == 0x0000)
  {   temp=temp & 0x7F;  }
  else
  {   temp=temp | 0x80;  }
  PIN_HIGH();
  for(loopindex=0;loopindex<26;loopindex++){;}   /* 延時(shí)60us */
    }                        
    *ReadByte=temp;
    return;
}
/* 將讀得的溫度轉(zhuǎn)化為十進(jìn)制 */
float transform(unchar *T)
{
unchar temp=0;
float temprature=0;
temp=temp|(*(T+1)<<8);
temp=temp|*T;
if((temp&0x0F800)==0x0F800)
{  temprature=0-((~temp)+1)*0.0625; }
else
{  temprature=temp*0.0625;   }  
return(temprature);
}
/* 讀取溫度主函數(shù),返回十進(jìn)制溫度數(shù) */
float read_temp()
{
Unchar buff[2];
float temprature=0;
unint loopindex=0;  
while (reset()==1){};      /* 復(fù)位等待從機(jī)應(yīng)答 */
    write_byte(0xCC);         /* 忽略ROM匹配 */
    write_byte(0x44);          /* 發(fā)送溫度轉(zhuǎn)化命令 */
    for(loopindex=0;loopindex<65535;loopindex++){;}  /* 延時(shí)300ms,等待數(shù)模轉(zhuǎn)換 */
for(loopindex=0;loopindex<65535;loopindex++){;}
while(reset()==1){};        /* 再次復(fù)位,等待從機(jī)應(yīng)答 */
    write_byte(0xCC);         /* 忽略ROM匹配 */
    write_byte(0xBE);          /* 發(fā)送讀溫度命令 */
    read_byte(buff);           /* 讀出溫度低8位 */        
    read_byte(buff+1);         /* 讀出溫度高8位 */
    temprature=transform(buff);
    PIN_HIGH();             /* 釋放總線 */
return(temprature);
}

4 結(jié)束語(yǔ)

DS18B20是一款非常優(yōu)秀的單總線數(shù)字式傳感器。硬件設(shè)計(jì)簡(jiǎn)單,運(yùn)行可靠。通過(guò)分析C語(yǔ)言編譯后的匯編語(yǔ)言可以很明確的計(jì)算出軟件延時(shí)的時(shí)間,從而滿足單線總線通訊的時(shí)序要求,從而可以出色的完成DSP與DS18B20通訊的軟件設(shè)計(jì)。

5 本文創(chuàng)新點(diǎn)有兩個(gè):
1、通過(guò)C編譯器編譯出來(lái)的相應(yīng)的C語(yǔ)言的延時(shí)程序,從而得到其對(duì)應(yīng)的匯編語(yǔ)言,再通過(guò)定時(shí)器計(jì)時(shí),能夠知道單指令周期的時(shí)間,從而能夠精確的計(jì)算出軟件延時(shí)程序的延時(shí)時(shí)間。
2、通常DS18B20都是與單片機(jī)配合使用的,而本文則詳細(xì)的介紹了DS18B20與DSP的結(jié)合使用方法,其區(qū)別主要是在端口的操作上和延時(shí)的控制上。
網(wǎng)友評(píng)論:已有2條評(píng)論 點(diǎn)擊查看
登錄 (請(qǐng)登錄發(fā)言,并遵守相關(guān)規(guī)定)
如果您對(duì)新聞?lì)l道有任何意見(jiàn)或建議,請(qǐng)到交流平臺(tái)反饋。【反饋意見(jiàn)】
關(guān)于我們 | 聯(lián)系我們 | 本站動(dòng)態(tài) | 廣告服務(wù) | 歡迎投稿 | 友情鏈接 | 法律聲明
Copyright (c) 2008-2025 01ea.com.All rights reserved.
電子應(yīng)用網(wǎng) 京ICP備12009123號(hào)-2 京公網(wǎng)安備110105003345號(hào)