Hallo,

ich bin gerade dabei mir eine LED leiste zu bauen. Die ansteuerung will ich mit einem ATmega/Tiny machen.

Es geht darum RGB Leds zu dimmen und somit viele Farben zu erzeugen.

Die PWM erzeugung funktioniert bei mir wunderbar. Es wird immer automatisch von Dunkel auf Hell gedimmt und umgekehrt.
Mein Problem liegt jetzt dadrin, das die LEDs nicht alle gleichzeitig an und ausgehen sollen, sondern nacheinander.

Ich habe mir überlegt, dass ich einfach immer ein Byte um 1 erhöhe wenn einmal von Hell auf Dunkel gefadet wurde. Wenn das byte 3 ist, dann wird es wieder auf 1 gesetzt.

Dann habe ich jeder Farbe einen Wert vom Byte zugeordnet.
Also kann z.B Rot erst angehen wenn Blau wieder aus ist. Grün kann dann erst angehen wenn Rot wieder aus ist usw.

Aber irgentwie will das Programm nicht so wie ich. Wäre nett wenn jemand mal einen Blick raufwerfen kann um mir zu sagen wo da mein Denkfehler liegt.




Code:
$regfile = "m8def.dat"
$crystal = 8000000                                          'Interner 8mhz Quarz


'#####Ausgänge#####

Config Portb = Output

Rot Alias Portb.5                                           'Grüne LED an Portb.5
Blau Alias Portb.4                                          'Rote LED an Portb.4
Gruen Alias Portb.3                                         'Blaue LED an Portb.3



'#####Deklarationen#####

Dim Zurueck As Bit                                          'PWM rückwärts Bit
Dim Helligkeit As Byte                                      'Helligkkeitswert
Dim Weiter As Byte                                          'Byte für die nächste LED

'###Hilfsbits und -bytes###

Dim Ro1 As Bit
Dim Bl1 As Bit
Dim Gr1 As Bit


'#####Timer#####

Enable Interrupts

Enable Timer0
On Timer0 Int_timer0
Config Timer0 = Timer , Prescale = 256


Enable Timer1
On Timer1 Int_timer1
Config Timer1 = Timer , Prescale = 8

Const Timervorgabe = 45536                                  'Vorgabewert von RNAVR Berechnet


'#####Grundstellung bei Anlage Ein#####

Weiter = 1
Helligkeit = 3
Zurueck = 0
Ro1 = 0
Bl1 = 0
Gr1 = 0

'#####Hauptschleife#####


Do

If Weiter = 1 Then
 Set Bl1
 Else
 Reset Bl1
End If

If Weiter = 2 Then
 Set Ro1
 Else
 Reset Ro1
End If

If Weiter = 3 Then
 Set Gr1
 Else
 Reset Gr1
End If




Loop

'#####Hauptschleife Ende#####





'#####Timer0 isr#####

Int_timer0:


'###Blau###


If Bl1 = 1 Then Toggle Blau

If Blau = 1 Then
 Timer0 = 256 - Helligkeit
Else
 Timer0 = Helligkeit
End If


'###Rot###

If Ro1 = 1 Then Toggle Rot

If Rot = 1 Then
 Timer0 = 256 - Helligkeit
Else
 Timer0 = Helligkeit
End If


'###Gruen###

If Gr1 = 1 Then Toggle Gruen

If Gruen = 1 Then
 Timer0 = 256 - Helligkeit
Else
 Timer0 = Helligkeit
End If


Return



'#####Timer1 isr#####

Int_timer1:

Timer1 = Timervorgabe                                       'Timervorgabewert von RNAVR berechnet

If Weiter = 4 Then Weiter = 1

If Helligkeit = 3 Then
Reset Zurueck
Incr Weiter
End If

If Zurueck = 0 Then Incr Helligkeit

If Helligkeit = 255 Then Set Zurueck

If Zurueck = 1 Then Decr Helligkeit


Return

End