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 na Arduino Mega - błędy odczytu z termometrami na długich przewodach

24 Sty 2019 18:54 4077 55
Najlepsze odpowiedzi LABEL_AI_GENERATED

Dlaczego DS18B20 na Arduino Mega zaczynają błędnie odczytywać temperaturę na długim przewodzie i jak poprawić niezawodność magistrali 1‑Wire?

Problemem jest najpewniej duża pojemność długiej magistrali 1‑Wire i zbyt wolne zbocza albo złe timingi w implementacji, a nie sama rezystancja przewodu [#17733366][#17734608] Zmniejsz rezystor podciągający z 4,7 kΩ do ok. 2 kΩ, a nawet około 1,2 kΩ; w testach na 18 m skrętki przy 1,2 kΩ uzyskano 0% błędów dla kilku czujników [#17729068][#17729861] Do większych odległości lepiej użyć skrętki/UTP o znanych parametrach niż „zwykłego” kabla telefonicznego [#17733719] Warto też nie zgadywać, tylko logować reset, presence, search ROM, match ROM, odczyt scratchpada i sprawdzać CRC, bo część błędów to pojedyncze przekłamania bitów [#17734426] Jeśli nadal będzie niestabilnie, rozważ gotowy master 1‑Wire typu DS248x albo rozwiązanie oparte o UART zamiast bit-bangingu na GPIO [#17733366]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 17727067
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #2 17727081
    H3nry
    Poziom 32  
    Posty: 1714
    Pomógł: 165
    Ocena: 289
    PierwszyWolnyLogin napisał:
    Co może być powodem problemów z przewodem - jego pojemność? Impedancja? No bo raczej
    nie rezystancja jeśli sam przewód zabija termometry...

    Może być to problem środowiskowy ,zakłócenia elektromagnetyczne lub obecność pola wcz .
  • #3 17727134
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #4 17727185
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    Jaki masz rezystor podciągający? Czasami trzeba zmniejszyć jego wartość, co przyspiesza narastanie zbocza. Ale IMHO problem jest w użytej bibliotece - niewłaściwe timingi, na granicy parametrów. Większość implementacji 1-wire jest tak słabo napisana, że potem są właśnie cyrki. Mam 1-wire na 300m skrętce i zero błędów. Przjerzyj kod źródłowy tej "biblioteki" i o ile znasz 1-wire to porównaj do tego jak to powinno zostać zrealizowane.
    Generalnie, ponieważ łączenie 30 m przewodu do pinu procesora jest raczej słabym pomysłem, rozważ zrobienie tego jak należy - czyli UART, tranzystor, diody zabezpieczające. Nie tlyko masz odporniejszy na zakłócenia układ, ale przy okazji procka nie katujesz delay'ami, na których zapewne oparta jest użyta przez ciebie implementacja 1-wire.
  • #5 17727227
    Konto nie istnieje
    Konto nie istnieje  
  • #6 17727266
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    No bo bez niego odczytów nie będzie. Zmniejsz np. na 4k2 i zobacz czy to coś polepszy.
  • #7 17727338
    Konto nie istnieje
    Konto nie istnieje  
  • #8 17728063
    bolek
    Poziom 35  
    Posty: 4099
    Pomógł: 86
    Ocena: 299
    Zacznijmy może od tego że te "gotowe dallasy" to jakieś chińskie coś a nie dallas. Kiedyś się nadziałem to za cholere nie chciały działać na dwóch przewodach, po rozebraniu ukazało się jakieś dziwne logo na scalaku. Kup dla pewności coś oryginalnego.
  • REKLAMA
  • #9 17728354
    Konto nie istnieje
    Konto nie istnieje  
  • #11 17728623
    Konto nie istnieje
    Konto nie istnieje  
  • #13 17728991
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #15 17729138
    Konto nie istnieje
    Konto nie istnieje  
  • #16 17729543
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    PierwszyWolnyLogin napisał:
    Co ciekawe - pierwszy termometr miał wlutowany rezystor 150Ohm, co wydawało
    się poprawiać jego prace. A teraz wali błędami najbardziej z wszystkich...

    Nie możesz mieć szeregowych rezystorów z czujnikami. Przecież one utworzą dzielnik napięciowy z rezystorem podciągającym, co zakłóci rozpoznawanie stanu niskiego. Podobnie nie ma sensu za bardzo obniżać wartości rezystora podciągającego, bo to powoduje nadmierne obciążenie układów. Jeśli zmniejszenie rezystancji nie rozwiązało problemu, to pozostaje soft, który zapewne zawiera błędy i złe timingi.
    H3nry napisał:
    Zmień zasilanie w ramach testu na bateryjne.

    A co to zmieni?
  • #17 17729575
    H3nry
    Poziom 32  
    Posty: 1714
    Pomógł: 165
    Ocena: 289
    tmf napisał:
    A co to zmieni?

    Wyeliminuje wpływ tętnień generowanych przez zasilacz impulsowy ?
  • #18 17729580
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    H3nry napisał:
    tmf napisał:
    A co to zmieni?

    Wyeliminuje wpływ tętnień generowanych przez zasilacz impulsowy ?


    Nigdy się nie spotkałem z sytuacją, aby normalny zasilacz impulsowy stwarzał problem, a już z pewnością nie dla transmisji cyfrowej.
  • #19 17729861
    Konto nie istnieje
    Konto nie istnieje  
  • #20 17730925
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    PierwszyWolnyLogin napisał:
    tmf napisał:
    ...
    Nie możesz mieć szeregowych rezystorów z czujnikami....



    Producent tak sugeruje: https://www.maximintegrated.com/en/images/appnotes/148/148Fig05.gif


    Myśle, że warto byoby przeczytać całą sekcję dokumentacji na ten temat, a nie patrzeć tylko na rysunek, bo wnioski mogą być bardzo mylące.
  • #21 17730967
    Konto nie istnieje
    Poziom 1  
  • #22 17731203
    LChucki
    Poziom 31  
    Posty: 1940
    Pomógł: 104
    Ocena: 379
    PierwszyWolnyLogin napisał:
    Przewód jest ok - żyły ciągłe, brak zwarcia.

    A jaka pojemność?

    tmf napisał:
    Zmniejsz np. na 4k2 i zobacz czy to coś polepszy.

    Zmiana z 4,7 na 4,2 praktycznie nic nie zmieni. Używam 2,2k bo taki jest zalecany do jakiegoś typu układu (chyba EEPROM). Jak pojemności są duże bywa, że trzeba zmniejszyć do 1k.
    PierwszyWolnyLogin napisał:
    PS. Pierwsze testy. Termometr nr 7 jest odłączony, a nr 1 podejrzany ;)

    Rezystor, procent błędnych pomiarów tempratury.

    Poruszasz się na oślep. Podłącz oscyloskop i zobacz jak wygląda sygnał. Później sprawdź co pokaże analizator logiczny. Pewnie nie oglądałeś biblioteki tak jak już radzono a tam może być błąd.
  • #23 17732521
    Konto nie istnieje
    Konto nie istnieje  
  • #24 17732547
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    Ponieważ kodów obsługi 1-wire na AVR są setki, więc ściągnij jakiś przykład napisany w C, wgraj i sprawdź, czy działa poprawnie. Jeśli tak, to wiesz, gdzie jest błąd. Możesz też tu wkleić kod realizujący wysyłanie i odbiór bitów z biblioteki, której używasz. Zobaczymy czy wygląda ok.
  • #25 17733242
    Konto nie istnieje
    Konto nie istnieje  
  • #26 17733286
    LChucki
    Poziom 31  
    Posty: 1940
    Pomógł: 104
    Ocena: 379
    PierwszyWolnyLogin napisał:
    Zacząłem robić docelowe okablowanie - narazie testuje dwa termometry na najdłuższym przewodzie -
    30mb telefoniczny. Występuje ciekawe zjawisko

    Zastanów się czy poruszanie się po omacku ma sens?

    PierwszyWolnyLogin napisał:
    jak odrobię się z głównym tematem (remont domu)

    Domyślam się, że pochowasz kable pod tynkiem. Przypuśćmy, że ułożysz złe table bo telefoniczny a "telefoniczny" i co później zrobisz? Kolejny remont?
  • #27 17733289
    Konto nie istnieje
    Konto nie istnieje  
  • #28 17733296
    LChucki
    Poziom 31  
    Posty: 1940
    Pomógł: 104
    Ocena: 379
    PierwszyWolnyLogin napisał:
    Jeśli coś wygląda głupio ale działa to tylko wygląda głupio

    Jak coś działa od przypadku i nie do końca poprawnie, należy spodziewać się, że z czasem bedzie gorzej.

    PierwszyWolnyLogin napisał:
    po załączeniu układu
    jest to kilka %, teraz po około godzinie spadło do 1.8%

    Jak liczysz stopę błędów?

    PierwszyWolnyLogin napisał:
    to go wkopie ze 30cm pod ziemie

    Jaki to przewód?
  • #29 17733324
    GrandMasterT
    Poziom 26  
    Posty: 1608
    Pomógł: 69
    Ocena: 195
    tmf napisał:

    Nie możesz mieć szeregowych rezystorów z czujnikami. Przecież one utworzą dzielnik napięciowy z rezystorem podciągającym, co zakłóci rozpoznawanie stanu niskiego.


    Przecież nawet na stronie Maxima [1] jak w mordę strzelił jest taki scenariusz, gdzie przy długiej linii gdzie są sensory na odgałęzieniach, stosuje się rezystory w szeregu z sensorem przy każdym odgałęzieniu. I to faktycznie działa, kiedyś przeciągnąłem jakieś 50m skrętki przez pomieszczenia techniczne do pomiaru temperatur na wypadek awarii klimy, najdalsze sensory działały a jak podłączałem odgałęzienia (które miały może po 1,5m) do położonych bliżej, nie działało nic, w ogóle nie dało się znaleźć żadnego sensora na magistrali. Podłączyłem wszystkie sensory do magistrali przez rezystory chyba o ile pamiętam 100Ω i problem rozwiązany, nie udaje się może jeden na kilka milionów odczytów.

    [1] https://www.maximintegrated.com/en/app-notes/index.mvp/id/148
  • #30 17733366
    LChucki
    Poziom 31  
    Posty: 1940
    Pomógł: 104
    Ocena: 379
    GrandMasterT napisał:
    gdzie przy długiej linii gdzie są sensory na odgałęzieniach, stosuje się rezystory w szeregu z sensorem przy każdym odgałęzieniu

    Temat nie jest prosty. Wielu osobom wydaje się, że zrobienie mastera 1-Wire to prosta sprawa a nie zawsze tak jest. Wystarczy przeczytać notę DS2480, 2482/3 aby przekonać się, że jest tam sporo parametrów do ustawienia w tym czas narastania sygnału czy silne podciąganie podczas nadawania. Kto mi pokaże programowego mastera 1-Wire, który pozwala regulować czas narastania sygnału czy chwilę w której sygnał jest próbkowany? Silne podciąganie to akurat zrealizowałem, zmiana czasu próbkowania to nie problem. Te zabiegi są konieczne przy magistralach o dużej pojemności czyli długich lub o dużej liczbie układów slave.
    Niestety, DS248x nie rozwiąże problemu jak nie dysponuje się oscyloskopem. Można oczywiście zmieniać parametry metodą prób i błędów ale jak widać nie jest to dobra metoda, autor kilka dni zmienia rezystory a problem można było rozwiązać w godzinę. Dodatkowo nie wie jakim przewodem dysponuje co nie ułatwia zadania.


    Przy niedużej liczbie slave preferuję rozwiązanie jeden slave na jednej magistrali. W praktyce używam rozwiązań mieszanych, jedna magistrala kilka slave w niedużej odległości. Nie trzeba do tego kilku GPIO uC, wystarczy jedno a dzięki rozdzieleniu magistral, parametry (błędy) na jednej nie wpływają na pozostałe. Lepiej chyba, gdy nie można np odczytać tylko temperatury zewnętrznej niż wcale nie czytać łącznie z temperaturą na kotle grzewczym.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik buduje stację pogodową z wykorzystaniem Arduino Mega 2560 i termometrów DS18B20, które są podłączone na długich przewodach. Napotyka problemy z błędnymi odczytami temperatury, szczególnie przy długości przewodów do 30 m. Po zastosowaniu rezystora podciągającego 150 Ohm, liczba błędów spadła do 1-2%. Użytkownik eksperymentuje z różnymi rezystorami, co przynosi poprawę, a także zmienia przewody na skrętkę, co również wpływa na jakość odczytów. W miarę upływu czasu, liczba błędnych odczytów maleje, co sugeruje, że przewody mogą "kondycjonować się" podczas pracy. Użytkownik planuje dalsze testy oraz rozważa użycie układów DS2482 do poprawy stabilności systemu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA