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ę

Termometr w Bascomie.

Awatar użytkownika
powermilk
-
-
Posty:2
Rejestracja:22 lut 2006, o 08:57
Lokalizacja:Bydgoszcz
Termometr w Bascomie.

Postautor: powermilk » 22 lut 2006, o 09:27

Witam. W szkole zaczęliśmy się bawić mikroprocesorami, a dokładniej AT90S2313. Stworzyliśmy prosty układ termometra. Pomiar temperatury odbywa się za pomocą DS1820. Poniżej zamieszczam program program do obsługi tego termometra. Wszystko jest w nim porządku, lecz program umożliwia wyświetlanie temperatury w całych stopniach Celcjusza, a chciałbym, aby dokładność była do jednoeg miejsca po przecinku. Co muszę zmienić w programie i czy wogóle jest to realne? Z góry dziękuje.

Kod: Zaznacz cały

$crystal = 4000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Portb.2 , E = Portb.3 , Db4 = Portb.4 , Db5 = Portb.5 Config Lcdpin = Pin , Db6 = Portb.6 , Db7 = Portb.7 Config 1wire = Pinb.0 Config Pinb.0 = Output Config Pinb.1 = Output Declare Sub Odczyt Dim Temperatura(2) As Byte Deflcdchar 0 , 254 , 242 , 242 , 254 , 224 , 224 , 224 , 224 Cursor Off Do Call Odczyt Cls If Temperatura(2) = 0 Then Lcd "temp:" ; Chr(0) ; Temperatura(1) ; Chr(0) ; "C" Print "temp:" ; Chr(0) ; Temperatura(1) ; Chr(248) ; "C" If Temperatura(1) > 28 Then Set Portb.0 Reset Portb.1 Else Reset Portb.0 Set Portb.1 End If Else Lcd "temp:-" ; Chr(0) ; Temperatura(1) ; Chr(0) ; "C" Print "temp:-" ; Chr(0) ; Temperatura(1) ; Chr(248) ; "C" End If Loop End Sub Odczyt 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 750 1wreset 1wwrite &HCC 1wwrite &HBE Temperatura(1) = 1wread(3) If Temperatura(2) > 0 Then Temperatura(1) = 256 - Temperatura(1) End If Temperatura(1) = Temperatura(1) / 2 End Sub

_ImPuLs_
-
-
Posty:17
Rejestracja:30 lis 2003, o 21:58
Lokalizacja:Krasnystaw
Kontaktowanie:

Postautor: _ImPuLs_ » 26 lut 2006, o 13:48

Aby pomiar był dokładniejszy (do 1/16'C) musisz zastosować element DS18B20 (porównaj dokładnie symbole).
DS1820 ma rozdzielczość 0,5'C i taki najdokładniejszy pomiar można uzyskać elementem o takim symbolu.

Za wartość 0,5'C lub 0,0'C odpowiada najmniej znaczący bit odczytanego wyniku
'Temperatura(1)'
W Twoim programie pozbywasz się go poleceniem

Kod: Zaznacz cały

Temperatura(1)=Temperatura(1)/2
Aby pomiar był dokładniejszy (do 1/16'C) musisz zastosować element DS18B20 (porównaj dokładnie symbole).
DS1820 ma rozdzielczość 0,5'C i taki najdokładniejszy pomiar można uzyskać elementem o takim symbolu.

Ze względu na to iż zmienna 'Temperatura' jest typu 'Byte' wynik powyższego działania zawsze będzie liczbą całkowitą tzn. zostatnie obcięta wartość po przecinku.

Najprościej aby pomiar był dokładniejszy o te 0,5'C musiałbyś zdefiniować jeszcze jedną zmienną typu 'Single' o nowej nazwie np. 'Temp_dokladna'

Kod: Zaznacz cały

Dim Temp_dokladna As Single
następnie zamiast linijki

Kod: Zaznacz cały

Temperatura(1)=Temperatura(1)/2
wstawić przeliczenie

Kod: Zaznacz cały

Temp_dokladna=Temperatura(1)/2
i w poleceniu wyświetlania 'Lcd .....' używać tej zmiennej.

robiw
-
-
Posty:34
Rejestracja:21 wrz 2005, o 12:36
Lokalizacja:Gniezno

Postautor: robiw » 3 mar 2006, o 22:02

Witam.
Jeśli mogę coś doradzić:
- nie definiuj zmiennej Single bo wszelkie jej użycie w Bascomie generuje olbrzymie kody a nie ma takiej potrzeby. Ja to robię tak:

Dim Temperatura as Byte
Dim Pol_stopnia as Bit

po odczycie temperatury z Dallasa:

Pol_stopnia=Temperatura.0=1

' czyli zmienna Pol_stopnia=1 wtedy gdy bit 0 zmiennej Temperatura jest ustawiony

Shift Temperatura, Right, 1

'Teraz w zmiennej Temperatura masz temperaturę a w zmiennej Pol_stopnia znacznik 0.5 'C

Ten sposób jest najmniej "pamięciożerny" i "kodożerny"... robiw

Awatar użytkownika
powermilk
-
-
Posty:2
Rejestracja:22 lut 2006, o 08:57
Lokalizacja:Bydgoszcz

Postautor: powermilk » 8 mar 2006, o 08:51

Dziękuje bardzo, dostałem DS18B20 od kolegi i sprawdziłem, działa wszystko dokłądnie i poprawnie. Dziękuje za pomoc :)

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 47 gości