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

Kilka czujników DS18B20 na jednej szynie 1-wire

arturromarr 30 Lis 2008 19:09 8494 10
REKLAMA
  • #1 5802023
    arturromarr
    Poziom 17  
    Witam
    Mam problem z obsługą kilku czujników do pomiaru temperatury.
    Programuję Na procesorze Mega Atmela w C i z jednym czujnikiem nie ma problemu, odczytać jego numer też potrafię (poleceniem dla pojedynczego czujnika), natomiast gdy są już dwa wszystko nie działa.
    Szukałem w necie ale nic konkretnego nie mogę znaleźć.
    Jaki jest algorytm odpytywania kolejnych czujników o ich adresy i jak z nich później doczytywać.
    Proszę o jakąkolwiek wskazówke, link lub fragment kodu.

    Pozdrawiam
  • REKLAMA
  • #2 5802101
    Pituś Bajtuś
    Poziom 28  
    Patrzałeś do dokumentacji? Pytam się, do dokumetnacji czy patrzałeś?
  • #3 5802487
    dzarek1
    Poziom 14  
    na forum są dziesiątki tematów jak to zrobić.
    ja osobiście mam takie coś, że przy włączaniu układu mogę wejść w menu które po kolei sczytuje mi numery numery seryjne i wpisuje do eepromu, nastepnie przy kolejnym uruchomieniu czyta z eepromu zapisane numery i nie dość że mogę od razu wykonywac pomiary to jeszcze układy podporządkowane są tak jak chcę za każdym razem :)
  • REKLAMA
  • #4 5803778
    arturromarr
    Poziom 17  
    SZukałem, dokumentację czytałem, jak prosze o pomoc to dlatego, że mimo to nic mi nie wyszło.
    Proszę o jakąś wskazówkę lub linka do tych forów gdzie jest to wyjaśnione, bo ja trafiam na mało treściwe tematy takie jaki się właśnie zawiązuje w moim wątku.

    Jak ma jeden układ i robię:
    reset
    33h READ ROOM
    odczyt bajtów

    to działa, natomiast jak podłączę dwa układy i próbuję zrobić:
    reset
    F0h SEARCH ROOM
    odczyt bajtów
    F0h SEARCH ROOM
    odczyt bajtów

    To nic nie odczytuje, co jest nie tak.

    Proszę o pomoc
  • #5 5807161
    fazolek
    Poziom 12  
    Jak potrafisz odczytać adres czujnika to dokumentacja ds18b20 do ręki i strona 17 tabelka pierwsza. Cała sekwencja do odczytu przy adresowaniu poszczególnych czujników. Prościej już się nie da wytłumaczyć.
  • #6 5807708
    arturromarr
    Poziom 17  
    Potrafię odczytać jak jest jeden czujnik.
    Chodzi o to by program odczytywał numery seryjne gdy są podpięte wszystkie czujniki.


    Inna rzecz, że nawet jak odczytam osobno numery seryjne (podłączając je osobno po kolei) to i tak nie działają razem.
    Dziwne bo każdy osobno działa czyli numer sczytany jest prawidłowy, opornik 4K7 do zasilania podciągnięty. Nic nie rozumiem.
  • REKLAMA
  • #7 5807996
    Samuraj
    Poziom 35  
    arturromarr napisał:

    Inna rzecz, że nawet jak odczytam osobno numery seryjne (podłączając je osobno po kolei) to i tak nie działają razem.

    Nie działa dlatego iż inaczej się obsługuję magistrale jak masz jeden układ a inaczej jak wiele.
    Nie będę tłumaczył jak odczytać numery bo koledzy powyżej wskazali odpowiednią dokumentację łącznie z numerem strony.
    Jeśli masz parę układów to przed wydaniem komendy musisz wskazać z którym układem chcesz "rozmawiać". Ustawić który ma być aktywny, wtedy inne pozostają "głuche".
    Wykonujesz to rozkazem DS18B20_ROM_MATCH, a następnie wpisujesz adres układu który ma być aktywny.
    Układ pozostaje aktywny do momentu ustawienia linii 1Wire na reset.
    Nie wiem w jakim języku piszesz ale jeśli w C to po szczegóły zapraszam pod ten link.
    https://www.elektroda.pl/rtvforum/download.php?id=316197
  • #8 5808659
    arturromarr
    Poziom 17  
    Dzięki za linka, pokombinuję z nim.
    Dokumentacje czytałem (nie ma tam jak się sczytuje adresy a o to mi chodzi), odczytuję temperaturę podając adres czujnika (ustaliłem adresy za pomocą polecenia dla pojedynczego układu) i prcedura z tabelki działa gdy jest jeden czujnik.
    Dokładnie mam dwa czujniki i na wyświetlaczu wyświetlana jest temperarura z pierwszego w górnej linijce a z drugiego w dolnej, adresy są wbite w kod na sztywno.
    Pojedyńczo czujniki chodzą a gdy są razem nie.
    Adresy są dobre bo nie chodziły by wogole skoro je adresuję.
  • REKLAMA
  • #9 5810523
    romario4
    Poziom 16  
    Witam!
    W załączniku masz plik z obsługą magistrali 1-wire, którego z powodzeniem używam od dłuższego czasu. Poniżej kawałek kodu - przykład użycia.
    
    #define PRZERWANIA_ON //jeśli nie kozystasz z przerwań w programie to możesz tą linię usunąć
    #define   W_PORT  PORTA
    #define   W_PIN   PINA
    #define   W_DDR   DDRA
    #define   W_BIT   PA0
    #include<moje/one_wire.h>
    
    uint8_t term_wewn_ID[8], term_zewn_ID[8];
    
    int main( void )
    {
      ///Inicjacja termometrów
      if(OWFirst(term_zewn_ID,1,0)==1)//odczyt adresu pierwszego układu,jeśli funkcja zwróciła 1 to szukamy dalej
          OWNext(term_wewn_ID,1,0); // odczyt temp następnego termometru, jeśli termometrów jest więcej to możemy badać                                    //wartość zwróconą przez funkcję - szukać dopóki zwraca 1
    //dalej to już wiaadomo
      return 0;
    }
    
  • #10 5815891
    arturromarr
    Poziom 17  
    Dziękuje za pomoc z takimi materiałami dam radę. :)
  • #11 5824821
    asembler
    Poziom 32  
    nie wiem jak tam z programem masz ale jak podpinasz wiecej niz jeden czujnik i do tego są one oddalone od siebie to nalezy je odseparowac opornikiem okolo 150 ohm w dokumentacji masz pokazane jak prowadzic linie 1-wire tak aby kolejne czujniki nie oddzialywaly na siebie.
REKLAMA