Witam, mam taki problem. program wg mnie powinien po przekroczeniu ustalonej temperatury wyswietlac na LCD napis, wlaczac Buzzer oraz zapalic diode. A po nacisnieciu przycisku wyłaczyc to wszystko. I problem jest taki ze wylacza wszystko oprocz diody. Tzn po wlaczeniu sie alarmu dioda wogole juz nie gasnie ani po obnizeniu temperatury ani po nacisnieciu przycisku.
Ktos mi pomoze jaka moze byc przyczyna tego?
a oto kod calego programu:
Proszę poprawić tytuł (p.11.1), treść wiadomości(p.15).
W tytule zastosować tagi np. [ATMega8][Bascom]
W przyszłości, temat umieścić we właściwym dziale.
[zumek]
Ktos mi pomoze jaka moze byc przyczyna tego?
If I3 >= 270 Then ' jezeli temp i3> 600 to...
If Flaga2 = 0 Then
Lowerline
Lcd " !!PIEC!!" ; Ss ; Chr(0)
Sound Speaker , 329 , 63 ' nuta dzwiekowa
Sound Speaker , 369 , 99 ' nuta dziwekowa
Portb.2 = 1 'zapalamy diode
If Pinb.1 = 0 Then Set Flaga2 'pod pinem b1 jest przycisk switch
Waitms 50 'kasujemy alarm przytrzymujac go na minimum 50 ms
End If
End If
If I3 < 250 Then Reset Flaga2a oto kod calego programu:
$regfile = "m8def.DAT" 'deklaracja procesora Atmega8
$crystal = 1000000 'deklaracja cześtotlwiości pracy
'Deklaracja portów od wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.6 , Rs = Portd.7
Config Lcd = 20 * 2 '
Config Portb.1 = Input 'port b.1 bedzie wejsciowy (switch- przcisk)
Config Portb = &B0000000 'wszędzie stan spoczynkowy-0 (switch przycisk)
Config Portb.0 = Output
Config Portb.2 = Output
Speaker Alias Portb.0 'deklaracja portu glosnika
Config 1wire = Portd.5 'deklaracja portu na którym będą podpięte DS18b20
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Dim I3 As Integer
Dim I4 As Integer
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Dsid3(8) As Byte
Dim Dsid4(8) As Byte
Dim B As Byte 'deklaracja zmiennej do odczytu kodów ID
Dim W As Byte 'deklaracja zmiennej do odczytu ilośc czujników
Dim Flaga As Bit ' deklaracja flagi1 dla 82 stopni
Dim Flaga1 As Bit ' deklaracja flagi dla 75 stopni
Dim Flaga2 As Bit 'deklaracja flagi dla 60 stopni
Dim Flaga3 As Bit ' deklaracja flagi dla 88 stopni
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32 'znak stopnia Celsjusza
Cursor Off 'Wyłącza kursor
Cls 'Funkcja CLS czyści ekran
Lcd " Termometr CO " ; 'ekran startowy (pojawia się tylko podczas włączania urządzenia)
Lowerline
Lcd " PINKI "
Wait 5
Cls
W = 1wirecount()
Lcd "Ilosc czujnikow:" 'Informuje ile czujników jest podpiętych do układu (pojawia się tylko podczas włączania urządzenia)
Waitms 500
Lowerline
Lcd W
Wait 3
Cls 'Znajdź pierwszy czujnik podpięty do portu
Dsid1(1) = 1wsearchfirst() 'Znajdź kolejny czujnik podpięty do portu
Dsid2(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
Dsid3(1) = 1wsearchnext() 'Znajdź kolejny czujnik podpięty do portu
'*******************Odczyt numerów ID czujników temperatury*********************
If Dsid1(8) = Crc8(dsid1(1) , 7) Then 'ta opcja pojawia się tylko przy włączaniu urządzenia
Locate 1 , 1
Lcd "Czujnik 1 OK"
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsid1(b))
Next
End If
Wait 2
If Dsid2(8) = Crc8(dsid2(1) , 7) Then
Locate 2 , 1
Lcd "Czujnik 2 OK"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid2(b))
Next
End If
Wait 2
If Dsid3(8) = Crc8(dsid3(1) , 7) Then
Locate 1 , 1
Lcd "Czujnik 3 OK"
Wait 1
Locate 1 , 1
For B = 1 To 8
Lcd Hex(dsid3(b))
Next
End If
Wait 2
Cls
'*******************koniec odczytu ID czujników temperatury*********************
Do
1wreset
1wwrite &H55
1wverify Dsid1(1) 'wysyłamy adres pierwszego czujnika
1wwrite &HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1) 'wysylam adres drugiego czujnika
1wwrite &HBE
I2 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid3(1) 'wysylam adres trzeciego czujnika
1wwrite &HBE
I3 = 1wread(2)
'---------------------------------
'--------konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
I1 = I1 * 10
I1 = I1 / 16
'If I1 > 0 Then Cls 'korekta przesuniecia znaku st C przy przejściu z temp ujemnej na dodatnią
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1 'Pozycja wyświetlania nazwy i temperatury (1.1 -> 1 linia 1 kolumna, 2.10 -> 2 linia 10 kolumna itd)
Lcd "We" ; Ss ; Chr(0) ;
I2 = I2 * 10
I2 = I2 / 16
'If I2 > 0 Then Cls
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 1 , 9
Lcd "Ze" ; Ss ; Chr(0) ;
I3 = I3 * 10
I3 = I3 / 16
'If I3 > 0 Then Cls
Ss = Str(i3)
Ss = Format(ss , " 0.0")
Lowerline
Lcd " PIEC " ; Ss ; Chr(0)
If I3 >= 270 Then ' jezeli temp i3> 600 to...
If Flaga2 = 0 Then
Lowerline
Lcd " !!PIEC!!" ; Ss ; Chr(0)
Sound Speaker , 329 , 63 ' nuta dzwiekowa
Sound Speaker , 369 , 99 ' nuta dziwekowa
Portb.2 = 1 'zapalamy diode
If Pinb.1 = 0 Then Set Flaga2 'pod pinem b1 jest przycisk switch
Waitms 50 'kasujemy alarm przytrzymujac go na minimum 50 ms
End If
End If
If I3 < 250 Then Reset Flaga2
If I3 >= 750 Then ' jezeli temp i3> 750 to...
If Flaga1 = 0 Then
Lowerline
Lcd " !!PIEC!!" ; Ss ; Chr(0)
Sound Speaker , 1975 , 50 ' nuta dzwiekowa
Sound Speaker , 261 , 63 ' nuta dziwekowa
If Pinb.1 = 0 Then Set Flaga1 'pod pinem b1 jest przycisk switch
Waitms 50 ' kasujemy alarm przytrzymujac go na minimum 50 ms
End If
End If
If I3 < 710 Then Reset Flaga1
If I3 >= 820 Then ' jezeli temp i3> 820 to...
If Flaga = 0 Then
Lowerline
Lcd " !!PIEC!!" ; Ss ; Chr(0)
Sound Speaker , 587 , 32 ' nuta dzwiekowa
Sound Speaker , 659 , 26 ' nuta dziwekowa
If Pinb.1 = 0 Then Set Flaga 'pod pinem b1 jest przycisk switch
Waitms 50 ' kasujemy alarm przytrzymujac go na minimum 50 ms
End If
End If
If I3 < 800 Then Reset Flaga
If I3 >= 880 Then ' jezeli temp i3> 880 to...
If Flaga3 = 0 Then
Lowerline
Lcd " !!PIEC!!" ; Ss ; Chr(0)
Sound Speaker , 587 , 32 ' nuta dzwiekowa
Sound Speaker , 587 , 30 ' nuta dziwekowa
If Pinb.1 = 0 Then Set Flaga3 'pod pinem b1 jest przycisk switch
Waitms 50 ' kasujemy alarm przytrzymujac go na minimum 50 ms
End If
End If
If I3 < 870 Then Reset Flaga3 'Zmieniamy znacznik jeśli temp spadnie ponizej 87st.C
LoopProszę poprawić tytuł (p.11.1), treść wiadomości(p.15).
W tytule zastosować tagi np. [ATMega8][Bascom]
W przyszłości, temat umieścić we właściwym dziale.
[zumek]
