音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

18B20干擾問題,求救。。

作者:zhouxunp 欄目:單片機
18B20干擾問題,求救!。
18B20測溫,電纜線長度50m,每個128只用一個18B20。
在測試數(shù)據(jù)中,經(jīng)常出現(xiàn)-2000度。源程序如下,請大蝦賜教。

#include <iom128v.h>
#include <macros.h>
#include "mega128.h"
#include "includes.h"
#define T18B20_GLOBALS            1
#include "18b20.h"

// =============================================================================
//                    BASIC TIME OPERATION
// -----------------------------------------------------------------------------
//
void Delay600US(void)
{
    unsigned int i;
    for(i = 0; i < 1200; i ++) NOP();
}
// -----------------------------------------------------------------------------    
void Delay15US(void)
{
    unsigned int i;
    for(i = 0; i < 28; i ++) NOP();
}
// -----------------------------------------------------------------------------
void Delay60US(void)
{
    unsigned int i;
    for(i = 0; i < 118; i ++) NOP();
}
// -----------------------------------------------------------------------------
void Delay1US(void)
{
    NOP();
}

// =============================================================================
//                    BASIC DALLAS FUNCDTION
// -----------------------------------------------------------------------------
//                    RESET 18B20
unsigned CHAR TReset(void)
{
//    CLI();                    // Disable the GLOBAL function
    T18B20_OFF;
    Delay600US();
    T18B20_ON;
    Delay60US();
//    CLI();
    if(T18B20_VALUE == 0) {
        Delay600US();
        SEI();
        return 0;
    }
    Delay600US();
    SEI();
    return 1;
}

// -----------------------------------------------------------------------------
//                    WRITE ONE BIT TO 18B20
void TWriteBit(unsigned CHAR ucBit)
{
    CLI();                            // Delay 1US
    T18B20_OFF;
    Delay1US();
    if(ucBit) T18B20_ON;
    else T18B20_OFF;
    SEI();
    Delay60US();
    T18B20_ON;
}
// -----------------------------------------------------------------------------
//                    READ ONE BIT FROM 18B20
unsigned CHAR TReadBit(void)
{
    unsigned CHAR ucReturn;
//    CLI();
    OS_ENTER_CRITICAL();
    T18B20_OFF;
    Delay1US();
    T18B20_ON;
    Delay15US();
    if(T18B20_VALUE) ucReturn = 1;
    else ucReturn = 0;
    OS_EXIT_CRITICAL();
//    SEI();
    Delay15US();
    return ucReturn;
}
// -----------------------------------------------------------------------------
//                    WRITE BYTE
void TWriteByte(unsigned CHAR ucByte)
{
    unsigned CHAR ucMask;
    unsigned CHAR i;

    ucMask = 0x1;
    for(i = 0; i < 8; i ++) {
        TWriteBit(ucByte & ucMask);
        ucMask = ucMask << 1;
    }
}

// -----------------------------------------------------------------------------
unsigned CHAR TReadByte(void)
{
    unsigned CHAR ucMask, i, ucChar, ucBit;
    
    ucChar = 0;
    ucMask = 0x1;
    for(i = 0; i < 8; i ++) {
      ucBit = TReadBit();
      if(ucBit) ucChar |= ucMask;
      ucMask = ucMask << 1;
    }
    
    return ucChar;
}

// -----------------------------------------------------------------------------
//                     READ THE CODE FROM 18B20    
unsigned CHAR TReadCode(unsigned CHAR * pCode)
{
    unsigned CHAR i;
    unsigned CHAR ucChar;
    
    if(TReset() != 0) return 1;
    TWriteByte(RC_READROM);
    for(i = 0; i < 8; i ++) {
       *(pCode + i) = TReadByte();
    }
    return 0;
}
// -----------------------------------------------------------------------------
//                    SET CONFIGRATION
void TSetConfig(unsigned CHAR ucConfig)
{
    ucConfig = ucConfig << 5;       // The bit6 and bit5 is the config bit.
    TReset();
    TWriteByte(RC_SKIPROM);
    TWriteByte(MC_WRITESCRATCHPAD);
    TWriteByte(00);                 // TH/User byte1
    TWriteByte(00);                 // TH/User byte2
    TWriteByte(ucConfig);
    TReset();
}    
// -----------------------------------------------------------------------------
//                    START TEMPERATURE CONVERTION
unsigned CHAR TStartConvertT(void)
{
//    if(TReset()!= 0) return 1;
    TReset();
//    CLI();
    TWriteByte(RC_SKIPROM);
    TWriteByte(MC_CONVERTT);
//    SEI();
    retur
2樓: >>參與討論
NE5532
電纜線長度50m。??
兄弟,考慮用個8腳的低成本單片機本地讀取溫度數(shù)據(jù)然后通過RS485總線傳送,50m的線對1-W是在是太變態(tài)了。

3樓: >>參與討論
lwtlwt
re.
很明顯: 你的線實在太長了,即使是RS232C也不能這么長,更不用說是用開漏輸出的1-Wrie

4樓: >>參與討論
zhouxunp
50米線,不算長。
在實驗室,用200米線都可以。只是到現(xiàn)場后,才會出現(xiàn)亂嗎。

5樓: >>參與討論
何以解憂
直接接到單片機的IO上吧 別說50米,5米都夠嗆 NE5532 是正解
嚴重干擾的情況下單片機直接就死機了

I/O口特別容易串入干擾的

* - 本貼最后修改時間:2006-3-26 10:14:55 修改者:何以解憂

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
點陣字庫制作軟件  可以生成任意大小
WINAVR為什么不使用SBR,CBR匯編指令?
AVR的打印機方案?
Tinyos系統(tǒng)開發(fā)平臺求助
求購MOTO生產(chǎn)的CDP68HC68PIE,速報價
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號