Code:
'---------------------------------------------------------
' Aquariumsteuerung mit dcf77 Uhr von mosi
' mit DCF77 library from Josef Vögel
'---------------------------------------------------------
$regfile = "M8def.dat"
$crystal = 7372000
'------------------------------------------------------------
'benutzte pins:
'für LCD: portd, pin 2,3,4,5,6
' portc, pin 2,3
'für DCF Uhr: b,0
'ausgänge: b.1=Licht, b.2=Heizung, b.3=pwm für licht, b.4=Co2, b.5=mondlicht
'analogeingänge: c.0=ADC0=Leitwert, c.1=ADC1=pH-Wert
'1wire eingang=c.6
'Konfigurationen der Hardware
Config Timer2 = Pwm , Compare Pwm = Clear Up , Prescale = 1
Config Dcf77 = Pinb.0 , Timer = 1 , Inverted = 1 , Check = 0 , Gosub = Sectic
Config Date = Dmy , Separator = .
'Konfiguration LCD
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portc.3 , Rs = Portc.2
Config Lcd = 20 * 4a , Chipset = Ks077
Config Lcdbus = 4
Config Pind.6 = Output
Portd.6 = 0
Config Adc = Single , Prescaler = Auto , Reference = Internal
'Konfigurationen pins
Config Pinb.1 = Output 'Licht an-aus
Config Pinb.2 = Output 'Heizung an-aus
Config Pinb.3 = Output 'PWM Ausgang Timer2
Config Pinb.4 = Output 'Co2-Ventil an-aus
Config Pinb.5 = Output 'Mondlicht an aus
Taglicht Alias Portb.1
Heizung Alias Portb.2
Co2 Alias Portb.4
Mondlicht Alias Portb.5
Dim Soll_dim As Byte 'sollwert der dimmung, abhängig von Tageszeit
Dim Ist_dim As Byte '255 Werte für PWM-Lichtdimmung
Dim Licht_lcd As Integer '%Anzeige der Licht-Dimmung
Dim Zeit As Byte 'Zaehlvariable in sekunden für Dimmer
Dim Pfeil As Byte '3für runter, 4 für waagerecht, 2 für hoch
Dim Roh_phwert As Integer
Dim Min_phwert As Single
Dim Lcd_phwert As Single
Dim Roh_leitwert As Integer
Dim Lcd_leitwert As Integer
Const On = 1
Const Off = 0
Enable Interrupts
'Sonderzeichen generieren
Deflcdchar 0 , 2 , 5 , 2 , 32 , 32 , 32 , 32 , 32 ' Gradzeichen
Deflcdchar 1 , 32 , 32 , 17 , 17 , 17 , 30 , 16 , 32 ' mikrozeichen
Deflcdchar 2 , 15 , 3 , 5 , 9 , 16 , 32 , 32 , 32 ' pfeil nach oben
Deflcdchar 3 , 32 , 32 , 16 , 9 , 5 , 3 , 15 , 32 ' pfeil nach unten
Deflcdchar 4 , 8 , 4 , 2 , 31 , 2 , 4 , 8 , 32 ' pfeil waagerecht
Cls
Cursor Off
'initialisierungen
_hour = 20 'bei reset auf 20Uhr stellen
Ist_dim = 100 'Dimmer auf etwa 50%
Zeit = 0 'Sekundenzaehler auf null
Pfeil = 4 'waagerechter pfeil
Taglicht = On 'bei reset wird licht angeschaltet
Mondlicht = Off
Co2 = Off
Heizung = Off
Min_phwert = 6.5
Start Adc
Do
Locate 1 , 1
Lcd Time$ ; " " ; Date$
Select Case _hour
Case 8 To 12 : Soll_dim = 255 '100%zwischen 8 und 12Uhr
Case 13 To 15 : Soll_dim = 102 '40% zwischen 13 und 16uhr
Case 16 To 22 : Soll_dim = 255 '100% zwischen 17 und 22Uhr
Case Else : Soll_dim = 0 'sonst licht aus
End Select
Gosub Phwert
Gosub Temperatur
Gosub Leitwert
Locate 2 , 1
Lcd "temp= " ; Chr(0) ; "C " ; "Lw=" ; Roh_leitwert ; Chr(1) ; "S "
Locate 3 , 1
Lcd "L=" ; Licht_lcd ; "%" ; Chr(pfeil) ;
Locate 4 , 1
Lcd "phWert=" ; Fusing(lcd_phwert , "#.##") ; " co2"
Loop
'-------------------------------------------------------------------------------
'***************Label Temperaturerfassung ************************************
'-------------------------------------------------------------------------------
Temperatur:
Return
'-------------------------------------------------------------------------------
'***************Label ph-Werterfassung******************************************
'-------------------------------------------------------------------------------
Phwert:
Roh_phwert = Getadc(1)
Lcd_phwert = Roh_phwert / 170.66 '1024steps durch 6Schritte
Lcd_phwert = Lcd_phwert + 4 '0- bei pH=4
If Lcd_phwert <= Min_phwert Then
Co2 = Off
Else
Co2 = On
End If
Return
'-------------------------------------------------------------------------------
'***************Label Leitwertserfassung ***************************************
'-------------------------------------------------------------------------------
Leitwert:
Roh_leitwert = Getadc(0)
Return
'-------------------------------------------------------------------------------
'*************sekunden**********************************************************
'-------------------------------------------------------------------------------
Sectic:
Zeit = Zeit + 1 'Sekundenzaehler
If Zeit < 10 Then Return 'wenn noch nicht 10sekundene vergangen, dann zurück
Zeit = 0
If Ist_dim = Soll_dim Then 'wenn sollwert gleich istwert bleibt alles wie es ist,
Pfeil = 4 ' pfeil waagerecht
Return
End If
If Ist_dim < Soll_dim Then
Ist_dim = Ist_dim + 1
Pfeil = 2 'dimmung erhöhen um 1
Else 'Pfeil nach oben
Ist_dim = Ist_dim - 1 'dimmung verringern um 1
Pfeil = 3 'Pfeil nach unten
End If
If Ist_dim <> 0 Then 'Wenn Dimmung ungleich null, dann EVG anschalten
Taglicht = On
Else
Taglicht = Off
End If
Compare2 = Ist_dim
Licht_lcd = Ist_dim * 100 'Prozent der Dimmung für Anzeige
Licht_lcd = Licht_lcd / 255
Return
End
Lesezeichen