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

ds18b20 - 1-wire, sposób adresowania, wiele czujników temp.

alvarofun 23 Paź 2013 21:55 6423 28
  • #1 23 Paź 2013 21:55
    alvarofun
    Poziom 17  

    Witam, mam pytanie.

    Może dla niektórych wydać się śmieszne i zbyt proste, jednak szukam i nie moge znaleźć na nie odpowiedzi.

    Załóżmy że mam 10 termometrów ds18b20 na jednej szynie.
    komenda schear rom określi mi ilości i rodzaje układów slave.
    Czy mogę w jakiś sposób podglądnąc ile ich jest oraz ten adres jaki jest zapisany w każdym z nich??

    Drugie pytanie, w jaki sposób mam się odwołać np do 5 termometru, czy jest to piąty z kolei podłaczony w szeregu na szynie, zaznaczając że pierwszy jest najbliżej kontrolera, i później 4 razy podać komende skip rom?

    1 28
  • Sklep HeluKabel
  • #2 23 Paź 2013 22:10
    xamrex
    Poziom 28  

    alvarofun napisał:
    Drugie pytanie, w jaki sposób mam się odwołać np do 5 termometru, czy jest to piąty z kolei podłaczony w szeregu na szynie, zaznaczając że pierwszy jest najbliżej kontrolera, i później 4 razy podać komende skip rom?


    Odwołujesz się poprzez adres tego termometru.
    Komendę skip rom, możesz użyć tylko wtedy gdy na linii jest TYLKO 1 czujnik

    0
  • #3 23 Paź 2013 22:23
    alvarofun
    Poziom 17  

    Jakoś nie satysfakcjonuje mnie ta odpowiedź, może sprubuj troche łopatologicznie.

    kontroler pyta: jakie mamy urzadzenia???
    i odpowiedz z urządzeń

    1.term (.....)-<jakaś tam jego nazwa
    2.term (.....)-<jakaś tam jego inna nazwa
    3.term (.....)-<jakaś tam jego jeszcze inna nazwa
    4.term (.....)-<kolejna nazwa

    aż trafiamy na tą 5, skąd mam wiedzieć jak się ten termometr nazywa i jak mam się do niego bezpośrednio odwołać???

    0
  • Sklep HeluKabel
  • #4 23 Paź 2013 22:34
    xamrex
    Poziom 28  

    Oj..
    To chyba musiałbyś pojedynczo wpinać te termometry i odczytywać ich adresy i sobie zapisać adres każdego termometru.
    Ale pewien nie jestem,
    Może inni się wypowiedzą ;)

    0
  • #6 23 Paź 2013 22:43
    alvarofun
    Poziom 17  

    Ale zobacz, jeśli wysyłam komende SEARCH ROM (0xF0) to nigdzie mi sie nie pojawia lista slave'ów jakie widnieją na magistralii, więc jak sie mam odwołać do tego konkretnego którym jest ten piąty z kolei licząc od kontrolera????

    0
  • #7 23 Paź 2013 23:37
    BlueDraco
    Specjalista - Mikrokontrolery

    Nie ma czegoś takiego, jak "piąty z kolei", bo nie ma możliwości określenia pozycji. W sieci znajdziesz sporo gotowych programów, w tym takich z szukaniem czujników. Po zakończeniu szukania dostajesz tablicę z adresami czujników, a który jest który, to możesz stwierdzić tylko podgrzewając je pojedynczo np. palcem i odczytując temperaturę wszystkich.

    0
  • #8 24 Paź 2013 00:42
    alvarofun
    Poziom 17  

    I właśnie o tą tablicę mi chodzi, czy dany czujnik temperatury zawsze przyjmie to samo miejsce(pozycje) w tej tablicy???, czy np po restarcie zasilania, czy po ponownym wyszukaniu jego pozycja w tablicy się zamieni???

    Jak one się sortują na tej tablicy???

    A uparłem się tak do tego "piątego", bo jeśli np chciał bym w tym "piątym" zmienić rozdzielczość pomiaru, ale tylko dla tego jednego na inną.

    Z góry odpada taki sposób że do jego konfiguracji specjalnie podepnę jednego slave'a do innego kontrolera i bede dla niego osobno ustawiał bit0 i bit1.

    0
  • #9 24 Paź 2013 08:30
    BlueDraco
    Specjalista - Mikrokontrolery

    Pozycja w tablicy zależy od adresu. Przeszukiwanie zawsze odbywa się w tej samej kolejności adresów.

    Po co miałbyś zmieniać rozdzielczość pomiaru w samym czujniku? Czytaj jak leci, a potem już w oprogramowaniu zaokrąglaj w zależności od potrzeb.

    0
  • #10 24 Paź 2013 08:30
    GanzConrad
    Poziom 21  

    alvarofun napisał:
    zawsze przyjmie to samo miejsce(pozycje) w tej tablicy???

    tak
    alvarofun napisał:
    czy np po restarcie zasilania, czy po ponownym wyszukaniu jego pozycja w tablicy się zamieni???

    nie
    odpowiedzi na wszystkie swoje pytania (i inne) znajdziesz w nocie katalogowej i w różnych opracowania (łącznie z językiem polskim).
    Ja wiem, że czytanie wszystkich postów, opracowań i datasheet nie jest zachęcające, ale niestety w większości przypadków jest etapem, którego nie da się pominąć (pierwsze niepowodzenie i musisz ogarnąć wszystko, aby znaleźć błąd lub dopisać obsługę jakiejś funkcjonalności), więc najlepiej od tego zacząć.

    0
  • #11 24 Paź 2013 08:48
    perlon
    Poziom 19  

    alvarofun napisał:
    I właśnie o tą tablicę mi chodzi, czy dany czujnik temperatury zawsze przyjmie to samo miejsce(pozycje) w tej tablicy???, czy np po restarcie zasilania, czy po ponownym wyszukaniu jego pozycja w tablicy się zamieni???

    Jak one się sortują na tej tablicy???

    Kol. BlueDraco już odpowiedział. Ja tylko dodam, że ta tablica jest sortowana po adresach i warto ją rozpisać do innej tablicy w eeprom, bo w przypadku gdy podmienisz jeden z czujników pozycja części lub w skrajnym przypadku wszystkich czujników może się zmienić. A tak odwołując się do tablicy przypisań LOKALIZACJA->ADRES zapisanej w eeprom zawsze wiesz co czytasz. Przy większej niż 1 liczbie czujników nie ma innej możliwości odczytu jak odpytanie konkretnego adresu. Przy starcie kontrolera trzeba tylko przelecieć przez wszystkie adresy i potwierdzić obecność wszystkich czujników ewentualnie zasygnalizować brak lub podmianę czujnika.

    0
  • #12 24 Paź 2013 12:10
    alvarofun
    Poziom 17  

    perlon napisał:
    alvarofun napisał:
    I właśnie o tą tablicę mi chodzi, czy dany czujnik temperatury zawsze przyjmie to samo miejsce(pozycje) w tej tablicy???, czy np po restarcie zasilania, czy po ponownym wyszukaniu jego pozycja w tablicy się zamieni???

    Jak one się sortują na tej tablicy???

    Kol. BlueDraco już odpowiedział. Ja tylko dodam, że ta tablica jest sortowana po adresach i warto ją rozpisać do innej tablicy w eeprom, bo w przypadku gdy podmienisz jeden z czujników pozycja części lub w skrajnym przypadku wszystkich czujników może się zmienić. A tak odwołując się do tablicy przypisań LOKALIZACJA->ADRES zapisanej w eeprom zawsze wiesz co czytasz. Przy większej niż 1 liczbie czujników nie ma innej możliwości odczytu jak odpytanie konkretnego adresu. Przy starcie kontrolera trzeba tylko przelecieć przez wszystkie adresy i potwierdzić obecność wszystkich czujników ewentualnie zasygnalizować brak lub podmianę czujnika.



    I tak to chyba właśnie zrobię, przy pomocy poleceń If Then Else.


    Chciał bym swoim projektem objechać dookoła cały dom i wszystkie pomieszczenia. Zakładając że mam atmega8 i np chciał bym wykorzystać całą magistrale portC, odliczając ten PC6(reset) pozostaje mi jeszcze 6 wejść/wyjść, ile mogę maksymalnie do jednego wejścia/wyjścia podpiąć termometrów ???, oczywiście żeby to sprawnie i w miarę szybko chodziło.

    0
  • #13 24 Paź 2013 12:43
    johnny99
    Poziom 17  

    Cały dom oblecieć? Nie za długi przewód z kontrolera do czujników? Chyba musisz wymyśleć inną komunikację.

    0
  • #14 24 Paź 2013 12:44
    perlon
    Poziom 19  

    alvarofun napisał:

    I tak to chyba właśnie zrobię, przy pomocy poleceń If Then Else.

    SWITCH CASE jest chyba czytelniejszcze? Tylko po co? Może lepiej zamknąć odczyt czujników w pętli for()?

    alvarofun napisał:

    Chciał bym swoim projektem objechać dookoła cały dom i wszystkie pomieszczenia. Zakładając że mam atmega8 i np chciał bym wykorzystać całą magistrale portC, odliczając ten PC6(reset) pozostaje mi jeszcze 6 wejść/wyjść, ile mogę maksymalnie do jednego wejścia/wyjścia podpiąć termometrów ???, oczywiście żeby to sprawnie i w miarę szybko chodziło.

    Formalnie rzecz biorąc potrzebujesz 1 pin na obsługę magistrali 1-Wire. Na pracę magistrali wpływ ma łączna pojemność magistrali ( łączna długość kabli + ilość czujników ). Przy dłuższych kablach wykluczyłbym tryb pasożytniczy i dał solidne podciąganie do Vcc również na końcach dłuższych odcinków kabla. Kilkanaście czujników na jednej linii nie stanowi problemu.

    johnny99 napisał:
    Cały dom oblecieć? Nie za długi przewód z kontrolera do czujników? Chyba musisz wymyśleć inną komunikację.

    Dlaczego? Jak zrobi magistralę gwiazda z kilkoma czujnikami na gałęzi + podciąganie każdej gałęzi gwiazdy. Tu na forum jest opisanych kilka przykładów instalacji po 100 i więcej metrów.

    0
  • #15 24 Paź 2013 12:54
    janek1815
    Poziom 38  

    perlon napisał:
    johnny99 napisał:
    Cały dom oblecieć? Nie za długi przewód z kontrolera do czujników? Chyba musisz wymyśleć inną komunikację.

    Dlaczego? Jak zrobi magistralę mieszaną otok/gwiazda + podciąganie każdej gałęzi gwiazdy. Tu na forum jest opisanych kilka przykładów instalacji po 100 i więcej metrów.


    W ten sposób będzie bez problemu działać ta sieć z czujnikami. Mam 18 podłączonych na 50 metrach. Rezystor podciągający 1,8k.

    Najlepiej napisz sobie instrukcję zapisującą kolejne czujniki do pamięci eeprom Atmegi. Przy uruchomieniu podłączysz sobie je pojedynczo odczytując Id a później będziesz się odwoływał do nich kolejno. Nawet w przypadku awarii łatwiej jest podmienić kolejny czujnik.

    0
  • #16 24 Paź 2013 15:35
    alvarofun
    Poziom 17  

    Wybaczcie mi mój poziom z jakim zadaję pytania i nad jakimi problemami ubolewam, ale naprawdę jestem w mikrokontrolerach początkujący, czytam dużo na ten temat, może dokumentacja techniczna, taka jak datashhety nie do końca wszytsko mi przekazują jak przykłady, które dogłębnie analizuję i wstawiam sobie do nich komentarze, każdy temat z kolei coraz bardziej mnie w to wszytsko wciąga, może kiedyś w przyszłości te termometry będą regulowały histerezę elektrozaworu na grzejnikach, ale to naprawde daleko w przyszłości.

    Najpierw chciał bym dogłebnie poznać budowę, zasadę działania, problemy związane z ewentualnymi założeniami i wogóle... co prawda "jem" małą łyżeczką i to właśnie może dlatego zacząłem od tych termometrów.

    Docelowo centrum informacyjne planuję zrobić w przedpokoju któy się znajduje właśnie w środkowej części domu, co za tym idzie puki co, nazwa dotychczas mi nieznana "magistrala gwiazda" pewnie właśnie do tego schematu połączeń się odnosi.

    Rodzaj połączenia slave'ów z master'ami docelowo wolał bym jednak zastosować za pomocą połączeń bezprzewodowych np bluetooth a wyniki oglądać na ekranie komputera w jakiś aplikacjach, w np VB10. Do takich transmisji jednak z pomocą udam się na zakup książek ATMEL, narazie wolał bym pozostać przy tych prostych połączeniach kablowych, aby wchłonąć największą z możliwych ilosć wiedzy.

    Puki co, czekam na wyświetlacz który ma mi przyjść pod koniec miesiąca, na którym będe chciał wyświetlać potrzebne mi informacje.

    Mam jeszcze takie małe pytanie, może mi ktoś powiedzieć lecz nie szukając w necie, tylko z własnego doświadczenia, ilu znakowy jest taki numer ID termometru?

    0
  • #17 24 Paź 2013 16:09
    xamrex
    Poziom 28  

    alvarofun napisał:
    Mam jeszcze takie małe pytanie, może mi ktoś powiedzieć lecz nie szukając w necie, tylko z własnego doświadczenia, ilu znakowy jest taki numer ID termometru?

    Chyba doświadczenie i DS powinny mówić to samo?!
    ds18b20 - 1-wire, sposób adresowania, wiele czujników temp.

    Tak więc CAŁY adres to 8bajtów, ale unikalne ID termometru to tylko 6 bajtów.

    0
  • #18 24 Paź 2013 16:16
    janek1815
    Poziom 38  

    8 bajtów czyli 16 znaków w jednej linijce wyświetlacza Ci się zmieści np:
    dla DS1820 10DFF5A700080036 - obecnie rzadko używany zastąpiony poniższym
    dla DS18B20 2885C4A50000000A

    0
  • #19 24 Paź 2013 16:44
    Walery K
    Poziom 16  

    W zasadzie z tego co czytałem to nie powinno się robić gwiazdy, ale ...
    W poprzednim moim domu miałem podpięte w gwieździe kilkanaście czujników i najdalej oddalony był dosyć sporo ponad 100 m na przewodzie telefonicznym no i działało. Oczywiście wszystkie zasilane 3 przewodowo, no i trochę zabawy z dobraniem rezystora podciągającego, bo zarówno ze zbyt małym, jak i zbyt dużym nie chciało mierzyć.
    W nowym domu do pomiarów zaprzągłem DS2482-800 i spokojnie mogłem sobie zrobić kilka gałęzi (do 8 szt.) i dalej odczytywać sobie przez I2C nie przejmując się żadnymi opóźnieniami czasowymi.

    0
  • #20 24 Paź 2013 18:08
    alvarofun
    Poziom 17  

    Walery K napisał:
    W zasadzie z tego co czytałem to nie powinno się robić gwiazdy, ale ...
    W poprzednim moim domu miałem podpięte w gwieździe kilkanaście czujników i najdalej oddalony był dosyć sporo ponad 100 m na przewodzie telefonicznym no i działało. Oczywiście wszystkie zasilane 3 przewodowo, no i trochę zabawy z dobraniem rezystora podciągającego, bo zarówno ze zbyt małym, jak i zbyt dużym nie chciało mierzyć.
    W nowym domu do pomiarów zaprzągłem DS2482-800 i spokojnie mogłem sobie zrobić kilka gałęzi (do 8 szt.) i dalej odczytywać sobie przez I2C nie przejmując się żadnymi opóźnieniami czasowymi.


    Też bardzo fajne rozwiązanie, mógł bym w każdym pomieszczeniu zamontować po jednym ds2482-800, lecz 2 szkopóły:
    1. Jak wspomniałem jescze jestem początkujący, wolał bym się stopniowo skupiać na komunikacjach, jako pierwszą wydaje się najłatwiejszą przyjąłem 1-wire, tutaj dodatkowo musiał bym się uczyć I2c co i tak mnie nie ominie.
    2. jak zauważyłem w tej nocie, to chyba zakres temperatur zmalał "wide operating range -40 stC to 85 stC", a w tym dallasie semiconduktorze od -55 do +125.
    Zasadniczo to 85st to i tak dużo i pewnie na początek by wystarczyło, ale szczerze to wam powiem że zwracając uwagę na cenę tego ds18b20 to z ciekawości jak wjadę do kuchni z czujnikami to nawet bym ten czujnik sprubował wepchnąć do czajnika bezprzewodowego, a co mi szkodzi znać dokłądną temperature wody na kawę, która za chwilkę bedzie mi się parzyła, albo np do lodówki, czy zamrażarki.

    I kolejne pytanie mi się nasunęło, co w momencie kiedy przekroczę skalę???
    jeśli bym np ds18b20 załadował do piekarnika??? W momencie wypieku placka w piekarniku temp bedzie coś koło 200stC, jak się zachowa ds???

    1.Czy pomiar zatrzyma się na 125 i nięcej nic nie pokaże???,
    2.czy też jego dokładność szlak trafi???,
    3.a może pokaże wartości wyższe niż 125stC
    4.isntnieje jakiś czujnik (tylko nie szalejmy z termoparami itp), coś na wygląd budowy ds18b20, i podobnym sposobie komunikacji, który miał by większą skalę pomiaru??? np do 250st?

    0
  • #21 24 Paź 2013 18:32
    Walery K
    Poziom 16  

    DS2482-800 nie służy do pomiaru temperatury. On służy jedynie do odczytu danych z 8 magistral 1-wire za pomocą I2C.
    Przy temperaturze 200 stopni DS1820 na pewno Ci się usmaży. Chyba żaden półprzewodnik nie wytrzyma takiej temperatury. Pozostaje PT100 lub PT1000

    0
  • #22 24 Lis 2013 10:35
    jacekgrab
    Poziom 10  

    mam taki problem :
    chciałem podłączyć 12 czujników DS18b20 do raspberry pi, na płytce stykowej wszystko działa poprawnie program wykrywa wszystkie czujniki i odczytuje temperatury, problem zaczął się gdy rozmieściłem czujniki w miejscach gdzie mają mierzyć temperaturę i przeprowadziłem przewody od czujników do raspberry pi (6 czujników jest na kablu o długości 2 metry, 4 czujniki na kablu o długości 8 metrów i dwa czujniki na kablu o długości 15 metrów), mogę podłączyć tylko max 7 czujników gdy podłącze więcej nie wykrywa żadnego lub wykrywa jeden. Czujniki zasilane są napięciem 3,3V, zasilacz raspberry pi daje natężenie 2A, rezystor podciągający ma 4,7k. Przyczyną na pewno są długości przewodów do czujników. Może zwiększyć napięcie zasilania czujników do 5V ? tylko co wtedy z rezystorem? czy może rezystor przy takich długościach kabla jest nie taki jak trzeba? użyłm standardowego kabla jakim łączy się np czujniki ruchu do alarmu

    0
  • #23 24 Lis 2013 10:39
    Walery K
    Poziom 16  

    Spróbuj zmniejszyć rezystor podciągający.

    0
  • #24 24 Lis 2013 10:47
    jacekgrab
    Poziom 10  

    a jaką wartość proponujesz?

    0
  • #25 24 Lis 2013 10:57
    Walery K
    Poziom 16  

    Ja mam 1,8k ale dobierany doświadczalnie - przy podłączonych ponad 20 czujnikach, z tym, że zasilanie 5V. Najlepiej zmniejszać po trochu aż zacznie odczytywać.

    0
  • #26 24 Lis 2013 11:03
    Tomq
    Poziom 38  

    Pokombinuj z różnymi - 1,8K; 2,2K; 3,3K.

    Przewody idące do czujników są tego samego rodzaju? Czasem bywa tak, że pomiar jest zły bo użyto różnego rodzaju kabli o różnych przekrojach. 1-wire jest też dość wrażliwa na zakłócenia, choć to raczej dotyczy środowiska przemysłowego niż domu mieszkalnego.

    0
  • #27 24 Lis 2013 12:16
    jacekgrab
    Poziom 10  

    kable są tego samego rodzaju

    0
  • #28 24 Lis 2013 15:10
    alvarofun
    Poziom 17  

    DS18B20 zasila się napięciem +5V, rezystor podłączasz do lini danych czyli DQ, równierz +5V, rezystancja rezystora wynosi 4,7K

    Tu masz instrukcje deesa, w której masz napisane wartości, napięcia, rezystancji oraz schemat podłaączenia
    [url=]http://www.pic_examples.byethost3.com/DS18B20.html[/url]

    0
  • #29 24 Lis 2013 17:38
    jacekgrab
    Poziom 10  

    sprawdze te 5V i zobaczymy, z tym że na 3,3 V działało poprawnie jak czujniki były bez kabli, ja myślałem że jak jak czujniki sa podłączone równolegle to prad jest za mały i zmieniłem zasilacz z 1,2A na 2 A ale to nic nie dało.

    0