www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Clockeinstellung Msp430


Autor: Philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, das C-Demo ist doch exakt das, was du brauchst, musst nur den DCO 
von 8MHz auf 16MHz ändern:
#include "msp430x21x2.h"

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop Watchdog Timer
  if (CALBC1_16MHZ ==0xFF || CALDCO_16MHZ == 0xFF)                                     
  {  
    while(1);                               // If calibration constants erased
                                            // do not load, trap CPU!!
  }   
  BCSCTL1 = CALBC1_16MHZ;                    // Set DCO to 16MHz
  DCOCTL = CALDCO_16MHZ;
  P2DIR |= 0x07;                            // P2.0,1,2 output direction
  P2SEL |= 0x03;                            // P2.0 = ACLK, P2.1 = SMCLK

  while (1)
  {
  }
}


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

Autor: Philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Fehler:
P2SEL=BIT0+BIT1;

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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke mal soweit

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.