www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430-MCLK/SMCLK einstellung


Autor: E.I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Derzeit versuche ich einen MSP430F140 zu programmieren.
Die Schwierigkeiten liegen in den Takteinstellungen. Der externe Takt
LFXTCLK(7,372MHz) soll ACLK, SMCLK und MCLK generieren. Dies wollte
ich durch die beiden C-Code-Zeilen:

BCSCTL1|=XTS;

BCSCTL2|=SELM_3+SELS;

erreichen.

An den I/O Pin P2.0, P5.4, P5.5 und P5.6 sollte die LTXTCLK-Frequenz
anliegen. An P2.0 und P5.6 liegen die 7,372 MHz an, aber nicht an
den beiden anderen Pins(P5.4, P5.5)Wo lieg(t)(en) mein(e) Fehler?

Danke für die Hilfe

E.I.

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
laut datenblatt kannst du den clock LFXTCLK nicht als SMCLK nehmen.
da müsstest du entweder einen 2. quarz an xt2 anschließen, oder aber
den XIN mit XT2IN verbinden (weiß aber nicht ob das so funktioniert,
wegen kapazitiver Last am Quarz).

nach dem datenblatt kannst du für
ACLK nur den LFXTCLK nehmen, für
MCLK den LFXTCLK, XT2CLK oder OSCCLK und für
SMCLK den XT2CLK oder OSCCLK verwenden.
(siehe "MSP430x1xx User Guide" Seite 4-3)

Gruß
Rene

Autor: E.I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort Rene.
Auf der Seite 4-3 steht, dass SMCLK aus LFXTCLK, ....(SMCLK:
Sub-main clock. SMCLK is software selectable as LFXT1CLK, XT2CLK (if
available), or DCOCLK.) Wie auch immer, so genau kenne ich mich mit
diesem Gerät nicht aus.

Auf der Seite 4-15 (bei SELS) sind die Register etwas besser
beschrieben. Nach der Beschreibung sollte der SMCLK auch durch
LFXTCLK gespeist werden können, unter der Bedingung, dass XT2 ist
nicht vorhanden ist und das ist bei mir ja der Fall.

Ich weiß schon, was ich machen soll und ich denke, mit den beiden
Zeilen sollte das schon hinhauen, wenn ich nicht einen Fehler in der
Programmierung gemacht habe.

Gruß

ei

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Blöde Frage, aber hast du denn auch wirklich bei allen Pins die
Spezialfunktionen aktiviert (PxSEL)? Ausserdem dieser Satz:
"[...]unter der Bedingung, dass XT2 ist
nicht vorhanden ist und das ist bei mir ja der Fall."
WAS ist bei dir der Fall? Dass XT2 vorhanden ist oder nicht? Der 140er
müsste doch eigentlich einen XT2 haben, nicht? Ausserdem: Was liegt
denn an den anderen Pins für eine Frequenz an? DCO? Nix? Rauschen?

