logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega8][Bascom] Termostat

ma16 31 Paź 2009 21:34 3813 8
REKLAMA
  • #1 7199793
    ma16
    Poziom 13  
    Witam
    Potrzebuje pomocy przy programie termostatu. Mam napisany program lecz niestety nie chce mi załączyć wyjścia PB.0 załączam kod programu

    $regfile = "m8def.DAT"
    $crystal = 1000000
    
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Config Lcd = 16 * 2
    Config Portb.0 = Output
    Config 1wire = Portd.5
    Dim I1 As Integer , Ss As String * 6
    
    Dim Dsid1(8) As Byte
    
    Dim B As Byte
    Dim W As Byte
    
    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32
    
    Cursor Off
    
    Dsid1(1) = 1wsearchfirst()                                  '
    
    If Dsid1(8) = Crc8(dsid1(1) , 7) Then
     Locate 1 , 1
     Lcd "CRC OK Czujnik 1 ID"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    End If
    Wait 2
    Cls
    
    Do
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)
       1wwrite &HBE
       I1 = 1wread(2)
    
       1wreset
       1wwrite &HCC
       1wwrite &H44
    Wait 1
    
       I1 = I1 * 10
       I1 = I1 / 16
       'If I1 > 0 Then Cls
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "  Temperatura"
       Locate 2 , 6
       Lcd Ss ; Chr(0) ;
       Wait 1
       If I1 > 25 Then
       Set Portb.0
       End If
       If I1 <= 25 Then
       Reset Portb.0
       End If
    Loop


    Program jest jak na razie w wersji próbnej jeszcze będę dodawał histerezę ale najpierw chce żeby zadziałał mi w takiej postaci.
  • REKLAMA
  • #2 7199949
    dan_mad
    Poziom 10  
    Podaj informację co Ci teraz działa... Termometr jest odczytywany prawidłowo (temperatura) i wyświetlane na wyświetlaczu ? Czy w ogóle nic nie działa ?
  • #3 7200770
    ma16
    Poziom 13  
    Temperatura jest wyświetlana prawidłowo.
    Nie wiem czemu ale załącza się wyjście PB.0, gdy temp. jest ponizej 2 C.
  • REKLAMA
  • #4 7203235
    Ture11
    Poziom 39  
    ma16 napisał:

    Config Portb.0 = Output

    to mi się nie podoba... dlaczego Bascom pozwolił na skompilowanie tego? Nie jestem geniuszem, ale tam chyba powinno być
    config pinb.0 = output
  • REKLAMA
  • #6 7203479
    Freddy
    Poziom 43  
    Ture11 napisał:
    ma16 napisał:

    Config Portb.0 = Output

    to mi się nie podoba... dlaczego Bascom pozwolił na skompilowanie tego? Nie jestem geniuszem, ale tam chyba powinno być
    config pinb.0 = output

    Bo taki jest Bascom ....
    Racja, a dokładniej :
    .....
    Syntax
    CONFIG PORTx = state
    CONFIG PINx.y = state
    ......
    You can also set a single port pin with the CONFIG PIN = state, statement.
    Again, you can use INPUT, OUTPUT or a number. In this case the number can be only zero or one.
     


    ZbeeGin :arrow: na razie histereza nie jest potrzebna do działania, bez niej też powinno działać.

    ma16 :arrow: Może jeszcze łaskawie powiedz jakiego używasz czujnika temperatury.
  • #7 7206776
    ma16
    Poziom 13  
    Freddy napisał:


    ma16 :arrow: Może jeszcze łaskawie powiedz jakiego używasz czujnika temperatury.


    czujnik to DB18B20 z rezystorem 4k7..

    Co do config Portb.0 to działa tak skompilowane udało mi się ustawić temperature i działa mi termostat (sygnalizator jest uaktywniany stanem niskim)

    Załanczam kod programu"

    
    $regfile = "m8def.DAT"
    $crystal = 1000000
    
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Config Lcd = 16 * 2
    Config Portb.0 = Output
    Config 1wire = Portd.5
    Dim I1 As Integer , Ss As String * 6
    Dim T As Integer                                            ' temperatura
    
    Dim Dsid1(8) As Byte
    
    Dim B As Byte
    Dim W As Byte
    
    Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32
    
    Cursor Off
    
    Dsid1(1) = 1wsearchfirst()                                  '
    
    If Dsid1(8) = Crc8(dsid1(1) , 7) Then
     Locate 1 , 1
     Lcd "CRC OK Czujnik 1 ID"
     Wait 1
     Locate 1 , 1
     For B = 1 To 8
     Lcd Hex(dsid1(b))
     Next
    End If
    Wait 2
    Cls
    
    Do
       1wreset
       1wwrite &H55
       1wverify Dsid1(1)
       1wwrite &HBE
       I1 = 1wread(2)
    
       1wreset
       1wwrite &HCC
       1wwrite &H44
    Wait 1
    
       I1 = I1 * 10
       I1 = I1 / 16
        T = I1 / 10
    
    
       Ss = Str(i1)
       Ss = Format(ss , " 0.0")
       Locate 1 , 1
       Lcd "  Temperatura"
       Locate 2 , 6
       Lcd Ss ; Chr(0) ;
       Reset Portb.0
       Wait 1
       If T < 35 Then
       Set Portb.0
       End If
       If T > 80 Then
       Set Portb.0
       End If
    
    Loop
  • #8 7206874
    Ture11
    Poziom 39  
    To w sumie już nic z tego nie rozumiem - to w końcu działa czy nie działa? Jeżli działa to co było przyczyną?
  • REKLAMA
  • #9 7207022
    ma16
    Poziom 13  
    nie działał ale po kilku godzinach siedzenia przy kodzie udało mi sie utworzyć kod przy którym udało mi się załączyć układ. Przyczyną załanczania przy innej temperaturze było to że nie brałem rzeczywistej temperatury tylko odczyt z czujnika przed obliczeniem temperatury.

    Jeszcze tylko nie rozumiem czemu jak daje Set Portb.0 podczas warunku T<35 to zamiast załączyć jak temperatura spadnie poniżej 35 C to wtedy z stanu wysokiego idzie w stan niski....
REKLAMA