MSP430 Launchpad, PWM sehr unpräzise

Gast #3248415
Lesenswert?

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
int main(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
  return 0;
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
Gast #3248580
Lesenswert?

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%.
Gast #3248864
Lesenswert?

Ä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 :)
Gast #3248865
Lesenswert?

Defines habe ich gar keine.
1
#include <msp430.h>
2

3
int main(void) {
4
    WDTCTL = WDTPW | WDTHOLD;  // Stop watchdog timer
5
  //P2OUT = 0;
6
    P1DIR |= 0xFF;                       // P1.2 and P1.3 output
7
    P1SEL |= 0xFF;
8

9
    P2DIR |= 0xFF;
10
    P2SEL |= 0xFF;
11

12
    TACCR0 = 180;
13
    TACCR1 = 80;
14
    TACCR2 = 80;
15

16
    TACCTL1 = OUTMOD_7;
17
    TACCTL2 = OUTMOD_7;
18

19
    // Start timer from ACLK , no division , Up mode , clear , no interrupts
20
    TACTL = TASSEL_1 | ID_0 | MC_1 | TACLR;
21

22
    for (;;) {
23
    __low_power_mode_3 ();
24
    }
25

26
  return 0;
27
}
Persönliche Seite #3248877
Lesenswert?

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.
Gast #3248878
Lesenswert?

1
#define OUTMOD_0               (0*0x20u)      /* PWM output mode: 0 - output only */
2
#define OUTMOD_1               (1*0x20u)      /* PWM output mode: 1 - set */
3
#define OUTMOD_2               (2*0x20u)      /* PWM output mode: 2 - PWM toggle/reset */
4
#define OUTMOD_3               (3*0x20u)      /* PWM output mode: 3 - PWM set/reset */
5
#define OUTMOD_4               (4*0x20u)      /* PWM output mode: 4 - toggle */
6
#define OUTMOD_5               (5*0x20u)      /* PWM output mode: 5 - Reset */
7
#define OUTMOD_6               (6*0x20u)      /* PWM output mode: 6 - PWM toggle/set */
8
#define OUTMOD_7               (7*0x20u)      /* PWM output mode: 7 - PWM reset/set */
Persönliche Seite #3248883
Lesenswert?

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
Gast #3248885
Lesenswert?

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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren