Forum: Mikrocontroller und Digitale Elektronik Problem mit Timer B bei MSP430F2619


von Kese (Gast)


Lesenswert?

Hallo,

ich hänge leider an einem Problem und komme nicht so recht weiter:
Wir wollen an einem MSP4302619 ein konstantes Rechtecksignal mit 1 MHz 
ausgeben. Für Timer A und Port 1.1 klappt das auch mit folgendem Code:
#include  <msp430x26x.h>

void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;                 // Stop Watchdog Timer
    if (CALBC1_8MHZ ==0xFF || CALDCO_8MHZ == 0xFF)
    {
      while(1);                               // If calibration 
constants erased
                                              // do not load, trap CPU!!
    }
    BCSCTL1 = CALBC1_8MHZ;                    // Set DCO to 8MHz
    DCOCTL = CALDCO_8MHZ;

    P1DIR |= 0x02;                            // P1.1 output
    P1SEL |= 0x02;                            // P1.1 option select
    CCTL0 = OUTMOD_4;                         // CCR0 toggle mode
    CCR0 = 4-1;                // countclock = 8MHz/2counts => 1count = 
up ---- 1 count = low
    TACTL = TASSEL_2 + MC_1;                  // ACLK, upmode

    _BIS_SR(LPM0_bits);                       // Enter LPM3 w/interrupt
}



Da wir den Timer A aber später für etwas anderes verwenden wollen, soll 
die Ausgabe am Timer B umgesetzt werden. Dazu haben wir Port 4.4 
ausgewählt und den Code folgendermaßen umgewandelt. Leider tut sich dann 
überhaupt nix- hat vielleicht jemand eine Idee, woran das liegen könnte?

void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;                 // Stop Watchdog Timer
    if (CALBC1_8MHZ ==0xFF || CALDCO_8MHZ == 0xFF)
    {
      while(1);                               // If calibration 
constants erased
                                              // do not load, trap CPU!!
    }
    BCSCTL1 = CALBC1_8MHZ;                    // Set DCO to 8MHz
    DCOCTL = CALDCO_8MHZ;

    P4DIR |= 0x01;                            // P1.4 output
    P4SEL |= 0x01;                            // P1.4 option select
    TB0CCTL0 = OUTMOD_4;                         // CCR0 toggle mode
    TBCCR0=TBCCR0 = 4-1;                // countclock = 8MHz/2counts => 
1count = up ---- 1 count = low
    TBCTL = TBSSEL_1 + MC_1;                  // ACLK, upmode

    _BIS_SR(LPM0_bits);                       // Enter LPM3 w/interrupt
}

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Kese schrieb:
> P4DIR |= 0x01;                            // P1.4 output
> P4SEL |= 0x01;                            // P1.4 option select

Das ist Port 4.1 und nicht Port 4.4.

von Kese (Gast)


Lesenswert?

Oh, tut mir Leid, das war nur ein Flüchtigkeitsfehler.
Mit P4DIR |= 0x10 und P4SEL |= 0x10 erhalte ich aber leider auch kein 
Signal am entsprechenden Pin.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Noch ein Flüchtigkeitsfehler:

P1.1 ist Timer_A3.TA0

P4.4 ist Timer_B7.TB4

Du setzt TB0CCTL0 und TBCCR0 statt TBCCTL4 und TBCCR4.

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.