Forum: Mikrocontroller und Digitale Elektronik MSP430 Uhrenquartz: Wie muss Code aussehen?!


von Behrengauner (Gast)


Lesenswert?

Hallo,

möchte an einem MSP430G2231 (Standardmodell aus dem Launchpad) einen 
Uhrenquartz betreiben, nämlich den der schon in der Verpackung beiliegt 
(32,768 kHz).
Zweck: Mit Quarz ACLK generieren und damit Takt für Timer A 
bereitstellen.

Nun habe ich im Internet verschiedenes gelesen, um den Quarz 
softwaremäßig zu initialisieren. Mal steht da was von BCSCTL und LFXT1S, 
dann was ganz anderes von IFG1 und so. Mal stellt man noch die Kapazität 
ein, mal nicht.In den Codebeispielen stand auch was aber das leuchtet 
mir auch nicht ein. In dem Buch von John Davies das ich gerne verwende, 
ist das Thema leider kaum behandelt.

Irgendwelche Bits zu setzen in C, mach ich mit ner Kippe im Mund, ich 
müsste aber einfach mal wissen welche Bits in Sachen Quarze was machen.

Wer weiß Rat?

von Jörg S. (joerg-s)


Lesenswert?

>Mal steht da was von BCSCTL und LFXT1S, dann was ganz anderes von IFG1
>und so.
Für den LFXT1 sind erst mal nur die Bits für LFXT1 zuständig (LFXT1Sx, 
XCAPx).

>Mal stellt man noch die Kapazität ein, mal nicht.
Man könnte ohne diese Einstellung auskommen, nur kann dann die Frequenz 
evt. nicht ganz passen.

>ich müsste aber einfach mal wissen welche Bits in Sachen Quarze was
>machen.
Ist doch im User Manual beschrieben. Was genau willst du wissen?


Wenn ich das richtig sehe, musst du nur den Quarz anlöten. Es sollte 
dann schon erst mal alles eingestellt sein das zumindest ein Takt kommt. 
Je nach Quarz evt. noch die Kapazität einstellen.

von Lukas K. (carrotindustries)


Lesenswert?

Ganz wichtig: Das OFIFG (Oscillator Fail Interrupt Flag) löschen, sonst 
geht der Oszillator nicht.

von Stefan (Gast)


Lesenswert?

Wichtigste Quelle für solche Informationen ist der MSP430x2xx Family 
User’s Guide (slau144), die Taktquellen und deren Konfiguration sind im 
Kapitel 5 Basic Clock Module+ beschrieben.

Der Hersteller des Uhrenquarzes empfiehlt für MSP430x2xx die 
Einstellungen XCAPx=02 oder XCAPx=01
http://www.microcrystal.com/getdoc/e712e482-1336-4ee1-a40c-b8f58bb50e26/TI_MSP430_Crystal-Recommendations.aspx

Nach einem Reset ist XCAPx=01, eine Konfiguration ist nicht nötig.

Das OFIFG hab ich noch nie gelöscht, der Oszillator läuft trotzdem und 
die Frequenz stimmt auch.

von Jörg S. (joerg-s)


Lesenswert?

Stefan schrieb:
> Das OFIFG hab ich noch nie gelöscht, der Oszillator läuft trotzdem und
> die Frequenz stimmt auch.
Das Flag ist glaub ich auch nur für den XT2 wichtig.

von Behrengauner (Gast)


Lesenswert?

Ich hab mir jetzt mal das Quarz gelötet und was zusammen gefriemelt mit 
Hilfe von Code den ich im Internet gefunden habe. Es scheint auch 
ziemlich genau zu laufen - nach ein paar Minuten Synchronlauf mit meiner 
Handyuhr zeigt sich (noch) keine Abweichung. Trotzdem würde ich gerne 
noch den Code an sich verstehen. Was ist BCSCTL1 und was BCSCTL3 ? Ich 
habe hier wirklich intensiv versucht was darüber herauszufinden, aber 
auch aus dem o.g. slau144 werde ich nicht s(ch)lau. Kann mir nicht mal 
jemand der en Plan hat auflisten was die einzelnen Bits tun?
Was den Timer angeht habe ich einigermaßen en Durchblick. Frage mich 
bloß ob es irgendeinen Vorteil bringen würde die Frequenz zu teilen?!

Hier ist der Code:

WDTCTL   = WDTPW|WDTHOLD;      //Watchdog stoppen

P1DIR   = 255;   //127d = 1111111b -> 7 aktive Outputs an P1
P1OUT   = 126;  //Voreinstellung: Null, alle Segmente außer g (0tes Bit) 
aktiv


BCSCTL1 &= ~XTS;// Low Frequency Mode für den externen Quarzeingang 
setzen

BCSCTL3 &= ~(LFXT1S0 | LFXT1S1);  // 32768 Hz Modus einstellen

BCSCTL3 |= XCAP0 | XCAP1;    // 12.5 pF einstellen

TACCTL0 = 0;  // zunächst ggf. aktiven Capture/Compare Interrupt für 
Timer ausschalten

TACCR0   = 32767;                        //Obere Zählgrenze für Timer
TACTL  = MC_1|TASSEL_1|TACLR;    //Timer einstellen und starten
                    //Bedeutung: MC=Modus, hier 1=Aufwärtszählen
                    //TASSEL=Clock source select, hier: 1 = ACLK
                    //TACLR=Timer A clear= Zähler zurücksetzen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Behrengauner schrieb:
> Was ist BCSCTL1 und was BCSCTL3 ?

