Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Termometr ds18b20 jak rozpoznać czy 85stC to temperatura czy bład

pch 06 Mar 2012 12:02 1905 11
  • #1 06 Mar 2012 12:02
    pch
    Poziom 14  

    Dla własnej wygody pomyślałem o wykorzystaniu tego termometru i wszystko jest ok ale zmieniły się warunki pracy urządzenia i jest szansa, że zaistnieje, w zakresie roboczym, temperatura 85stC. Niestety ten termometr zgłasza taką wartość w czasie awarii oraz gdy nie wykonał konwersji. Łatwo to wymusić. Gdy jest zasilany osobną żyłą wystarczy odłączyć +5V i w odpowiedzi daje 85stC. Niestety crc się zgadza, odpowiedź na reset magistrali też jest poprawna więc nie ma jak sprawdzić czy to temperatura czy błąd. Jedyne co jeszcze można zrobić to po poleceniu wykonania konwersji badać odpowiedź. Na poczatku są bity 0 potem stopniowo coraz wiec 1. Zauważyłem, że 11111111 osiąga po 45 cyklach odczytów. Natomiast gdy odłaczę +5V odpowiedź 11111111 dostaję natychmiast. Czy to można wykorzystać jako znacznik prawidłowej konwersji?

    PC

    0 11
  • #2 06 Mar 2012 13:34
    tmf
    Moderator Mikrokontrolery Projektowanie

    Gdy nie wykonał konwersji to zwraca ostatnią zmierzoną wartość. Możesz odczytywać licznik ADC, on ze względu na szum nie powinien zwracać ciągle tej samej wartości, więc to może być jakaś wskazówka. Natomiast ogólnie nie widzę problemu - masz prawidłową odpowiedź, CRC się zgadza, więc jest ok. W przypadku awarii czujnika wcale nie masz gwarancji, że ci zwróci 85, więc awarię i tak trzeba inaczej wykrywać.

    0
  • #3 06 Mar 2012 13:44
    pch
    Poziom 14  

    Tak jak napisałem - wystarczy odłączyć zasilanie 5V i termometr zwraca zawsze 85st. Zawsze może się zdarzyć, że termometr utraci zasilanie. I co wtedy? Inny przypadek to egzemplarz po odwrotnym podłączeniu zasilania. Zazwyczaj psuje się właśnie tak, że nie mierzy temperatury i podaje zawsze 85st. Czym więc rożni się to 85st od zmierzonego?

    0
  • #4 06 Mar 2012 14:12
    tmf
    Moderator Mikrokontrolery Projektowanie

    Po resecie zwraca 85, ale już po kolejnej konwersji nie. Jeśli odpowiada na zapytanie o temperaturę, to można sądzić, że zareagował na polecenie konwersji, zresztą to łatwo sprawdzić przez pooling czujnika o którym piszesz. I to tyle. Jak pisałem możesz sobie jeszcze odczytywać resztę z licznika ADC, która powinna się zmieniać w związku z szumem przetwornika i szumem termicznym, co też będzie wskazywało na to. że termometr coś tam konwertuje. Jak mu podasz odwrotnie zasilanie (swoją drogą jak to się może zdarzyć w zmontowanym układzie?) to nie masz gwarancji na nic, więc rozważanie czy on wtedy zwraca 85 czy coś innego jest bez sensu. Wynika z tego prosta rzecz - jeśli wyniki konwersji są ważne to musisz albo dodać redundancję czujników, lub też program musi mieć jakieś inne informacje, które posłużą do weryfikacji wskazań. Albo zastosować inny czujnik, np. z grzałką, która może posłużyć do weryfikacji.

    0
  • #5 06 Mar 2012 14:43
    zumek
    Poziom 39  

    pch napisał:
    ... Gdy jest zasilany osobną żyłą wystarczy odłączyć +5V i w odpowiedzi daje 85stC...

    To, w jaki sposób jest zasilany DS, można przecież sprawdzić odpowiednim poleceniem :idea:

    0
  • #6 06 Mar 2012 16:47
    pch
    Poziom 14  

    Przecież rozważamy przypadek awarii lub sabotażu. Nie chce mi się wierzyć, że ktos wypuszcza termometr z wartoscią spoczynkową w zakresie pomiarowym i nie zapewnia mozliwości jej weryfikacji.

    PC

    0
  • #7 06 Mar 2012 16:49
    figa_miga
    Poziom 19  

    Sam sobie po trochu odpowiedziałeś. Trzeba sprawdzić czy jego odpowiedź jest nagła i bez sensu czy faktycznie jest szansa na taką wartość. Nie wyeliminujesz ryzyka, ale znacznie go ograniczysz.

    0
  • #8 14 Sie 2012 13:45
    finch18
    Poziom 9  

    Witam,

    Temat wałkowany już 100 raz, ale od paru dni próbuje i nie wiem jak to rozwiązać:/. Mam podłączonego DS18B20 do atmega8a, kwarc wewnętrzny 8MHz. Początkowo układ nie chciał w ogóle współpracować i zwracał standardowe 85 C. Po modyfikacji sterowania pullup zgodnie ze wskazówkami mirekk36 z https://www.elektroda.pl/rtvforum/topic1466114.html układ działa ale tylko chwilami zwraca poprawną temperaturę.
    Dla uproszczenia wyeliminowałem przerwania z układu. Na wyświetlacz 7 segmentowy podaję dziesiątki lub jedności.
    Powiedzmy że wyświetla się "2" przy jednościach. Przyłożę palec i poprawnie wzrasta pojawia się "3...4" ale momentami "7" lub "6"( w najmniej spodziewanych momentach). To samo przy dziesiątkach ... jest 2, podgrzeję troszkę wzrasta "3 4 5"... i nagle z głupa "2" lub "9".

    Jeżeli chodzi o "2" i "7" podejrzewam że może pojawiać się wartość 127/ lub coś z funkcja OW_Reset. Poniżej kod programu, w tej chwili w oparty głównie na kodzie mirekk36

    termometr.c

    Kod: c
    Zaloguj się, aby zobaczyć kod


    funkcje.c
    Kod: c
    Zaloguj się, aby zobaczyć kod


    nagl.h
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Proszę o pomoc, bo ja już nie mam pomysłu :/

    0
  • #9 14 Sie 2012 22:21
    excray
    Poziom 39  

    Może za krótko czekasz na koniec konwersji. Jeśli niezależnie od DQ zasilasz DSa spróbuj odczytać koniec konwersji testując linię DQ:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #10 15 Sie 2012 01:32
    finch18
    Poziom 9  

    Dzięki za zainteresowanie się problemem.

    Zastosowałem się do wskazówki, ale niestety dalej to samo.
    Udało mi się pożyczyć karty pomiarowej, i z tego co widać dane przesyłane przez czujnik są poprawne 22-23 C. No to spróbowałem coś takiego ..odczytać młodszy bajt i następnie go wysłać... Późno trochę już wiec może głupoty robię ale wydaję się że to powinno być wysyłane to samo co czujnik wcześniej podał a nie jest.... wiec może problem w odczytywaniu :cry:

    0
  • #11 15 Sie 2012 18:41
    kaczart
    Poziom 14  

    Jeżeli odczytasz 85C i masz podejrzenie, że to usterka czujnika, to zleć mu konwersje z krótszym czasem (ze zbyt krótkim). Jeżeli znów odczyta 85C (dla pewności czynność możesz powtórzyć kilka razy) to wiesz, że to nie jest prawdziwa wartość.

    0
  • #12 17 Sie 2012 20:52
    finch18
    Poziom 9  

    ehhhh no więc tak..
    Kierując się tym że kod z Bascoma obsługuje DS18b20 bez problemu, przerobiłem kod w C. Przebiegi wręcz idealnie się pokrywały z tymi przy kodzie w Bascomie. Dalej nie działało.. Już bliski załamania zauważyłem ze o ile w Bascomie nieużywane Piny jakoś sensownie ustawiłem to w C olałem to. Zakłócenia jakieś chyba zbierało.
    zawsze to jakaś nauka na przyszłość :/

    0