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

Sporadyczne błędy odczytu czujników DS18B20 na kablu 5m - jak to naprawić?

rekinisko 03 Sty 2016 23:05 1647 12
REKLAMA
  • #1 15297866
    rekinisko
    Poziom 22  
    Mam podpięte na sztywno cztery czujniki DS18B20. Kilka razy na dobę procesor odczytuje przekłamania z czujników i wyświetla wartość kosmiczną np 18752365. Czujniki podpięte są w odstępach trzema przewodami (skrętka telefoniczna) równolegle o łącznej długości ok 5m na jednym porcie. Czy ktoś się z tym spotkał albo ma jakiś pomysł?
  • REKLAMA
  • Pomocny post
    #3 15297919
    excray
    Poziom 41  
    Zmniejszyć rezystor podciągający, skorzystać z CRC, zmodyfikować czasy w kodzie obsługi.
  • REKLAMA
  • Pomocny post
    #4 15297993
    Marico
    Poziom 20  
    excray napisał:
    Zmniejszyć rezystor podciągający, skorzystać z CRC, zmodyfikować czasy w kodzie obsługi.


    Bzdurny odczyt to brak weryfikacji CRC, tylko. Ilość błędnych ramek można zmniejszyć poprzez korektę okien czasowych 1wire, szczególnie na długich przewodach.
    W trybie pasożytniczym nieprawidłowy pullup na czas konwersji zwróci temp. 85. Rezystor pociągający ma być taki jaki jest wskazany w datasheet (4.7k). Ds w trybie pasożytniczym ma mieć silny pullup tylko na czas konwersji. Wstawianie na stałe rezystora "bardziej" podciagajacego zamiast implementacji silnego pullup'a tylko na czas konwersji to nie jest prawidłowa implementacja.
  • #5 15298010
    rekinisko
    Poziom 22  
    Tryb pracy normal. Dodam jeszcze, że na linii danych nie mam żadnych zabezpieczeń przepięciowych. Zastanawiałem się czy przewody nie są za długie.
    Kod taki zwyczajny:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
    [/code]

    Dodano po 17 [minuty]:

    Marico napisał:
    ... W trybie pasożytniczym nieprawidłowy pullup na czas konwersji zwróci temp. 85. Rezystor pociągający ma być taki jaki jest wskazany w datasheet (4.7k).. .

    U mnie pierwszy odczyt to zawsze 85 na wszystkich czujnikach więc coś w tym jest.
  • REKLAMA
  • Pomocny post
    #6 15298056
    Tom1988p
    Poziom 16  
    Marico napisał:
    Bzdurny odczyt to brak weryfikacji CRC
    Czy to znaczy że jak ja sprawdzam na swoich czujnikach CRC to nie działa?
    Suma CRC (czy jak to ładnie nazwać) wysyłana jest przez czujnik i sprawdzana jest z sumą jaką wyliczył mikrokontroler. Jeżeli wynik się zgada to odczyt poprawny, rożni się to odczyt nie jest poprawny.
    Czujniki mam na kabelku 15m błędy się zdarzają lecz jak CRC jest rożnie to nie przypisuję odczytu do zmiennej.
  • REKLAMA
  • #7 15301317
    rekinisko
    Poziom 22  
    Sprawdzałem jeszcze raz czy wszystko jest tak jak powinno być przy Ds18b20. Rezystor ma wartość 4.68k więc nie powinno to mieć dużego wpływu na fałszowanie pomiarów. Urządzenie dalej przy pierwszym uruchomieniu programu odczytuje 85'C. Pozostaje więc wdrożyć sprawdzanie sumy CRC. Chyba, że macie jeszcze jakieś pomysły.
  • Pomocny post
    #8 15301347
    szczywronek
    Poziom 28  
    rekinisko napisał:
    Urządzenie dalej przy pierwszym uruchomieniu programu odczytuje 85'C.
    Nie może być inaczej, skoro pierwsze czytanie temperatur wykonujesz przed wysłaniem polecenia konwersji ;)
  • #9 15301428
    rekinisko
    Poziom 22  
    Dobrze rozumiem, że na początku trzeba dostawić ... ?

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #10 15301497
    szczywronek
    Poziom 28  
    Chyba nawet lepiej całkiem przenieść kawałek opisany jako "konwersja temp dla wszystkich dsow" przed pierwszy odczyt. Bo Twoim sposobem konwersja będzie (niepotrzebnie) wykonywana dwukrotnie. Ale ja nie jestem "Bascomiczny", więc uprzedzam, że mogę się mylić ;)
  • #11 15301572
    rekinisko
    Poziom 22  
    To miałem na myśli tylko źle się wraziłem ;)


    Dodano:
    ------------------------
    Zamieniłem miejscami komendę o której była mowa, a pomiędzy pozostałe komendy wstawiłem opóźnienia po 50ms. DS-y pracują znacznie stabilniej, przez noc nie odnotowałem błędu a jeszcze nie dopisałem sprawdzania CRC.
  • Pomocny post
    #12 15302304
    Konto nie istnieje
    Konto nie istnieje  
  • #13 15302662
    rekinisko
    Poziom 22  
    Dziękuję wszystkim za dotychczasowe zainteresowanie tematem i za pomoc. Spodobał mi się pierwszy przykład z poprzedniego postu. Faktycznie wprowadziłem niepotrzebne zamieszanie w kodzie choć na elektrodzie można często spotkać identyczny zapis. Dziś wieczorem będę dalej ulepszał kod, oczywiście dam znać co z tego wyszło.

    Dodano:
    ----------------------------------------
    Potwierdzam poprawność pierwszego przykładu, kod działa teraz poprawnie, zginęły sporadyczne błędy, nie stosowałem CRC.

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
REKLAMA