Hallo,
ich habe meine Stromstoßschalter (Eltakos) auch durch AVR's abgelöst.
Zunächst ging es mir nur um die reine Stromstoßfunktion. Dann kam die Zeitschaltfunktion dazu und jetzt sind alle über einen CAN Bus vernetzt und vom PC aus programmierbar!
Im angehängten Programm ist eine der ersten "funktionierenden" Versionen mit Eltako und Zeitschaltfunktion enthalten.
Bei Bedarf kann ich dir weitere Unterlagen zukommen lassen
Code:$regfile = "m8def.dat" $crystal = 7372800 $baud = 4800 '------------------------------------ Config Pinc.0 = Input ' Schaltport Config Pinc.1 = Input Config Pinc.2 = Input Config Pinc.3 = Input Config Pinc.4 = Input Config Pinc.5 = Input 'Config Pind.5 = Input Config Portb.0 = Output ' Schaltport Config Portb.1 = Output Config Portb.2 = Output Config Portd.7 = Output Config Portd.6 = Output Config Portb.5 = Output ' Kontrollport Dim T1 As Long Dim T2 As Long Dim T3 As Long Dim T4 As Long Dim T5 As Long Dim Rtime As Long Dim Minute As Long Rtime = 0 Minute = 0 Dim Ablaufzeit1 As Long Dim Ablaufzeit2 As Long Dim Ablaufzeit3 As Long Dim Ablaufzeit4 As Long Dim Ablaufzeit5 As Long Ablaufzeit1 = 0 Ablaufzeit2 = 0 Ablaufzeit3 = 0 Ablaufzeit4 = 0 Ablaufzeit5 = 0 Dim Zeit1 As Long Dim Zeit2 As Long Dim Zeit3 As Long Dim Zeit4 As Long Dim Zeit5 As Long Dim Sz As Long 'Sendezeit Zeit1 = 30 'Terasse Zeit2 = 240 'Esstisch Zeit3 = 60 ' Zeit4 = 10 'Treppenhaus Zeit5 = 30 'Dachterasse / Treppe Dim Db1_ As Byte ' db1 zur Aufnahme des Modulzustandes in Hex T1 = 0 T2 = 0 T3 = 0 T4 = 0 T5 = 0 Sz = 0 Config Debounce = 50 Dim I As Byte Dim Key As Byte Dim S As String * 10 Dim B(10) As Byte 'At S Overlay Dim N As Byte ' Protokoll --------------------------------------------------------- On Timer0 Ontimer0 Config Timer0 = Timer , Prescale = 1024 Enable Timer0 '---------- Programm ---------- Prog_start: N = 0 Do If Portd.6 = 1 Then Ablaufzeit1 = Minute - T1 If Zeit1 < Ablaufzeit1 Then Portd.6 = 0 T1 = 0 Else End If Else End If If Portb.0 = 1 Then Ablaufzeit2 = Minute - T2 If Zeit2 < Ablaufzeit2 Then Portb.0 = 0 Else End If Else End If If Portb.2 = 1 Then Ablaufzeit3 = Minute - T3 If Zeit3 < Ablaufzeit3 Then Portb.2 = 0 Else End If Else End If If Portd.7 = 1 Then Ablaufzeit4 = Minute - T4 If Zeit4 < Ablaufzeit4 Then Portd.7 = 0 Else End If Else End If If Portb.1 = 1 Then Ablaufzeit5 = Minute - T5 If Zeit5 < Ablaufzeit5 Then Portb.1 = 0 Else End If Else End If Debounce Pinc.0 , 0 , Key_o1 , Sub 'Port 1. Debounce Pinc.1 , 0 , Key_o2 , Sub 'Port 2 Debounce Pinc.2 , 0 , Key_o3 , Sub 'Port 3 Debounce Pinc.3 , 0 , Key_o4 , Sub 'Port 4 Debounce Pinc.4 , 0 , Key_o5 , Sub 'Port 5 Loop End Key_o1: Toggle Portb.0 'Buchse 1 If T2 = 0 Then T2 = Minute Else T2 = 0 End If Return Key_o2: Toggle Portb.1 'Buchse 2 If T5 = 0 Then T5 = Minute Else T5 = 0 End If Return Key_o3: Toggle Portb.2 'Buchse 3 If T3 = 0 Then T3 = Minute Else T3 = 0 End If Return Key_o4: Toggle Portd.7 'Buchse 5 If T4 = 0 Then T4 = Minute Else T4 = 0 End If Return Key_o5: Toggle Portd.6 'Buchse 4 If T1 = 0 Then T1 = Minute Else T1 = 0 End If Return Key_o6: 'Buchse 7 (Garagentor) Return '---------- Timer ----------- Ontimer0: Rtime = Rtime + 1 ' variable wird bei jedem Interrupt um 1 erhöht Gosub Minutenzaehler Return ' ----Minutenauswertung ----------------------------------------- Minutenzaehler: If Rtime = 1700 Then ' Teilungsfaktor bei 7372800 Hz und Prescale um auf 1 Minute zu kommen Minute = Minute + 1 Rtime = 0 Else End If Return







Zitieren

Lesezeichen