Autor: Lanius (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich wollte gerade auf slaa081.pdf verweisen, da ich die bei TI nicht
finden konnte habe ich sie mal angehängt.

Autor: ehde76 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei Verwendung von HF Oscillatoren, sollte lautet TI auch immer das
OFIFG Flag abgecheckt werden (User Guide, 4.2.6 Basic Clock Module
Fail-Safe Operation)...

z.B. so

__bic_SR_register(OSCOFF);     // This bit, when set, turns off 
                               // the LFXT1 crystal oscillator. 
do
{
  IFG1 &= ~OFIFG;              // Clear OFIFG
  for (i = 0xFF; i > 0; i--);  // Time for flag to set
} while (IFG1 & OFIFG);        // Test oscillator fault flag
// und dann die gewünschten Einstellungen, z.B.
BCSCTL2 = SELM_3;              // set XT1 as MCLK

gruß

Autor: E.I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autor: Philipp Burch (Philipp_Burch) Datum: 18.09.2006 17:55 Blöde
Frage, aber hast du denn auch wirklich bei allen Pins die
Spezialfunktionen aktiviert (PxSEL)?

Diesen Zustand stellte ich mit P2SEL=0x01; und P5SEL=0x70; ein.

Ausserdem dieser Satz: "[...]unter der Bedingung, dass XT2 ist nicht
vorhanden ist und das ist bei mir ja der Fall." WAS ist bei dir der
Fall? Dass XT2 vorhanden ist oder nicht? Der 140er müsste doch
eigentlich einen XT2 haben, nicht?

Gute Frage, ich bin davon ausgegangen, dass er nicht vorhanden ist,
aber Figure 4-1 sagt wohl was anderes aus. Also ist er doch
vorhanden (intern) für die 14xx Baureihe.

Ausserdem: Was liegt denn an den anderen Pins für eine Frequenz an?
DCO? Nix? Rauschen?

An den Pins P5.4 und P5.5 liegt eine Frequenz zwischen 700 und 800
kHz.

Danke für die schnelle Hilfe an alle.

MfG

EI

Autor: ehde76 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"An den Pins P5.4 und P5.5 liegt eine Frequenz zwischen 700 und 800
kHz."

das ist der DCO...

Autor: E.I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der Basis-Takt-Einstellung wollte ich eigentlich, das der MCLK
mit dem externen Takt vom Quarz läuft. Aber ich probiere da schon
eine Weile mit rum. Das Ergebnis ist immer das selbe, dass der Takt
nicht am MCLK-Ausgang anliegt. Das heißt auch, dass die CPU mit dem
DCO läuft. ICh kopiere mal den C Code.

Gruß

EI

#include "msp430x14x.h"

void wait(unsigned int i);
double j, i=0;

int main( void )
{
  WDTCTL=WDTPW+WDTHOLD;
  wait(10);
  __bic_SR_register(OSCOFF);

  BCSCTL1|=XTS+XT2OFF;
  BCSCTL2=SELM_3;

  P2SEL=0x01;
  P5SEL=0x70;

  P1DIR=0x01;
  P1OUT=0x01;

}
void wait(unsigned int i) //warte funktion
{
  double j;
  unsigned int k;
  for(k=0;k<10;k++)
  {
    for(j=0;j<i;j++);
  }
}

Autor: Branko Golubovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BCSCTL2 |= SELM1 + SELM0 ;           // MCLK = LFXT1

Autor: E.I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So funktioniert es bei mir!

#include "msp430x14x.h"

void wait(unsigned int i);

double j, i=0;

int main( void )
{
  WDTCTL=WDTPW+WDTHOLD;
  //wait(10);
  BCSCTL1|=XTS+XT2OFF+DIVA_3;
  __bic_SR_register(OSCOFF);      //löscht das bit(0) OSCOFF im
statusregister> LFXT1 is on
  do
  {
    IFG1 &=~OFIFG;                //löscht OFIFG
    for (i=0xFF;i>0;i--);
  }
  while (IFG1&OFIFG);             //abbruchbedinung

  BCSCTL2=SELM_3+DIVM_3;          //SELM_3 soll den LFXTCLK soll den
MCLK generieren
                                  //&master-takt wird durch 8 geteielt

  P2SEL=0x01;
  P5SEL=0x70;                     //schaltet pin5.4-5-6 (01110000) die
sonderfunktion ein MCLK, SMCLK, ACLK

  P1DIR=0x01;
  P2DIR=0x01;
  P1OUT=0x01;

}
void wait(unsigned int i)         //warte funktion
{
  double j;
  unsigned int k;
  for(k=0;k<10;k++)               //warte-funktion wird k mal
aufgerufen
  {
    for(j=0;j<i;j++);
  }
}

Autor: E.I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber wie Schalte ich jetzt den SMCLK auch auf XT1 um? im Datenblatt
steht unter der BCSCTL2 Beschreibung, dass SELS dafür benutzt werden
kann. Da ich bis her nur DCO gemessen habe, gehe ich davon
aus, dass XT2 nicht vorhanden ist. Im Kapitel 4.3 des Handbuchs
steht es so beschrieben. Kann jemand weiterhelfen?

Autor: Eltman (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mit einen Quarz am XT1 kannst du nicht den SMCLR takten.
Im Handbuch steht "LFXT1CLK when XT2 oscillator not present on-chip"
heißt so viel wie, das der XT2 PIN nicht vorhanden ist.

Siehe
"
Note: XT2 Oscillator
The XT2 Oscillator is not present on MSP430x11xx or MSP430x12xx
devices. The LFXT1CLK is used in place of XT2CLK.
"

Autor: Branko Golubovic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zuerst ein MSP430F140 gibst nicht.
Ich nehme an dass du ein MSP430F147, 148, oder 149 hast.
Und  ins Datenblatt schon auf die Seite 2 steht die Pinbelegung.

Pin 52   ->XT2OUT
Pin 53->XT2IN

Das sind die Anschlüssen für den Quarz XT2. Diese zwei Anschlüssen sind
auf jeden Fall vorhanden. Jetzt verstehe nicht was du meinst mit dem
„dass XT2 nicht vorhanden ist“. Es ist doch ein Bauteil und wenn
bestückt ist, ist doch zu sehen, oder?
Seite 6 aus SLAA 081 ist genug Aussagekräftig.
Für die Auswahl  als MCLK Quelle stehen  2 Bits zu Verfügung:
 SELM_1 und SELM_0
      0  +    0      =0 -> MCLK=LFXL1CLK
      0  +    1      =1 -> MCLK=DCOCLK
      1  +    0      =2 -> MCLK=DCOCLK
      1  +    1      =3 -> MCLK=XT2CLK

Für die Auswahl als SCLK Quelle steht nur 1 Bit zu Verfügung:
SELS
0  -> SCLK=DCOCLK
1  -> SCLK=XT2CLK

Kannst du dir vorstellen dass du mit dem  SELS Bit  ein Schalter
betätigst?
Wenn SELS= 0, dann ist DCOCLK mit dem SMCLK verbunden.
Wenn SELS =1, dann ist XT2CLK mit dem SMCLK verbunden.
Genauso gilt für SELM_1 und SELM_2 Bits, nur haben wir dann 4
Schaltstellungen.
Seite 6 GENAU beobachten.

>Aber wie Schalte ich jetzt den SMCLK auch auf XT1 um?<
Du kannst nicht XT1 als SMCLK Quelle auswählen, weil nur DCOCLK und
XT2CLK möglich ist.


Grüß Branko

Autor: E.I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für diese ausführliche Antwort und mir ist damit alles
verständlich geworden. Es handelt sich bei diesem µC um einen
MSP430F149, da ist mir leider ein Schreibfehler widerfahren. Mein
Problem war, dass ich dachte, dass XT2 is not present bedeutet, dass
der Quarz nicht angeschlossen ist, aber gemeint ist, dass der
Anschluss generell bei machen MSP430XXXX nicht vorhanden ist.
(XT1CLK kann somit nicht Quelle für SMCLK sein)

Nochmals besten Dank


E.I.

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.