Hallo zusammen, habe ein Problem beim anlöten eines Quarzes an das MSP Board. Mein Quarz hat nur zwei Beinchen und somit klar wie er angelötet werden soll. Dem MSP Datenblatt habe ich entnommen das der Quarz zwischen XIN und XOUT angebracht werden muss, stimmt das? Laut Schaltplan sind das Pin 8 und 9. Nachdem ich die Pins über den Quarz verbunden habe wollte ich ein Testprogramm aufspielen um zu sehen ob es geht. Zum testen habe ich das TI-Beispielprogramm genommen. Das Problem ist jetzt das der Timer nicht zählt. Wenn ich mir das TAR anschaue, wechselt das einmalig von 0x0000 nach 0x001 und bleibt dann so für alle zeit, bis ich resette. Das TASSEL habe ich schon auf ACLK gestellt und wenn ich mim Oszi messe schwingt nix. Wo liegt der Fehler?
Hast Du die beiden Kondensatoren weggelassen oder sind die im Quarz eingebaut ?
oh sorry vergessen zu erwähnen, die hab ich natürlich auch angebracht.
GIbt es eig ne Vorgabe wie lang die Kabel vom Qarz zu den Pins sein darf?
> ...wie lang die Kabel vom Qarz zu den Pins sein > darf? Kabel am Quarz? Bist du sicher, dass das Ganze schwingt? Wir achten darauf, dass die Anschlüsse so kurz wie möglich sind. Also << 20 mm. GB
> GIbt es eig ne Vorgabe wie lang die Kabel vom Qarz zu den Pins sein > darf? Kabel? Räusper ... Quarz und Lastkondensatoren gehören so dicht wie möglich an die Pins. Bei über einem cm Leiterbahn werden manche Leute schon nervös.
Das Prob ist das der Quarz nicht wirklich "Beinchen" hat sondern eher zwei Pads. Irgendwie muss ich die ja aber auf de Platine befestigen. Wie soll das ohne kurtze Leitungen gehen?
Was für ein Quarz ist das? An LFXT1CLK kann man einen Uhrenquarz (32kHz, LF) oder was schnelleres (>400kHz, HF) anschließen! Beim Uhrenquarz dürfen keine C's verwendet werden, weil der MSP die schon integriert hat (bzw. bei den F2xxx im BCSCTL3-Register auswählen). Ausserdem darf XTS im BCSCTL1 nicht gesetzt sein (LF-mode). Manchmal ist es auch notwendig/sinnvoll, das Gehäuse des Quarzes auf GND zu legen, sonst schwingt der möglicherweise auch nicht... Bei einem "schnelleren" Quarz müssen die entsprechenden Lastkapazitäten angeschlossen werden und XTS gesetzt sein (HF-Mode). Wenn Du Probleme hast, den Quarz auf die Platine zu löten, probier's vielleicht mal an XT2 (aber nur HF-Quarz)!
Hier mal das Layout der Platine, vllt könnt ihr mir damit weiterhelfen
Hier mal das Datenblatt des Qarzes: http://jauch-quartz.com/ablage/med_00000678_1200589682_prd_00000021_de_HCJ015_JXE75.pdf
Also auf meinem Testboard ist neben dem bedrahteten Footprint für den Uhrenquarz noch ein SMD-Footprint für einen SMD-Quarz.
Ist alledings nur ein 16MHz Quarz. Geht das dennoch oder ist 32MHz die Untergrenze? Ach ja, ich benutze ein MSP430F2619
16MHz ist die Obergrenze Und lies mein Posting bezüglich der Register-Settings!
>Wie erkenne ich diesen SMD-Footprint?
... an den zwei oder vier SMD-Pads vielleicht...?
Ich habe nicht gesagt, dass bei Dir da ein SMD-Footprint ist...
... bei meinem Board schon, ist aber ein anderes (F1xx)
An den im Anhang markireten Stellen befinden sich jeweils zwei Stellen, die im Layout nicht eingezeichnet sind. Die grün makierten "Pins" sind allerdings verbungen. Könnten das dies SMD-Pads sein?
Da Hatte ich den Quarz ursprünglich angebracht, ohne Leitungen, also direkt auf der Platine. Mir wurde allerdings gesagt das sei falsch.
wuddy wrote: > Da Hatte ich den Quarz ursprünglich angebracht, ohne Leitungen, also > direkt auf der Platine. Mir wurde allerdings gesagt das sei falsch. Blödsinn. Der muss direkt da drauf. Alles andere wird nix. 16 MHz ist auch wirklich das Maximum, was der MSP430 abkann. Was für Kapazitäten hast du denn extern dran gelötet und welche hast du intern im Register eingestellt? Das muss schon zur Lastkapazität des Quarzes passen, hab ich hier schon 100 Mal geschrieben. Hast du auch wirklich den XT2 aktiviert und wartest du bis der stabil schwingt? Dann noch bei deinem Timer die Taktquelle richtig ausgewählt?
Also extern hab ich 22pF angelötet, die Sache mit den Registern prüf ich gleich nochmal.
wuddy schrieb: >Da Hatte ich den Quarz ursprünglich angebracht, ohne Leitungen, also >direkt auf der Platine. Mir wurde allerdings gesagt das sei falsch. Ja und Nein ;-) Prinzipiell kommt ein Quarz schon direkt auf die Platine, nur hat keiner der Typen in Deinem Datenblatt den richtigen Footprint, der da passen würde! Also entweder besorgst Du Dir einen Quarz, der passt oder Du frickelst weiter... Christian wrote: >Hast du auch wirklich den XT2 aktiviert... Die Pins an denen wuddy rumbastelt, gehören zu XT1!
OK, danke ich war schon verwirrt warum jetzt auf einmal die Rede von XT2 ist. Dachte schon ich hätte wieder was falsch im Handbuch interpretiert :D Noch ne Frage zu den Kontensatoren: Ist es egal ob man die internen oder die externen nimmt, solange die gewünschte Kapazität erreicht ist, oder gilt es da etwas zu beachten?
Sorry, hatte ich falsch gelesen. Kondensatoren sind egal, musst aber auf die Kapazität kommen. Also wenn der Quarz 33pF Last-Kapazität hat, musst du auf etwa jeweils 56pF für die Kondensatoren kommen. Poste doch mal deinen Code. Kannst ja auch mal den Pin, der den entsprechenden Clock ausgibt, aktivieren, und mit dem Oszi den SMCLK oder halt MCLK messen.
>Noch ne Frage zu den Kontensatoren: Ist es egal ob man die internen oder >die externen nimmt, solange die gewünschte Kapazität erreicht ist, oder >gilt es da etwas zu beachten? >>Kondensatoren sind egal, musst aber auf die Kapazität kommen. STOOOOOOPPPP! Ich geh' mal von dem Fall aus, dass Du einen F2xxx benutzt. Dann sind die internen Kapzitäten nur für den LF-Fall (Uhrenquarz 32kHz). Im HF-Fall (400kHz - 16MHz) müssen externe C's verwendet werden und ausserdem:
1 | XTS = 0x01 |
2 | XCAPx = 0x00 |
3 | LXT1Sx = 0x10 (für 16MHz) |
Alos mein Testprogramm für den Quarz ist:
1 | WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer |
2 | if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) |
3 | {
|
4 | while(1); // If calibration constants erased |
5 | // do not load, trap CPU!!
|
6 | }
|
7 | BCSCTL3 |= XCAP_3; // Configure load caps |
8 | BCSCTL1 = CALBC1_1MHZ; // Set DCO |
9 | DCOCTL = CALDCO_1MHZ; |
10 | |
11 | // Wait for xtal to stabilize
|
12 | do
|
13 | {
|
14 | IFG1 &= ~OFIFG; // Clear OSCFault flag |
15 | for (i = 0x47FF; i > 0; i--); // Time for flag to set |
16 | }
|
17 | while ((IFG1 & OFIFG)); // OSCFault flag still set? |
18 | |
19 | for(i=2100;i>0;i--); // Now with stable ACLK, wait for |
20 | // DCO to stabilize.
|
21 | P1DIR |=0x01; |
22 | TACCTL0 = CCIE; //Capture/compate Int enable |
23 | TACCR0 =50000; //11kHz |
24 | TACTL = TASSEL_1 + MC_2 + ID_0; |
25 | TACTL |= MC1; //Timer starten |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | _BIS_SR(GIE); |
32 | while(1); |
33 | }
|
34 | |
35 | // Timer_A3 Interrupt Vector (TAIV) handler
|
36 | #pragma vector=TIMERA1_VECTOR
|
37 | __interrupt void Timer_A(void) |
38 | {
|
39 | |
40 | |
41 | |
42 | P1OUT ^= 0x01; |
43 | CCR0 += 50000; |
44 | |
45 | |
46 | }
|
Mein Oszi häng ich jetzt an den PIN 1. Wenn ich das ganze über den internen Clock laufen lasse klappt es auch wunderbar. Zumindest hat es das vor ner woche noch ^^ Jetzt will ich aber höhere Taktraten erzeugen und muss ja dann auf den externen Qarz umsteigen oder?
1 | #pragma vector=TIMERA1_VECTOR
|
muss natürlich TIMER0 heißen
Ich seh in Deiner Init nicht, dass Du XT1 mal aktivieren würdest!!! Du bist und bleibst doch auf DCOCLK?! Konsultiere mal den User-Guide für Deine MSP-Familie und beachte mein Posting von 9:32Uhr!
Ach ja, noch was: Eine Quelle an "guten" Ideen findet sich sehr oft in den Code-Bsp von TI!
1 | void main(void) |
2 | {
|
3 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT |
4 | |
5 | P2DIR |= 0x01; // P2.0 = output direction |
6 | P2SEL |= 0x01; // P2.0 = ACLK function |
7 | P1DIR |= 0x02; // P1.1 = output direction |
8 | |
9 | BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL |
10 | BCSCTL3 |= LFXT1S1; // 3 – 16MHz crystal |
11 | |
12 | do
|
13 | {
|
14 | IFG1 &= ~OFIFG; // Clear OSCFault flag |
15 | for (i = 0xFF; i > 0; i--); // Time for flag to set |
16 | }
|
17 | while (IFG1 & OFIFG); // OSCFault flag still set? |
18 | |
19 | BCSCTL2 |= SELM_3; // MCLK = LFXT1 (safe) |
20 | |
21 | for (;;) // Infinite loop |
22 | {
|
23 | P1OUT |= 0x02; // P1.1 = 1 |
24 | P1OUT &= ~0x02; // P1.1 = 0 |
25 | }
|
26 | }
|
Mist, falsche Programmteile gepostet! Kommt davon wenn man tausend Projekte geöfnet hat und nicht weiß was man grad macht :D Sorry! Ja danke für den Tip mit den Beispielprogrammen, da hab ich schon einiges rauskopiert.
Wenn ich obiges Programm laufen lasse kann ich an P2.0 eine Frequenz von 6,6kHz messen. Wie kommt das? Habe den Quarz erstmal entfernt, bis ich weiß wo genau der hin kommt. Aber wie kann ich jetzt an p2.0 etwas messen? der interne Quarz müsste doch abgeschaltet sein.
>Wenn ich obiges Programm laufen lasse kann ich an P2.0 eine Frequenz von >6,6kHz messen. Wie kommt das? Pin toggeln bringt wenig um die Frequenz vom Quarz zu messen. Schalte lieber den Takt direkt auf einen Pin durch.
Du hast das Clock-Management System des MSP430 einfach nicht begriffen. Es gibt keinen internen Quarz. Nur einen DCO, das ist ein besserer RC-Oszillator. Der ist vom Start weg aktiv und versorgt den MCLK und den SMCLK mit etwa 800kHz, bis man etwas anderes einstellt. Wenn du einen externen Quarz anschließen willst, kommt der so nah wie möglich an die Pins für XT1 oder halt XT2. Und die beiden Kondensatoren müssen auch dran. Dann musst du per Software den entsprechenden Oszillator konfigurieren (HF/NF) und aktivieren. Dann wartest du bis der Oszillator das Foult-Flag nicht mehr setzt, erst dann ist er stabil. Dann musst du allerdings noch den MCLK und/oder SMCLK auf eben diesen Oszillator umschalten, sonst laufen die immer noch weiter mit dem DCO. Steht aber alles im User Guide und die TI-Demos sollten auch helfen. Die SMCLK und MCLK kannst du auch gepuffert direkt ausgeben, da gibts mehrere Pins, auf denen die Takte als Zweitfunktion liegen.
wenn ich aber keine SMD Pins habe bleibt mir nix anderes übrig wie den Quarz so dicht wie möglich mit hilfe von Drähten dranzulöten, oder? Kann nachvollziehen das sich da bei einigen die Haare kräuseln aber nen anderen Weg find ich nicht. Muss zugeben, dass mit dem System Clock find ich einfach verwirrend, deshalb wende ich mich ja an´s Forum. Danke nochmals für die kurz und pregnante Erklärung. Denke mal jetzt ist es etwas klarer geworden.
>wenn ich aber keine SMD Pins habe bleibt mir nix anderes übrig wie den >Quarz so dicht wie möglich mit hilfe von Drähten dranzulöten, oder? Kann >nachvollziehen das sich da bei einigen die Haare kräuseln aber nen >anderen Weg find ich nicht. Für'n Bastelaufbau wird's schon gehen... >zugeben, dass mit dem System Clock find ich einfach verwirrend,... Wenn du dich mal etwas genauer/länger damit beschäftigt hast wirst du feststellen das das alles doch nicht so kompliziert ist :)
Also ich hab den Qarz jetzt an die beiden Pins gelötet, Ganz brachial mit Kupferdraht und Lötzinn. Wenn ich jetzt ein Programm laufen lasse und mein Oszi an den den XIN Pin hänge bekomm ich nen halbwegs schönen Sinus mit der Frequenz 16 MHz. Leider habe ich das zuvor nicht gemacht. Deshalb kann ich nicht 100% sagen das es funktioniert.
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.