mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LFXT1 32,768kHz am MSP430F54x -> 33,059kHz


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende folgenden Quelltext um meinen Uhrenquarz am XT1 zu 
betreiben:
Quelle: Codebeispiele von TI msp430x54x_UCS_4.c

  P1DIR |= BIT0;                            // P1.0 output
  P11DIR |= 0x07;                           // ACLK, MCLK, SMCLK set out to pins
  P11SEL |= 0x07;                           // P11.0,1,2 for debugging purposes.

  // Initialize LFXT1
  P7SEL |= 0x03;                            // Select XT1
  UCSCTL6 &= ~(XT1OFF);                     // XT1 On
  UCSCTL6 |= XCAP_3;                        // Internal load cap

  // Loop until XT1 fault flag is cleared
  do
  {
    UCSCTL7 &= ~XT1LFOFFG;                  // Clear XT1 fault flags
  }while (UCSCTL7&XT1LFOFFG);               // Test XT1 fault flag

  // Initialize DCO to 2.45MHz
  __bis_SR_register(SCG0);                  // Disable the FLL control loop
  UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx
  UCSCTL1 = DCORSEL_3;                      // Set RSELx for DCO = 4.9 MHz
  UCSCTL2 = FLLD_1 + 74;                    // Set DCO Multiplier for 2.45MHz
                                            // (N + 1) * FLLRef = Fdco
                                            // (74 + 1) * 32768 = 2.45MHz
                                            // Set FLL Div = fDCOCLK/2
  __bic_SR_register(SCG0);                  // Enable the FLL control loop

  // Worst-case settling time for the DCO when the DCO range bits have been
  // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
  // UG for optimization.
  // 32 x 32 x 2.45 MHz / 32,768 Hz = 76563 = MCLK cycles for DCO to settle
  __delay_cycles(76563);

  // Loop until XT1,XT2 & DCO fault flag is cleared
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag


Wenn das Programm gestartet wird, steht die Frequenz fest auf 32,768kHz.
Sobald ich ganz kurz mit dem Finger über die Quarzanschlüsse streife, 
oder mit dem Tastkopf berühre, ändert sich die Frequenz auf 33,06kHz und 
verbleibt dort, bis ich das Programm neu starte. Klar könnte man jetzt 
sagen: "Dann fass halt dort nicht hin..." aber ich bin der Meinung, dass 
die Frequenz eigentlich wieder auf ihren normalen Wert zurückgehen 
sollte.
Der verwendete Quarz ist dieser hier:
http://docs-europe.origin.electrocomponents.com/we...

Ich greife die Frequenz per Oszi+Frequenzzähler am ACLK ab.
Der Quarz ist ca. 3mm vom Controller entfernt, die Leiterbahnen sind 
vollständig von Flussmittelresten gereingt. Drumherum ist Massefläche.


Ich verwende keine Serienwiderstände bzw. keinen Parallelwiderstand zum 
Quarz. Die internen Kapazitäten sind mit 12pF aktiviert. Ich habe aber 
bereits alle Kombinationen mit 1MOhm bzw. 47k-Serienwiderständen und 
externen Kapazitäten (interne dann deaktiviert) getestet, was aber zum 
gleichen Ergebnis führt.

Der DCO läuft erstmal auf 2,45MHz, ändert sich im Fehlerfall aber auf 
2,479Mhz. d.h. der interne Abgleich per FLL funktioniert...

Einenn anderen Typ Quarz habe ich auch schon eingesetzt, mit exakt dem 
gleichem Ergebnis.
Wer kann mir einen Tipp geben, wonach ich noch schauen sollte?


Martin

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

Bewertung
0 lesenswert
nicht lesenswert
>Ich greife die Frequenz per Oszi+Frequenzzähler am ACLK ab.
Also der gepufferte Ausgang am MSP und nicht direkt am Quarz?

Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich würde
wenn der quarz ein Metallgehäuse hat ,das gehäuse mit AVss 
(Masse)verbinden

gibt es bei dem Chip sowas wie ein Fehlerflag (LFOF / XT1OF ..)?
ändern die sich beim berühren ?
richtigen Bereich (XTS_FLL) eingestellt ?

mfg Erik

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Also der gepufferte Ausgang am MSP und nicht direkt am Quarz?
Ja.

>wenn der quarz ein Metallgehäuse hat ,das gehäuse mit AVss (Masse)verbinden
Der Chip hat ein Metallgehäuse,welches auf einer potentialfreien 
Kupferfläche aufgelötet ist, so wie es der Footprint des Hersteller 
angibt.
Da ich schon an dem Quarz gezweifelt habe, habe ich auch schon ein 
einfaches SMD-Chip-Uhrenquarz eingesetzt und exakt das gleiche Verhalten 
bekommen. Ich gehe davon aus, das es sich nicht um ein Problem mit dem 
Quarz handelt, sondern eher die Einstellung des MSP betrifft.

> richtigen Bereich (XTS_FLL) eingestellt ?
Ja, außer TI hat fehlerhafte Codebeispiele..... Nachdem ich mit meiner 
Initialisierung die gleichen Probleme hattte habe ich das TI-Beispiel 
1:1 übernommen.

>gibt es bei dem Chip sowas wie ein Fehlerflag (LFOF / XT1OF ..)?
Ja gibt es. XT1 fault flag: "XT1LFOFFG".
Ich verstehe es so, dass laut Datenblatt das fault-flag sicher gesetzt 
wird, wenn die Frequenz unter 10Hz liegt. Sobald die Frequenz auf einen 
Wert unter  10000Hz absinkt, kann das Flag gesetzt werden.
Demnach wird eine Änderung von 32 auf 33kHz das fault flag eher nicht 
setzen.
http://focus.ti.com/lit/ds/symlink/msp430f5438.pdf  Seite 46


Martin

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Lösung des Problems steht hier auf Seite 97:
http://focus.ti.com/lit/ug/slau208g/slau208g.pdf
>When using XT1 operation in LF mode as the reference source into the FLL
>(SELREF = {0}), a crystalfault automatically causes the FLL reference
> source, FLLREFCLK, to be sourced by the REFO. XT1LFOFFG is set.


Es gibt einen internen Oszillator mit ca. 32,768 kHz, genauergesagt bei 
mir 33,059kHz.
Dieser wird aktiviert, wenn es zu einer Störung am Quarz kommt. 
Zeitgleich wird das fault-flag gesetzt. (Danke an Erik für den Tipp)

Ich überwache jetzt das fault flag und starte den Quarz einfach wieder 
neu, wenn es zu einem Ausfall kommt.

Martin

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.