Forum: Mikrocontroller und Digitale Elektronik MSP430 Clock Module und TimerB


von Seb (Gast)


Lesenswert?

Hallo Zusammen,

Ich habe da gerade ein Problem, bei dem ich nicht weiterkomme:

Mein µC (MSP430F2617) wird mit einem externen Oszillator (8Mhz) am XIN 
betrieben. Das Clockmodul initialisiere ich folgendermaßen:
1
// wait till oscillator runs    
2
     BCSCTL1 |= XTS;
3
     BCSCTL3 |= LFXT1S1;
4
     _BIS_SR(OSCOFF);
5
     do{
6
       IFG1 &= ~OFIFG;
7
       for(counter = 0xff; counter > 0; counter --);
8
     }
9
     while((IFG1 & OFIFG) != 0);
10
     
11
  // Clock Source einstellen 
12
       BCSCTL1 |= XTS + XT2OFF;                                                // externen Oszillator nutzen (8MHz)  
13
       BCSCTL2 |= SELM0 + SELM1 + DIVM0 + DIVS0 + DIVS1 + SELS;                // MCLK (4MHz) + SMCLK (1 MHz)

Nun will ich meinen TimerB aus der SMCLK "versorgen" und testweise 
hochzählen lassen:
1
TBCTL |= TBSSEL1 + ID0 + ID1;           // clock source SMCLK (1MHz) 
2
                                        // divide SMCLK by 8 (125 kHz)
3
4
TBCTL |= MC1;                           // start with continous mode


Wenn ich mir im Debug das TBR Zählregister ansehe, tut sich jedoch nix. 
Sobald ich auf ACLK als Quelle umschalte oder den DCO anstatt des 
externen Oszillators an den SMCLK usw. hänge, wird im TBR hochgezählt. 
Nun hatte ich die Vermutung, dass der externe Oszillator nicht 
anschwingt. Aus diesem Grund habe ich das entsprechende Flag abgefragt 
(s.o.), aber es trat keine Besserung ein.
Auf dem Oszi kann ich den Ausgang des Oszillators sehen (8Mhz). Ist 
einer von Reichelt: XO91 mit 8MHz.

Entweder stehe ich aufm Schlauch oder irgendwo wurde ein Hund begraben. 
Danke schonmal für eure Hilfe.

Grüße
Seb

von Seb (Gast)


Lesenswert?

Korrektur: XO53 mit 8MHz.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du verwendest einen externen Oszillator, daher ist der Code zum Warten 
auf das Einschwingen des Oszillators unnötig. Den brauchst Du nur, wenn 
Du den Oszillator im MSP430 selbst nutzt und einen externen Quarz 
angeschlossen hast.

Woraus speist Du ACLK und MCLK?

von Seb (Gast)


Lesenswert?

Hi Rufus,

Das mit dem Abwarten habe ich auch erst reingenommen, als mir nichts 
anderes mehr eingefallen ist ;)

Deine Fragen sollten sich aus den obrigen Registereinstellungen 
beantworten lassen:

MCLK wird aus dem LFXT1CLK mit einem Teiler 2 gespeist.

Der ACLK sollte seinen Takt auch von dort bekommen, wenn XTS gesetzt 
ist. Vollkommen sicher bin ich mir aber gerade nicht.

von Stefan (Gast)


Lesenswert?

1
_BIS_SR(OSCOFF);

Du meinst wohl eher:
1
_BIC_SR(OSCOFF);

Ausserdem bei 'nem ext. Oszillator LFXT1S3

von Seb (Gast)


Lesenswert?

Leider hat sich bisher keine Besserung eingestellt. Der TimerB will mit 
dem SMCLK nicht hochzählen. So langsam bin ich mir nicht sicher, ob ich 
den Oszillator am XIN anschließen kann.

von Jörg S. (joerg-s)


Lesenswert?

Rufus t. Firefly schrieb:
> Du verwendest einen externen Oszillator, daher ist der Code zum Warten
> auf das Einschwingen des Oszillators unnötig.
Öhhh, kann es sein das diese Aussage nicht so ganz korrekt ist, oder 
übersehe ich was? Wenn der interte DCO benutzt wird muss normalerweise 
NICHT gewartet werden, bei externen Quarzen etc. MUSS gewartet werden.

von Seb (Gast)


Lesenswert?

Jau, dieses Thema gab es auch schon in anderen Threads. Ich nutze ja 
einen externen Oszillator und keinen Quarz. Deswegen muss ich ja 
eigentlich nicht warten bis der interne Oszi eingeschwungen ist. Es gibt 
jedoch Leute, die eine andere Meinung vertreten.

Mein externer Oszi zappelt ja fröhlich im Rechteck. Ich würde gerne 
wissen, warum mein MSP so rumzickt und keinen SMCLK draus erzeugen kann. 
Sonst würde mein Timer ja hochlaufen. Habe ich in den Registern 
irgendetwas übersehen?

von Jörg S. (joerg-s)


Lesenswert?

Ahh, ein QuarzOSZILLATOR, jetzt is klar :) Auf den muss man natürlich 
nicht warten...

von Seb (Gast)


Lesenswert?

Habe die obige Initialisierung nun auf einem anderen MSP mit Oszilllator 
am XIN getestet und da wird der TBR auch nicht hochgezählt. Es ist also 
wahrscheinlich, dass irgendeine Registereinstellung nicht stimmt.

Gibt es denn da draußen jemanden, der schon einmal einen Oszillator am 
XIN betrieben hat?

von Stefan (Gast)


Lesenswert?

>Es ist also wahrscheinlich, dass irgendeine Registereinstellung
>nicht stimmt.
Meinen Tip von 12:28Uhr schonmal beherzigt?

von Stefan (Gast)


Lesenswert?

Zweiter Tip:

SELS = LFXT1CLK, if XT2 not present !!!

von Seb (Gast)


Lesenswert?

Ok, diesen Satz habe ich heute schon ein paar Mal durchgelesen, aber 
erst jetzt wird mir die Tragweite bewusst. Ich kann den SMCLK gar nicht 
aus dem XIN Eingang speisen, wenn mein MSP einen XT2 auf dem Chip hat. 
Es besteht keine Hardwareverbindung zwischen den Anschlüssen.

Dann werde ich mich wohl oder übel an den Lötkolben setzen und die Sache 
ändern. Danke für den Augenöffner.

von Seb (Gast)


Lesenswert?

Quick'n'dirty umgelötet/programmiert auf XT2IN und siehe da...

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.