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.
Ganz wichtig: Das OFIFG (Oscillator Fail Interrupt Flag) löschen, sonst geht der Oszillator nicht.
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 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.