Aktuelle Zeit: 01:51:05 19.04.2024

You are here: start » fridabsm_blinksteuerung_selbstbau

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
Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0 chimeric.de = chi`s home
(c) 2014 metric custom, all rights reserved