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] DS18B20 z Atmega8 - błędny odczyt powyżej 40°C, co robić?

Mendrek 02 Lis 2006 10:51 2409 24
REKLAMA
  • #1 3178824
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
    Witam

    Problem jak w temacie. Dodam, że czujnik podłączony jest do Atmegi8.
    Do temperatury 40*C mierzy dobrze i dokładnie. A od 41*C wywala w odczycie same 1.

    Czy możliwe, że to zależy od egzemplarza czujnika?
    Miał ktoś podobny problem lub wie jak go rozwiązać?
  • REKLAMA
  • #3 3178992
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
     	
    if(!ow_reset())
     	{ 
    	  ow_write_byte(0xCC);
     	  ow_write_byte(0x44);
    	}	
    	// minimum 750us na przetwarzanie temeratury;
     	for(i=0;i<250;i++)wyswietl(00); // wyswietla 00 przez czas   konwersji
     	if(!ow_reset())
     	{ 
     	  ow_write_byte(0xCC);
     	  ow_write_byte(0xBE);
    	}
    
     	lsb = ow_read_byte(); 
     	msb = ow_read_byte();
    
     	temp = (msb & 0x07) << 4;
     	temp |= (lsb & 0xF0) >> 4;
    


    Dodam, że właśnie zmieniłem DS'a na innego i też mierzy tylko do 40*C.
    Rozważam na razie 2 możliwości. Błąd w kodzie lub mój brak informacji na temat konfiguracji czujnika :)
  • #4 3179021
    zerpo
    Poziom 22  
    Posty: 463
    Pomógł: 50
    Ocena: 134
    Jakiego typu jest zmienna temp?
  • #5 3179030
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
    temp, lsb, msb sa "unsigned char"
    ow_read_byte() tez zwraca unsigned char
  • REKLAMA
  • #7 3179653
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
    to jest literówka :) Ustawiony czas jest koło 1s. Wydaje mi się że coś jest nie tak z rejestrem Th, ale to muszę jeszcze sprawdzić
  • #8 3179806
    sento
    Poziom 12  
    Posty: 20
    Pomógł: 2
    temp = (msb << 4) & 0x70;
    temp |= (lsb >> 4) & 0x0F;
  • #9 3179846
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    A ja powiem tyle - na czujniku DS18B20 mam podobny problem - mianowicie przy temperaturach poniżej 15*C dostaję same jedynki, w górę wszystko działa dobrze. Na innym czujniku problem pojawiał się już przy 18*C...
  • #10 3179893
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
    :arrow:sento
    Nie pomogło. W gruncie rzeczy to jest to samo co w moim kodzie.

    :arrow:maciek_slon
    A wiesz może jakie są wartości rejestrów Th i Tl w twoich DS'ach?

    Po dokładniejszym przyjrzeniu się czujnik mierzy do temp. 43*C.
  • REKLAMA
  • #11 3179979
    lechoo
    Poziom 39  
    Posty: 5161
    Pomógł: 377
    Ocena: 545
    Podłącz czujnik 3 przewodami i zobacz czy coś to zmienia.
  • #12 3179986
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
    mam podłączony 3 przewodami, z rezystorem pull-up 4,7k
  • #13 3180235
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    Mendrek napisał:

    A wiesz może jakie są wartości rejestrów Th i Tl w twoich DS'ach?


    Th = 4Bh (75)
    Tl = 46h (70)

    W obu czujnikach, a zachowują się różnie.
  • #14 3181188
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
    u mnie tak samo.
    Th = 75
    Tl = 70
    wiec to pewnie nie to :/ Już mi się pomysły kończą :/
  • #15 3185620
    darrrrek
    Poziom 22  
    Posty: 733
    Pomógł: 4
    Ocena: 98
    a ja mam czujnik DS18B20 ktory powyzej 50stopni pokazuje non stop 139 stopni :D a inny znowu zaniza temp o 5 stopni LOL
  • #16 3185717
    Skubik
    Poziom 15  
    Posty: 106
    Pomógł: 12
    Ocena: 2
    Mam kilka układów DS18B21 i DS18B20-P i wszystkie działają bez problemu. Programuje w asemblerze
  • #17 3185751
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    Ja też w asemblerze... Eh, będę z tym walczył ale wątpię żeby był to problem transmisji bo niby czemu przy 19*C działa dobrze a przy 12 już się krzaczy?
  • #18 3185917
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
    Ja mam 2 uklady DS18B20. I obydwa zachowują się tak samo :/.
    A może od temperatury zależą własnie czasy w transmisji?. Np. przy wyższej temperaturze się zmniejszają?

    Jak mi DS zaniżał temperaturę to podłączyłem jakiś duży elektrolit do jego zasilania i zaczął mierzyć dokładnie.
  • REKLAMA
  • #19 3186130
    Skubik
    Poziom 15  
    Posty: 106
    Pomógł: 12
    Ocena: 2
    Badałem swój DS od temperatury -20 do 125 i zawsze pokazywał dobrze.
  • #20 3186138
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    Chodzi o to, że przy wyższej temperaturze pomiar trwa dłużej (max 850ms) I dlatego ważny jest czas po podaniu komendy pomiar *chyba BE jeśli się nie mylę, albo 44:P*

    Jeżeli DS zaniża temperaturę, tzn, że go ktoś przegrzał... albo był uszkodzony od nowości. Miałem i takie klocki, a przewinęło się z 200 sztuk przez moje ręce i do tej pory nie mam zwrotów od klientów. Ale różnica temp. rzędu 5* była na jednej czy dwóch czujkach....

    Pozdrawiam i życzę powodzenia;)

    P.S. Lepiej zasilać je 3 liniami, a nie dwoma.:)
  • #21 3186489
    maciek_slon
    Poziom 29  
    Posty: 942
    Pomógł: 143
    Ocena: 27
    Czujnik dostaje ode mnie równą sekundę na konwersję (od wysłania komendy konwersji do odczytu). Podłączony trzema liniami. Odległość od uC ~15cm. Rezystor podciągający 4,7k. Procesor nie obsługuje żadnego innego zadania (wszystko wyłączone, żadnych przerwań nie ma uaktywnionych). Procedury zapisu i odczytu są poprawne bo tak jak pisałem - działa w pewnym zakresie temperatur bezbłędnie. Dzisiaj spróbuję przepisać cały program od nowa, ale wątpię żeby to coś dało.

    Sprawdziłem kolejne dwa czujniki... Te dwa "nowe" się wykrzaczają przy temperaturach poniżej 30*C już... Eh, jak tak dalej pójdzie to się przerzucę na LM35 i ADC :P
  • #23 3224056
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
    a ma może ktoś dzialający program napisany w C?? i ewentualnie mógłby podrzucić?
  • #24 3224605
    kaczepa
    Poziom 20  
    Posty: 238
    Pomógł: 32
    Ocena: 5
    Mam podłączone 8 DS , są podłączone w odległości od 3 do 8 m.Połączenie 3 przewodowe, z pull-up.
    Wszystko działa w pełnym zakresie na max rozdzielczości.Żadnych problemów.Program w assemblerze.
  • #25 3543458
    Mendrek
    Poziom 12  
    Posty: 48
    Pomógł: 2
    Trochę zajęło mi znalezienie co jest nie tak... ale w końcu do tego doszedłem, może się komuś przyda.
    Problem rozwiązałem stosując kwarc 4,4 Mhz (lecz samo zastosowanie kwarcu nie było przyczyną rozwiązania problemu), następnie przeliczyłem czasy dla tej częstotliwości, a to co pomogło to wydłużyłem czasy trwania ramek w 1wire. Widocznie jeżeli czujnik jest ogrzewany czasy te się wydłużają, przez co master błędnie odbierał cały czas "1".

