Hey,
habe hier den MSP430G2553 auf einem Launchpad, und möchte eine RGBW-LED
per PWM ansteuern. Die PWMs werden ja über die Compare-Einheiten der
Timer realisiert, und die Timer haben auch die Möglichkeit, die Pins
direkt anzusteuern, wenn sie richtig konfiguriert sind.
Zur Frage: Für die RGBW-LED brauche ich vier PWM-Kanäle, ein Timer(0_A)
hat drei Compare-Registersets, kann also auch drei PWMs für Pins
erzeugen. Der µC verfügt aber über zwei einzelne Timer(0_A & 1_A), die
nahezu die selben Funktionen bieten. Im Datenblatt sind die Pins mit
folgenden Alternativ-Funktionen belegt:
Entweder:
Timer0_A, compare: Out0 output
Timer0_A, compare: Out1 output
Timer0_A, compare: Out2 output
Timer1_A, compare: Out0 output
Timer1_A, compare: Out1 output
Timer1_A, compare: Out2 output
Heißt das, dass beide Timer die selben Pins ansteuern? Und dass
Hardware-PWM nicht für vier Kanäle machbar ist? Wenn ja, dann bleibt mir
wohl nichts anderes übrig, als PWM über Timer_Interrupts zu realisieren.
Oder sind das zwei verschiedene OutX's?
dommy schrieb:> Heißt das, dass beide Timer die selben Pins ansteuern?
Nein. Die sind sogar mehrfach verfügbar.
Sieh ins Datenblatt, S. 16, Tabellen 12 und 13
Timer0_A
Out0 P1.1 oder P1.5
Out1 P1.2, P1.6 oder P2.6
Out2 gibt es im 20poligen Gehäuse nicht
Timer1_A
Out0 P2.0 oder P2.3
Out1 P2.1 oder P2.2
Out3 P2.4 oder P2.5
Du kannst also mit beiden Timern fünf PWM-Kanäle gleichzeitig
bedienen.
Danke! Wusste nur nicht, ob Out1 jeweils individuell für beide Timer
gelten, oder von beiden eben direkt angesteuert werden. Werde das mal
testen - falls es nicht geht, meld ich mich.
dommy schrieb:> ein Timer(0_A)> hat drei Compare-Registersets, kann also auch drei PWMs für Pins> erzeugen.
Wie?
Ich möchte auch 3 PWM-Ausgänge nutzen, allerdings mit einem
http://www.ti.com/product/msp430g2452 (PDIP)
Dort ist auch ein TimerA mit 3 CC-Units, die sich auch auf Ausgangspins
schalten lassen. Allerdings erreiche ich nur 2 PWM-Ausgänge, denn der
"continuous mode" setzt die compare outputs nicht wieder zurück. Es ist
aber der einzige Mode, in dem CCR0 für den Ausgang genutzt werden kann,
in allen PWM-tauglichen Modi wird er als MAX genutzt.
> Output modes 2, 3, 6, and 7 are not useful for output unit 0, because EQUx =
EQU0.
Nur taugen modes 1, 4 und 5 (set, toggle, reset) nichts, wenn man einen
einstellbaren duty-cylce haben möchte.
Aber selbst wenn der Timer beim Überlauf nicht "restart"en, sondern
"reset"en würde, und damit auch den compare output beeinflussen würde,
hätte man wg. der 16 Bit Auflösung bei max. 16 MHz eine recht niedrige
PWM-Frequenz.
Die einzige Möglichkeit wäre ein Software-Reset im Overflow-Interrupt!?
Hier ein Minimalprogramm für 2 PWM mit unterschiedlichem Duty-Cycle und
einstellbarer Frequenz.
Warum hat TI nicht anstelle CCR0 ein weiteres Register spendiert, das
den Timer als MAX resetten kann? Schade :-)
Andererseits lässt sich eine Compare Unit auch mit mehreren Pins
verbinden. Es folgt ein Beispiel mit einer 8-bit 62.5 kHz PWM (16e6/256)
auf drei Ausgängen:
In der
Igor schrieb:> Dort ist auch ein TimerA mit 3 CC-Units, die sich auch auf Ausgangspins> schalten lassen. Allerdings erreiche ich nur 2 PWM-Ausgänge, denn der> "continuous mode" setzt die compare outputs nicht wieder zurück. Es ist> aber der einzige Mode, in dem CCR0 für den Ausgang genutzt werden kann,> in allen PWM-tauglichen Modi wird er als MAX genutzt.
In der TI Application Note Slaa513 "Multiple Time Bases on a Single
Timer"
http://www.ti.com/mcu/docs/litabsmultiplefilelist.tsp?sectionId=96&tabId=1502&literatureNumber=slaa513&docCategoryId=1&familyId=1615
Ist unter anderem beschrieben wie sich mit etwas code in der ISR alle
drei Copmare Units für PWM nutzen lassen.
Gruß,
Jan