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

DS18B20 - jak ustalić z góry kolejność czujników?

nsvinc 19 Lut 2008 11:44 3537 14
  • #1 4821814
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    Jest procek który ma podłączone kilka czujników, i wszystko działa dobrze, procek zczytuje sygnatury, czyta temperature itp. Ale jesli są podłączone 4 czujniki to trzeba sprawdzać ich kolejnosć palcem i sprawdzać która temperatura sie zmienia. Jest jakiś sposób żeby ominąć to sprawdzanie?
  • #2 4821879
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Nie da się, jak kupujesz czujniki to są trochę pomieszane i ich numery seryjne losowe (może jakbyś kupił u producenta większą ilość to da się nad tym zapanować). Jedyne rozwiązanie jakie widzę to dołożyć w urządzeniu dodatkowy jeden port 1wire, w nim odczytywać numer i dopisywać do listy adresów. W innym przypadku pozostaje tylko wspomniana metoda na kolejno zmianę temperatury każdego czujnika. Nie koniecznie trzeba to robić palcem, można psikać płynem do schładzania elektroniki.
  • #3 4821923
    Krzych51
    Poziom 14  
    Posty: 76
    Pomógł: 6
    Ocena: 3
    Witam serdecznie.
    Ja robiłem to w ten sposób, że pisałem (w Bascomie dla '51) prostą aplikację która zczytywała mi sygnaturę czujnika a potem odwoływałem się do odpowiedniego czujnika.

    Pozdrawiam Krzych
  • #6 4824690
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    rozwiązanie z tymi czujnikami jest dosyć proste.

    Jak ja to zrobiłem? opiszę po krótce sposób postępowania ....

    ....otóż po włożeniu dowolnej (tzn ustalonej programowo np 2, 5 lub 10) ilości czujników układ rozpoznaje je wszystkie co jakiś czas na wypadek gdyby któryś umarł, albo go ktoś ukradł, zabrał czy zamienił ;) - czyli tworzy ich tablicę ale dynamiczną w pamięci RAM

    .... inna procedura dokonuje cyklicznie pomiaru temperatury na każdym z czujników podając na wyjściu jego temperaturę i co ważne jego adres za każdym razem

    ... jeszcze inna procedura która wydaje rozkaz pomiaru odbiera cyklicznie temperaturę i nr czujnika i na początku dokąd użytkownik nie dokona zapisu konfiguracji czujników wszystkie opatrzone są opisem (NOWY) i mogą się znajdować gdziekolwiek. Ta procedura posiada tablicę powiedzmy takie okienka na każdy czujnik z jego numerem i opisem np "pokój", "piwnica", "na zewnątrz" , "kotłownia" itd

    .... w dowolnym momencie użytkownik naciska klawisz "zapisz konfigurację czujników" i wtedy ta tablica jest zapisywana do EEPROM. Od tej pory powinniśmy aby uniknąć pomyłek oznaczyć jakąś taśmą który jest który - ale jak to zrobić bez ich dotykania, schładzania itp? teraz to jest już proste - wystarczy po tym zapisie konfiguracji wyjmować po kolei każdy z czujników i patrzeć w którym "okienku" pojawi się słówko "BRAK" zamiast podajen temperatury. Czyli np patrzymy, że po wyjęciu pierwszego w okienku czujnika z opisem "piwnica" zniknęła temperatura - to go trzymamy już w łapkach i oklejamy

    .... dodatkowo dorobiłem w swoim programie taką możliwość, że jeśli w miejsce takiego wyjętego albo uszkodzonego czujnika włożymy inny to oczywiście jego temperatura pojawi się w pierwszym takim wolnym okienku ale jednocześnie pojawi się dopisek (NOWY) przy jego adresie po to aby można było znowu ew zapisać go na stałe w konfiguracji

    .... dzięki takiemu podejściu rozpoznawanie nawet dużej ilości czujników nie stanowi problemu nawet pod względem czasowym bo takie procedury mogą działać szybko w trybie ustawiania i konfiguracji no i odpada już jak mówiłem wcześniej problem, macania, lizania, schładzania i wąchania czujników aby określić który fizycznie jest którym - trza się wspierać oprogramowaniem

    zresztą zobaczcie sami jak to działa w moim nowo powstającym projekcie. Program ten narazie działa na PC ale równie dobrze można go zrobić w procku. Zresztą układ działa tak, że poza PCtem jest sobie Atmega8, która mierzy te temperatury i przysyła właśnie do PCta te teperatury z czujników oraz ich numery seryjne. W tym projekcie są akurat tylko 2 czujniki i zamiast opisu mają tylko numerki [1] oraz [2] ale zasada jest dokładnie taka jak opisałem. Układ był testowany w ten sposób na 6 czujnikach i też działał ale do tego projektu potrzebne są akurat tylko dwa. Pokażę to na kilku obrazkach poniżej:

    1 - stan gdy są niezdefiniowane czujniki i jeszcze nie zapisana ich konfiguracja:
    DS18B20 - jak ustalić z góry kolejność czujników?

    2 - pokazany jest stan bezpośrednio po zapisie konfiguracji (zwórcie uwagę na numery czujników w czarnych okienkach)
    DS18B20 - jak ustalić z góry kolejność czujników?

    3 - to stan gdy wyciągam dowolnego DS18B20 i odrazu widać który czujnik wyjąłem i mogę go okleić - nadać opis [1]
    DS18B20 - jak ustalić z góry kolejność czujników?

    4 - tu pokazuję co się dzieje gdy w miejsce np uszkodzonego czujnika wpinam jakis inny - pojawia się jak mówiłem on w pierwszym wolnym okienku z własnym numerem oraz znowu mam możliwość uaktualnienia/zapisu konfiguracji
    DS18B20 - jak ustalić z góry kolejność czujników?
    widać wyraźnie - zaznaczyłem to, że nowy bo ma inny numer niż te dwa poprzednie.

    całość spisuje się dobrze w okresie testowym jeszcze cały czas całego projektu

    pozdrawiam
  • #7 4825138
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    No coz jest jedno ale......
    Nikt nie bedzie odcinał po kolei czujników.
    A co w przypadku wymiany sterownika?
    zamiast schładzania mozna zastosowac przyciski podłacczone od nózki zasilającej i rozpoznawac po kolei który czujnik ma zasilanie pasozytniczy lub nie. ale to rozwiązanie tylko w przypadku jezeli wykorzystujemy DS-a równiez jak czujnik stanu 0/1
  • #8 4826236
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    asembler -> o jakim odcinaniu mówisz? no chyba, że ty swoje czujniki spawasz i dodatkowo przyklejasz kropelką, że nigdy już ich nie odłączy się od procesora. Poza tym czy nie prostsze jest wyjęcie konektorka czujnika z płytki i odrazu informacja, który czujnik trzymasz w ręku - niż organoleptyczne schładzania, oziębiania i czas na to tracony?

    a w przypadku wymiany sterownika? no cóż można sobie zrobić kopię konfiguracji z EEPROM i wgrać ją ponownie do nowego sterownika i znowu mamy to co mieliśmy.
  • #9 4826317
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Po co w ogóle czujniki pracujące na 1-wire jezeli ty masz kazdy z nich na konektorku.
    Dobra

    Mamy taką sytuacje: w domku jest n czujników rozmieszczonych po pomieszczeniech. Kazdy czujnik wkłądam w koszulkę a przewody prowadze jak mi wygodnie czyli na przyklad na jednym kablu jeden za drugim. połączenia lutije i wkładam w koszulkę. Powstaje siec czujników razem połączonych. Do sterownika dochodzą mi tylko 2 przewody (idea 1-wire) tutaj mam na konektorku. Dodatkowo nie mam sprzetu do wgrywania w eeprom albo instalacja zrobiona przez kogo innego a aj mam tylko wysłać sterownik.

    Wytłumacz mi jak teraz mam to zrobic po twojemu
    Pozdrawiam
  • #10 4826442
    Kuniarz
    Moderator Projektowanie
    Posty: 4520
    Pomógł: 371
    Ocena: 825
    hehe, Asembler, to weź je jeszcze wrzuć koło zbrojenia przed zalaniem stropu ;-) wtedy w życiu nie dojdziesz który jest który - myślę, że celowo utrudniasz sobie życie ;-)
    Pomogłem? Kup mi kawę.
  • #11 4826476
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Dodatkowo z kazdego czujnika ma wyprowadzony układ jak na schemacie
    Mozna podpiac czujnik otwarcia okna lub czujnik ruchu.
    Dlatego do ustalenia który jest który wystarczy, ze bede zwierał przycisk przy kazdym z czujek (nie musze macac) a program sam mi ułozy w kolejnosci. Nie tylko wiem jaka temperatura w danym miejscu ale takżę jaki jest powód alarmu. I nie heheehe tylko tak :-)

    DS18B20 - jak ustalić z góry kolejność czujników?
    Przycisk oczywiscie symbolicznie występuje w zaleznosci co ma bc przyczyną alarmu to takie urzacdzenie wstawiam. Naczesciej jest to czujka ruchu lub kontraktron na okno/drzwi
    A kable o ile tylko sie da to ukrywam pod tynkiem (zabetonowywuje jak to ktos powiedział -jasnowidz)))))))

    Robiłem też próby bez przyciskania zmieniając stałą czasową R/C lecz do wiekszej ilosci niestety nie dziala. 3 spokonie wykrywa w zaleznoasci jak szybko wzrosnie napiecie na kondensatorze.
  • #12 4827030
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Gratuluję pomysłu:) Jaki powinien być rezystor R1? Przy zadziałaniu czujnika linia danych jest przez niego ściągana do masy więc chyba powinien być dość duży, prawda?
  • #13 4827229
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    opornik dałem jaki miałem:-) Teoretycznie poinien byc wiekszy od 47k przy 12 czujnikach.
  • #14 4827288
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Dałeś też standardowy pull-up 4,7k?
  • #15 4827336
    asembler
    Poziom 32  
    Posty: 2099
    Pomógł: 123
    Ocena: 11
    Na razie nie trzymam sobie to w razie kłopotów przy kolejnych czujnikach.
    W tej chwili obciazyłem linie opornikiem 2,2k do masy zeby stwierdzic i jakie oporniki trzeba bedzie wsadzac.

