Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięDS18B20 pomoc w wytłumaczeniu zasady odczytywania pomiarów
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
Witam mam pytanie czy jest osoba, która mogłaby opisać lub ma jakiś artykuł dotyczący odczytywania temperatury z czujnika DS18B20? Nie chodzi mi tu o jakieś gotowce tylko krok po kroku jak zmieniać rozdzielczość pomiaru itp. Jak patrzałem do noty to wszystko niby jest ale jak sie za to zabrać to nie mam zielonego pojęcia .
Z góry wszystkim wielkie dzięki za jaką kolwiek pomoc.
Z góry wszystkim wielkie dzięki za jaką kolwiek pomoc.
Tylko jest problem bo niestety z przykrością muszę stwierdzić że nie kolekcjonuje tego czasopisma mam tylko książkę M.W. "Programmowanie Mikrokontrolerów w BASCOMie". Poszykuje czegoś dokładnego bo odczytać to tak ale jak to potem przekonwertowac żeby wychodziła prawidłowa temp. to nie wiem za bardzo
Zakładam, że masz odczytane dwa bajty : LSB i MSB wyniku pomiaru (pierwsze dwa bajty pamięci scratchpad. Jeśli zadowoli Cię rozdzielczość 1 stopnia (bez części ułamkowej), to wystarczy, że LSB podzielisz przez 16, MSB pomnożysz przez 16 a następnie wyniki zsumujesz ze sobą. Po umieszczeniu tej sumy w zmiennej mogącej przechowywać liczby ze znakiem masz już wynik w stopniach Celsjusza. Jeśli natomiast chcesz lub musisz wynik przedstawić razem z częścią ułamkową, to do wyniku otrzymanego w sposób podany wyżej musisz dodać (i umieścić w zmiennej przechowującej liczby zmiennoprzecinkowe) resztę z dzielenia LSB przez 16 pomnożoną przez 0,0625 (tylko że w przypadku obliczeń na liczbach rzeczywistych i ich przekształcaniu na łańcuch znaków bardzo wzrasta zużycie pamięci programu).Poszukuje czegoś dokładnego bo odczytać to tak ale jak to potem przekonwertowac żeby wychodziła prawidłowa temp. to nie wiem za bardzo
Hmmm ....Zakładam, że masz odczytane dwa bajty : LSB i MSB wyniku pomiaru (pierwsze dwa bajty pamięci scratchpad. Jeśli zadowoli Cię rozdzielczość 1 stopnia (bez części ułamkowej), to wystarczy, że LSB podzielisz przez 16, MSB pomnożysz przez 16 a następnie wyniki zsumujesz ze sobą. Po umieszczeniu tej sumy w zmiennej mogącej przechowywać liczby ze znakiem masz już wynik w stopniach Celsjusza...
radzio wybacz , ale ... nie spodziewałem się po Tobie takiej odpowiedzi
Przecież w to co napisałeś , chyba sam nie wierzysz
ttomo
Odczytane ze scratchpad'a dwa bajty - o których wspomniał radzio - wpisujesz/kopiujesz do liczby typu Integer (np. Integer = Makeint(LSB,MSB) i dopiero na tej liczbie wykonujesz działania algebraiczne , by zachować znak tej liczby.
Pozdrawiam
Piotrek
Nie tylko wierzę, ale poparłem to doświaczeniem (czego wiarą juz nazwać nie można, bo ta nie jest poparta żadnymi dowodami)radzio wybacz , ale ... nie spodziewałem się po Tobie takiej odpowiedzi
Przecież w to co napisałeś , chyba sam nie wierzysz
Liczbę z zakresu -55..125 chcesz przechowywać w zmiennej 16-bitowej? Można, ale wg mnie szkoda pamięci.wpisujesz/kopiujesz do liczby typu Integer (np. Integer = Makeint(LSB,MSB) i dopiero na tej liczbie wykonujesz działania algebraiczne
Znak jest "rozciągnięty" na 5 najstarszych bitów MSB, więc po pomnożeniu przez 16 nadal będzie na najstarszym bicie zmiennej i nadal "wpakowany" do zmiennej "signed" będzie wskazywał właściwą wartość liczby.by zachować znak tej liczby
Może Bascom rządzi się innymi prawami, ale w "jezyku wroga" opisany przezemnie sposób działa.
To ja Cię poproszę o jakiś ochłap kodu w Bascomie , bo mi nijak nie wychodzi
Piotrek
dodałem:
Przeoczyłem zdanie z "językiem wroga".
No jeśli chodzi o C , to już inna bajka , ale postodawca napomykał o Bascomie ,a tam ani widu ani słychu signed char
postarałem się trochę:
Jednak kod wynikowy w/w , jest większy od
Piotrek
dodałem:
Przeoczyłem zdanie z "językiem wroga".
No jeśli chodzi o C , to już inna bajka , ale postodawca napomykał o Bascomie ,a tam ani widu ani słychu signed char
postarałem się trochę:
Kod: Zaznacz cały
Dim Lsb As Byte , Msb As Byte , Tm As Integer
Lsb = &HD0
Msb = &H07
Msb = Msb * 16
Lsb = Lsb / 16
Tm = Lsb + Msb
Tm = Tm * 256
Tm = Tm / 256
Print Tm
Kod: Zaznacz cały
Lsb = &HD0
Msb = &H07
Tm=Makeint(lsb,msb)
Tm/16
Print Tm
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości