m3Sa
02.03.2008, 16:43
Hallo,
an meinem Atmega8 benutze ich die 3 Hardware PWMs um meine RGB LEDs anzusteuern.
Beim Übergang von Grün Blau auf Rot Grün und Rot Blau auf Rot Grün setzt die LED kurz aus.
Beim Übergang von Grün Rot auf Grün Blau gibt es keine Aussetzer!
Weiß jemand wieso das so ist?
Hier mein Code bisher:
$regfile = "m8def.dat"
$crystal = 1000000
Dim A As Word
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8 'Timer OC1 Einstellungen
Config Timer2 = Pwm , Prescale = 8 , Compare Pwm = Clear Down , Pwm = On 'Timer OC2 Einstellungen
Enable Timer1 'Timer OC1 aktivieren
Enable Timer2 'Timer OC2 aktivieren
Load Timer1 , 1 'Timer OC1 nach jedem Tackt interrupt auslösen
Load Timer2 , 8 'Timer OC1 nach jedem achten Tackt interrupt auslösen
Enable Interrupts 'Interrupts aktivieren
On Timer1 Ueberlauf_oc1 'Timer OC1 Überlauf festlegen
On Timer2 Ueberlauf_oc2 'Timer OC2 Überlauf festlegen
Config Pinb.1 = Output 'OC1A (ROT)
Config Pinb.2 = Output 'OC1B (GRUEN)
Config Pinb.3 = Output 'OC2 (BLAU)
Config Portd = Output 'PortD x Matix
Config Portc = Output 'PortA y Matrix
Portd = 1 'PortD Ausgang 0 einschalten
Portc = 1 'PortD Ausgang 0 einschalten
Do 'Hauptprogramm
'Rot aus Grün an
For A = 255 To 0 Step -1
Pwm1a = A
Pwm1b = 255 - A
Waitms 100
Next
'Grün aus Blau an
For A = 255 To 0 Step -1
Pwm1b = A
Ocr2 = 255 - A
Waitms 100
Next
'Blau aus Rot an
For A = 255 To 0 Step -1
Ocr2 = A
Pwm1a = 255 - A
Waitms 100
Next
Loop
'Überläufe für Timer OC1 und OC2
Ueberlauf_oc1:
Rotate Portd , Left , 1
Load Timer1 , 1
Return
Ueberlauf_oc2:
Rotate Portc , Left , 1
Load Timer2 , 8
Return
End
Bin für jede Hilfe dankbar!
MfG
Carsten
an meinem Atmega8 benutze ich die 3 Hardware PWMs um meine RGB LEDs anzusteuern.
Beim Übergang von Grün Blau auf Rot Grün und Rot Blau auf Rot Grün setzt die LED kurz aus.
Beim Übergang von Grün Rot auf Grün Blau gibt es keine Aussetzer!
Weiß jemand wieso das so ist?
Hier mein Code bisher:
$regfile = "m8def.dat"
$crystal = 1000000
Dim A As Word
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8 'Timer OC1 Einstellungen
Config Timer2 = Pwm , Prescale = 8 , Compare Pwm = Clear Down , Pwm = On 'Timer OC2 Einstellungen
Enable Timer1 'Timer OC1 aktivieren
Enable Timer2 'Timer OC2 aktivieren
Load Timer1 , 1 'Timer OC1 nach jedem Tackt interrupt auslösen
Load Timer2 , 8 'Timer OC1 nach jedem achten Tackt interrupt auslösen
Enable Interrupts 'Interrupts aktivieren
On Timer1 Ueberlauf_oc1 'Timer OC1 Überlauf festlegen
On Timer2 Ueberlauf_oc2 'Timer OC2 Überlauf festlegen
Config Pinb.1 = Output 'OC1A (ROT)
Config Pinb.2 = Output 'OC1B (GRUEN)
Config Pinb.3 = Output 'OC2 (BLAU)
Config Portd = Output 'PortD x Matix
Config Portc = Output 'PortA y Matrix
Portd = 1 'PortD Ausgang 0 einschalten
Portc = 1 'PortD Ausgang 0 einschalten
Do 'Hauptprogramm
'Rot aus Grün an
For A = 255 To 0 Step -1
Pwm1a = A
Pwm1b = 255 - A
Waitms 100
Next
'Grün aus Blau an
For A = 255 To 0 Step -1
Pwm1b = A
Ocr2 = 255 - A
Waitms 100
Next
'Blau aus Rot an
For A = 255 To 0 Step -1
Ocr2 = A
Pwm1a = 255 - A
Waitms 100
Next
Loop
'Überläufe für Timer OC1 und OC2
Ueberlauf_oc1:
Rotate Portd , Left , 1
Load Timer1 , 1
Return
Ueberlauf_oc2:
Rotate Portc , Left , 1
Load Timer2 , 8
Return
End
Bin für jede Hilfe dankbar!
MfG
Carsten