MSP430G2553 PWM über Port 2

OP #4797511
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
#4797744
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).
OP #4798094
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

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