mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F2410: XT1 32.768 kHz schwingt auf 191.192kHz


Autor: Mika (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe an meinem MSP430F2410 einen 32.768 kHz an XT1 und einen 8MHz an 
XT2 angeschlossen. Der 8 MHz schwingt perfekt.
Der Uhrenquarz allerdings auf 191..192kHz was ja nicht mal eine 
Oberwelle ist (n=6: 196,608 kHz). Egal ob ich die interen 
Ziehkapazitäten des MSP oder interne (12,5pf) verwende. Also Quarz kommt 
dieser zum Einsatz: 
http://de.rs-online.com/web/search/searchBrowseAct...
Initialisiert wird das ganze so:
  // enable Low-frequency oscillator LFXT1
  BCSCTL1                         =      XTS | DIVA_0 | XT2OFF;
  
  // enable High-frequency oscillator XT2
  BCSCTL1                         &= ~XT2OFF;
  
  //setup ACLK source and parameters, external crystal XT1 is 32.768 kHz (internal 12,5pF), XT2 is 8MHz 
  BCSCTL3                         =       LFXT1S_0 | XT2S_1 | XCAP_3;
  
  do
  {
    IFG1 &= ~OFIFG;                         // Clear OSCFault flag
    for (osc_time = 0xFF; osc_time > 0; osc_time--);             // Time for flag to set
  }
  while (IFG1 & OFIFG);                     // OSCFault flag still set?
  
  BCSCTL2 |= SELM_2 + DIVM_0;               // MCLK = XT2 HF XTAL (safe) + Divider for MCLK = 0
  BCSCTL2 |= SELS + DIVS_0;                 // SMCLK = XT2 HF XTAL (safe) + Divider for SMCLK = 0

Hat jemand eine Ahnung, wieso der Quarz auf 192kHz schwingt?!?

Danke für jeden Tipp!

Viele Grüße
Mika

P.S.:
Diese Frequenz ist auf beiden aufgebauten Boards und mit ausgetauschtem 
Quarz.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie misst du eigentlich die Frequenz?

Autor: Mika (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Mit dem Oszilloskop ...
Tektronix TDS 3014B
1:10 Tastkopf
1Meg Einggangswiderstand

So messe ich auch den 8MHz Quarz und der schwingt "schön".

Autor: siegmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

um einen Meßfehler auszuschließen, würde ich einfach die 32khz auf ein 
Port leiten und dort messen.
Stimmt dein Layout mit den Empfehlungen von Ti überein ?
Ansonsten mal einen Quarz nehmen, den Ti in einem Referenz Design 
empfiehlt.
Noch einen schönen Tag
Gruß
Siegmar

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>um einen Meßfehler auszuschließen, würde ich einfach die 32khz auf ein
>Port leiten und dort messen.
Ja, das wäre besser.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mika schrieb:
> BCSCTL1                         =      XTS | DIVA_0 | XT2OFF;

XTS steht für die Aktivierung des "High frequency modes" von LFXT1! Das 
ist aber ein Low Frequency Quarz!

Initialisiere das mal so:

// BCSCTL1: BASIC CLOCK SYSTEM CONTROL REGISTER 1
// XT2OFF:  XT2 Oscillator (Bit geloescht: XT2 ist an)
  BCSCTL1 &= ~XT2OFF;

// BCSCTL3: BASIC CLOCK SYSTEM CONTROL REGISTER 3
// XT2Sx:   XT2 Range Select (hier SELM_1: 3-16 MHz)
// XCAPx:   Oscillator Capacitor Selection (hier: ~12,5pF)
  BCSCTL3 = XT2S_2 + XCAP_3;

// BCSCTL2: BASIC CLOCK SYSTEM CONTROL REGISTER 2
// SELMx:   Select MCLK (hier SELM_2: XT2CLK)
// SELS:    Select SMCLK (Bit gesetzt: XT2CLK)
  BCSCTL2 = SELM_2 + SELS;


Gruß, Dennis

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann machste mal:

P5SEL |= 0x50;    // P5.4 MCLK, P5.6 ACLK
P5DIR |= 0x50;    // P5.4 und P5.6 als Ausgang

Dann kannste die Frequenzen messen.


Gruß, Dennis

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dennis schrieb:
> // XT2Sx:   XT2 Range Select (hier SELM_1: 3-16 MHz)

Sorry, Tippfehler! Auch wenn es nur Kommentar ist.

Muss natürlich heißen:

// XT2Sx:   XT2 Range Select (hier XT2S_2: 3-16 MHz)

Autor: Mika (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Danke für den Tipp!
Es lag wirklich an dem XTS!
Allerdings muss im BCSCTL1 dir range Select Bits auf 0 gesetzt werden.
Mit deinem Code steht im BCSCTL1 0x07 und mit dieser Einstellung kommt 
ich aus dieser Überwachungsroutine nicht raus
  do
  {
    IFG1 &= ~OFIFG;                         // Clear OSCFault flag
    for (osc_time = 0xFF; osc_time > 0; osc_time--);             // Time for flag to set
  }
  while (IFG1 & OFIFG);                     // OSCFault flag still set?

Egal, es geht jetzt! Dank dir!

Gruß
Mika

P.S.:
Das ich XT2S_1 statt XT2S_2 verwendet habe ist mir gar nicht aufgefallen 
... Hat aber auch so funktioniert. :P

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.