[COLOR="Blue"]$regfile = "M8def.dat"
$crystal = 1000000
$hwstack = 100
$framesize = 100
$swstack = 100
'BPW42 - Tag-Nacht-Erkennung
'Pullup ausgeschaltet D.2=0 Tag, D.2=1 Nacht
Config Pind.2 = Input
Portd.2 = 0
Bpw42 Alias Pind.2
'Ic4 Ansteuerung mit PWM
Config Pinb.1 = Output
Ic4_ansteuerung Alias Portb.1
'Einschaltzeit IC4
Config Pinb.3 = Output
Ic4_ansteuerzeit Alias Portb.3
'LED für Trockenlauf
Config Pinb.0 = Output
Led_trockenlauf Alias Portb.0
'LED für Tagbetrieb
Config Pinb.2 = Output
Led_tag Alias Portb.2
'LED für Nachtbetrieb
Config Pind.7 = Output
Led_nacht Alias Portd.7
[COLOR="Blue"]'Trockenlaufsensor
' Pullup ausgeschaltet D.3=0 Trockenlauf. D.3=1 Normalbetrieb
Config Pind.3 = Input
Portd.3 = 0
Trockenlaufsensor Alias Pind.3[/COLOR]
[/COLOR]
[COLOR="Blue"]'A/D-Wandler wir konfiguriert
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'Tmer 1 wird konfiguriert
Config Timer1 = Timer , Prescale = 8
On Timer1 500ms_interrupt
Timer1 = 3036
Enable Timer1
Enable Interrupts
'PWM wird Konfiguriert
Config Timer2 = Pwm , Prescale = 1 , Compare = Clear
Enable Timer2
Timer2 = 0
Start Timer2
'Variable des PWM-Wertes wird auf 16 bit festgelegt
Dim Analogwert As Word
'Flag für OC2
Dim Flag_ic4_ansteuerung As Word
Flag_ic4_ansteuerung = 0
'Flag für Trockenlauf
Dim Flag_trockenanzeige As Word
Flag_trockenanzeige = 0
[COLOR="Black"]Variable soll hochgezählt werden, wenn das Automatikprogramm eingeschaltet wird und Null sein, wenn das Automatikprogramm ausgeschaltet wurde. Startbedingung: Automatik ist aus[/COLOR]
[COLOR="Red"]Dim Flag_automatik As Byte
Flag_automatik = 0[/COLOR]
[/COLOR]
[COLOR="Black"]ist maximal so groß wie der Analogwert (OCR2), minimal: Analogwert -60 [/COLOR]
[COLOR="Red"]Dim Geschwindigkeit As Byte
[COLOR="Black"]'Automatik ein - aus, die LED soll blinken, wenn die Automatik mit 'Taster_Automatik eingeschaltet worden ist[/COLOR]
Config Pind.6 = Output
Led_automatik Alias Portd.6
[COLOR="Black"]'höchster Geschwindigkeitswert, der mit Poti eingestellt worden ist[/COLOR]
Config Pind.5 = Output
Led_auto_geschwindigkeit_hoch Alias Portd.5
[COLOR="Black"]'höchster Geschwindigkeitswert - 30[/COLOR]
Config Pinb.4 = Output
Led_auto_geschwindigkeit_mittel Alias Portb.4
[COLOR="Black"]'höchster Geschwindigkeitswert - 60[/COLOR]
Config Pinb.5 = Output
Led_auto_geschwindigkeit_niedrig Alias Portb.5
[COLOR="Black"]'Taster zum Einschalten der "Automatik-Funktion" Taster=0, Automatik ein, 'Tasterdruck erfolgt erneut, Automatik ausgeschaltet[/COLOR]
Config Pinc.4 = Input
Portc.4 = 0
Taster_automatik Alias Pinc.4
[COLOR="Black"]'Sensor für die mit Poti R15 eingestellte Geschwindigkeit (ORC2-Wert)[/COLOR]
Config Pind.4 = Input
Portd.4 = 0
Geschw_sensor_hoch Alias Pind.4
[COLOR="Black"]'Sensor für die mit Poti R15 eingestellte Geschwindigkeit (ORC2-Wert) minus 30[/COLOR]
Config Pind.1 = Input
Portd.1 = 0
Geschw_sensor_mittel Alias Pind.1
[COLOR="Black"]'Sensor für die mit Poti R15 eingestellte Geschwindigkeit (ORC2-Wert) minus 60[/COLOR]
Config Pind.0 = Input
Portd.0 = 0
Geschw_sensor_niedrig Alias Pind.0
'Debounce auf 50 ms festlegen
Config Debounce = 50
[/COLOR]
'*********** MAINLOOP *************
[COLOR="Blue"]Do
'PWM
'Analogwert wird in 10-bit-Länge digitalisiert, Kanal 1 wird festgelegt
'die anderen Pins des Port C sind frei verfügbar
Analogwert = Getadc(1)
'Anpassung der 10-bit des ADC auf byte-Größe des Timer 2
Analogwert = Analogwert / 4
'Höchstmöglicher Analogwert
If Analogwert > 255 Then
Analogwert = 255
Else
'Ansonsten eingestellter Wert zwischen 0 und 255
Ocr2 = Analogwert
End If
'*** Auswertung Trockenlaufsensor
If Trockenlaufsensor = 0 Then
Ic4_ansteuerung = 0
Flag_ic4_ansteuerung = 0
Flag_trockenanzeige = 0
'Anzeige Trockenlauf bereits gestartet?
If Flag_trockenanzeige = 0 Then
Incr Flag_trockenanzeige
End If
'nach xx Interrupts Blinken
If Flag_trockenanzeige >= 480 Then '4 Minuten
If Trockenlaufsensor = 1 Then
Ic4_ansteuerung = 1
Else
Ic4_ansteuerung = 0
End If
End If
End If
'*** Auswertung Lichtsensor
If Bpw42 = 0 Then
Gosub Tag
If Flag_ic4_ansteuerung = 0 Then
Incr Flag_ic4_ansteuerung
End If
Else
Gosub Nacht
'Starte Nachtmodus
If Flag_ic4_ansteuerung = 0 Then
Incr Flag_ic4_ansteuerung
End If
'IC4-Ansteuerung Auszeit (xx * 500ms)
'10 Minuten ausgeschaltet
If Flag_ic4_ansteuerung <= 1200 Then 'Auszeit = 10 Minuten 1200:2:60= 10 Minuten
Ic4_ansteuerung = 0
'Relais Anzeit (xx * 500ms)
'3 Minuten eingeschaltet
Elseif Flag_ic4_ansteuerung <= 1560 Then 'Anzeit =Auszeit + 4 Minuten = 1200+360 !!!!
Ic4_ansteuerung = 1
'
Else
Flag_ic4_ansteuerung = 0
End If
End If
[/COLOR]
[COLOR="Black"]Hier wird die Variable auf max. 100 beschränkt[/COLOR]
[COLOR="Red"]If Flag_automatik > 100 Then
Flag_automatik = 100
End If
[COLOR="Black"]'Taster wird entprellt und beim Wechsel von 1 auf 0 zur Sub Automatik gesprungen, die Automatik wird eingeschaltet[/COLOR]
Debounce Pinc.4 , 0 , Automatik , Sub
[COLOR="Black"]'Automatik ausschalten, Taster dürfte nicht entprellt sein. wie ich das anstellen kann, weiß ich noch nicht????[/COLOR]
If Taster_automatik = 0 And Flag_automatik > 0 Then
Gosub Automatik_aus
End If
[COLOR="Black"]'Wenn die Automatik eingeschaltet ist, ist die Flag_automatik um eins erhöht und somit >0[/COLOR]
If Flag_automatik > 0 Then
[COLOR="Black"]'Und die Sensoren (Stabelektroden) vom Wasserstand überdeckt sind[/COLOR]
If Geschw_sensor_hoch = 1 And Geschw_sensor_mittel = 1 And Geschw_sensor_niedrig = 1 Then
[COLOR="Black"]'ist die Automatikgeschwindigkeit gleich dem Wert Des Analogwertes (OCR2-Wert)[/COLOR]
Geschwindigkeit = Analogwert
[COLOR="Black"]Alle 3 LED sollen leuchten und die LED_Automatik soll blinken[/COLOR]
Led_auto_geschwindigkeit_hoch = 1
Led_auto_geschwindigkeit_mittel = 1
Led_auto_geschwindigkeit_niedrig = 1
End If
[COLOR="Black"]Die erste Elektrode ragt aus dem Wasser heraus, die beiden anderen befinden sich noch im Wasser. Analogwert wird um 30 reduziert, [/COLOR]
If Geschw_sensor_hoch = 0 And Geschw_sensor_mittel = 1 And Geschw_sensor_niedrig = 1 Then
Geschwindigkeit = Analogwert - 30
[COLOR="Black"]2 LED sollen leuchten und die LED_Automatik soll blinken[/COLOR]
Led_auto_geschwindigkeit_hoch = 0
Led_auto_geschwindigkeit_mittel = 1
Led_auto_geschwindigkeit_niedrig = 1
End If
[COLOR="Black"]Die erste und die zweite Elektrode ragen aus dem Wasser heraus, die andere befindet sich noch im Wasser. Analogwert wird um 60 reduziert, [/COLOR]
If Geschw_sensor_hoch = 0 And Geschw_sensor_mittel = 0 And Geschw_sensor_niedrig = 1 Then
Geschwindigkeit = Analogwert - 60
[COLOR="Black"]1 LED soll leuchten und die LED_Automatik soll blinken[/COLOR]
Led_auto_geschwindigkeit_hoch = 0
Led_auto_geschwindigkeit_mittel = 0
Led_auto_geschwindigkeit_niedrig = 1
End If
End If
If Flag_automatik = 0 Then
Gosub Automatik_aus
End If
[/COLOR]
Loop
End
500ms_interrupt:
[COLOR="Blue"]Timer1 = 3036
If Flag_trockenanzeige > 0 Then
Incr Flag_trockenanzeige
Toggle Led_trockenlauf
End If
If Flag_trockenanzeige > 0 Then
If Flag_trockenanzeige <= 480 Then
Ic4_ansteuerung = 0
Flag_ic4_ansteuerung = 0
Else
Ic4_ansteuerung = 1
Flag_trockenanzeige = 0
Led_trockenlauf = 0
End If
End If
If Flag_ic4_ansteuerung > 0 Then
Incr Flag_ic4_ansteuerung
End If
[/COLOR]
[COLOR="Black"]'Nach dem Betätigen des Tasters_Automatik erfolgt Sprung zur Sub Automatik, die Var. Flag_automatik wird von 0 auf 1 erhöht, wodurch hier nun die LED zu blinken beginnen soll[/COLOR]
[COLOR="Red"]If Flag_automatik > 0 Then
'Incr Flag_automatik
Toggle Led_automatik
End If
[COLOR="Black"]Falls die Automatik ausgeschaltet wird (in Sub Automatik_aus wird dort Flag_automatik auf 0 gesetzt), soll die LED nicht mehr blinken[/COLOR]
If Flag_automatik = 0 Then
Led_automatik = 0
End If
Return[/COLOR]
[COLOR="Red"]'Sub Automatik
Automatik:
[COLOR="Black"]Bei Betätigung des Tasters ist die Variable Flag_automatik = 0. Sie soll nun um einen Wert auf eins erhöht werden. Dadurch soll in der Sub 500ms_interrupt die LED_automatik getoggelt werden.[/COLOR]
Flag_automatik = 0
Incr Flag_automatik
[COLOR="Black"]'Falls der Taster erneut gedrückt wird, soll die Sub Automatik_Aus abgesprungen und dort die automatik abgeschaltet werden. Bedingung ist, dass die Variable >0 sein muss, sonst würde die Automatik ja eingeschaltet.[/COLOR]
If Flag_automatik > 0 And Taster_automatik = 0 Then
Gosub Automatik_aus
End If
[COLOR="Black"]'Wenn Flag_automatik den Wert 100 erreicht hat - um Überlauf und damit verbunden die Null zu vermeiden, bleibt der Wert auf
'100 stehen[/COLOR]
If Flag_automatik > 100 Then
Flag_automatik = 100
End If
Return
Automatik_aus:
[COLOR="Black"] 'Abschalten der Automatik. Nullsetzen der Variablen Flag_automatik, damit Bedingung für das erneute Einschalten der Automatik gegeben ist.[/COLOR]
If Taster_automatik = 0 And Flag_automatik > 0 Then
Led_automatik = 0
Led_auto_geschwindigkeit_hoch = 0
Led_auto_geschwindigkeit_mittel = 0
Led_auto_geschwindigkeit_niedrig = 0
Flag_automatik = 0
End If
'Pumpengeschwindigkeit soll dem Analogwert (OCR2-Wert) entsprechen
Geschwindigkeit = Analogwert
Return
[/COLOR]
[COLOR="Blue"]'Sub Tag
Tag:
If Flag_trockenanzeige > 0 Then
Ic4_ansteuerung = 0
Else
Ic4_ansteuerung = 1
End If
Led_tag = 1
Led_nacht = 0
Return
[COLOR="Red"][/COLOR]
'Sub Nacht
Nacht:
Led_tag = 0
Led_nacht = 1
Return[/COLOR]