Forum: Mikrocontroller und Digitale Elektronik MSP430: Maximale Taktfrequenz mit internem Oszi


von Klaus (Gast)


Lesenswert?

Welche Taktfrequenz ist mit dem MSP430FG439 mit internem Oszillator 
maximal möglich?

Wie muss ich diese Register setzten?

SCFQCTL
SCFI0
SCFI1

von Christian R. (supachris)


Lesenswert?

Die FLL+ im FG439 ist recht umfangreich und hat mehrere Register. Nicht 
ganz trivial einzustellen, da solltest du dir mal die Demos von TI 
angucken, da müsste ein Code-Beispiel dabei sein. Der Prozessor kann 
maximal mit 8Mhz laufen, egal, was man am FLL+ einstellen kann. Für die 
8MHz muss aber die Betriebsspannung 3,6V betragen. Für die FLL+ benutzt 
man am besten einen Uhrenquarz als Referenz und stellt die Register dann 
auf ein Vielfaches der 32,768kHz ein.

von Klaus (Gast)


Lesenswert?

Hab folgendes Code-Beispiel gefunden:
1
//******************************************************************************
2
//  MSP-FET430P430 Demo - FLL+, Runs Internal DCO at 8MHz
3
//
4
//  Description: This program demostrates setting the internal DCO to run at
5
//  8MHz with auto-calibration by the FLL+.
6
//  ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = DCO = (121+1) x 2 x ACLK = 7995392Hz
7
//  //* An external watch crystal between XIN & XOUT is required for ACLK *//  
8
//
9
//                 MSP430FG439
10
//             -----------------
11
//         /|\|              XIN|-
12
//          | |                 | 32kHz
13
//          --|RST          XOUT|-
14
//            |                 |
15
//            |             P1.1|--> MCLK = 8Mhz
16
//            |                 |
17
//            |             P1.5|--> ACLK = 32kHz
18
//            |                 |
19
//
20
//  M. Buccini
21
//  Texas Instruments Inc.
22
//  Feb 2005
23
//  Built with IAR Embedded Workbench Version: 3.21A
24
//******************************************************************************
25
#include  <msp430xG43x.h>
26
27
void main(void)
28
{
29
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
30
  SCFI0 |= FN_4;                            // x2 DCO freq, 8MHz nominal DCO
31
  SCFQCTL = 121;                            // (121+1) x 32768 x 2 = 7.99 Mhz
32
  FLL_CTL0 |= DCOPLUS + XCAP18PF;           // DCO+ set so freq= xtal x D x N+1
33
  P1DIR = 0x22;                             // P1.1,5 to output direction
34
  P1SEL = 0x22;                             // P1.1,5 to output MCLK & ACLK
35
36
  while(1);                                 // Loop in place
37
}


Was ich nicht ganz Check... oben steht "Runs Internal DCO at 8MHz". 
Gleichzeitig wird aber bei XIN/XOUT ein 32kHz Quarz angehängt. Ist 
dieses Beispiel nun mit externem oder internem oszi?

danke
klaus

von Jörg S. (Gast)


Lesenswert?

