Elektroda.pl
Elektroda.pl
X
OptexOptex
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

BASCOM mala przerobka programu- pomocy

08 Mar 2003 07:59 2315 4
  • Poziom 11  
    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
  • OptexOptex
  • Poziom 11  
    Czy nikt mi nie pomoze?????
  • OptexOptex
  • Poziom 11  
    jezeli mi nie pomozecie to napiszcie dlaczego, moze popelnilem blad zamieszczajac ten listing ale nie ma on zadnych praw autorckich byl zamieszczony na stronie EDW.
  • Poziom 23  
    Opisz jak podłączone są czujniki jaki typ, co ma mierzyć dodatkowy czujnik, czy masz schemat, jaka jest logika urządzenia

    Może pomogę