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

Dlaczego DS18B20 pokazuje zaniżoną temperaturę o 4°C? Algorytmy i podłączenie

mirkap 05 Kwi 2006 16:40 1440 7
  • #1 2496070
    mirkap
    Poziom 12  
    Posty: 124
    Ocena: 5
    w sieci natknąć się można na wiele algorytmów liczenia teperatury tych czyjniuków
    poniżej przedstawiam dwa z nich
    niech ktoś wytłumaczy mi o co w tym wszystkim chodzi bo na DS18B20 mam o ok. 4 stC temperaturę za niską.
    wykorzystuję dwa czyjniki podpięte tylko przez linię danych i masę, i oczywiście rezystor 4.7 k. VCC do masy.
    na obydwu podobny przekłamany odczyt.

    sposób 1
    T = Makeint(Sc(1) , Sc(2))
    T = T * 10
    T = T / 16

    sposób 2
    T = Makeint(sc(1) , Sc(2))
    T = T * 50
    T = T - 25
    T1 = Sc(8) - Sc(7)
    T1 = T1 * 100
    T1 = T1 / Sc(8)
    T = T + T1
    T= T / 10
  • #2 2496213
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Co robi ta funkcja ??
    mirkap napisał:
    T = Makeint(Sc(1) , Sc(2))
    Bo reszta
    T = T * 10 
    T = T / 16 
    jest dobrze. Też tak robię i wszystko jest OK!
  • #3 2496388
    Konto nie istnieje
    Konto nie istnieje  
  • #4 2498578
    mirkap
    Poziom 12  
    Posty: 124
    Ocena: 5
    1 (masa) razem z 3 (VDD) do masy, a 2 (DQ) do portu z podciągnięciem poprzez 4.7k do zasilania - tzw. tryb parasite.

    figure 4 bez MOSFET
    Załączniki:
    • Dlaczego DS18B20 pokazuje zaniżoną temperaturę o 4°C? Algorytmy i podłączenie DS18B20_06.jpg (71.44 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 2499765
    jacur
    Poziom 32  
    Posty: 1748
    Pomógł: 166
    Ocena: 296
    Gieneks to : T = Makeint(Sc(1) , Sc(2)) to połaczenie dwóch zmiennych byte w jednego int_a po bascomowemu integer
  • #6 2502479
    mirkap
    Poziom 12  
    Posty: 124
    Ocena: 5
    ok, zgodnie z helpem makeint = (256 * msb) + lsb

    ale co dalej???
  • #7 2503191
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    mirkap napisał:
    ok, zgodnie z helpem makeint = (256 * msb) + lsb

    ale co dalej???

    To teraz pokaż , jak wczytujesz dane z DS-a do tablicy Sc.

    Piotrek
  • #8 2503844
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Dla DS 1820

    Dim Temp As Integer
    Dim Temperatura As Single
    Dim Wynik(9) As Byte
    Dim T As Single
    Dim Tp As Single
    
    Temp = Makeint(wynik(1) , Wynik(2))
    Temperatura = Temp / 2' Temperatuta - temperatura z dokładnością do 0,5'C
    T = Wynik(8) - Wynik(7)
    T = T / Wynik(8)
    Temperatura = Temperatura - 0.25
    Tp = Temperatura + T 'Tp temperatura z dokładnością conajmniej 0,1'C


    Dla DS18B20

    Temp = Makeint(wynik(1) , Wynik(2))
    Temperatura = Temp / 16

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemu zaniżonego o około 4°C odczytu temperatury z czujników DS18B20 podłączonych w trybie parasite (zasilanie przez linię danych). Użytkownik stosuje dwa różne algorytmy przeliczania surowych danych na temperaturę, jednak oba dają podobne błędne wyniki. Wskazano, że funkcja Makeint łączy dwa bajty w jedną wartość typu integer zgodnie z formułą (256 * msb) + lsb. Poprawny odczyt temperatury dla DS18B20 wymaga podzielenia tej wartości przez 16, co odpowiada rozdzielczości 0,0625°C na jednostkę. Podkreślono, że rezystor podciągający 4,7 kΩ powinien być podłączony między linią danych (DQ) a Vcc, a nie do masy. W trybie parasite pin 1 (masa) i pin 3 (VDD) są połączone do masy, a pin 2 (DQ) do portu mikrokontrolera z rezystorem podciągającym do zasilania. Przykładowe fragmenty kodu pokazują różnice w obliczeniach dla DS1820 i DS18B20, gdzie DS1820 wymaga innego przeliczenia (dzielenie przez 2) niż DS18B20 (dzielenie przez 16). Problem może wynikać z nieprawidłowego podłączenia lub błędnej interpretacji danych surowych, a także z różnic w algorytmach konwersji temperatury między modelami.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA