Kurzzeitschalter

Aus Fingers Wiki
Zur Navigation springen Zur Suche springen

Ein Timer einstellbar bis 3 min. für kleine Geräte an 230V.

Kurzzeitschalter Anwendungsbeispiel
Kurzzeitschalter Innenansicht


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.

Schaltplan

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