habe hier mal meine bisherige Aquarium steuerung angefügt. soll natürlich noch mehr kommen . aber das hab ich bis jetzt schon hinbekommen und das läuft auch schon im test betrieb. Nächste woche kommt denk ich mal noch DCF wenn dann entlich mein Modul kommt.
Bin auch gern für Verbesserungsvorschläge zu haben da es mein erstes richtiges Projekt ist und ich da auch noch viel lernen will und 100%ig auch kann
Bin auch gern für Verbesserungsvorschläge zu haben da es mein erstes richtiges Projekt ist und ich da auch noch viel lernen will und 100%ig auch kann
Code:
$crystal = 16000000
$regfile = "m32def.dat"
$baud = 9600
$hwstack = 16
$swstack = 32
$framesize = 32
Config Timer1 = Timer , Prescale = 256
Config Clock = Soft 'Use USER to write/use your own code
Config Date = Dmy , Separator = . 'Tag.Monat.Jahr
'Ausgängebestimmen
'Config Portd.4 = Output 'PWM Ausgang
'Config Portd.5 = Output 'PWM Ausgang
'Config Portb.3 = Output 'PWM Ausgang der wird noch später benutzt
Config Porta.5 = Output 'o2 (ADC2)
Config Porta.7 = Output 'Filter (ADC4)
Config Porta.4 = Output 'Temp 2 (ADC1)
Config Porta.6 = Output 'Temp 1 (ADC3)
Config Porta.0 = Output 'Blinke LED gelb Takt
Config 1wire = Portb.0 'Temp Fühlereingang
Declare Sub Pumpe(filter As Word , Luftan As Word , Luftaus As Word)
Declare Sub Init
Declare Sub Convallt
Declare Function Decigrades(byval Sc(9) As Byte) As Integer
On Timer1 Timer_irq
Const Timer16bit = 3036 '16Bit (3035)
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , _
Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Initlcd
' Variablen bestimmen
Dim Sekunden As Byte
Dim Filter As Word
Dim Luft As Word
Dim Temp As Word
'für Temp
Dim D As Byte
Dim W As Word
Dim Dg As Integer
Dim Min1 As Integer
Dim Max1 As Integer
Dim Min2 As Integer
Dim Max2 As Integer
Dim Dsid1(8)as Byte
Dim Dsid2(8)as Byte
Dim Sc(9) As Byte
Dim Klein As Integer
Dim Gross As Integer
'für Temp
' Variablen bestimmen
Enable Timer0
Enable Timer1
Enable Interrupts
Time$ = "17:11:00" 'Zeit eingestellen
Date$ = "05.04.10" 'Datum einstellen
Ddrd = &HFF
'Temp
'**************************************
Cls
W = 1wirecount()
'erster Sensor
Dsid1(1) = 1wsearchfirst()
Do
Dsid2(1) = 1wsearchnext()
Loop Until Err = 1
'Hier ist die Programmhauptschleife
'****************************************************************************************************************************************************
Do
Convallt
Wait 1
Toggle Porta.0
'Zeit
Locate 1 , 1
Lcd Time$
Locate 2 , 1
Lcd Date$
Cursor Off
'Zeit
Call Pumpe(filter , Luft , Temp) ' Unterprogramm für Filter, Sauerstoff, Temp aufrufen
Loop
'***************************************************************************************************************************************************
'Ende Hauptprogrammschleife
'Hier ist die erster Unterprogrammschleife
'***************************************************************************************************************************************************
Do
'______________________________________________________________________________________________________________________________________
'ZEITEINSTELLUNGEN
'Filter ' Auf ausgang ADC4
Sub Pumpe(Filter , Luft , Temp)
'Filter
If _hour < 6 And _min < 00 Then Porta.4 = 0 'Filter aus bis 6:00
If _hour >= 06 And _min >= 00 Then Porta.4 = 1 'Filter an Von 6:00
If _hour >= 22 And _min >= 00 Then Porta.4 = 0 'Filter aus bis 22:00
'Sauerstoff
If _hour < 10 And _min < 00 Then Porta.5 = 0 'O2 aus bis 10:00
If _hour >= 10 And _min >= 00 Then Porta.5 = 1 'O2 an Von 10:00
If _hour >= 10 And _min >= 10 Then Porta.5 = 0 'O2 aus bis 10:10
If _hour >= 11 Then Porta.5 = 0
If _hour >= 12 And _min >= 00 Then Porta.5 = 1 'O2 an Von 12:00
If _hour >= 12 And _min >= 10 Then Porta.5 = 0 'O2 aus Bis 12:10
If _hour >= 13 Then Porta.5 = 0
If _hour >= 14 And _min >= 00 Then Porta.5 = 1 'O2 an Von 14:00
If _hour >= 14 And _min >= 10 Then Porta.5 = 0 'O2 aus Bis 14:10
If _hour >= 15 Then Porta.5 = 0
If _hour >= 16 And _min >= 00 Then Porta.5 = 1 'O2 an Von 16:00
If _hour >= 16 And _min >= 10 Then Porta.5 = 0 'O2 aus Bis 16:10
If _hour >= 17 Then Porta.5 = 0
If _hour >= 18 And _min >= 00 Then Porta.5 = 1 'O2 an Von 18:00
If _hour >= 18 And _min >= 10 Then Porta.5 = 0 'O2 aus Bis 18:10
If _hour >= 19 Then Porta.5 = 0
'Großes Becken
If _hour < 7 And _min < 00 And Dg > 20 Then Porta.6 = 1 'Temp 1 bei 20°C an bis 6:00
If _hour < 7 And _min < 00 And Dg < 22 Then Porta.6 = 0 'Temp 1 bei 22°C aus bis 6:00
If _hour >= 7 And _min > 00 And Dg > 22 Then Porta.6 = 1 'Temp 1 Bei 22°c An Ab 6:00
If _hour >= 7 And _min > 00 And Dg < 24 Then Porta.6 = 0 'Temp 1 bei 24°C aus ab 6:00
If _hour >= 21 And _min > 00 And Dg > 19 Then Porta.6 = 1 'Temp 1 bei 19°C an ab 21:00
If _hour >= 21 And _min > 00 And Dg < 20 Then Porta.6 = 0 'Temp 1 bei 20°C aus ab 21:00
'Kleines Becken
If _hour < 7 And _min < 00 And Dg > 22 Then Porta.6 = 1 'Temp 1 bei 22°C an bis 6:00
If _hour < 7 And _min < 00 And Dg < 24 Then Porta.6 = 0 'Temp 1 bei 24°C aus bis 6:00
If _hour >= 7 And _min > 00 And Dg > 23 Then Porta.6 = 1 'Temp 1 bei 23°C an ab 6:00
If _hour >= 7 And _min > 00 And Dg < 27 Then Porta.6 = 0 'Temp 1 bei 27°C aus ab 6:00
If _hour >= 21 And _min > 00 And Dg > 22 Then Porta.6 = 1 'Temp 1 bei 22°C an ab 21:00
If _hour >= 21 And _min > 00 And Dg < 24 Then Porta.6 = 0 'Temp 1 bei 24°C aus ab 21:00
'ENDE ZEITEINSTELLUNGEN
'_______________________________________________________________________________
'Temp
'Temp1 'Auf Ausgang ADC3
1wverify Dsid1(1) 'Issues the "Match Rom"
Locate 1 , 12
If Err = 1 Then
Lcd "DsID 1 not on bus"
Elseif Err = 0 Then
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
Dg = Decigrades(sc(9))
Gross = Decigrades(sc(9))
If Min1 > Dg Then Min1 = Dg
If Max1 < Dg Then Max1 = Dg
Lcd Dg : Lcd "C" : Locate 1 , 14 'LCD Temp Einstellung
End If
End If
'Temp2 'Auf Ausgang ADC1
1wverify Dsid2(1)
Locate 2 , 12
If Err = 1 Then
Lcd "DsID2 not on Bus"
Elseif Err = 0 Then
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
Dg = Decigrades(sc(9))
Klein = Decigrades(sc(9))
If Max2 < Dg Then Max2 = Dg
If Min2 > Dg Then Min1 = Dg
Lcd Dg : Lcd "C" : Locate 2 , 14 'LCD Temp Einstellung
End If
End If
'Temp
End Sub Pumpe
Return
Loop
'**************************************************************************************************************************************************
'Ende der Unterprogrammschleife
'Dies ist der Programmteil, der in dem von ihnen gewählten
'Intervall aufgerufen wird
Timer_irq:
Timer1 = Timer16bit
Return
Sub Convallt
1wreset 'reset the Bus
1wwrite &HCC 'Skip Rom
1wwrite &H44 'Convert T
End Sub
Function Decigrades(byval Sc(9) As Byte)
Dim Tmp As Byte , T As Integer , T1 As Integer
Tmp = Sc(1) And 1
If Tmp = 1 Then Decr Sc(1)
T = Makeint(sc(1) , Sc(2))
T = T * 50
T = T - 25
T1 = Sc(8) - Sc(7)
T1 = T1 * 100
T1 = T1 / Sc(8)
T = T + T1
Decigrades = T / 100
End Function
End
Return
Settime:
Return
Getdatetime:
Return
Setdate:
Return