MSP430 Launchpad, PWM sehr unpräzise

Gast #3248415
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
Ü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?
Gast
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
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.
Gast
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)...
Gast
Ä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
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
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
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
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
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!
Gast
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.