Forum: Mikrocontroller und Digitale Elektronik Clockeinstellung Msp430


von Philip (Gast)


Lesenswert?

Hallo erstmal, habe folgendes Problem,
will eigentlich nur die verschiedenen Clocks ausgeben (SMCLK und ACLK)
klappt aber absolut nicht.
Auf dem Oszi bekomm ich nur Frequenzen, die überhaupt nicht passen.
ich poste mal den Code, wär cool wenn mal einer drüberschauen könnte.

#include <msp430x21x2.h>

void main (void)
{
WDTCTL = WDTPW+WDTHOLD;      //stop WD
DCOCTL = CALDCO_16MHZ;      //DCO to 16 MHz
BCSCTL1 =XT2OFF+DIVA_0;      //set LFXT1 --> low frequency mode, DIVA=1
BCSCTL2= SELM_1+DIVM_0+DIVS_0;  //MCLK = DCOCLK, DMCLK = DCOCLK
BCSCTL3=LFXT1S_0;        //32kHz Crystal
P2SEL=BIT0+BIT1;        //P2.0 6 2.1 primary peripheral module function
P2DIR= 0xBF;          //P2.6 as Input;

while (1)
{
}
}



Greetings
P

von Christian R. (supachris)


Lesenswert?

Welcher Takt soll denn überhaupt aus welcher Quelle gespeist werden? 
Hast du einen Quarz angeschlossen? Oder soll alles aus dem DCO kommen? 
Um welchen MSP430 handelt es sich genau? Hast du mal eines der 
Code-Beispiele von TI probiert? Da gibts doch immer eins, was die Takte 
ausgibt...

von Philip (Gast)


Lesenswert?

Die CPU soll mit 16MHz laufen, ansonsten TimerA3 mit 32KHz über einen 
Quarz.
Ich benutze den Msp430f2132
Die Codebeispiele hab ich mir schon angeschaut, werd aber nicht schlau 
draus.
Versuche deshalb jetzt erstmal die Takte an den dafür vorgesehenen Pins 
auszugeben und darzustellen.
mfg
P

von Christian R. (supachris)


Lesenswert?

Hm, das C-Demo ist doch exakt das, was du brauchst, musst nur den DCO 
von 8MHz auf 16MHz ändern:
1
#include "msp430x21x2.h"
2
3
void main(void)
4
{
5
  WDTCTL = WDTPW + WDTHOLD;                 // Stop Watchdog Timer
6
  if (CALBC1_16MHZ ==0xFF || CALDCO_16MHZ == 0xFF)                                     
7
  {  
8
    while(1);                               // If calibration constants erased
9
                                            // do not load, trap CPU!!
10
  }   
11
  BCSCTL1 = CALBC1_16MHZ;                    // Set DCO to 16MHz
12
  DCOCTL = CALDCO_16MHZ;
13
  P2DIR |= 0x07;                            // P2.0,1,2 output direction
14
  P2SEL |= 0x03;                            // P2.0 = ACLK, P2.1 = SMCLK
15
16
  while (1)
17
  {
18
  }
19
}

Was gibts daran nicht zu verstehen? Da ist doch jede Zeile kommentiert. 
Grundsätzlich sollte man immer erst mal in den C-Demos schauen, was da 
drin steht, das ist so super kommentiert und funktioniert auf jeden 
Fall. Wenn man das schon nicht versteht, kommt man sonst auch nicht 
weiter.
Zu finden sind die Demo-Programme hier: 
http://focus.ti.com/lit/sw/slac163b/slac163b.zip

von Philip (Gast)


Lesenswert?

Danke auch, wenn ich einen dementsprechenden Kommentar gewollt hätte, 
hätte ichs gleich gesagt!
Nur zur Info, exakt dieses Beispiel habe ich ausprobiert und bekomme 
aber am P2.0 leider keine 32KHz.

von Stefan (Gast)


Lesenswert?

Dein Fehler:
1
P2SEL=BIT0+BIT1;

Die Aufgabe:
Nachgucken, wo Dein 32kHz Quarz hängt und überlegen, warum er so 
(s.oben) nicht funktionieren kann!

von Christian R. (supachris)


Lesenswert?

Wenn du den Code exakt so hattest, dann ist dein Quarz nicht richtig 
angeschlossen oder kaputt oder mit dem oszi stimmt was nicht.

Nach dem Reset des MSP430 läuft der SMCLK schon vom DCO mit etwa 1,1MHz, 
der ACLK kommt automatisch vom X1 im LF-Modus mit 6pF Last. Das ist 
ideal für Uhrenquarze. Es muss also kein Register gesetzt werden. Willst 
du DCO auf 16MHz haben, dann musst die wie im Code die Kalibrier-Werte 
laden. Mehr nicht. Ist tausendfach erprobt.

Aus dem User Guide:

After a PUC, MCLK and SMCLK are sourced from DCOCLK at ~1.1 MHz (see
the device-specific data sheet for parameters) and ACLK is sourced from
LFXT1CLK in LF mode with an internal load capacitance of 6pF.

von Philip (Gast)


Lesenswert?

Danke mal soweit

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.