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

ttomo
-
-
Posty:4
Rejestracja:10 mar 2007, o 22:13
Lokalizacja:Mysłowice
Kontaktowanie:
DS18B20 pomoc w wytłumaczeniu zasady odczytywania pomiarów

Postautor: ttomo » 10 mar 2007, o 23:00

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 :609: .
Z góry wszystkim wielkie dzięki za jaką kolwiek pomoc.

pi
-
-
Posty:14
Rejestracja:5 wrz 2003, o 11:59
Lokalizacja:Zgierz

Postautor: pi » 12 mar 2007, o 12:04

Poszukaj archiwalnych numerow EdW z kursem autorstwa Piotra Góreckiego (mozesz tez zakupic ksiazke wydawnictwa BTC "Mikrokontrolery dla poczatkujacych" zawierajaca ten sam material) - obsluga 1820 i calej magistrali 1-wire jest tam wytlumaczona w sposob przystepny i wyczerpujacy.

ttomo
-
-
Posty:4
Rejestracja:10 mar 2007, o 22:13
Lokalizacja:Mysłowice
Kontaktowanie:

Postautor: ttomo » 23 mar 2007, o 18:56

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 :602:

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 24 mar 2007, o 08:04

Poszukuje czegoś dokładnego bo odczytać to tak ale jak to potem przekonwertowac żeby wychodziła prawidłowa temp. to nie wiem za bardzo :602:
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).

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 24 mar 2007, o 14:09

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...
Hmmm ....
:arrow: 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

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 24 mar 2007, o 14:19

:arrow: radzio wybacz , ale ... nie spodziewałem się po Tobie takiej odpowiedzi :(
Przecież w to co napisałeś , chyba sam nie wierzysz :?:
Nie tylko wierzę, ale poparłem to doświaczeniem (czego wiarą juz nazwać nie można, bo ta nie jest poparta żadnymi dowodami)
wpisujesz/kopiujesz do liczby typu Integer (np. Integer = Makeint(LSB,MSB) i dopiero na tej liczbie wykonujesz działania algebraiczne
Liczbę z zakresu -55..125 chcesz przechowywać w zmiennej 16-bitowej? Można, ale wg mnie szkoda pamięci.
by zachować znak tej liczby
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.

Może Bascom rządzi się innymi prawami, ale w "jezyku wroga" opisany przezemnie sposób działa.

szymel
-
-
Posty:212
Rejestracja:16 sty 2005, o 16:42
Lokalizacja:Włocławek

Postautor: szymel » 24 mar 2007, o 14:27

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 :D

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
Jednak kod wynikowy w/w , jest większy od

Kod: Zaznacz cały

Lsb = &HD0 Msb = &H07 Tm=Makeint(lsb,msb) Tm/16 Print Tm

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 24 mar 2007, o 14:59

Faktycznie, masz rację. Bascom nie umożliwia korzystania z 8-bitowych zmiennych ze znakiem (pozdrawiam serdecznie Autora), więc podany przezemnie sposób nie wypali w Bascomie. Jednak jest na tyle uniwersalny, że w każdym innym cywilizowanym jezyku programowania może być z powodzeniem stosowany.

ttomo
-
-
Posty:4
Rejestracja:10 mar 2007, o 22:13
Lokalizacja:Mysłowice
Kontaktowanie:

Postautor: ttomo » 30 mar 2007, o 19:49

wszystko rozumiem tylko wytłumaczcie mi dlaczego odczytaną liczbę mnoży się przez 16 a potem dzieli przez 10 bo skąd sie to wzieło to naprawdę nie wiem :609:

radzio
Moderator
Moderator
Posty:967
Rejestracja:13 maja 2003, o 10:33
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: radzio » 31 mar 2007, o 07:57

Wzięło się to z formatu wyniku jaki odczytywany jest z układu DS18B20 i który jest opisany w dokumentacji. W załączniku znajduje się obrazek, który mam nadzieję wyjaśni dlaczego przeprowadza się takie operacje jak opisałem (oczywiście nie jest to jedyna metoda).
Załączniki
ds18b20_register.png

ttomo
-
-
Posty:4
Rejestracja:10 mar 2007, o 22:13
Lokalizacja:Mysłowice
Kontaktowanie:

Postautor: ttomo » 31 mar 2007, o 11:24

wielkie dzięki radzio za wyjaśnienie :607:
Mam jeszcze taką prośbę mógłyś opisać takie operacje ale dla rozdzielczości 12bitowej (0,0625)?
Z góry wielkie dzięki

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 17 gości