Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

DS18b20- wyswietlenie temp.

MarcinBarowski 11 Lut 2007 15:39 1614 4
  • #1 11 Lut 2007 15:39
    MarcinBarowski
    Poziom 15  

    Witam!
    Dla przyblizenia mojego problemu chcialbym przedstawic na poczatku kilka faktow. Czujnik dziala i mierzy temp , jednak nie wiem jak sie dobrac do przeliczenia danej wartosci aby ja pozniej mozna bylo wyswietlic na LCD.
    W pokoju na inym termometrze temp. wynosi 20.9 stopnia celciusza a na DS18b20 msb=0x01 , lsb=0x7D. Gdy staram sie to przeliczyc na piechote na kartce wychodza mi wyniki w granicach 35 stopni.A nawet i wiecej.
    Jesli chodzi o rozdzielczosc czujnika, to moim zdaniem jest to rozdzielczosc 9-bitowa.Czujnik nie byl od poczatku uruchomienia kalibrowany, wiec zakladam ze wartosci R0 i R1 sa "0". Chociaz nie jestem na 100% pewien.
    Czytalem ze pierwsze 3 bity LSB sa nie okreslone przy 9- bitowej rozdzielczosci?Co mam przez to rozumiec??
    Problemem moim jest wlasnie przeliczenie temp tak zeby mozna byla ja wyswietlic.

    Za wszelka pomoc wielkie dzieki
    Pozdrawiam
    Marcin Barowski

    0 4
  • #3 11 Lut 2007 19:40
    zumek
    Poziom 39  

    MarcinBarowski napisał:
    ...W pokoju na inym termometrze temp. wynosi 20.9 stopnia celciusza a na DS18b20 msb=0x01 , lsb=0x7D. Gdy staram sie to przeliczyc na piechote na kartce wychodza mi wyniki w granicach 35 stopni.A nawet i wiecej.

    0x017D/0x10=0x17 (23 stopnie)
    MarcinBarowski napisał:

    Jesli chodzi o rozdzielczosc czujnika, to moim zdaniem jest to rozdzielczosc 9-bitowa.Czujnik nie byl od poczatku uruchomienia kalibrowany, wiec zakladam ze wartosci R0 i R1 sa "0". Chociaz nie jestem na 100% pewien.

    W dokumentacji DS18B20 , Pan Dallas ;) napisał:
    The power-up default of these bits is R0 = 1 and R1 = 1 (12-bit resolution).

    redart napisał:
    ...Prościej się nie da...

    Zapewniam Cię , że się da prościej :)

    Piotrek

    0
  • #4 11 Lut 2007 23:58
    redart
    Poziom 23  

    zumek napisał:
    Zapewniam Cię , że się da prościej :)


    No jak się da to chylę czoła, ale "pokażcie co potraficie", że zacytuję klasyka polskiego socjalizmu... Jak odczytać prościej temperaturkę z jednoczesną indykacją > 0 °C <, bo może uda się zaoszczędzić parę bajtów flash'a?
    Pzdr.

    0
  • #5 12 Lut 2007 09:45
    zumek
    Poziom 39  

    redart napisał:
    zumek napisał:
    Zapewniam Cię , że się da prościej :)


    No jak się da to chylę czoła, ale "pokażcie co potraficie", że zacytuję klasyka polskiego socjalizmu... Jak odczytać prościej temperaturkę z jednoczesną indykacją > 0 °C <, bo może uda się zaoszczędzić parę bajtów flash'a?
    Pzdr.

    Nie ma co walić głową w mur , tylko ociupinkę pomyśleć ;)
    Zresztą , ten temat przewinął się na elektrodzie tysiące razy , a sposoby obliczania temperatury DS-a , widziałem już najdziwaczniejsze ;)
    Dla 12-bitowej rozdzielczości DS18B20:
    Code:

    Dim T As Integer

    Sub Read18b20
       1wreset
       1wwrite &HCC
       1wwrite &H44
       Wait 1
       'lub:
        'Waitms 250
        'Waitms 250
        'Waitms 250
       'Lub Zająć Czymś Procesor Przez 750 ms
       1wreset
       1wwrite &HCC
       1wwrite &HBE
       T = 1wread(2)
       T = T / 16
       Lcd T ; " C"
    End Sub

    Wydaje mi się , że prosciej już się nie da , ale kto wie ;)
    Nie rozumiem dlaczego użyłeś Long(32-bit) , skoro temperatura odczytana z DS-a mieści się na 16 bitach , a dokładnie na 15 , oraz 16 bit to bit znaku. Inaczej rzecz ujmując , jest to liczba 16-bitowa zapisana w kodzie U2.

    Piotrek

    0