Kurzzeitschalter
Zur Navigation springen
Zur Suche springen
Ein Timer einstellbar bis 3 min. für kleine Geräte an 230V.
Gehäuse
Das Gehäuse von einer defekten Steckdose mit Funkempfänger.
Elektronik
Die Platine von dem Funkteil getrennt sodass der Triac und Spannungsversorgung (RC / Gleichrichter) übrigbleibt und die Schaltung mit einem ATTiny und Optokoppler drangehängt. Mit einer Taste kann man es Einschalten und mit dem anderen Taster den Timer aktivieren.
Quellcode
Der Code in BASCOM geschrieben:
$regfile = "attiny13.dat" 'für Attiny13 $crystal = 9600000 'für 9,6MHz Quarz $hwstack = 8 $swstack = 2 $framesize = 5 ' Variablen Dim Schaltzustand_switch_1 As Bit Dim Schaltzustand_switch_2 As Bit Dim Poti As Word Dim Zaehler As Word 'ADC definieren Config Adc = Single , Prescaler = Auto Start Adc ' Subs werden deklariert Declare Sub On_switch_1() Declare Sub On_switch_2() ' Ausgangsports definieren Config Portb.1 = Output Config Portb.0 = Output ' Eingangsports definieren Switch_1 Alias Pinb.3 Config Switch_1 = Input Portb.3 = 1 Switch_2 Alias Pinb.4 Config Switch_2 = Input Portb.4 = 1 ' Entprellung wird definiert Config Debounce = 10 ' Timer0 wird definiert Config Timer0 = Timer , Prescale = 1024 'Konfiguriere Timer1 On Timer0 On_timer0 'verzweige bei Timer1 überlauf zu Sub On Timer Enable Interrupts Enable Timer0 ' Hauptschleife Do Poti = Getadc(1) ' Wert von ADC1 wird in Variable Poti gespeichert Debounce Switch_1 , 0 , On_switch_1 , Sub Debounce Switch_2 , 0 , On_switch_2 , Sub ' Wird Taster1 betätigt und der Zaehler ist kleiner als der ADC-Wert so sind die Ausgänge PB0/1 logisch 1 If Schaltzustand_switch_1 = 1 And Zaehler <= Poti Then Portb.0 = 1 Portb.1 = 1 End If ' Ist der Zaehler größer als der ADC-Wert und Taster1 ist logisch 1 wird der Schaltzustand_switch_1 getoggelt If Zaehler > Poti And Schaltzustand_switch_1 = 1 Then Toggle Schaltzustand_switch_1 ' Ist der Schaltzustand_switch_2 auf logisch 1 so werden die Ausgänge PB0/1 auf logisch 1 gesetzt If Schaltzustand_switch_2 = 1 Then Portb.0 = 1 Portb.1 = 1 End If ' Sind die Schaltzustände von Switch 1 und 2 auf logisch 0 sind die Ausgänge PB0/1 logisch 0 If Schaltzustand_switch_2 = 0 And Schaltzustand_switch_1 = 0 Then Portb.0 = 0 Portb.1 = 0 End If Loop On_timer0: ' Timerroutine Incr Zaehler ' Die Variable Zaehler wird nach jedem Überlauf um 1 erhöht Return Sub On_switch_1() ' Diese Sub wird durch betätigen von Taster 1 aufgerufen Toggle Schaltzustand_switch_1 ' Verändert den Schaltzustand_switch_1 Zaehler = 0 ' Setzt den die Variable Zaehler auf 0 zurück End Sub Return Sub On_switch_2() ' Diese Sub wird durch betätigen von Schalter 2 aufgerufen Toggle Schaltzustand_switch_2 ' Verändert den Schaltzustand_switch_2 Zaehler = 0 ' Setzt den die Variable Zaehler auf 0 zurück End Sub Return