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?
>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.
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.
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.
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
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?
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.
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;
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?!
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.)
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?
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.
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 Oscillatorshttp://focus.ti.com/lit/an/slaa322b/slaa322b.pdf