Skocz do zawartości

DS18B20 problem z połączeniem dwu przewodowym


Karolus

Pomocna odpowiedź

Witajcie

Od dwóch dni walczę z banalnym dawałoby się problemem, więc albo mam "pomroczność jasną" albo ....

Do rzeczy, od żółtych braci dostałem dostawę nowych czujników DS18B20 w wersji wodoodpornej, czujniki jak czujniki podłączone, sprawdzone, działają. 
Ponieważ musiałem przedłużyć przewody, wygodniej było mi użyć podłączenia na dwóch przewodach, wiec połączyłem zasilanie z masą (od strony czujnika) i poprowadziłem jednym przewodem do wejścia "masy" urządzenia, drugim przewodem poszły dane, oczywiście w urządzeniu jest rezystor 4k7 między linią danych a zasilaniem.

Ku mojemu zdumieniu, tak podłączone czujniki nie działają, nie rozumiem dlaczego, czy jest możliwe że trafiła mi się jakaś seria która nie działa na podłączeniu dwuprzewodowym????

Poniżej szczegółowy rysunek (bez przedłużki też na dwóch przewodach nie działa), problem wydawałoby się banalny, więc albo robię totalną głupotę, ale coś nie tegos..... :)

image.thumb.png.8bbb93005c3d6d7cc469c95a68a5c2b8.png 

Z góry dziękuje za pomoc

Link do komentarza
Share on other sites

Teoretycznie to powinno działać... ale czy program wie, że DS działa na zasilaniu pasożytniczym? Nie chce mi się teraz tego szukać, ale chodzi o dłuższe podanie jedynki na linię DATA aby naładować wewnętrzny kondensator DS-a.

  • Lubię! 2
Link do komentarza
Share on other sites

Też pomyślałem że to może coś w kodzie, ale podłączyłem ten nowy czujnik do drugiego urządzenia które obecnie działa z dwoma innymi czujnikami na dwóch przewodach, niestety (albo stety) nie zadziałało 😞

Dlatego pisałem że albo robię jakąś potężną głupotę której sam nie widzę, albo coś jest nie tak z tymi czujnikami.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Niestety tak, gdyby nie działał sprawa byłaby prosta 🙂
w sumie kupiłem trzy czujniki, wszystkie zachowują się tak samo, jednego nawet nie zdążyłem wydłużyć, więc przewód ma tylko metr długości, efekt ten sam.

Przez chwilę myślałem że może w tym działającym urządzeniu podciągam linie danych do 5V a nie do 3,3, ale skoro nowe czujniki podpięte do niego też nie działają to raczej nie to 😞

Wygląda na to że będę musiał pogodzić się z podłączeniem trójprzewodowym, chociaż na nim zdarzały mi się co pewien czas (liczony w tygodniach a nawet miesiącach) dziwne przekłamania i zawieszenia czujnika, dwuprzewodowe podłączenie umożliwi mi łatwy zdalny reset poprzez odcięcie zasilania.

Dla pewności poszukam jeszcze jakiegoś starego czujnika i sprawdzę czy on działa na dwóch przewodach, jeśli tak to sprawa jasna, te nowe są jakieś trefne/dziwne.

Dlatego też ciekaw jestem czy ktoś miał podobne problemy, na elektrodzie kilka wątków podobnych znalazłem, ale w żadnym wytłumaczenia o co chodzi, wszystkie dyskusje zamierały bez rozwiązania 😞 

Link do komentarza
Share on other sites

11 minut temu, Karolus napisał:

dwuprzewodowe podłączenie umożliwi mi łatwy zdalny reset poprzez odcięcie zasilania.

A trójprzewodowe nie?

Jeśli to 3.3V to pobawiłbym się rezystorem - np. 3.3k albo nawet 2k zamiast 4.7k (podobno minimalna wartość to 1.2k ale nie mogę znaleźć oficjalnych danych na ten temat).

Link do komentarza
Share on other sites

Przy podłączeniu trójprzewodowym nie mam możliwości zdalnego zdjęcia zasilania (albo tego nie potrafię :)), kilka razy miałem taki dziwny przypadek "zawieszenia" DS-a, że nie pomagał reset procesora, a dopiero fizyczne odcięcie zasilania.
Przy podłączeniu dwuprzewodowym, zmieniam tryb pracy pinu na INPUT a po 2-3s zdalnie resetuje funkcją 

void (* ResetFunc) (void) = 0;

Nie jestem jakimś wybitnym programistą, używam gotowych bibliotek wyszukanych w necie, wiem że zazwyczaj daleko im do optymalności, ale za to są "od reki" 🙂

Link do komentarza
Share on other sites

To ciekawe... mi DS-y (zasilane z 3.3V z RPi, oczywiście trójprzewodowe) działają już kilka lat i nie muszę nic resetować...

Jeśli masz wolny pin, możesz z niego zasilać termometr (i oczywiście do niego podłączyć rezystor pullup) - podajesz jedynkę na wyjście, a jak chcesz zrobić reset to podajesz zero. Nawet łatwiejsze niż jakieś zmiany pinu odczytu...

Link do komentarza
Share on other sites

HA! no widzisz na to nie wpadłem, super pomysł z tym zasilaniem z innego pinu.
Ja mam podpiętego DSa pod RPi i tam tez problemów od ponad roku nie mam, natomiast przy arduino i dwóch innych czujnikach, takie kwiatki miałem, może to kwestia bibliotek, a może jakiś innych zakłóceń, tego niestety nie wiem i pewnie nigdy się nie dowiem, problem występował na tyle rzadko że bez jakiegoś specjalnego logowania danych był nie do namierzenia.

 

Link do komentarza
Share on other sites

Tak patrzę na ten rysunek gdzie Vcc jest połączone z masą.. to tak ma być? Te DSy mają obwód zasilania sygnałem? Robiłem kiedyś zasilanie pasożytnicze i Vcc miałem połączone diodą z linią danych a za diodą mały kondensator. Pierwsza ramka adresu ładowała kondensator silnym prądem pin jako wyjście i była jednocześnie rozkazem wykonania pomiaru po czym przestawiałem kierunek na wejście.

Link do komentarza
Share on other sites

Dnia 17.07.2019 o 06:20, ethanak napisał:

ale czy program wie, że DS działa na zasilaniu pasożytniczym? Nie chce mi się teraz tego szukać, ale chodzi o dłuższe podanie jedynki na linię DATA aby naładować wewnętrzny kondensator DS-a.

Dłuższe podanie jedynki? Możesz mi to pokazać w jakiejś dokumentacji?

Ja natomiast mogę pokazać, że w przypadku magistrali 2-przewodowej do DS18b20 czy DS2431 trzeba zastosować "silne" podciąganie. W 8051 był z tym problem, trzeba było dac dodatkowy tranzystor ale we współczesnych mikrokontrolerach problemu nie ma, wystarczy ustawić na porcie "1" i przełączyć na wyjście. Ot i cała tajemnica niedziałania DS18b20 na dwóch drutach.

Programowo można odczytać DS18b20 czy jest zasilany wewnętrznie czy pasożytniczo i program może odpowiednio reagować. Proponuję też poczytać, jak w przypadku zasilania pasożytniczego można stwierdzić kiedy termometr zakończył przetwarzanie, bo klasyczna metoda wywoła przerwie konwersję .

Edytowano przez InspektorGadzet
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.