Witam
Bazując na którymś z kodów dostępnych na forum, opracowałem obsługę czujnika temperatury ds18b20. Kod działa, proszę jednak o wskazówki co do możliwej optymalizacji oraz o sprawdzenie czy poprawnie jest zrealizowany odczyt temperatury ujemnej.. Kod w załączniku, natomiast poniżej najbardziej interesujący mnie fragment :
Bazując na którymś z kodów dostępnych na forum, opracowałem obsługę czujnika temperatury ds18b20. Kod działa, proszę jednak o wskazówki co do możliwej optymalizacji oraz o sprawdzenie czy poprawnie jest zrealizowany odczyt temperatury ujemnej.. Kod w załączniku, natomiast poniżej najbardziej interesujący mnie fragment :
unsigned char lsb = ow_byte_rd(); // onewire - odczytaj bajt
unsigned char msb = ow_byte_rd(); // onewire - odczytaj bajt
char buffer[5];
int calk = ((lsb & 0b11110000)>>4) | ((msb & 0b00000111)<<4); //składamy liczbe calkowita temperatury
if (msb & 0b10000000)
{
if (calk==127) //aby dla -0.1 byl "-"
{
LCD_WriteText("-");
}
calk= calk-127;
}
LCD_Clear();
itoa(calk, buffer, 10);
LCD_WriteText(buffer);
int ulamek = ((lsb & 0b00001111)*625)/1000;
if (msb & 0b10000000)
{
if (ulamek >0) //po to aby dla ujemnych temp. ulamek nie odliczal w dol tzn. -1.9, -1,8 itd..
{
ulamek = 9-ulamek;
}
}
LCD_WriteText(".");
itoa(ulamek, buffer, 10);
LCD_WriteText(buffer);
LCD_WriteText("'C");