Das steht im "Family User's Guide" (slau144h.pdf), das sind zwei 
Register des "Basic Clock Module", beschrieben auf Seite 283 und Seite 
285.

Hat Dein PDF-Betrachter keine Suchfunktion?

von Max G. (l0wside) Benutzerseite


Lesenswert?

Behrengauner schrieb:
> Ich hab mir jetzt mal das Quarz gelötet und was zusammen gefriemelt mit
> Hilfe von Code den ich im Internet gefunden habe. Es scheint auch
> ziemlich genau zu laufen - nach ein paar Minuten Synchronlauf mit meiner
> Handyuhr zeigt sich (noch) keine Abweichung. Trotzdem würde ich gerne
> noch den Code an sich verstehen. Was ist BCSCTL1 und was BCSCTL3 ?

Schau Dir die Diagramme im Family User´s Guide an. Ich habe auch eine 
ganze Weile gebraucht, bis ich verstanden hatte, wie der Takt genau 
zustande kommt. Die xxxCTL-Register enthalten die Einstellungen für 
alles Mögliche, die BCSCTL eben für den Takt. Was genau in den Registern 
drinstehen muss, verrät der Family User´s Guide.

Am besten druckst Du Dir das entsprechende Diagramm und die Seiten mit 
den einschlägigen Registerbeschreibungen aus. Dann verfolgst Du im 
Diagramm den Pfad vom Quarz bis zum MCLK und schaust bei jedem Kästchen 
unterwegs, was die Registerdoku dazu sagt. Ist wie Fahrradschaltung 
einstellen: viele Schräubchen, manche mit Rechts-, manche mit 
Linksgewinde, und jedes mit etwas anderer Funktion.

von Stefan (Gast)


Lesenswert?

Die 3 BCSCTL Zeilen kannst du einfach löschen.

Die ersten beiden setzen Bits zurück die eh nicht gesetzt sind. Den 
High-frequency mode gibts beim MSP430G2231 nicht und der 32768 Hz 
Quarzoszillator ist die Standard LF Taktquelle.

Die dritte Zeile setzt XCAP auf einen Wert der für den dem Launchpad 
beiliegenden Quarz schlechter ist als der default Wert. Also weglassen 
oder ersetzen durch
BCSCTL3 |= XCAP0; oder BCSCTL3 |= XCAP1;

von Behrengauner (Gast)


Lesenswert?

Ok, ich glaube jetzt blick ich langsam durch. Kann man eigentlich den 
Quarz in der Schaltung dann später direkt an die Pins des MSP430 
hängen?! Ich habe gelesen die Kondensatoren für den Betrieb wären intern 
ausgeführt, bin aber etwas iritiert weil auf dem Launchpad in 
unmittelbarer Nähe zum Quarz 2 Widerstäden und 2 Kondensatoren sind?!

von Stefan (Gast)


Lesenswert?

Korrektur:
Die dritte BSCTL Zeile löschen oder ersetzen durch BCSCTL3 = XCAP1;
(XCAP0 ist per default gesetzt, BCSCTL3 |= XCAP0; bringt also nichts und 
BCSCTL3 |= XCAP1; würde dazu führen, dass beide Bits gesetzt sind und 
damit eine etwas zu hohe Kapazität eingestellt wird.)

von Behrengauner (Gast)


Lesenswert?

Hab jetzt es auf ne Platine gelötet. Geht aber nach kurzer Zeit schon 
ziemlich ungenau. Als der µC noch im Launchpad war ging es viel genauer.
Wie kommts? Habe ich es falsch beschaltet (ich habe eigentlich nur den 
Quarz an XIN und XOUT gelötet und das Gehäuse auf Masse), oder leidet 
die Genauigkeit unter der unsaubereren Ausführung (dürftige Symmetrie, 
parasitäre Kapazitäten usw.) die meine Lötarbeit gegenüber dem Launchpad 
darstellt?! Ich hab schon überlegt die zwei Beinchen vom µC hochzubiegen 
und direkt den Quarz dranzuhängen. Gute Idee?

von Lukas K. (carrotindustries)


Lesenswert?

Behrengauner schrieb:
> ziemlich ungenau.

sicher, dass der MSP430 wirklich den Uhrenquarz und nicht den internen 
RC-Oszillator verwendet? Das Takterzeugungs- und Verteilungssystem der 
MSP430 ist in der Tat sehr umfangreich und bietet einige Fallstricke.

von Stefan (Gast)


Lesenswert?

Beim ACLK Takt ist es sehr übersichtlich: es gibt nur 2 mögliche 
Quellen, den LFXT1 und den VLO. Standardmäßig ist der LFXT1 ausgewählt, 
auf den VLO muss eigentlich explizit umgeschaltet werden. Beim 
MSP430G2231 scheint ACLK allerdings automatisch vom VLO genommen zu 
werden wenn kein Quarz am LFXT1 angeschlossen ist.
Die Frequenz des VLO kann irgendwo im Bereich von 4 bis 20 kHz liegen 
(typ. 12 kHz). Wäre der VLO aktiv dann wäre der Timer nicht nur 
ziemlich ungenau.

Ein unsauberer Aufbau ist als Ursache wahrscheinlicher. Der LFXT1 ist 
sehr störungsempfindlich. Hinweise zum richtigen Aufbau gibt's vom 
Hersteller im Application Report MSP430 32-kHz Crystal Oscillators
http://focus.ti.com/lit/an/slaa322b/slaa322b.pdf

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.