Witam ,jestem początkujący w tej dziedzinie, posiadam program termostatu, niestety program nie porównuje temperatury, nie wiem w czym problem
już zmieniałem porównanie wartości Us z T1, obecnie zmieniłem na Tmp, ale niestety nadal nic się zmieniło nadal na wyjściu układu czyli P3.2 jest stan "0"
oto program napisany w Bascomie51":
'cyfrowy termostat
'program obslugi termometru DS18B20
'
'P3.7 - magistrala 1wire ( do termometru )
'P3.5 - przycisk zwiekszajacy temperature
'P3.4 - przycisk zmniejszajacy temperature
'P3.2 wyjscie termostatu ( np. do sterowania grzejnikiem )
'uwaga: ustawiamy temperature tylko w wartosciach dodatnich
$large
Config 1wire = P3.7
'konfiguracja magistrali 1wire
Config Lcd = 20 * 2 'konfiguracja wyswietlacza
Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32 'znak stopnia
Dim T1 As Single
Dim T2 As Single
Dim B1 As Byte , B2 As Byte , R As Byte , Us As Byte
Dim Tmp As String * 6
Dim Znak As String * 1
R = &HFF
Us = 21
Declare Sub 1wr 'podprogram resetujacy magistrale 1w
Cursor Off
Cls
P3.5 = 1
P3.4 = 1
Do
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &H44 'komenda convert T
Wait 1
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &HBE 'komenda read
B1 = 1wread() 'odczyt z termometru
B2 = 1wread()
1wr 'podprogram 1wr
If B2 >= 248 Then 'w przypadku temperatur ujemnych
B1 = R - B1 'Od 255 Odejmujemy B1
B2 = R - B2 'od 255 odejmujemy B2
Znak = "-"
Else
Znak = "+"
End If
T1 = B1 / 16 'Przesuniecie w pawo o 4 bajty
T2 = B2 * 16 'przesuniecie w lewo o 4 bajty
T1 = T1 + T2
Tmp = Fusing(t1 , ###.&)
If P3.5 = 0 And Us < 126 Then 'sprawdzanie nacisnieci przycisku w gore
Incr Us 'zwiekszanie temperatury
End If
If P3.4 = 0 And Us > 1 Then 'sprawdzanie nacisniecia przycisku w dol
Decr Us 'zmniejszanie temperatury
End If
Locate 1 , 1 'ustawienie kursora w pierwszej lini i pierwszy znak
Lcd Znak ; Tmp ; Chr(1) ; "C " 'wyswietlenie zmierzonej temperatury
Locate 2 , 2 'ustawienie kursora w drugiej lini drugi znak
Lcd Us ; ".0" ; Chr(1) ; "C " 'wyswietlenie temperatury ustawionej
Waitms 250
If Us > Tmp Then 'porownanie temperatur
P3.2 = 1 'ustawienie stanow wyjsciowych dla
'temperatury otoczenia nizszej od ustawionej
Else
P3.2 = 0 'a tu odwrotnie
'ustawienie stanow wyjsciowych dla temperatury wyzszej od ustawionej
End If
Loop
Sub 1wr 'podprogram resetujacy magistrale
1wreset
End Sub
już zmieniałem porównanie wartości Us z T1, obecnie zmieniłem na Tmp, ale niestety nadal nic się zmieniło nadal na wyjściu układu czyli P3.2 jest stan "0"
oto program napisany w Bascomie51":
'cyfrowy termostat
'program obslugi termometru DS18B20
'
'P3.7 - magistrala 1wire ( do termometru )
'P3.5 - przycisk zwiekszajacy temperature
'P3.4 - przycisk zmniejszajacy temperature
'P3.2 wyjscie termostatu ( np. do sterowania grzejnikiem )
'uwaga: ustawiamy temperature tylko w wartosciach dodatnich
$large
Config 1wire = P3.7
'konfiguracja magistrali 1wire
Config Lcd = 20 * 2 'konfiguracja wyswietlacza
Deflcdchar 1 , 4 , 10 , 4 , 32 , 32 , 32 , 32 , 32 'znak stopnia
Dim T1 As Single
Dim T2 As Single
Dim B1 As Byte , B2 As Byte , R As Byte , Us As Byte
Dim Tmp As String * 6
Dim Znak As String * 1
R = &HFF
Us = 21
Declare Sub 1wr 'podprogram resetujacy magistrale 1w
Cursor Off
Cls
P3.5 = 1
P3.4 = 1
Do
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &H44 'komenda convert T
Wait 1
1wr 'podprogram 1wr
1wwrite &HCC 'komenda skip ROM
1wwrite &HBE 'komenda read
B1 = 1wread() 'odczyt z termometru
B2 = 1wread()
1wr 'podprogram 1wr
If B2 >= 248 Then 'w przypadku temperatur ujemnych
B1 = R - B1 'Od 255 Odejmujemy B1
B2 = R - B2 'od 255 odejmujemy B2
Znak = "-"
Else
Znak = "+"
End If
T1 = B1 / 16 'Przesuniecie w pawo o 4 bajty
T2 = B2 * 16 'przesuniecie w lewo o 4 bajty
T1 = T1 + T2
Tmp = Fusing(t1 , ###.&)
If P3.5 = 0 And Us < 126 Then 'sprawdzanie nacisnieci przycisku w gore
Incr Us 'zwiekszanie temperatury
End If
If P3.4 = 0 And Us > 1 Then 'sprawdzanie nacisniecia przycisku w dol
Decr Us 'zmniejszanie temperatury
End If
Locate 1 , 1 'ustawienie kursora w pierwszej lini i pierwszy znak
Lcd Znak ; Tmp ; Chr(1) ; "C " 'wyswietlenie zmierzonej temperatury
Locate 2 , 2 'ustawienie kursora w drugiej lini drugi znak
Lcd Us ; ".0" ; Chr(1) ; "C " 'wyswietlenie temperatury ustawionej
Waitms 250
If Us > Tmp Then 'porownanie temperatur
P3.2 = 1 'ustawienie stanow wyjsciowych dla
'temperatury otoczenia nizszej od ustawionej
Else
P3.2 = 0 'a tu odwrotnie
'ustawienie stanow wyjsciowych dla temperatury wyzszej od ustawionej
End If
Loop
Sub 1wr 'podprogram resetujacy magistrale
1wreset
End Sub