Blinksteuerung Selbstbau
Zum Selbstbau der Blinksteuerung hier eine vereinfache Variante.
Im unten abgebildeten Schaltplan ist der Aufbau ersichtlich, welcher einfach auf einer Lochrasterplatine vorgenommen werden kann. Der SourceCode namens „Flasher“ für den Controller ist in den Examples von LunaAVR zu finden. Alternativ Sourcecode und Hex-File zum Flashen für den Attiny85 siehe unten.
Im Unterschied zur professionell gefertigten Version, ist diese Blinksteuerung allein für Taster als Signaleingang vorgesehen und die Endstufen schalten nach Masse. Hiermit können handelsübliche Miniatur-Lastrelais angesteuert werden, wenn die zu schaltende Last größer als 4 A ist (Glühbirnen).
Funktionsübersicht
- Betriebsspannung 4-17V (also auch für 6V geeignet)
- Lastunabhängige Blinkfrequenz (geeignet für LED und Mischbetrieb)
- Taster als Signaleingang
- Antippfunktion (3 x Blinken und aus)
- Rückstellung wenn Blinker vergessen wurde (100 x Blinken und aus)
- Endstufen schalten bis 4 A (mit Kühlkörper bis 18 A, Relais können dann entfallen)
Sourcecode
'--------------------------------------------------------------
' (c) 2010 rgf software
'--------------------------------------------------------------
' Blinksteuerung fuer BMW/Harley-Armaturen mit Antippfunktion
' (nur 3x Blinken bei kurzer Betaetigung) und Warnblinklicht.
'--------------------------------------------------------------
avr.device = attiny85
avr.clock = 8000000
avr.stack = 38
dim i,blinkmode,BlinkCount,KurzBlinken,LastPressed as byte
dim tcount,ticks,t as integer
const TasterState = 0
const DauerBlinkZeit = 300
portb.1.mode = Output, low
portb.2.mode = Output, low
portb.4.mode = Input
portb.5.mode = Input
Timer0.clock = 1024
Timer0.isr = BlinkTimer
Timer0.Enable
avr.interrupts.enable
#define TasterLinks as PORTB.4
#define TasterRechts as PORTB.3
#define BlinkerLinks as PORTB.1
#define BlinkerRechts as PORTB.2
do
if TasterLinks = TasterState then
waitms 25 ' debounce
if TasterLinks = TasterState then
if blinkmode > 0 then
BlinkerOff()
else
blinkmode = 1
KurzBlinken = 1
BlinkCount = 0
tcount = 0
BlinkerToggle()
waitms DauerBlinkZeit
if TasterLinks = TasterState then ' pr�fen ob Taster immernoch gedr�ckt
KurzBlinken = 0
end if
if TasterRechts = TasterState then
waitms 25 ' debounce
if TasterRechts = TasterState then ' Beide gedr�ckt?
BlinkerOff()
blinkmode = 3
KurzBlinken = 0
end if
end if
end if
TasterWait()
end if
end if
if TasterRechts = TasterState then
waitms 25 ' debounce
if TasterRechts = TasterState then
if blinkmode > 0 then
BlinkerOff()
else
blinkmode = 2
KurzBlinken = 1
BlinkCount = 0
tcount = 0
BlinkerToggle()
waitms DauerBlinkZeit
if TasterRechts = TasterState then ' pr�fen ob Taster immernoch gedr�ckt
KurzBlinken = 0
end if
if TasterLinks = TasterState then
waitms 25 ' debounce
if TasterLinks = TasterState then ' Beide gedr�ckt?
BlinkerOff()
blinkmode = 3
KurzBlinken = 0
end if
end if
end if
TasterWait()
end if
end if
loop
procedure TasterWait()
do
waitms 25
loop until TasterLinks = 1 and TasterRechts = 1
endproc
isr BlinkTimer
incr tcount
if tcount = 12 then ' 1,5 Hz
BlinkerToggle()
tcount = 0
incr BlinkCount
if KurzBlinken = 1 and BlinkCount >= 6 then ' 3 x blinken und aus
BlinkerOff()
elseif BlinkCount >= 200 then ' 100 x blinken und aus (wenn vergessen automatische R�ckstellung)
if blinkmode < 3 then
BlinkerOff()
end if
end if
end if
endisr
procedure BlinkerOff()
blinkmode = 0
BlinkerLinks = 0
BlinkerRechts = 0
endproc
procedure BlinkerToggle()
if blinkmode=1 or blinkmode=3 then
toggle BlinkerLinks
end if
if blinkmode=2 or blinkmode=3 then
toggle BlinkerRechts
end if
endproc
