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

Jak wykryć odłączenie czujnika DS18B20 w kodzie BASCOM?

robgold 16 Gru 2005 23:10 2765 2
REKLAMA
  • #1 2090490
    robgold
    Poziom 23  
    Posty: 726
    Pomógł: 10
    Ocena: 290
    Witam, moze ktos przesledzic ten kawaleczke kodu (BASCOM) i powiedziec co jest nie tak ? Problem tkwi w tym ze odczytywane temperatury sa ok (wystarcz mi dokladnosc do 1 st C) jednak jak odlacze ktoregokolwiek DS'a to Tin = Tout zamiast wpisac wartosc 99 (w taki sposob wykrywam ze uszkodznieu ulegla ktorys czujnik)

    Program to kawalek kodu ktory ktos tutja na elektrodzie wrzucil z pozmienianymi pewnymi rzeczami (np odczytuje tylko 2 bajty a nie calego scratchpada)

    Oto podprogram:
    
    'Odczyt Temperatur IN i OUT z DS18B20
    Sub Odczytds1820
    
    Ds1(1) = 1wsearchfirst()
    Do
    Ds2(1) = 1wsearchnext()
    Loop Until Err = 1
    
    Mbt = 0 : Sbt = 0
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitus 200
    
    '#####################czujnik 1##
    1wverify Ds1(1)                                             'Czy jest na magistrali urządzenie o adresie z Ds2(1) ???
    If Err = 1 Then                                             'Nie ma :(((
    Tin = 99
    Elseif Err = 0 Then    ' Oooo jeeeest :)
    1wreset                    'Resecik
    1wwrite &H55                                                'Będzie odpowiadało tylko urządzenie , którego numer zaraz podam !
    1wwrite Ds1(1) , 8                                          'Podaję numer urządzenia , które zapytam ,a reszta milczy aż pojawi się reset.
    1wwrite &HBE                                                'Poproszę zawartość scratchpad'a
    Mbt = 1wread(1)
    Sbt = 1wread(1)
    1wreset
    Tin = Makeint(mbt , Sbt)
    Tin = Tin / 16
    End If
    
    
    '#####################czujnik 2##
    Mbt = 0 : Sbt = 0
    1wreset
    1wwrite &HCC
    1wwrite &H44
    Waitus 200
    
    1wverify Ds2(1)                                             'Czy jest na magistrali urządzenie o adresie z Ds1(1) ???
    If Err = 1 Then                                             'Nie ma :(((
    Tout = 99
    Elseif Err = 0 Then                                         'jeeeest :)
    1wreset                    'Resecik
    1wwrite &H55                                                'Będzie odpowiadało tylko urządzenie , którego numer zaraz podam !
    1wwrite Ds2(1) , 8                                          'Podaję numer urządzenia , które zapytam ,a reszta milczy aż pojawi się reset.
    1wwrite &HBE                                                'Poproszę zawartość scratchpad'a
    Mbt = 1wread(1)
    Sbt = 1wread(1)
    1wreset
    Tout = Makeint(mbt , Sbt)
    Tout = Tout / 16
    End If
    End Sub
    


    Gdzie jest blad ze program mimo braku DS wpisuje do zmiennych albo Tin albo Tout (w zaleznosci ktorej czujki brak) zawartosci z tego DS'a ktory jest podlaczony ?
  • REKLAMA
  • #2 2126285
    zort
    Poziom 15  
    Posty: 138
    Pomógł: 2
    Ocena: 9
    Moim zdaniem problem polega na tym:

    Ds1(1) = 1wsearchfirst() 
    Do 
    Ds2(1) = 1wsearchnext() 
    Loop Until Err = 1


    spróbuj umieścić to na początku programu przed główna pętlą Do...Loop, tak żeby wywołane było tylko raz na początku programu, a nie w ciągle wywoływanej procedurze (zakładam że podczas pracy urządzenia nie wymieniasz czujników). Nie wiem dokładnie jak jest zaimplementowana funkcja 1wsearchnext, ale być może po odłączeniu czujnika zwraca ona wartość czujnika pierwszego (którego to wartość masz już zapisaną w zmiennej Ds1) przez co zmienne Ds1 i Ds2 są równe i stąd powtarzalność wyników pomiaru.

    Poza tym dziękuję za fragment opisujący "sklejanie" liczby z dwóch bajtów (0 i 1), własnie się nad tym głowiłem gdy znalazłem Twój post.
  • #3 2258862
    robgold
    Poziom 23  
    Posty: 726
    Pomógł: 10
    Ocena: 290
    Zrobilem dokaldnie tak. Program dziala choc ma jedna wade. Nie mozna dynamicznie podmienic czujek bo musze z gory wiedziec ktora bedzie IN a ktora OUT i na samym poczatku definiowac je.
REKLAMA