Hallo Zusammen,
Schalter gibt es wie Sand am Meer, Magnetschalter auch, warum jetzt noch einen? Meiner hat den Vorteil, dass man ihn in die Löcher für die "normalen" Schalter schrauben kann.
Was kann er noch?
- Er kann von 8,4 - 5,5 V Schalten (oh ein Wunder)
- Er könnte bis zu 55 Ampere schalten (also machen wir mal real 10 Ampere)
- Er schaltet über einen FET, d.h. keine Mechanik, die mit Vibrationen ein Problem haben könnte
- Er ist mit jedem Magneten schaltbar
- Er prüft, ob das Schalten auch wirklich gewollt war
- Er arbeitet OHNE! Wait- Befehle, d.h. das Programm ist immer aktiv und "lauscht"
- Die Firmware ist in Bascom geschrieben und daher für jeden änderbar
- Es gibt ein fertiges Layout
- Die Bauteile sind alle bei Reichelt erhältlich
- Die Leistungs- Leiterbahnen sind "dick" genug
- Er ist zwar in SMD, aber noch in der 0805- er Bauteilgröße aufgebaut.
- Er basiert auf einem Atmel Tiny (so jetzt mal den Glaubenskrieg anzetteln: Meiner Meinung nach die einfachsten µC's)
- Er merkt sich die "Schalterstellung" bei einem Stromausfall
Was soll er noch alles können:
- Parametrisierung über einen Bootloader (Hagenre) + Windows-Programm
- Ein Programmieradaper ist nicht unbedingt nötig (USB to RS232 reicht vollkommen aus)
Das Projekt richtet sich im Moment noch an Personen, die einen Programmieradapter haben. der Tiny muss vor dem einlöten programmiert werden. Die Eagle Dateien sind in der safswi.dat, bitte in safswi.zip umbenennen (Sorry rc-network für diesen Kunstgriff) Anhang anzeigen safswi.dat
Ich bitte um Entschuldigung für diese Stakkato Schreibweise, aber mein Harz ist am gelieren....
Kurz das Rechtliche: Privater Nachbau erlaubt, kommerziell nicht (bitte bei mir melden)
So dann die Bilder:
Der Schalter, fertig von oben:
und von unten:
Die Platine:
der Schaltplan:
Layout Top:
Layout Bottom:
MPX Stecker stehend:
MPX Stecker liegend:
Der Programmcode (Bascom):
Platinen habe ich noch.
Bei Fragen einfach melden.
Schalter gibt es wie Sand am Meer, Magnetschalter auch, warum jetzt noch einen? Meiner hat den Vorteil, dass man ihn in die Löcher für die "normalen" Schalter schrauben kann.
Was kann er noch?
- Er kann von 8,4 - 5,5 V Schalten (oh ein Wunder)
- Er könnte bis zu 55 Ampere schalten (also machen wir mal real 10 Ampere)
- Er schaltet über einen FET, d.h. keine Mechanik, die mit Vibrationen ein Problem haben könnte
- Er ist mit jedem Magneten schaltbar
- Er prüft, ob das Schalten auch wirklich gewollt war
- Er arbeitet OHNE! Wait- Befehle, d.h. das Programm ist immer aktiv und "lauscht"
- Die Firmware ist in Bascom geschrieben und daher für jeden änderbar
- Es gibt ein fertiges Layout
- Die Bauteile sind alle bei Reichelt erhältlich
- Die Leistungs- Leiterbahnen sind "dick" genug
- Er ist zwar in SMD, aber noch in der 0805- er Bauteilgröße aufgebaut.
- Er basiert auf einem Atmel Tiny (so jetzt mal den Glaubenskrieg anzetteln: Meiner Meinung nach die einfachsten µC's)
- Er merkt sich die "Schalterstellung" bei einem Stromausfall
Was soll er noch alles können:
- Parametrisierung über einen Bootloader (Hagenre) + Windows-Programm
- Ein Programmieradaper ist nicht unbedingt nötig (USB to RS232 reicht vollkommen aus)
Das Projekt richtet sich im Moment noch an Personen, die einen Programmieradapter haben. der Tiny muss vor dem einlöten programmiert werden. Die Eagle Dateien sind in der safswi.dat, bitte in safswi.zip umbenennen (Sorry rc-network für diesen Kunstgriff) Anhang anzeigen safswi.dat
Ich bitte um Entschuldigung für diese Stakkato Schreibweise, aber mein Harz ist am gelieren....
Kurz das Rechtliche: Privater Nachbau erlaubt, kommerziell nicht (bitte bei mir melden)
So dann die Bilder:
Der Schalter, fertig von oben:
und von unten:
Die Platine:
der Schaltplan:
Layout Top:
Layout Bottom:
MPX Stecker stehend:
MPX Stecker liegend:
Der Programmcode (Bascom):
Code:
$regfile = "attiny45.dat"$crystal = 1000000 'interner 1MHz vorteiler 8
'$noramclear
'$hwstack = 10
'$swstack = 10
'$framesize = 10
'$eeprom
'Portdeklaration
'portb.3 = Transmit / Recieve interner Pullup
Config Portb.5 = Input 'Noch nicht benutzt
Config Portb.4 = Output 'Schalter FET
Config Portb.3 = Input 'Spannungsmessung
Config Portb.2 = Input 'Hallgeber
Config Portb.1 = Output 'LED Grün
Config Portb.0 = Output 'LED Rot
Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1 'Spannungsmessung
Config Int0 = Rising
Enable Interrupts
Enable Int0
On Int0 Interrupthandler
'Config Watchdog = 16 'Watchdog auf 64 mS
'Aliases
Fet Alias Portb.4
Hall Alias Pinb.2
Ledgrn Alias Portb.1
Ledrot Alias Portb.0
'Variablendeklaration
Dim Epromflag As Byte
Dim Intflag As Byte
Dim Z As Word
Dim Rest As Word
Dim Volt_raw As Word
'Prüfung, ob Schalter an oder aus war
Readeeprom Epromflag , 10
If Epromflag = 1 Then
' Schalter ein
Ledgrn = 0
Ledrot = 1
Fet = 0
Else
'Schalter aus
Ledgrn = 1
Ledrot = 0
Fet = 1
End If
Gosub Spannung
Intflag = 0
Z = 0
'Hauptschleife
Schleife:
Do
If Intflag = 1 Then
Goto Ende
End If
If Hall = 0 Then
Incr Z
If 60000 < Z Then 'Zeit, die der Magnet vor dem Sensor gehalten werden muss (~3 Sek.)
Z = 10000 'Zeit, in der der Magnet vor dem Sensor entfernt werden muss (~2,5 Sek)
Do
Rest = Z Mod 100
If Rest = 0 Then
Toggle Ledrot
End If
Decr Z
Loop Until Z = 0
If Hall = 0 Then
Goto Ende
End If
Disable Int0
Toggle Ledgrn
Toggle Ledrot
Toggle Fet
Readeeprom Epromflag , 10
If Epromflag = 0 Then
Epromflag = 1
Else
Epromflag = 0
End If
Writeeeprom Epromflag , 10
Gosub Spannung
Z = 0
Intflag = 1
Enable Int0
End If
Else
Z = 0
End If
Ende:
Loop
'
Spannung:
'#########################################
'Berechnete Werte, Spannungsteiler 10:1 (10k:1k)
' Internal_1.1
'8,4 - 7,8 = 710 - 660
'7,79 - 7,4 = 659 - 626
'7,39 - 6,5 = 625 - 525
'6,49 - 6 = 524 - 507
'Spannungsmessung Starten
Start Adc
'Hole Wert
Volt_raw = Getadc(3)
'Spannungsmessung Stoppen
Stop Adc
Waitms 1000
'Auswahl Bereich
'LiPo 8,4 V
Select Case Volt_raw
Case 660 To 720 : Z = 8
Case 626 To 659 : Z = 6
Case 525 To 625 : Z = 4
Case 507 To 524 : Z = 2
Case Else : Z = 20
End Select
'Bei LedRot an muss 1x mehr geblinkt werden
Readeeprom Epromflag , 10
If Epromflag = 0 Then
Z = Z + 2
End If
'Blinken
Do
Toggle Ledrot
Waitms 1000
Decr Z
Loop Until Z = 0
Waitms 1000
Return
'Interrupt, um dauerndes Umschalten zu verhindern
Interrupthandler:
Interrupt:
Intflag = 0
Return
Platinen habe ich noch.
Bei Fragen einfach melden.