f
Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 548

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/sessions.php on line 549

Warning: Cannot modify header information - headers already sent by (output started at /home/anderian/ftp/www_forum/db/mysql4.php:1) in /home/anderian/ftp/www_forum/includes/page_header.php on line 343
And-Tech :: Zobacz temat - DS18B20 zawyża temperaturę

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Politykš prywatnoœci.

Możesz okreœlić warunki przechowywania lub dostępu do cookie w Twojej przeglšdarce lub konfiguracji usługi.

And-Tech Strona Główna And-Tech
Forum firmy And-Tech

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  DownloadDownload

Poprzedni temat «» Następny temat
DS18B20 zawyża temperaturę
Autor Wiadomość
onliner 

Wiek: 22
Dołączył: 02 Sty 2013
Posty: 3
Skąd: Tczew
Wysłany: Sro Sty 02, 2013 5:36 pm   DS18B20 zawyża temperaturę

Witam!
Mam problem z odczytem temperatury z ds18b20. Otóż czytnik zawyża temperaturę o jakieś 2-3 stopnie. Program obsługi czytnika wygląda tak:
Kod:

1wreset
   1wwrite &HCC
   1wwrite &H44
   Waitms 750
   1wreset
   1wwrite &HCC
   1wwrite &HBE
   Lsb = 1wread()
   Msb = 1wread()

   Temperature = Msb * 256
   Temperature = Temperature + Lsb
   Temperature = Temperature / 16

   If Msb.7 = 1 Then Temperature = Temperature * -1

   S = Fusing(temperature , "#.##")
   S = Format(s , "+0")
   S = S + "{001}C"

Odczyt wykonuję cyklicznie co 3 sekundy. Jest ktoś w stanie mi pomóc ? Z góry dziękuję!
Pozdrawiam, Mateusz Urban
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Sty 02, 2013 5:42 pm   

Co stosujesz jako wzorzec temperatury?
_________________
http://www.piotr94.net21.pl/
 
     
onliner 

Wiek: 22
Dołączył: 02 Sty 2013
Posty: 3
Skąd: Tczew
Wysłany: Sro Sty 02, 2013 5:54 pm   

Porównywałem z dwoma innymi czujnikami elektronicznymi (proste stacje pogodowe - które wskazywały dokładnie taką samą temperaturę) oraz z dwoma rtęciowymi termometrami. Poza tym, pokazuje 25-26 stopni w mieszkaniu, a według mojego odczucia raczej na pewno tyle nie ma
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Sro Sty 02, 2013 7:41 pm   

hmm, może czujnik uszkodzony. poza tym te termometry maja dokładność +/ 1 stopień w praktyce.
_________________
http://www.piotr94.net21.pl/
 
     
Kris 

Wiek: 27
Dołączył: 26 Cze 2013
Posty: 2
Skąd: Polska
Wysłany: Sro Cze 26, 2013 11:44 am   

Te czujniki faktycznie podają wyższą temperaturę. Jedynym sensownym wyjaśnieniem zakładającym, że sensor mierzy poprawnie jest zrzucenie winy na jego umiejscowienie - czujnik jest na płytce, gdzie jest z pewnością cieplej. W dodatku, biorąc pod uwagę jego dokładność ±0.5 °C (w zakresie od -10 °C ÷ +85 °C) jak podaje nota katalogowa DS18B20, może się zdarzyć, że odczyt będzie zawyżony.
 
     
grzeniu 73 

Dołączył: 11 Mar 2012
Posty: 39
Skąd: Dania
Wysłany: Wto Lip 02, 2013 8:19 pm   

Na płytce testowej pokazuje troszkę wyższą temperaturę. Tez z tym walczyłem na początku :) . Na kablu pokazują dosyć dokładnie.Mam teraz trzy czujniki i zbliżone do siebie pokazują prawie identyczną temperaturę. A skoro mowa o DS to mam tez pytanie. magistrale obsługuje w przerwaniu aby nie dawać ''wait''. W przerwaniu co 500ms resetuje i odczytuje i przeliczam tem.To działa ale dlaczego? Przecież układ jest resetowany i zaraz odczytywany i nie ma czasu na przeliczanie.Dla testów co 500ms na zmianę odsyłałem najpierw reset układu i powrót i po następnych 500ms odczyt.Działa tak samo.Teoretycznie druga wersja jest prawidłowa ,ale skoro oba rozwiązania działają.Moze Ktoś napisze jak powinno to być prawidłowo w przerwaniu zrobione.
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Wto Lip 02, 2013 11:54 pm   

Co do obsługi w przerwaniu, to sama obsługa nie powinna być w przerwaniu. Ogólnie można to zrobić tak (i jest to moim zdaniem najbardziej poprawne rozwiązanie):
Kod:

Program główny (oczywiście w pętli głównej też nie powinno być instrukcji typu Wait/delay):
1. Jeśli ustawiono flagę to:
 a) Skasuj flagę
 b) Zablokuj przerwania
 c) Odczytaj temperaturę z termometru
 d) Wyślij komendę konwersji
 e) Odblokuj przerwania
 f) Przelicz sumę kontrolną CRC
 g) Jeśli CRC jest zgodne, to przelicz temperaturę
2. Wróć do 1

Przerwanie (co 1 s - czas konwersji to domyślnie 750ms):
1. Ustaw flagę


Co do tego, dlaczego działa - otóż rejestr temperatury termometru cały czas przechowuje dane, które są zmieniane jedynie po zakończeniu konwersji. Tak więc odczytujesz z dużym prawdopodobieństwem wynik pomiaru z konwersji zleconej we wcześniejszym cyklu. Niemniej kiedyś robiłem długodystansowe testy wersji prawidłowej i opisanej przez Ciebie i w wersji z odczytem zaraz po poleceniu convert_t błędy transmisji pojawiały się 40-50% częściej, niż w wersji z poprawnym opóźnieniem. Wnioski można wyciągnąć samemu.
_________________
http://www.piotr94.net21.pl/
 
     
grzeniu 73 

Dołączył: 11 Mar 2012
Posty: 39
Skąd: Dania
Wysłany: Czw Lip 04, 2013 9:12 pm   

Dziękuje za odpowiedz,ale trochę dopytam. Kiedy wysyłany jest rozkaz resetu?Na początku po zablokowaniu przerwań?I drugie jak z następnymi czujnikami.Koncze odczyt jednego i przy pomocy następnej flagi przechodzę do następnego,czy przy jednej fladze jeden za drugim? Wait praktycznie nie używam .
 
     
piotr94 
Site Admin

Dołączył: 02 Lut 2010
Posty: 606
Skąd: Kraków
Wysłany: Pią Lip 05, 2013 2:29 pm   

1wreset wysyłasz po zablokowaniu przerwań.
Co do kilku termometrów wtedy komendę CONVERT_T wysyłasz do wszystkich układów, z wykorzystaniem komendy SKIP_ROM, a potem odczytujesz po kolei z wszystkich termometrów zamiast z jednego. Wystarczy jedna flaga.
_________________
http://www.piotr94.net21.pl/
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group