Forum: Mikrocontroller und Digitale Elektronik MSP430G2553 PWM über Port 2


von Klaus R. (klara)


Lesenswert?

Hallo,
ich brauche mal wieder eure Unterstützung in Sachen MSP430G2553. Jetzt 
geht es um PWM, aber über Port 2.

Der folgende Code war ein Sample, LED angesteuert über PWM mit Port 1.6 
mit TA0.1. Es läuft wie es laufen sollte.

Für meine Schaltung habe ich Port 2.0 mit TA1.0 gewählt. Über Port 2.0 
kommt kein Signal heraus.
1
#include  <msp430.h>
2
3
#define LED BIT6;
4
#define PWM_P20        BIT0       // OUT-Signal, PWM, Port 2.0
5
6
int main(void)
7
{
8
    WDTCTL = WDT_MDLY_32;       // Watchdog 32ms (1Mhz SMCLK)
9
    IE1 |= WDTIE;               // Watchdog-Interrupt ein
10
11
    P1DIR |= LED;               // LED als Ausgang
12
    P1SEL |= LED;               // LED via PWM (Timer A0, TA0.1)
13
    TA0CCR0 = 100;              // PWM-Periode 100 = 11,1 kHz
14
    TA0CCR1 = 1;                // PWM-Duty-Cycle (initial)
15
    TA0CCTL1 = OUTMOD_7;        // PWM-Output-Mode (siehe Datenblatt)
16
    TA0CTL = TASSEL_2 + MC_1;   // Timer A0: SMCLK (1MHz) CCR0 aufwaerts
17
18
    P2DIR |= PWM_P20;      // Ausgang für PWM
19
    P2SEL |= PWM_P20;           // TA1.0 gewählt
20
    TA1CCR0 = 100;              // PWM-Periode 100 = 11,1 kHz
21
    TA1CCR1 = 1;                // PWM-Duty-Cycle (initial)
22
    TA1CCTL1 = OUTMOD_7;        // PWM-Output-Mode (siehe Datenblatt)
23
    TA1CTL = TASSEL_2 + MC_1;   // Timer A: SMCLK (1MHz) CCR0 aufwaerts
24
25
26
    _BIS_SR(LPM0_bits + GIE);   // Low Power Mode 0 und Interrupte ein
27
    return 0;
28
}
29
30
//***************************************
31
// Interrupt-Routine WatchDog
32
//***************************************
33
#pragma vector=WDT_VECTOR
34
__interrupt void watchdog_timer(void)
35
{
36
    static int direction = 1;
37
    TA0CCR1 += direction*5;              // PWM-Duty-Cycle neu setzen
38
    TA1CCR1 += direction*5;              // PWM-Duty-Cycle neu setzen
39
    if( TA0CCR1 > 95 || TA0CCR1 < 5 )    // Richtung umschalten
40
       direction = -direction;
41
}

Nach dem Datenblatt des µC haben wir Timer_A3 mit TA0 und TA1. So wie 
ich das Seite 16 im Datenblatt entnehme sind beide Timer gleichwertig.
http://www.ti.com/lit/ds/symlink/msp430g2513.pdf

Eigentlich sollte es aus meiner Sicht auch über Port 2 funktionieren. 
Ich habe einen Thread gefunden, der mich darin etwas bestärkt hat.
Beitrag "msp430g2553 - drei PWM-Ausgänge?"

Nun ja, etwas fehlt noch.
mfg klaus

von Clemens L. (c_l)


Lesenswert?

Wenn du einen Timer für PWM konfigurierst, dann bestimmt CCR0 die 
Frequenz und CCRx (mit x > 0) den Tastgrad. Für CCRx ist das 
Ausgangssignal TAn.x, nur TAn.0 selbst hat keinen sinnvolles 
Ausgangssignal.

Wenn du TA1CCR1 benutzt, dann ist der entsprechende Ausgang TA1.1 (P2.1, 
P2.2, oder P3.2).

von Klaus R. (klara)


Lesenswert?

Hallo Clemens,
vielen Dank für die Klärung.

Der beiliegende Link erläutert in der Tat auch den Grund warum TAx.0 für 
einen PWM-Output nicht infrage kommt.
Beitrag "Re: msp430g2553 - drei PWM-Ausgänge?"

In slaa513 wird auch der Einsatz einer ISR besprochen. Ich werde mal 
versuchen so auf diesem Wege P2.0 doch noch nutzen zu können ohne Löten 
zu müssen.

Allerdings habe ich noch eine andere Baustelle. Ich habe ein Pin des 
P3-Ports als Input vorgesehen obwohl ich bei dieser Funktion einen 
Interrupt benötige. Hier muss ich wohl oder übel löten.

Somit werde ich letztlich eine neue Platine benötigen.
mfg klaus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.