logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak przeliczyć odczyt z DS18b20 na temperaturę i wyświetlić na LCD?

MarcinBarowski 11 Lut 2007 15:39 2022 4
  • #1 3556487
    MarcinBarowski
    Poziom 15  
    Posty: 184
    Pomógł: 1
    Ocena: 3
    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
  • #2 3557280
    redart
    Poziom 23  
    Posty: 529
    Pomógł: 51
    Ocena: 30
    Masz tu procedurkę odczytu i wyliczenia temperatury. Prościej się nie da.
    Nie wiem w czym piszesz, ale sama procedura (bascom) jest czytelna.
    Załączniki:
    • Read DS1820.zip (377 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • #3 3557444
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    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
  • #4 3558317
    redart
    Poziom 23  
    Posty: 529
    Pomógł: 51
    Ocena: 30
    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.
  • #5 3558827
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    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:
    
    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
REKLAMA