Hallo zusammen!
Ich verzweifle langsam an MSP430 + PWM. Was soll er tun? -PWM mit ca
20ms Periode, dutycycle erstmal egal. Dazu verwende ich folgenden Code
(CCS):
1
#include<msp430.h>
2
3
intmain(void){
4
WDTCTL=WDTPW|WDTHOLD;// Stop watchdog timer
5
6
P1DIR|=0xFF;
7
P1SEL|=0xFF;
8
9
P2DIR|=0xFF;
10
P2SEL|=0xFF;
11
12
TACCR0=180;
13
TACCR1=100;
14
TACCTL1=OUTMOD_4;
15
// Start timer from ACLK , no division , Up mode , clear , no interrupts
16
TACTL=TASSEL_1|ID_0|MC_1|TACLR;
17
18
for(;;){
19
__low_power_mode_3();
20
}
21
22
return0;
23
}
Man auf dem Oszi auch brav eine PWM, jedoch "wackeln" die Flanken stark
horizontal. Die Periode lässt sich also nicht genau feststellen. Ich
kann mir absolut nicht vorstellen woran das liegt, schließlich müsste
der Timer doch präzise sein oder? Ich greife das Signal an P1.2 ab.
Hatte jemand von euch schon mal ähnliche Probleme? Es muss doch möglich
sein mit dem MSP eine vernünftige PWM hinzubekommen ;)
Viele Grüße und danke schon mal für eure Bemühungen!
Max
Übrigens kann ich an P1.0 ein Signal abgreifen, das weder konstante
Frequenz, noch konstante Amplitude hat. Hier sollte doch eigentlich ein
Vdd gegeben werden, wenn TACCR0 überläuft, oder?
Das habe ich schon ausprobiert, funktioniert leider nicht. Könnte es
sein, dass mein Launchpad kaputt ist? Ich habe mittlerweile bemerkt dass
ich über TACCR1 den Dutycycle nicht verändern kann. Er ist immer bei
geschätzten 40%.
Edit: Dutycycle kann doch verändert werden, weiß nicht warum das gerade
nicht geklappt hat. Frage ist also nur noch warum die Frequenz nicht
stehen bleibt.
Denis schrieb:> Outmod_7
mal abgesehen davon, welche Lib (also Defines) der TO benutzt (das steht
ja nirgendwo....), sollte OUTMOD_4 schon das richtige Define sein
(vorausgesetzt, er benutzt die gleichen Defines wie ich)...
Ändert leider nichts an der total unregelmäßigen PWM Frequenz. Ich
glaube ich kann auch ausschließen, dass der MSP sich ständig resettet,
weil er immer an breakpoints in der Endlosschleife hält. Der Fehler muss
irgendwo sehr früh im Timer verursacht werden, da P1.0 nur unregelmäßige
Peaks ausgibt. Könnte das vielleicht jemand kurz auf seinem Launchpad
bestätigen? Ihr würdet mir damit einen riesigen Gefallen tun :)
max schrieb:> Defines habe ich gar keine.
was steht denn in deiner msp430.h drin?
Bei mir passiert da folgendes:
msp430.h
--> msp430xxxx.h
--> #define OUTMOD_4 (0x0080) /* PWM output mode: 4 - toggle */
Was passiert bei dir?
Grüße Uwe
max schrieb:> Ihr würdet mir damit einen riesigen Gefallen tun :)
also das funktioniert bei mir:
http://bralug.de/wiki/Tux_trifft_MSP430-Launchpad#PWM_.28LED_dimmen.29
(mit einem MSP430G2452).
Allerdings hatte ich keinen Oszi dran, um zu überprüfen, ob das Signal
einwandfrei aussieht. Die LED auf dem Board macht das, was ich erwartet
hatte...
Grüße Uwe
PS.: User: msp430 war ich auch.
MoinMoin,
max schrieb:> Aber warum macht mein Code nur Müll? Ich kann> mir das nicht erklären...
gute Frage, nächste Frage... :-)...:
bei meinen Experimenten habe ich festgestellt, dass wenn man die rote
LED als PWM-Ausgang definiert, das Ganze etwas komischer/unregelmäßiger
aussieht (wie gesagt subjektiv, ohne Oszi..).
Allerdings habe ich das Datenblatt des entsprechenden MSP430 in dem
Punkt genau studiert...
Grüße Uwe
Ich benutze jetzt TASSEL_2 habe nur noch sehr wenige Ausrutscher in der
Periodendauer. Anscheinend hat TASSEL_1 da etwas Toleranz... Mal ne
andere Frage: Ich finde beim G2553 kein TA0.2 Pin. Wo soll der denn
sein? es gibt ein Register dafür, aber ich finde den Pin nicht!
max schrieb:> Ich finde beim G2553 kein TA0.2 Pin. Wo soll der denn> sein? es gibt ein Register dafür, aber ich finde den Pin nicht!
den scheint es, lt. Datenblatt, bei der PDIP-Variante nicht zu geben.
Grüße Uwe
Hmm gibt es dann überhaupt eine Möglichkeit 4 verschiedene PWM auf einem
MSP laufen zu lassen (PDIP, Value Line)? Es muss zwangsläufig durch
Timer umgesetzt werden, weil ich die CPU benötige...
MoinMoin,
max schrieb:> Hmm gibt es dann überhaupt eine Möglichkeit 4 verschiedene PWM auf einem> MSP laufen zu lassen (PDIP, Value Line)? Es muss zwangsläufig durch> Timer umgesetzt werden, weil ich die CPU benötige...>
via Timer, logischerweise nur soviel PWMs wie vorhandene Timer...
Grüße Uwe