Forum: Mikrocontroller und Digitale Elektronik MSP430 8MHz für MSP Board!?


von Sven (Gast)


Lesenswert?

Hallo,

ich habe ein MSP Headerboard mit einem msp430f149. Das Board ist von 
Olimex.

Da ist ein 32kHz Quarz dran. Ich würde nun gerne einen Quarz mit 8MHz an 
dem MSP anbringen. Da wollte ich nun einmal wissen, was für einen Quarz 
ich da nehmen muss und wo ich den dann dranlöten muss, also an welche 
Pins?

Ich steige bei den Quarzen und Taktquellen noch nicht so ganz durch.

Ich hoffe, dass man versteht, was ich vor habe.

gruß Sven

von Uhu U. (uhu)


Lesenswert?

Du kannst auch den 32k-Quarz nehmen und damit den internen Taktgenerator 
korrigieren - dazu gibt es eine App-Note, die auch den Code dafür 
enthält.

von Christian R. (supachris)


Lesenswert?

Die Taktquellen des MSP zu verstehen ist essenziell, das ist ja gerade 
das Alleinstellungsmerkmal des MSP. Wenn du den 32Khz Quarz dran lässt, 
kannst du sehr stromsparende Systeme bauen. Den 8MHz Quarz kannst du 
noch zusätzlich an X2IN und X2OUT anschließen. Wie man den startet, 
steht in den C-Demos von TI öfters mal. Oder den X1 gegen den 8MHz 
tauschen, aber dann geht die Stromspar-Sache flöten.

Der 149 hat keinen FLL+, also wird der DCO nur beim Einstellen so gut es 
geht an das Vielfache des Quarztaktes angenähert, und driftet dann 
leider weg.

Hab ich an einem 1611 in der Klimakammer schön beobachten können.

von Christian R. (supachris)


Lesenswert?

Achso, bei einem Systemtakt von 8MHz muss die Betriebsspannung 3,6V 
sein, sonst gehts nicht zuverlässig.

von Sven (Gast)


Lesenswert?

also wenn ich die baudrate recht genau einstellen will, also was über 
9600 geht benötige ich den 8mhz quarz, weil ich das ganze sonst nicht 
hin bekomme, da der takt sonst wegdriftet. das scheint auch das 
einfachste zu sein, da gibt es ja genügend beispielcode von ti zur 
einstellung der baudraten mit einem 8mhz quarz an X2IN/OUT.

Kann ich da jeden x beliebigen quarz nehmen oder muss ich da auf was 
besonderes achten?

von Christian R. (supachris)


Lesenswert?

Na für UART Anwendungen reicht der DCO dicke zu. Den musst du halt 
einmal einstellen und wenn sich die Temperatur nicht drastisch ändert, 
klappt das mit der UART.

Hier mal eine Funktion, um den DCO einzustellen:

DELTA ist der Faktor, im Beispiel ergibt das 4,096MHz
1
//------------------------------------------------------------------------------
2
void Set_DCO (void)                         // Set DCO to selected frequency
3
//------------------------------------------------------------------------------
4
{
5
6
#define DELTA 125              // target DCO = DELTA*(32768) = 4096000
7
  unsigned int Compare, Oldcapture = 0;
8
  
9
  CCTL2 = CM_1 + CCIS_1 + CAP;              // CAP, ACLK
10
  TACTL = TASSEL_2 + MC_2 + TACLR;          // SMCLK, cont-mode, clear
11
12
  while (1)
13
  {
14
    while (!(CCIFG & CCTL2));               // Wait until capture occured
15
    CCTL2 &= ~CCIFG;                        // Capture occured, clear flag
16
    Compare = CCR2;                         // Get current captured SMCLK
17
    Compare = Compare - Oldcapture;         // SMCLK difference
18
    Oldcapture = CCR2;                      // Save current captured SMCLK
19
20
    if (DELTA == Compare) break;            // If equal, leave "while(1)"
21
    else if (DELTA < Compare)               // DCO is too fast, slow it down
22
    {
23
      DCOCTL--;
24
      if (DCOCTL == 0xFF)
25
      {
26
        if (!(BCSCTL1 == (XT2OFF)))
27
        BCSCTL1--;                          // Did DCO roll under?, Sel lower RSEL
28
      }
29
    }
30
    else
31
    {
32
      DCOCTL++;
33
      if (DCOCTL == 0x00)
34
        {
35
          if (!(BCSCTL1 == (XT2OFF + 0x07)))
36
          BCSCTL1++;                        // Did DCO roll over? Sel higher RSEL
37
        }
38
    }
39
  }
40
  CCTL2 = 0;                                // Stop CCR2
41
  TACTL = 0;                                // Stop Timer_A
42
}

von Jörg S. (Gast)


Lesenswert?

Für 4MHz hab ich erfolgreich den Murata Resonator CSTCC 4,00 von 
Reichelt eingesetzt. Von dem gibt's auch ne 8MHZ Version.

Für die bessere Stabilität vom internen DCO am besten einen externen 
Oazillator Widerstand (ROSC Pin) einsetzen!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die von Christian gepostete Funktion kann man auch in den Timerinterrupt 
hängen, dann wird die Drift des DCO permanent ausgeglichen. Ein Beispiel 
dafür ist in einigen Beispielen von TI zu finden.

Hier Beitrag "Re: MSP430 UART Baudrate einstellen" habe ich mich 
schon mal darüber ausgelassen. Sofern es nur um UART-Gebrauch geht, 
dürfte die leichte Timingungenauigkeit durch das Nachjustieren des DCO 
nicht stören.

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.