witam
Nie znam sie dobrze na programowaniu w bascom a chcialem zbudowac sterownik do pieca co, w EDW byl taki projekt i zbudowalem uklad ale temperature pokazuje z 3 czujnikow a jest mozliwosc podlaczenia 4
Mozecie mi pomoc i powiedziec co trzeba zmienic w programie aby sterownik pokazywal temp. z 4 czujnikow?
Zalaczam listing.
'czerwiec 2002
'sterownik do pieca at89c2051 WERSJA___44
' wyświetlacz 2*16, poprawione zachowanie po zaniku napięcia
$large
$crystal = 12000000
Config Lcd = 16 * 2
Cursor Off
Cls
Config Sda = P3.1
Config Scl = P3.0
Config Timer0 = Timer , Mode = 1 , Gate = Internal
Config Timer1 = Timer , Mode = 1 , Gate = Internal
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Cls
Dim R As Byte
Dim Gasnie As Byte
Dim Piec As Byte
Dim T0 As Byte
Dim P As Word
Dim Licz As Byte
Dim Todn As Byte
Dim T1 As Byte
Dim A As Byte
Dim Dom As Byte
Dim Channel(3) As Byte
Dim Kanal As Byte
Dim Wlacz As Bit
Dim Kontrola As Bit
Dim K As Byte
Dim Offsil As Bit
Dim Wylacz As Bit
Dim Pierwszy As Bit
Declare Sub Pompka
Declare Sub Silnik
Declare Sub Ustawiam
Declare Sub Buz
Declare Sub Buz1
Declare Sub Odczyt
Declare Sub Gasnie
Declare Sub Przegrzanie
Declare Sub Pokaz
Pomp Alias P1.0
Sil Alias P1.1
Buzer Alias P3.7
Wybor Alias P3.5
Ustaw Alias P3.4
Onsil Alias P3.3
Piwnica Alias P3.2
Load Timer0 , 65500
On Timer0 Przerwanie
Enable Timer0
Load Timer1 , 60000
On Timer1 Przerwanie1
Enable Timer1
Enable Interrupts
Todn = 56
Wlacz = 0
Kontrola = 0
P = 0
Licz = 0
Offsil = 0
Wylacz = 0
Gasnie = 0
K = 3
Pierwszy = 0
Channel(1) = &B01000000
Channel(2) = &B01000010
Channel(3) = &B01000011
Set Pomp
Set Sil
Start Timer0
Start Timer1
Set Onsil
Set Piwnica
Cls
Locate 1 , 1 : Lcd "WYKONAL:K.NAWACKI"
For A = 1 To 20
Waitms 255
Shiftlcd Left
Next A
Cls
Locate 1 , 3 : Lcd "WLACZ MNIE"
Locate 2 , 1 : Lcd "Przycisk ON/OFF"
Do
Call Odczyt 'zmiana pompka-zawsze powinna być włączna
Call Pompka
Debounce Piwnica , 0 , Tu
Debounce Onsil , 0 , Tu
Loop
Tu:
Pierwszy = 1
Call Buz
Wait 1
Call Odczyt
Do
Call Pokaz
Wait 4
Call Odczyt
Wait 4 'główna pętla programu
Call Silnik
Call Odczyt
Wait 4
Call Pompka
Loop
Sub Odczyt:
Kanal = Channel(k)
I2cstart
I2cwbyte &B10010000
I2cwbyte Kanal
I2cwbyte Todn
I2cstart
I2cwbyte &B10010001
I2crbyte Dom , Ack
I2crbyte Dom , Nack
I2cstop
Dom = Dom / 2.1
Waitms 150
R = Piec
End Sub
Sub Pokaz:
Cls
Locate 1 , 3
Select Case K:
Case 1 : Lcd "BOJLER= " ; Dom ; Chr(0) ; "C"
Case 2 : Lcd "KUCHNIA= " ; Dom ; Chr(0) ; "C"
Case 3 : Lcd "PIEC= " ; R ; Chr(0) ; "C"
End Select
End Sub
Sub Silnik:
If Sil = 0 Then
If R > Todn Then
Set Sil
End If
End If
Todn = Todn - 1
If R =< Todn Then
If Offsil = 0 Then
If Kontrola = 1 Then
If Sil = 1 Then
Reset Sil
P = 0
T0 = R
Wylacz = 0
Gasnie = 0
End If
Else
Set Sil
End If
Else
Set Sil
End If
End If
Todn = Todn + 1
End Sub
Sub Pompka:
If R > 50 Then
If Wlacz = 0 Then
Reset Pomp
End If
End If
If R < 49 Then
If Pomp = 0 Then
Set Pomp
End If
End If
If R >= Todn Then
If Wlacz = 0 Then
Wlacz = 1
End If
End If
If R >= Todn Then
Reset Pomp
End If
If Pomp = 0 Then
If Wlacz = 1 Then
Todn = Todn - 3
If R =< Todn Then
Set Pomp
End If
Todn = Todn + 3
End If
End If
If R > 90 Then
Call Przegrzanie
End If
End Sub
Ustawiam:
Call Buz
Cls
Locate 1 , 4 : Lcd "USTAWIONO"
Locate 2 , 4 : Lcd "Todn=" ; Todn ; Chr(0) ; "C"
Wait 1
Do
Set Ustaw
If Ustaw = 0 Then
Call Buz
Todn = Todn + 2
If Todn > 86 Then
Todn = 56
End If
Cls
Locate 1 , 2 : Lcd "Zmiana Todn"
Locate 2 , 3 : Lcd "Todn=" ; Todn ; Chr(0) ; "C"
Waitms 200
Waitms 200
Else
Exit Do
End If
Loop
Return
Sub Buz:
Reset Buzer
Waitms 50
Set Buzer
End Sub
Sub Buz1:
Reset Buzer
Wait 2
Set Buzer
End Sub
Czuj:
Incr K
If K = 4 Then
K = 1
End If
Call Buz
Call Odczyt
Call Pokaz
Return
Control:
Call Buz
Todn = Todn - 1
If R > Todn Then
Todn = Todn + 1
Cls
Locate 1 , 1 : Lcd "!!!SILNIK OFF!!!"
Locate 2 , 3 : Lcd "NIE WLACZE GO"
Else
Todn = Todn + 1
Kontrola = Not Kontrola
Offsil = 0
Call Silnik
End If
Return
Sub Przegrzanie:
Call Buz1
For A = 1 To 3
Cls
Waitms 255
Locate 1 , 4 : Lcd "UWAGA"
Locate 2 , 2 : Lcd "!!!PRZEGRZANIE!!!"
Wait 1
Next A
End Sub
Sub Gasnie:
Call Buz1
For A = 1 To 5
Cls
Waitms 255
Locate 1 , 4 : Lcd "!!!GASNIE!!!"
Locate 2 , 2 : Lcd "BRAK OPALU"
Wait 1
Next A
End Sub
Przerwanie:
Incr P
If P >= 4000 Then '900 to min.
T0 = T0 - 1
T1 = T0 + 2
If R >= T0 And R <= T1 Then
If Wylacz = 1 Then
Kontrola = 0
Call Buz
End If
Wylacz = 1
Else
Kontrola = 1
Wylacz = 0
End If
If R < T0 Then
Incr Gasnie
Else
Gasnie = 0
End If
If Gasnie >= 3 Then
If Offsil = 0 Then
Call Gasnie
Offsil = 1
End If
End If
P = 0
T0 = R
End If
Return
Przerwanie1:
If Pierwszy = 1 Then
Set Ustaw
Debounce Ustaw , 0 , Ustawiam , Sub
Set Wybor
Debounce Wybor , 0 , Czuj , Sub
Set Onsil
Debounce Onsil , 0 , Control , Sub
Set Piwnica
Debounce Piwnica , 0 , Control , Sub
End If
Todn = Todn - 1
If R <= Todn Then
Enable Timer0
Else
Disable Timer0
End If
Todn = Todn + 1
Incr Licz
If Licz >= 20 Then
I2cstart
I2cwbyte &B10010000
I2cwbyte &B01000001
I2cwbyte Todn
I2cstart
I2cwbyte &B10010001
I2crbyte Piec , Ack
I2crbyte Piec , Nack
I2cstop
Piec = Piec / 2.1
Licz = 0
End If
Return
Nie znam sie dobrze na programowaniu w bascom a chcialem zbudowac sterownik do pieca co, w EDW byl taki projekt i zbudowalem uklad ale temperature pokazuje z 3 czujnikow a jest mozliwosc podlaczenia 4
Mozecie mi pomoc i powiedziec co trzeba zmienic w programie aby sterownik pokazywal temp. z 4 czujnikow?
Zalaczam listing.
'czerwiec 2002
'sterownik do pieca at89c2051 WERSJA___44
' wyświetlacz 2*16, poprawione zachowanie po zaniku napięcia
$large
$crystal = 12000000
Config Lcd = 16 * 2
Cursor Off
Cls
Config Sda = P3.1
Config Scl = P3.0
Config Timer0 = Timer , Mode = 1 , Gate = Internal
Config Timer1 = Timer , Mode = 1 , Gate = Internal
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32
Cls
Dim R As Byte
Dim Gasnie As Byte
Dim Piec As Byte
Dim T0 As Byte
Dim P As Word
Dim Licz As Byte
Dim Todn As Byte
Dim T1 As Byte
Dim A As Byte
Dim Dom As Byte
Dim Channel(3) As Byte
Dim Kanal As Byte
Dim Wlacz As Bit
Dim Kontrola As Bit
Dim K As Byte
Dim Offsil As Bit
Dim Wylacz As Bit
Dim Pierwszy As Bit
Declare Sub Pompka
Declare Sub Silnik
Declare Sub Ustawiam
Declare Sub Buz
Declare Sub Buz1
Declare Sub Odczyt
Declare Sub Gasnie
Declare Sub Przegrzanie
Declare Sub Pokaz
Pomp Alias P1.0
Sil Alias P1.1
Buzer Alias P3.7
Wybor Alias P3.5
Ustaw Alias P3.4
Onsil Alias P3.3
Piwnica Alias P3.2
Load Timer0 , 65500
On Timer0 Przerwanie
Enable Timer0
Load Timer1 , 60000
On Timer1 Przerwanie1
Enable Timer1
Enable Interrupts
Todn = 56
Wlacz = 0
Kontrola = 0
P = 0
Licz = 0
Offsil = 0
Wylacz = 0
Gasnie = 0
K = 3
Pierwszy = 0
Channel(1) = &B01000000
Channel(2) = &B01000010
Channel(3) = &B01000011
Set Pomp
Set Sil
Start Timer0
Start Timer1
Set Onsil
Set Piwnica
Cls
Locate 1 , 1 : Lcd "WYKONAL:K.NAWACKI"
For A = 1 To 20
Waitms 255
Shiftlcd Left
Next A
Cls
Locate 1 , 3 : Lcd "WLACZ MNIE"
Locate 2 , 1 : Lcd "Przycisk ON/OFF"
Do
Call Odczyt 'zmiana pompka-zawsze powinna być włączna
Call Pompka
Debounce Piwnica , 0 , Tu
Debounce Onsil , 0 , Tu
Loop
Tu:
Pierwszy = 1
Call Buz
Wait 1
Call Odczyt
Do
Call Pokaz
Wait 4
Call Odczyt
Wait 4 'główna pętla programu
Call Silnik
Call Odczyt
Wait 4
Call Pompka
Loop
Sub Odczyt:
Kanal = Channel(k)
I2cstart
I2cwbyte &B10010000
I2cwbyte Kanal
I2cwbyte Todn
I2cstart
I2cwbyte &B10010001
I2crbyte Dom , Ack
I2crbyte Dom , Nack
I2cstop
Dom = Dom / 2.1
Waitms 150
R = Piec
End Sub
Sub Pokaz:
Cls
Locate 1 , 3
Select Case K:
Case 1 : Lcd "BOJLER= " ; Dom ; Chr(0) ; "C"
Case 2 : Lcd "KUCHNIA= " ; Dom ; Chr(0) ; "C"
Case 3 : Lcd "PIEC= " ; R ; Chr(0) ; "C"
End Select
End Sub
Sub Silnik:
If Sil = 0 Then
If R > Todn Then
Set Sil
End If
End If
Todn = Todn - 1
If R =< Todn Then
If Offsil = 0 Then
If Kontrola = 1 Then
If Sil = 1 Then
Reset Sil
P = 0
T0 = R
Wylacz = 0
Gasnie = 0
End If
Else
Set Sil
End If
Else
Set Sil
End If
End If
Todn = Todn + 1
End Sub
Sub Pompka:
If R > 50 Then
If Wlacz = 0 Then
Reset Pomp
End If
End If
If R < 49 Then
If Pomp = 0 Then
Set Pomp
End If
End If
If R >= Todn Then
If Wlacz = 0 Then
Wlacz = 1
End If
End If
If R >= Todn Then
Reset Pomp
End If
If Pomp = 0 Then
If Wlacz = 1 Then
Todn = Todn - 3
If R =< Todn Then
Set Pomp
End If
Todn = Todn + 3
End If
End If
If R > 90 Then
Call Przegrzanie
End If
End Sub
Ustawiam:
Call Buz
Cls
Locate 1 , 4 : Lcd "USTAWIONO"
Locate 2 , 4 : Lcd "Todn=" ; Todn ; Chr(0) ; "C"
Wait 1
Do
Set Ustaw
If Ustaw = 0 Then
Call Buz
Todn = Todn + 2
If Todn > 86 Then
Todn = 56
End If
Cls
Locate 1 , 2 : Lcd "Zmiana Todn"
Locate 2 , 3 : Lcd "Todn=" ; Todn ; Chr(0) ; "C"
Waitms 200
Waitms 200
Else
Exit Do
End If
Loop
Return
Sub Buz:
Reset Buzer
Waitms 50
Set Buzer
End Sub
Sub Buz1:
Reset Buzer
Wait 2
Set Buzer
End Sub
Czuj:
Incr K
If K = 4 Then
K = 1
End If
Call Buz
Call Odczyt
Call Pokaz
Return
Control:
Call Buz
Todn = Todn - 1
If R > Todn Then
Todn = Todn + 1
Cls
Locate 1 , 1 : Lcd "!!!SILNIK OFF!!!"
Locate 2 , 3 : Lcd "NIE WLACZE GO"
Else
Todn = Todn + 1
Kontrola = Not Kontrola
Offsil = 0
Call Silnik
End If
Return
Sub Przegrzanie:
Call Buz1
For A = 1 To 3
Cls
Waitms 255
Locate 1 , 4 : Lcd "UWAGA"
Locate 2 , 2 : Lcd "!!!PRZEGRZANIE!!!"
Wait 1
Next A
End Sub
Sub Gasnie:
Call Buz1
For A = 1 To 5
Cls
Waitms 255
Locate 1 , 4 : Lcd "!!!GASNIE!!!"
Locate 2 , 2 : Lcd "BRAK OPALU"
Wait 1
Next A
End Sub
Przerwanie:
Incr P
If P >= 4000 Then '900 to min.
T0 = T0 - 1
T1 = T0 + 2
If R >= T0 And R <= T1 Then
If Wylacz = 1 Then
Kontrola = 0
Call Buz
End If
Wylacz = 1
Else
Kontrola = 1
Wylacz = 0
End If
If R < T0 Then
Incr Gasnie
Else
Gasnie = 0
End If
If Gasnie >= 3 Then
If Offsil = 0 Then
Call Gasnie
Offsil = 1
End If
End If
P = 0
T0 = R
End If
Return
Przerwanie1:
If Pierwszy = 1 Then
Set Ustaw
Debounce Ustaw , 0 , Ustawiam , Sub
Set Wybor
Debounce Wybor , 0 , Czuj , Sub
Set Onsil
Debounce Onsil , 0 , Control , Sub
Set Piwnica
Debounce Piwnica , 0 , Control , Sub
End If
Todn = Todn - 1
If R <= Todn Then
Enable Timer0
Else
Disable Timer0
End If
Todn = Todn + 1
Incr Licz
If Licz >= 20 Then
I2cstart
I2cwbyte &B10010000
I2cwbyte &B01000001
I2cwbyte Todn
I2cstart
I2cwbyte &B10010001
I2crbyte Piec , Ack
I2crbyte Piec , Nack
I2cstop
Piec = Piec / 2.1
Licz = 0
End If
Return