Ein-Tasten-Dimmer

Nach einer Grundidee von Tim Sasdrich

 

Materialbedarf

 

Anz. Bezeichnung Datenblatt
1 Batterie/Spannungsquelle 9V  
1 Spannungsregler 7805
1 ATMega8 AVR-Prozessor
1 Widerstand 220 Ohm  
1 Widerstand 10 kOhm  
1 Elektrolytkondensator 100 µF/16V  
1 Kondensator 100nF  
1 Mikrotaster
1 Standard-Leuchtdiode 3mm oder 5mm 3mm, 5mm
Programmierten ATtiny26 bei DES bestellen
Bauteileset mit leeren AVR bei DES bestellen
Bauteileset mit programmierten AVR bei DES bestellen

 

 

Beschreibung

 

Mit Hilfe von Mikrokontrollern lassen sich sehr schön PWM-Dimmer aufbauen. Um die Bedienung erheblich zu vereinfachen, wäre es ratsam, nur einen Taster zu verwenden.

 

So einen Dimmer stellt diese Schaltung dar. Mit S1 wird das Licht heller oder dunkler geregelt. Lässt man den Taster los und betätigt erneut, wird die Lichthelligkeit in die andere Richtung geregelt. Das Gleiche passiert auch, wenn die Endhelligkeit bzw. Dunkelheit erreicht wird.

 

Soll das Licht schnell ein- bzw. ausgeschaltet werden so reicht es aus, den Taster kurz anzutippen.

 

Ist die LED aus, geht der AVR nach einer kurzen Weile in den Stromsparmodus. Beim drücken dies Tasters wird dieser wieder aufgeweckt und arbeitet normal weiter.

 

 

Aufbau

 

 

 

 

Software

 

$regfile = "Attiny26.dat"
$crystal = 1000000

Dim Hell As Word
Dim An As Word
Dim Aus As Word
Dim Pressed As Word
Dim Neu As Word
Dim Heller As Word
Dim Dunkler As Word
Dim Pwm As Word
Dim Analog As Word
Dim Dimm As Word

' Festlegen der Starthelligkeit beim antippen des Tasters
' 0=Dunkel, 255=Hell
Const Starthelligkeit = 255

Config Portb.0 = Output
Config Portb.6 = Input

Tccr1a = &B01010011 : TCCR1B = &B10000101 : OCR1C = 255

Ocr1a = 255 : Portb.6 = 1

An = 0 : Neu = 0 : Pwm = 255
Hell = 255 - Starthelligkeit
Dunkler = Hell
If Dunkler = 0 Then Dunkler = 255

Do
  If Pinb.6 = 0 Then
    Incr Pressed : Waitms 1 : Neu = Heller
  End If
  If Pwm = 0 Then Heller = 0
  If Pwm = 255 Then Heller = 1
  If Pressed > 250 Then
    If Heller = 0 Then Incr Pwm Else Decr Pwm
    Waitms 30
  End If
  If Pinb.6 = 1 And Pressed > 0 And Pressed < 250 Then
  If Pressed < 50 Then
    If Pwm = 0 Then
      Do
        Incr Pwm : Ocr1a = Pwm : Waitms 5
        Pressed = 0 : Neu = 1 : An = 1
      Loop Until Pwm = Dunkler Or Pinb.6 = 0
    Else
      Do
        Decr Pwm : Ocr1a = Pwm : Waitms 5
        Pressed = 0 : Neu = 0 : An = 1
      Loop Until Pwm = 0 Or Pinb.6 = 0
    End If
  Elseif An = 1 Then
    Do
      Incr Pwm : Ocr1a = Pwm : Waitms 5
      Pressed = 0 : Neu = 1 : An = 0
    Loop Until Pwm = 255 Or Pinb.6 = 0
  Else
    Do
      Decr Pwm : Ocr1a = Pwm : Waitms 5
      Pressed = 0 : Neu = 0 : An = 1
    Loop Until Pwm = Hell Or Pinb.6 = 0
  End If
  If Pinb.6 = 0 Then Pressed = 250
  Elseif Pressed > 0 And Pinb.6 = 1 Then
    If Neu = 1 Then Heller = 0
    If Neu = 0 Then Heller = 1
    Pressed = 0 : Waitms 100
  End If
  If Pwm = 255 Then An = 0 Else If Aus > 5 Then An = 1
  Incr Aus : Ocr1a = Pwm
Loop

 

Der User Gerhard K. hat das Programm für den ATtiny13 Mikrokontroller aufbereitet:

$regfile = "Attiny13.dat"
$crystal = 1200000
$hwstack = 10
$framesize = 17
$swstack = 0

 

Dim Hell As Word
Dim An As Word
Dim Aus As Word
Dim Pressed As Word
Dim Neu As Word
Dim Heller As Word
Dim Dunkler As Word
Dim Pwm As Word
Dim Analog As Word
Dim Dimm As Word

 

Const Starthelligkeit = 255

Config Portb.0 = Output

Config Portb.2 = Input

Tccr0a = &B11110001 : Tccr0b = &B00000010 : Ocr0b = 255

Ocr0a = 255 : Portb.2 = 1

An = 0 : Neu = 0 : Pwm = 255

Hell = 255 - Starthelligkeit

Dunkler = Hell

If Dunkler = 0 Then Dunkler = 255

Do
  If Pinb.2 = 0 Then
    Incr Pressed : Waitms 1 : Neu = Heller
  End If

  If Pwm = 0 Then Heller = 0
  If Pwm = 255 Then Heller = 1
  If Pressed > 250 Then
    If Heller = 0 Then Incr Pwm Else Decr Pwm
    Waitms 30
  End If

  If Pinb.2 = 1 And Pressed > 0 And Pressed < 250 Then
    If Pressed < 50 Then
      If Pwm = 0 Then
        Do
          Incr Pwm : Ocr0a = Pwm : Waitms 5
          Pressed = 0 : Neu = 1 : An = 1
        Loop Until Pwm = Dunkler Or Pinb.2 = 0
      Else
        Do
          Decr Pwm : Ocr0a = Pwm : Waitms 5
          Pressed = 0 : Neu = 0 : An = 1
        Loop Until Pwm = 0 Or Pinb.2 = 0
      End If
    Elseif An = 1 Then
      Do
        Incr Pwm : Ocr0a = Pwm : Waitms 5
        Pressed = 0 : Neu = 1 : An = 0
      Loop Until Pwm = 255 Or Pinb.2 = 0
    Else
      Do
        Decr Pwm : Ocr0a = Pwm : Waitms 5
        Pressed = 0 : Neu = 0 : An = 1
      Loop Until Pwm = Hell Or Pinb.2 = 0
    End If
    If Pinb.2 = 0 Then Pressed = 250
  Elseif Pressed > 0 And Pinb.2 = 1 Then
    If Neu = 1 Then Heller = 0
    If Neu = 0 Then Heller = 1
    Pressed = 0 : Waitms 100
  End If
  If Pwm = 255 Then An = 0 Else If Aus > 5 Then An = 1
  Incr Aus : Ocr0a = Pwm
Loop

 

Zurück zur Auswahlseite            Zur Hauptseite