: czwartek 05 gru 2013, 16:27
@Pyra
Dziekuję bardzo za sugestie, będę optymalizował kod i bawił się programem, na pewno to się przyda Od wczoraj troszeczke posiedziałem, program działa można powiedzieć tak jak sobie zakładałem na początku.
-wykrywa czujniki
-przechodzi do wyświetlania temperatur z 4 czujników
-po wciśnieciu jednocześnie dwóch przycisków program przeskakuje do ustawien alarmu
-po ustawieniu wymaganej temperatury ponownie wciskamy oba przyciski, przechodzi do wyświetlania temperatur
Na razie program jest napisany tak aby działał, pewnie brzydko, będę to optymalizował dzięki Waszym sugestiom, na chwilę obecną wygląda tak:
Mam jeszcze takie pytanko, jeśli ustawimy temperaturę alarmu na np 80C, do czasu odłączenia zasilania układ ładnie reaguje itp. Ale po odłączeniu zasilania oczywiście tracimy nastawy alarmu. Z tego co czytam trzeba wartość "Alarm" zapisać w eeprom (wcześniej ją odczytać).
Czy mogę prosić jeszcze o pomoc odnośnie tego?
Domyślam się, że to musze wywalić:
"Alarm = 250"
I zapisywanie do pamięci dać w tym If:
Tylko jak to wykonać?
Dziekuję bardzo za sugestie, będę optymalizował kod i bawił się programem, na pewno to się przyda Od wczoraj troszeczke posiedziałem, program działa można powiedzieć tak jak sobie zakładałem na początku.
-wykrywa czujniki
-przechodzi do wyświetlania temperatur z 4 czujników
-po wciśnieciu jednocześnie dwóch przycisków program przeskakuje do ustawien alarmu
-po ustawieniu wymaganej temperatury ponownie wciskamy oba przyciski, przechodzi do wyświetlania temperatur
Na razie program jest napisany tak aby działał, pewnie brzydko, będę to optymalizował dzięki Waszym sugestiom, na chwilę obecną wygląda tak:
$regfile = "m8adef.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Config Pind.0 = Output
Config Pind.1 = Input
Config Pind.2 = Input
Config 1wire = Portd.5
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
S1 Alias Pind.1
S2 Alias Pind.2
Dim I1 As Integer , Ss As String * 6
Dim I2 As Integer
Dim I3 As Integer
Dim I4 As Integer
Dim Alarm As Integer
Dim Alarm1 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
Dim W As Byte
Alarm = 250
Alarm1 = Alarm
Deflcdchar 0 , 8 , 20 , 11 , 4 , 4 , 4 , 3 , 32
Deflcdchar 1 , 32 , 4 , 4 , 4 , 4 , 4 , 4 , 32
Deflcdchar 2 , 32 , 10 , 10 , 10 , 10 , 10 , 10 , 32
Deflcdchar 3 , 32 , 21 , 21 , 21 , 21 , 21 , 21 , 32
Deflcdchar 4 , 32 , 21 , 21 , 21 , 21 , 18 , 18 , 32
Cursor Off
Cls
Lcd " Termometr v0.35 ";
Wait 1
Cls
W = 1wirecount()
Lcd "Czujniki: "
Waitms 100
Lcd W
Wait 2
Cls
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Dsid3(1) = 1wsearchnext()
Dsid4(1) = 1wsearchnext()
If Dsid1(8) = Crc8(dsid1(1) , 7) Then
Locate 1 , 1
Cls
Lcd "T1 id:"
Wait 1
Locate 2 , 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
Cls
Lcd "T2 id:"
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
Cls
Lcd "T3 id:"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid3(b))
Next
End If
Wait 2
If Dsid4(8) = Crc8(dsid4(1) , 7) Then
Locate 1 , 1
Cls
Lcd "T4 id:"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid4(b))
Next
End If
Wait 2
Cls
Pomiar:
Do
1wreset
1wwrite &H55
1wverify Dsid1(1)
1wwrite &HBE
I1 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid2(1)
1wwrite &HBE
I2 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid3(1)
1wwrite &HBE
I3 = 1wread(2)
'---------------------------------
1wreset
1wwrite &H55
1wverify Dsid4(1)
1wwrite &HBE
I4 = 1wread(2)
'--------konwersja temp dla wszystkich dsow
1wreset
1wwrite &HCC
1wwrite &H44
Wait 1
I1 = I1 * 10
I1 = I1 / 16
If I1 > 0 Then
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd Chr(1) ; Ss ; Chr(0) ;
Else
Ss = Str(i1)
Ss = Format(ss , " 0.0")
Locate 1 , 1
Lcd Chr(1) ; Ss ; Chr(0) ;
End If
I2 = I2 * 10
I2 = I2 / 16
If I2 > 0 Then
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 1 , 10
Lcd Chr(2) ; Ss ; Chr(0) ;
Else
Ss = Str(i2)
Ss = Format(ss , " 0.0")
Locate 1 , 10
Lcd Chr(2) ; Ss ; Chr(0)
End If
I3 = I3 * 10
I3 = I3 / 16
If I3 > 0 Then
Ss = Str(i3)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Chr(3) ; Ss ; Chr(0) ;
Else
Ss = Str(i3)
Ss = Format(ss , " 0.0")
Locate 2 , 1
Lcd Chr(3) ; Ss ; Chr(0) ;
End If
I4 = I4 * 10
I4 = I4 / 16
If I4 > 0 Then
Ss = Str(i4)
Ss = Format(ss , " 0.0")
Locate 2 , 10
Lcd Chr(4) ; Ss ; Chr(0) ;
Else
Ss = Str(i4)
Ss = Format(ss , " 0.0")
Locate 2 , 10
Lcd Chr(4) ; Ss ; Chr(0) ;
End If
If I1 > Alarm Then
Reset Portd.0
End If
If I1 < Alarm Then
Set Portd.0
End If
If S1 = 0 And S2 = 0 Then
Waitms 300
Cls
Lcd "Ustawianie alarmu"
Wait 2
Goto Ustawienia
End If
Goto Pomiar
Ustawienia:
Cls
If S1 = 0 Then
Alarm = Alarm + 10
Waitms 30
End If
If S2 = 0 Then
Alarm = Alarm - 10
Waitms 30
End If
Alarm1 = Alarm
Alarm1 = Alarm1 / 10
Locate 1 , 10
Lcd "( "
Locate 1 , 12
Lcd Alarm1
Locate 1 , 15
Lcd " )"
Waitms 300
If S1 = 0 And S2 = 0 Then
Waitms 300
Cls
Locate 1 , 1
Lcd "alarm zmieniony"
Locate 2 , 1
Lcd Alarm1
Waitms 5000
Cls
Goto Pomiar
End If
Goto Ustawienia
Loop
Mam jeszcze takie pytanko, jeśli ustawimy temperaturę alarmu na np 80C, do czasu odłączenia zasilania układ ładnie reaguje itp. Ale po odłączeniu zasilania oczywiście tracimy nastawy alarmu. Z tego co czytam trzeba wartość "Alarm" zapisać w eeprom (wcześniej ją odczytać).
Czy mogę prosić jeszcze o pomoc odnośnie tego?
Domyślam się, że to musze wywalić:
"Alarm = 250"
I zapisywanie do pamięci dać w tym If:
If S1 = 0 And S2 = 0 Then
Waitms 300
Cls
Locate 1 , 1
Lcd "alarm zmieniony"
Locate 2 , 1
Lcd Alarm1
Waitms 5000
Cls
Goto Pomiar
End If
Tylko jak to wykonać?