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

[Bascom] 8xDS18B20 Jak sprawdzić który z czujników powoduje błąd

IMEX 11 Lis 2011 20:17 2139 5
  • #1 10127718
    IMEX
    Poziom 20  
    Cześć

    Mam następujący błąd / problem
    Odczyt temp z czujnikow - wkrada się w błąd i pokazuje temp w ogóle błędną - dane z nieba

    Chodzi mi o to żeby prostym sposobem sprawdzić który czujnik robi błąd w transmisji - wiem że sterownik uruchamia alarm przekroczenia temperatur - wiem które kanały - ale z różnych opisów nie zawsze jest uszkodzony dany czujnik z ktorego jest błędny odczyt - dane mogą być zmieniane przez inny wadliwie działający - gdyby ptoblem był systematyczny to bym doszedł co i jak

    Taki mam odczyt
    '*************  Temperatura   ***********
    Temperatura:
    
    
      Disable Interrupts
      1wreset
      Select Case Ktory_ds
        Case 0:
          1wwrite &HCC
          1wwrite &H44
        Case 1:
          1wwrite &H55
          1wwrite Ds1(1) , 8
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
        Case 2:
          1wwrite &H55
          1wwrite Ds2(1) , 8
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
        Case 3:
          1wwrite &H55
          1wwrite Ds3(1) , 8
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
        Case 4:
          1wwrite &H55
          1wwrite Ds4(1) , 8
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
        Case 5:
          1wwrite &H55
          1wwrite Ds5(1) , 8
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
        Case 6:
          1wwrite &H55
          1wwrite Ds6(1) , 8
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
        Case 7:
          1wwrite &H55
          1wwrite Ds7(1) , 8
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
        Case 8:
          1wwrite &H55
          1wwrite Ds8(1) , 8
          1wwrite &HBE
          Lsb = 1wread():
          Msb = 1wread():
    
      End Select
    
      Enable Interrupts
    
      If Ktory_ds > 0 Then
        T(ktory_ds) = Msb * 256
        T(ktory_ds) = T(ktory_ds) + Lsb
        Minusy.ktory_ds = Msb.7
    
        If Minusy.ktory_ds = 1 Then
          T(ktory_ds) = Not T(ktory_ds)
          T(ktory_ds) = T(ktory_ds) + 1
        End If
    
        T(ktory_ds) = T(ktory_ds) * 10
        T(ktory_ds) = T(ktory_ds) / 16
       Else
        If Poz_wysw = 1 And Wyswietlono = 1 Then Wyswietlanie = 1
      End If
    
      Incr Ktory_ds
      If Ktory_ds = 9 Then Ktory_ds = 0
      If Poz_wysw = 0 And Wyswietlono = 0 Then Wyswietlanie = 0
    
    Return
    '**********  Temperatura  Koniec *********


    Odczyt jest po kolei 8 czujników

    dziękuję za pomoc
  • #2 10128020
    WOBI
    Poziom 19  
    IMEX napisał:

    ale z różnych opisów nie zawsze jest uszkodzony dany czujnik z ktorego jest błędny odczyt


    To zdanie jest po polsku?! ;) sam przyznaj, że logiki żadnej w nim nie ma i nie wspomnę o przecinkach.

    Pokazałes tylko fragment programu, gdzie masz opóźnienie po rozkazie konwersji &H44 powinno być opóźnienie, by dać czas czujnikom na dokonanie pomiaru temperatury.

    Jakiej rozdzielczości używasz bo czas zależy od tego? Dla 12bit potrzeba aż 750ms !!!

    Po wyjsciu z Case 0: powinieneś czekać taki czas zamim wejdziesz do Temperatura ponownie i użyjesz rozkazu &H55.


    
    
          1wwrite &HCC 
          1wwrite &H44 
          waitms 750  ' lub po wyjsciu z Case powinienes czekac taki czas zamim wejdziesz do Temperatura ?!
    


    polecam wątek Link
  • #4 10128129
    WOBI
    Poziom 19  
    A napewno masz 1 sekunde opóźnienia?

    polecam wątek Link

    do wykrywania błędu czujnika i określania który nawala.
  • #5 10128153
    IMEX
    Poziom 20  
    Zastosowany kwarc 16 MHz

    Config Timer0 = Timer , Prescale = 256


    i mam kilka flag potrzebnych w programie

    Prztimer0:
      Timer0 = 5
      Set Flaga_4ms
    
      Incr Dzielnik(1)
      If Dzielnik(1) = 25 Then
        Dzielnik(1) = 0
        Set Flaga_100ms
    
    
      Incr Dzielnik(2)
      If Dzielnik(2) = 5 Then
        Dzielnik(2) = 0
        Set Flaga_500ms
    
        Incr Dzielnik(3)
        If Dzielnik(3) = 2 Then
          Dzielnik(3) = 0
          Set Flaga_1s
    
          Incr Dzielnik(4)
        If Dzielnik(4) = 60 Then
          Dzielnik(4) = 0
          Set Flaga_1min
    
        End If
      End If
    End If
    End If


    nawet gdyby kwarc źle pracował to minimalny błąd - Sterownik pracuje 24 H/dobę i kontroluje sporo żeczy bo to mini sterownik inteligentnego domu - wylko teraz strzele ale kontroluje przy jednym przebiegu około mniej/więcej 100wątków a procek to Atmega128
  • #6 10128198
    WOBI
    Poziom 19  
    polecam sprawdzanie czy jest czujnik / lub są czujniki i stosownie reagować na braki czujników.

    Dim Alarm_1_czujnik As Bit  ' zmienna = 0 gdy jest czujnik nr1 / =1 brak 
    Dim Alarm_2_czujnik As Bit  ' zmienna = 0 gdy jest czujnik nr1 / =1 brak 
    
    '....... 
    1wreset 
       1wwrite &H55 
        1wverify Ds1(1)                 'wysyłamy adres pierwszego czujnika 
                                             ' 1wverify jesli nie ma czujnika o tym numerze to.. 
    
                   Alarm_1_czujnik = Err        ' jesli nie ma tego czujnika to w zmiennej biedzie jeden 
    
    
    '........................ tu dalszy program lub sprawdzenie warunku IF 
    '................. 
    ' nastepny czujnik 
    1wreset 
       1wwrite &H55 
       1wverify Ds2(1)                        'wysyłamy adres drugiego czujnika i sprawdzamy 
    
                        Alarm_2_czujnik = Err 
    
    '................................ tu dalszy program lub IF 
    
    
REKLAMA