Podsumowanie tematu

✨ W dyskusji poruszono problem ustalania kolejności kilku podłączonych do procesora czujników temperatury DS18B20, które mają losowe numery seryjne. Nie ma prostego sposobu na z góry ustaloną kolejność czujników, ponieważ ich adresy są przypisywane losowo przy produkcji. Proponowane rozwiązania obejmują dynamiczne odczytywanie i zapisywanie adresów czujników w tablicy w pamięci RAM oraz przypisywanie im opisów lokalizacji (np. "pokój", "piwnica"), co pozwala na identyfikację każdego czujnika niezależnie od kolejności fizycznego podłączenia. Można też stosować dodatkowy port 1-wire do odczytu numerów seryjnych i tworzenia listy adresów. W praktyce użytkownik może ręcznie oznaczać czujniki, np. poprzez chwilowe schładzanie lub odłączanie, ale jest to uciążliwe. Alternatywnie sugerowano wykorzystanie przycisków lub dodatkowych czujników stanu (np. kontaktronów, czujek ruchu) podłączonych do każdego czujnika, co umożliwia programowe rozpoznanie ich kolejności i stanu alarmowego. W przypadku wymiany sterownika zaleca się przechowywanie konfiguracji w pamięci EEPROM i jej ponowne wgranie. Dyskutowano także kwestie doboru rezystorów podciągających i obciążających linię danych 1-wire, gdzie typowo stosuje się rezystory pull-up 4,7 kΩ, a rezystory do masy mogą mieć wartości powyżej 47 kΩ przy większej liczbie czujników.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA