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
Lesezeichen