> Ist dieses Beispiel nun mit externem oder internem oszi?
Ich würde mal sagen beides. In der Regel wird der externe 32kHz dazu 
benutzt den internen exakt einzustellen. Ich nehme mal an das das bei 
diesem Beispiel auch so ist (// (121+1) x 32768 x 2 = 7.99 Mhz)

von Christian R. (supachris)


Lesenswert?

Genau so ist es. Wobei die FLL+ noch bissl besser ist als der DCO. Durch 
die Regelschleife muss man das nicht nachstellen, der stellt sich 
automatisch immer auf das Vielfache des Quarzes ein. Und ist deshalb 
annähernd so genau wie der Quarz selber. Geht auch ganz ohne Quarz, dann 
aber mit recht viel Temp- und Vcc abhängigem Drift.

von µluxx .. (uluxx) Benutzerseite


Lesenswert?

das besipiel gitb doch alles her: MCLK läuft auf 8MHz DCO und ACLK wird 
von dem 32,768kHz Quarz versorgt!

von Klaus (Gast)


Lesenswert?

Hab den jetzt mal nach dem Beispiel eingestellt. Aber mein SPI clock ist 
immer noch so langsam. Ca. 5kHz und auch kein schöner Rechteck. Es 
werden so komische positive und negative Flanken ausgegeben.

Die Register für den SPI-Takt hab ich folgendermassen initialisiert:

 UBR00 = 0x02;                         // UCLK/2
 UBR10 = 0x00;


Müsste dann doch bei einem CPU-Clock von 4MHz ein 2MHz Takt ergeben. Und 
nicht 5kHz...

von Klaus (Gast)


Lesenswert?

Mit SSEL0 und SSEL1 werden ja die Source für den Vorteiler gewählt. Da 
kann man zwischen UCLKI, ACLK und SMCLK wählen. Was ist der Unterschied 
zwischen diesen drei?

von Jörg S. (Gast)


Lesenswert?

Der MSP430 hat grundlegend 3 Takt-"Stränge".
- ACLK
- MCLK
- SMCLK
ACLK und SMCLK sind eigentlich überall verfügbar. Daneben gibt es noch 
Peripherie bezogene Taktquellen wie eben der UCLKI.
Für den Anfang solltest du für dein SPI den SMCLK nehmen. Ist das 
einfachste.

von Christian R. (supachris)


Lesenswert?

Und erst mal an den entsprechenden Pins für MCLK und SMCLK schauen, ob 
da überhaupt die 8Mhz rauskommen.

von Klaus (Gast)


Lesenswert?

Also bei obigem Beispiel, mit internem Oszi, beträgt die MCLK Frequenz 
3MHz. Sie sollte aber 8MHz betragen. Jemand eine Idee wieso?

von Klaus (Gast)


Lesenswert?

Hat niemand eine Idee warum die Frequenz nur 3MHz beträgt?

von Jörg S. (joerg-s)


Lesenswert?

Dein ACLK ist wirklich 32768Hz? Wie ist dein SMCLK?

von Klaus (Gast)


Lesenswert?

Beim Beispiel steht:

MCLK = SMCLK = DCO


Den MCLK hab ich an Port P1.1 gemessen. Der ist 3MHz.
Der SPI-Takt sollte SMCLK/2 sein und der ist 1.5MHz.

von Christian R. (supachris)


Lesenswert?

Womit misst du das eigentlich? 3Mhz klingt sehr komisch. Ist denn der 
Uhrenquarz richtig angeschlossen und hat er auch wirklich 32,768kHz?

von Klaus (Gast)


Lesenswert?

>Womit misst du das eigentlich?
Mit einem KO, das stimmt schon.


>Ist denn der
>Uhrenquarz richtig angeschlossen und hat er auch wirklich 32,768kHz?

Wie gesagt, ich hab kein Uhrenquarz. Ich wollte ihn nur mit internem 
Oszi takten. Geht das überhaupt bei der Frequenz? Wie hoch kann ich ihn 
denn maximal intern takten?

von Christian R. (supachris)


Lesenswert?

Achso, ohne Uhrenquarz kannst du das obige Beispiel natürlich nicht 
verwenden. Da musst du dich wohl durch den User Guide wühlen, und 
schauen, wie man den DCO ohne den Quarz als Referenz einstellt. 
Prinzipiell geht der DCO bis 56Mhz oder sowas einzustellen, allerdings 
geht die CPU nur bis 8MHz. Ich hab auf die Schnelle jetzt aber keinen 
Beispielcode dafür gefunden. Ohne Quarz ist das aber eh wahnsinnig 
ungenau, schau mal bloß ins Datenblatt auf Seite 31, wie die Toleranzen 
angegeben sind.

von Jörg S. (Gast)


Lesenswert?

Ohne Uhrenquarz hilft nur Try and Error. Solange an den Register-Werten 
spielen bis es passt.

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.