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ę

blad wysiwetlania temperatury

lj.max
-
-
Posty:1
Rejestracja:21 kwie 2008, o 14:24
Lokalizacja:opolskie
blad wysiwetlania temperatury

Postautor: lj.max » 23 kwie 2008, o 14:25

witam. zaprogramowałem układ w bascom tak jak poniżej. podłączyłem ds1820 i wartosc temperatury wciaż wynosi 85 stopni..a to nie mozliwe co musiałbym zmienić by wartość bywa odczytywana co 1 minute i wyswietlana na ekranie. Jestem poczatkujacy wiec moze mnie wysmiejecie ale coz..

Kod: Zaznacz cały

Config 1wire = P1.0 Config Lcd = 16 * 2 Deflcdchar 0 , 238 , 234 , 238 , 224 , 224 , 224 , 224 , 224 Dim Is_device As Bit Dim Number(8) As Byte Dim T(2) As Byte Dim X As Byte Dim R As Byte Dim Temp As Single Dim Str_temp As String * 5 Const R_rom = &H33 Const Con_t = &H44 Const M_rom = &H55 Const R_src = &HBE ' Komunikaty Const Kom_1 = "Termometr " Const Kom_2 = "Temp. :" Const Minus = "-" Const Celcj = "C" Const Err_1 = "blad: " Const Err_2 = "brak lacza !" 'Deklaracje procedur Declare Sub Read_numbers Declare Sub Pomiar_temp Declare Sub Match_rom Declare Sub Wysw_temp Declare Sub 1w_reset Cls Is_device = 1 Cursor Off Lcd Kom_1 Wait 1 Cls Cursor Off Lcd Kom_2 Do 1w_reset If Err = 1 Then Is_device = 0 Cls Lcd Err_1 ; Err_2 Waitms 250 Else Call Read_numbers Call Pomiar_temp Call Wysw_temp End If Loop Sub Read_numbers If Is_device = 0 Then Cls Lcd Kom_2 Is_device = 1 End If 1wwrite R_rom For R = 1 To 8 Number(r) = 1wread() Next R End Sub Sub Pomiar_temp 1w_reset Call Match_rom 1wwrite Con_t Waitms 250 Waitms 250 1w_reset Call Match_rom 1wwrite R_src T(1) = 1wread() T(2) = 1wread() 1w_reset End Sub Sub Match_rom 1wwrite M_rom For R = 1 To 8 1wwrite Number(r) If Err = 1 Then Is_device = 0 Cls Lcd Err_1 ; R Wait 1 End If Next R End Sub Sub Wysw_temp Locate 2 , 2 If T(2) = 0 Then Temp = T(1) / 2 Else X = 256 - T(1) Temp = X / 2 Lcd Minus End If Str_temp = Fusing(temp , ###.&) Lcd Str_temp ; Chr(0) ; Celcj ; " " End Sub Sub 1w_reset 1wreset End Sub
Edit Pajaczek: Prosze uzywac znacznika

Kod: Zaznacz cały

, ps. nie wysmiewamy za niewiedze. [/color]
Ostatnio zmieniony 23 kwie 2008, o 17:06 przez lj.max, łącznie zmieniany 1 raz.

Czajnik
-
-
Posty:264
Rejestracja:17 cze 2004, o 15:40
Lokalizacja:Kraków
Kontaktowanie:

Postautor: Czajnik » 9 lip 2008, o 08:03

Zerknij w katalogo dc1820... 85 to pierwsza tempereatura zwracana po załaczeniu ukłądu... czyli bez pomiaru... jeśli układ nie zmierzy temperatury to zawsze zweraca te 85 stopni... twoj najprawdopodbnie nie mierzy bo nie dajesz mu na to czasu... wywołuj procedurę pomiaru i odczytu powiedzmy co sekundę... z mojego doświadczenia wynika ze lepiej wywoływać zadziej... np co 1,5-2 sekundy i myślę ze problem zniknie.

tadlac
-
-
Posty:1
Rejestracja:23 lip 2008, o 10:38
Lokalizacja:...

Postautor: tadlac » 23 lip 2008, o 15:06

Witam, fargment większego programu, między innymi rejestrujący temperaturę zdokładnościa do 0.1 stopnia co sekundę, może trochę kosmiczny stos, ale tak wymagała całość

Kod: Zaznacz cały

'***** mały kawałek większego programu ***** $regfile "m32def.dat" ' $regfile "m2560def.dat" $crystal = 14745600 $baud = 115200 $swstack = 96 : $framesize = 136 : $hwstack = 160 : Config 1wire = Portd.6 ' ------------------------------------------------------------------------------ Dim T0 As Integer , T1 As Single , T2 As Single , Tmp As Word , Bd(9) As Byte , Dim Te As String * 6 ' ------------------------------------------------------------------------------ Deflcdchar 0 , 238 , 234 , 238 , 224 , 224 , 224 , 224 , 224 ' ------------------------------------------------------------------------------ Declare Sub Temperature() ' ------------------------------------------------------------------------------ Config Timer1 = Timer , Prescale = 256 On Timer1 Tim_1 Enable Interrupts Enable Timer1 Do Loop End ' ============================================================================= Tim_1: Call Temperature : 'nie częsciej niż 750 ms Return ' ----------------------------------------------------------------------------- Sub Temperature Disable Interrupts T0 = 0 : T1 = 0 : T2 = 0 : Te = "" 1wreset 1wwrite &HCC If Err = 1 Then : Exit Sub : End If 1wwrite &HBE Bd(1) = 1wread(9) 1wreset 1wwrite &HCC 1wwrite &H44 Tmp = Bd(1) And 1 If Tmp = 1 Then : Decr Bd(1) : End If T0 = Makeint(bd(1) , Bd(2)) T2 = T0 : T2 = T2 / 2 : T2 = T2 - 0.25 : T1 = Bd(8) - Bd(7) : T1 = T1 / Bd(8) : T2 = T2 + T1 : Te = Fusing(t2 , "#.#") Cls Upperline Lcd "Temp. " ; Te Print "Temp. " ; Te Enable Interrupts End Sub

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