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

DS18B20 – błędne odczyty temperatury po wydłużeniu przewodu i montażu przy trafo

Olasss 18 Mar 2007 11:35 1670 3
REKLAMA
  • #1 3690758
    Olasss
    Poziom 12  
    Posty: 54
    Ocena: 2
    Witam.
    Dostałem 4 sztuki ds18b20 w samplach i konstruuję termometr do szkoły. Napisałem program,udało mi się połączyć z czunikami i wyświetlić temperaturę na LCD,wszystko było ok. Oba czujniki miałem zamontowane na płytce prototypowej(mam na niej zmontowany cały układ). Po pierwszych testach przylutowałem do jednego czujnika skrętkę o długości ok 30 cm żeby móc sprawdzić go w ujemnej temperaturze. Działał dobrze,a ponieważ był na długim przewodzie zamocowałem go przy transformatorze żeby mierzył temperaturę rdzenia. No i nadal wszystko było ok,ale do czasu...czujnik dostał szajby,nic nie zmieniałem w programie,co prawda ds18b20 nadal pokazuje temperaturę poprawnie ale czasem wyświetla wartość z kosmosu,na przykład 153,3°C albo ponad 1000°C. Wie ktoś może czego to może być wina? Czy może to być wina przerwania w programie,które ma służyć do multipleksowego wyświetlania temperatury na modułach LED(często przerywa program,ale wcześniej nie przeszkadzało to w odczycie temperatury)? Dodam jeszcze że gdy zamieniłem czujniki miejscami to błędne wyniki dochodziły do atmegi8 nadal z tego samego czujnika. Co prawda mam jeszcze 3 sztuki tych termometrów,ale ta czwarta też by mi się przydała,jeżeli wie ktoś co mogło się z nim stać to proszę o odpowiedź:)

    Załączam kod źródłowy programu,napisany jest w bascomie,czujniki są podłączone na osobnych magistralach

    
    $crystal = 8000000
    Config Portc = Output
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    Config Lcd = 16 * 2
    Cursor Off Noblink
    Config Pind.2 = Output
    Config Pind.3 = Output
    Portd.2 = 1
    
    Portd.3 = 0
    
    Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
    Dim Tds1 As Integer , Tds2 As Integer
    Dim Temp1 As Single , Temp2 As Single
    Dim Temp As Integer
    Dim Sds As String * 6
    Dim A As Integer , B As Integer , C As Integer
    
    
    Config Timer1 = Timer , Prescale = 256
    On Timer1 Led
    Enable Interrupts
    Counter1 = 65500
    Enable Timer1
    
    
    Start Timer1
    Cls
    
    Do
    
    Config 1wire = Portb.0
    1wreset
    1wwrite &HCC
    1wwrite &H44
    
    Config 1wire = Portd.7                                      'ustawienie 1wire na pierwszy czujnik
    1wreset                                                     'reset magistrali
    1wwrite &HCC                                                'skip rom
    1wwrite &H44
    
    Waitms 750
    
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    
    Tds1 = 1wread(2)
    1wreset
    
    Config 1wire = Portb.0
    1wreset
    1wwrite &HCC
    1wwrite &HBE
    Tds2 = 1wread(2)
    1wreset
    
    
    'przeliczanie i wyświetlanie temperatury 1
    Temp1 = Tds1 / 16
    Sds = Fusing(temp1 , "#.#")
    Locate 1 , 1
    Lcd "Temp1:" ; Sds ; Chr(0) ; "C"
    
    'przeliczanie i wyświetlanie temperatury 2
    Temp2 = Tds2 / 16
    Sds = Fusing(temp2 , "#.#")
    Locate 2 , 1
    Lcd "Temp2:" ; Sds ; Chr(0) ; "C"
    
    
    
    
    
    Loop
    End
    
    Led:
    Portd.2 = Not Portd.2
    Portd.3 = Not Portd.3
    Counter1 = 65500
    Return
    
  • REKLAMA
  • #2 3691084
    LichyiChydy
    Poziom 12  
    Posty: 91
    Pomógł: 3
    Ocena: 1
    Daleki jestem, aby moje rady były wyznacznikiem wiedzy, ale w moim projekcie, którym też miałem dalasy też mam problemy z danymi z kosmosu.
    Co do twojego pytania czy przerwania mogą przeszkadzać w odczycie? Z mojego skromnego doświadczenia tak. U mnie przy projekcie po dodaniu obsługi przerwań zaczęły występować błędy również gdzieś na forum znalazłem potwierdzenie tej tezy. Daj algorytm sprawdzania poprawności odczytu tu masz link do podobnego problemu
    https://www.elektroda.pl/rtvforum/topic125287.html
    Ja to rozwiązałem tak by odczyt mijał się z przerwaniem pomogło na początku miałem 20 % błędów teraz 0,001%
  • REKLAMA
  • #3 3691279
    Olasss
    Poziom 12  
    Posty: 54
    Ocena: 2
    Wymieniłem jakąś godzinę temu dallasa na inny i problem błedów zniknął,wyświetla tempreaturę bez problemów,więc chyba jest to uszkodzenie tamtego układu :/
  • #4 3694702
    jacobsek
    Poziom 22  
    Posty: 419
    Pomógł: 61
    Ocena: 24
    Witam.
    Nioe jestem pewny ale chyba lepiej byłoby ustawiać magistralę 1wire wewnątrz procedury, czyli w jednej procedurze ustawiasz ja na pierwszy czyjnik a w drugiej na następny.
    Nie wiem czy można tak robić jak jest u Ciebie czyli w pętli przedeklarowywać magistralę.
    Robiłem odczyt na ds na osobne magistrale ale deklarowałem je w procedurach i działało dobrze.
    Pozdrawiam.
REKLAMA