Forum: Mikrocontroller und Digitale Elektronik MSP430 TA0CCTL1 nicht überschreibbar!?


von ma r. (gintonic)


Lesenswert?

Hallo zusammen.

Ich bin total verwirrt: ich kann nicht in TA0CCTL1 schreiben! Vom Start 
des MSP430G2553 an ist TA0CCTL1 = 0x0400 = TA0CCTL0, alle anderen 
Register der Timer sind 0x00. Ich kann in TA0CCTL1 zwar schreiben, z.B. 
0xE1, dann steht allerdings 0x04E1 drin. Die Register TA0CCTL2 und die 
des anderen Timers sind überschreibbar. Folgendes resultiert in einer 
Endlosschleife:
1
 while(TA0CCTL1 != 0xE1){
2
TA0CCTL1 = 0xE1;
3
}

0x0400 ist übrigens das "SCCI" Bit!

Freue mich sehr über Hilfe!

: Bearbeitet durch User
von Roland E. (roland0815)


Lesenswert?

Bist du sicher, dass du nicht TA0CCR0 und TA0CCR1 beschreiben willst?

;-)

: Bearbeitet durch User
von ma r. (gintonic)


Lesenswert?

Yep, bin ich mir sicher ;). Es soll quasi OUTMOD_7 geschrieben werden, 
damit ich eine PWM habe. Die 3 anderen Channel TA0.2, TA1.2, TA1.2 
funktionieren ohne Probleme, nur bei TA0.1 lässt sich das SCCI Bit nicht 
löschen komischerweise...

von Roland E. (roland0815)


Lesenswert?

Die Control-Register sicherheitshalber nur bei gestopptem Timer setzen.

Ansonsten fällt mir nur noch ein, dass der spezielle Kern die Funktion 
auf diesem Kanal evtl nicht anbietet. Mal im Datenblatt nachsehen...

von Roland E. (roland0815)


Lesenswert?

SCCI in TACCTLx ist übrigens ein Ereignisbit, welches man ausliest ;-)

von Datasheet (Gast)


Lesenswert?

Roland Ertelt schrieb:
> Mal im Datenblatt nachsehen...

oder noch besser im family user guide. Nicht jedes Bit in jedem Register 
kann man beschreiben. Da gibt es auch read only und unused. ;-P

von Roland E. (roland0815)


Lesenswert?

Ja, ich habe das eben auch gerade dort nachgeschlagen :-D

von ma r. (gintonic)


Lesenswert?

Tatsächlich! Danke das hatte ich übersehen, es ist ein nicht 
beschreibbares Bit.
Ok, hätten wir geklärt warum ich da nicht rein schreiben kann. Das ist 
allerdings nicht mein Hauptproblem momentan. Ich bin nur auf dieses Bit 
gekommen, weil der eine PWM Channel TA0CCTL1 nicht funktioniert hat 
(TA0.1). Meint ihr das könnte an dem Bit liegen? Alle anderen 3 Channel 
sind gleich initialisiert und funktionieren

: Bearbeitet durch User
von Roland E. (roland0815)


Lesenswert?

Nein, es liegt nicht an diesem Bit.

von ma r. (gintonic)


Lesenswert?

Vielleicht zeig ich euch einfach mal meinen Codeausschnitt:
1
    //define Pins:
2
    P2SEL2 &= ~(BIT6 + BIT7);
3
    P2DIR |= BIT6;                      // TA0.1 (motor north)
4
    P2SEL |= BIT6;
5
6
    P3DIR |= BIT0 + BIT2 + BIT3;        // TA0.2 + TA1.2 (motor east + motor west)
7
    P3SEL |= BIT0 + BIT2 + BIT3;
8
9
    //Setting up the PWMs:
10
    TA0CCR0 = pwmTimerLimit;           //setting PWM frequency (TA0CCR0 contains the upper TA0 limit)
11
    TA0CCR1 = throttleDown;            //setting the duty-cycle to 52% initially
12
    TA0CCR2 = throttleDown;
13
14
    TA1CCR0 = pwmTimerLimit;
15
    TA1CCR1 = throttleDown;
16
    TA1CCR2 = throttleDown;
17
18
    TA0CCTL1 = OUTMOD_7;            //activate PWM set/reset
19
    TA0CCTL2 = OUTMOD_7;
20
    TA1CCTL1 = OUTMOD_7;
21
    TA1CCTL2 = OUTMOD_7;
22
23
    TA0CTL = TASSEL_2 | ID_3 | MC_1 | TACLR;  //source: SMCLK, divider:8, count to CCR0, clear Timer
24
    TA1CTL = TASSEL_2 | ID_3 | MC_1 | TACLR;

Alle Werte stehen danach korrekt in den Registern, außer TA0CCTL1, da 
steht wie gesagt 0x4E1 statt 0x0E1. TA0.1 gibt aber im Gegensatz zu 
TA0.2, TA1.1 und TA1.2 kein PWM aus, aus irgend einem Grund.

//edit: an P3.5 funktioniert der PWM Ausgang!!

: Bearbeitet durch User
von Roland E. (roland0815)


Lesenswert?

P2SEL |= BIT6;


An welchem Pin ist Port 2.6?

von Datasheet (Gast)


Lesenswert?

Roland Ertelt schrieb:
> An welchem Pin ist Port 2.6?

Hängt vom Gehäuse/Footprint ab:
http://www.ti.com/lit/ds/symlink/msp430g2553.pdf   S. 7

von Roland E. (roland0815)


Lesenswert?

Ich habe ihn gesehen. Er versteckt sich am XTal1.

Die Frage war eher an den OP gerichtet, dass er mal drüber nachgrübelt 
ob die 'Primäre Funktion' wirklich die PWM ist. Und nicht evtl die 
Quarz-Funktion.

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.