HM... also komeltt schreiben kann ichs dir wohl nicht, aber mal einen Anfang machen. Leider hab ich hier kein Bascom, es könnte also sein, das ein par Fehler drin sind, oder Dinge die leicht umgeschrieben werden können:
Code:
Config Timer0 = Timer , Prescale = 8
On Timer0 Timer_irq
Const Timervorgabe = 100 'Je nachdem wie hoch die PWM rate sein soll, musst du hier andere Werte setzen
Enable Timer0
Enable Interrupts
Dim i as byte
Do
Led1
Led2
Led3
'Hier werden die Werte für den PWM berechnet, wenn du nur Wert von 0 bis 240 hast, musst du unten einfach nur sagen dass i ab 240 wieder auf null geht.
Loop
end
Timer_irq
Timer0 = Timervorgabe
i++
If i >= 255 Then
i = 0
end if
if i > Led1 then portx = 0 'Portx muss vorher definiert werden
if i <= Led1 then portx = 1
if i > Led2 then portx = 0
if i <= Led2 then portx = 1
if i > Led3 then portx = 0
if i <= Led3 then portx = 1
Return
So sollte es gehen, der Vorteil, du musst halt nicht zwangsläufig bis 255 gehen, da das Farbchema ja nur bis 240 gehen, kannst du das besser anpassen. Außerdem brauchst du nur einen Timer.
Wenn du eine PWM-Rate von 100Hz haben willst, müsstest du 8Mhz und Prescale 8 bei Timer0, außerdem einem PWM von 255 (mal gard nicht nicht 240) dann muss die Timervorgabe:
8000000/8/255=3906,25
Wenn der Timer jetzt bei 39 auslöst, hast du 100 Hz, Timervorgabe dann 256-39=217 sein.
MFG Moritz
Lesezeichen