Poprzedni temat «» Następny temat
DS1621 i kilka pytań
Autor Wiadomość
mr_x 



Wiek: 31
Dołączył: 12 Gru 2010
Posty: 366
Skąd: /bin/bash
Wysłany: 2013-08-09, 04:25   DS1621 i kilka pytań

Czy ktoś wie, czy zmienna COUNT_PER_C odczytywana z termometru DS1621 zawsze wynosi 16 (dziesiętnie)? Bo mi tak na razie cały czas pokazuje, ale w zakresie temperatur 24...35°C, innych zakresów nie sprawdzałem. Dla mnie to o tyle istotne, że próbuję rozgryźć, jak w prosty sposób obliczyć temperaturę na podstawie wzoru
Kod:
TEMPERATURE = TEMP_READ - 0.25 + (COUNT_PER_C - COUNT_REMAIN) / COUNT_PER_C


Wzór ten podany jest w datasheet układu. Problem pojawia się, bo muszę liczyć na ułamkach, a piszę w asemblerze i nie chciałbym sobie komplikować życia. Gdybym wiedział, że COUNT_PER_C zawsze przyjmuje wartość 16 (dziesiętnie), to bym stablicował 17 wartości dla COUNT_REMAIN (jak do tej pory otrzymywałem wartości od 0 do 16) i byłoby łatwiej tak "przerobić" wzór zamiast liczenia go.

No chyba, że ktoś ma lepszy pomysł, a piszę w asemblerze 8051 i wolałbym samemu nie wymyślać procedur dla liczenia ułamków.
 
     
dondu 



Dołączył: 24 Maj 2005
Posty: 205
Skąd: Śląskie
Wysłany: 2013-09-09, 01:21   Re: DS1621 i kilka pytań

mr_x napisał/a:
Problem pojawia się, bo muszę liczyć na ułamkach, a piszę w asemblerze i nie chciałbym sobie komplikować życia.
...
No chyba, że ktoś ma lepszy pomysł, ...

Zobacz na przykładzie DS18B20 jak można to zrobić bez liczb ułamkowych:
http://mikrokontrolery.bl...-konwersja.html
 
     
Ertew 
-.^



Wiek: 26
Dołączył: 03 Lip 2005
Posty: 1347
Skąd: Leszno
Wysłany: 2013-09-18, 21:44   

Programowałem w ASM '51 i wiem coś o tym jak bardzo boli zabawa w ułamki.

Jeśli dobrze rozumiem, to z czujnika dostajesz 2 bajty danych.
Pierwszy daje temperaturę w zakresie +/- 120*C z rozdzielczością 1*C. Jeśli do tego dołożysz drugi bajt to masz rozdzielczość pomiaru 0,5*C i bezpośrednio nie da się uzyskać innych wartości ułamkowych.

W dokumentacji jest wzmianka że jeśli zrobisz kilkanaście pomiarów to możesz z nich wyliczyć temperaturę z większą rozdzielczością, co wbudowana inteligencja tego układu jest w stanie zrobić sama. Zapewne chodzi o zużycie energii przez układ i podgrzanie układu po wykonaniu kilku pomiarów.

Moim zdaniem możesz policzyć ten ułamek z rozdzielczością 0,1*C w następujący sposób:
TEMPERATURE = TEMP_READ - 0.2 (rozdzielasz temperaturę na zmienną przed przecinkiem i zmienną za przecinkiem z rozdzielczością 0,1*C)
A = (COUNT_PER_C - COUNT_REMAIN)*10
B = COUNT_PER_C
DIV AB
A sumujesz A z tym za przecinkiem, jeśli przekroczyłeś 9 to trzeba przenieść.
Na koniec wyświetlasz "przed przecinkiem" + "przecinek" + "za przecinkiem" + "*C".


No chyba że ten ułamek to pretekst do pisania biblioteki liczb zmiennoprzecinkowych :roll:
 
 
     
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
Strona wygenerowana w 0,02 sekundy. Zapytań do SQL: 11