Podsumowanie tematu

✨ Problem dotyczy błędnych odczytów temperatury z czujnika DS18B20 podłączonego do mikrokontrolera Atmega8, gdzie pomiary są poprawne do około 40°C, a powyżej tej wartości odczyty zwracają same jedynki. Dyskusja wskazuje na możliwe przyczyny: błędy w implementacji protokołu 1-Wire, nieprawidłowe przetwarzanie danych z rejestrów temperatury, niewłaściwe czasy konwersji oraz wpływ częstotliwości taktowania mikrokontrolera na czas trwania sygnałów 1-Wire. Użytkownicy sugerują sprawdzenie i korektę kodu, zwłaszcza przesunięć bitowych i typów zmiennych, a także stosowanie odpowiedniego czasu oczekiwania na konwersję (około 750 ms do 1 s). Wskazano, że czujniki mogą mieć różne zachowania, ale problem nie jest związany z wartościami rejestrów Th i Tl, które w testowanych egzemplarzach były identyczne. Zalecane jest zasilanie i komunikacja 3-przewodowa z rezystorem pull-up 4,7 kΩ oraz uwzględnienie wpływu temperatury na czas trwania sygnałów 1-Wire. Ostateczne rozwiązanie problemu uzyskano przez zastosowanie kwarcu 4,4 MHz i wydłużenie czasów trwania ramek w protokole 1-Wire, co poprawiło stabilność odczytów przy wyższych temperaturach. Alternatywnie rozważano użycie innych czujników, np. LM35 z ADC, gdyż problem może wynikać z błędów transmisji lub uszkodzenia czujnika.
Wygenerowane przez model językowy.
REKLAMA