اطلاعیه

Collapse
No announcement yet.

کار با سنسور ds18b20 + میکرو dspic30f6014a + کامپایلر mikroc

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کار با سنسور ds18b20 + میکرو dspic30f6014a + کامپایلر mikroc

    با سلام خدمت کلیه دوستان.
    من در پروژه ای می خواهم تا دمای سنسور ds18b20 را بخوانم و از طریق پورت سریال ارسال کنم. با کتابخانه خود کامپایلر برنامه رو نوشتم. ولی با اینکه دستور owReset() مقدار صفر برمی گردونه ، به این معنی که سنسور رو شناخته ، اعداد دما قابل فهم نیست.
    اولش که با سرعت FRC * pll 16 کار می کردم ، اعداد خوانده شده از سنسور عین یک شمارنده بود.
    بعدش کلاک رو به FRC کم کردم، اعداد معمولا 0xFE 0x80 دو بایت خوانده شده اند.
    نمی دونم چطوری این اعداد به دما تبدیل می شوند. یا ایراد کارم کجاست؟
    ممنون لطفا کمک کنید.
    این هم کد :
    void Get_DS1820_Temp(void);
    void main() {
    ADPCFG = 0xFFFF; // Configure AN pins as digital

    UART2_Init(9600); // Initialize UART module at 9600 bps

    Delay_ms(100);
    //--- main loop
    do {
    //--- perform DS1820temperature reading
    Get_DS1820_Temp();
    UART2_Write(0x7e);
    UART2_Write(ds1820_tmp_H);
    UART2_Write(ds1820_tmp_L);
    UART2_Write((a0+a1<<1));
    Delay_ms(500);
    } while (1);
    }
    ///////////////////////
    void Get_DS1820_Temp(void)
    {
    a0=Ow_Reset(&PORTF, 6); // Onewire reset signal
    Ow_Write(&PORTF, 6, 0xCC); // Issue command SKIP_ROM
    Ow_Write(&PORTF, 6, 0x44); // Issue command CONVERT_T
    Delay_us(120);
    a1=Ow_Reset(&PORTF, 6);
    Ow_Write(&PORTF, 6, 0xCC); // Issue command SKIP_ROM
    Ow_Write(&PORTF, 6, 0xBE); // Issue command READ_SCRATCHPAD
    Delay_ms(950);

    ds1820_temp = Ow_Read(&PORTF, 6);
    ds1820_temp = (Ow_Read(&PORTF, 6) << 8) + ds1820_temp;

    ds1820_tmp_H = (ds1820_temp & 0xFF00 ) >> 8 ;
    ds1820_tmp_L = ds1820_temp & 0x00FF;
    }
لطفا صبر کنید...
X