با سلام خدمت کلیه دوستان.
من در پروژه ای می خواهم تا دمای سنسور ds18b20 را بخوانم و از طریق پورت سریال ارسال کنم. با کتابخانه خود کامپایلر برنامه رو نوشتم. ولی با اینکه دستور owReset() مقدار صفر برمی گردونه ، به این معنی که سنسور رو شناخته ، اعداد دما قابل فهم نیست.
اولش که با سرعت FRC * pll 16 کار می کردم ، اعداد خوانده شده از سنسور عین یک شمارنده بود.
بعدش کلاک رو به FRC کم کردم، اعداد معمولا 0xFE 0x80 دو بایت خوانده شده اند.
نمی دونم چطوری این اعداد به دما تبدیل می شوند. یا ایراد کارم کجاست؟
ممنون لطفا کمک کنید.
این هم کد :
من در پروژه ای می خواهم تا دمای سنسور 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;
}
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;
}