Hallo, ich habe ein MSP Headerboard mit einem msp430f149. Das Board ist von Olimex. Da ist ein 32kHz Quarz dran. Ich würde nun gerne einen Quarz mit 8MHz an dem MSP anbringen. Da wollte ich nun einmal wissen, was für einen Quarz ich da nehmen muss und wo ich den dann dranlöten muss, also an welche Pins? Ich steige bei den Quarzen und Taktquellen noch nicht so ganz durch. Ich hoffe, dass man versteht, was ich vor habe. gruß Sven
Du kannst auch den 32k-Quarz nehmen und damit den internen Taktgenerator korrigieren - dazu gibt es eine App-Note, die auch den Code dafür enthält.
Die Taktquellen des MSP zu verstehen ist essenziell, das ist ja gerade das Alleinstellungsmerkmal des MSP. Wenn du den 32Khz Quarz dran lässt, kannst du sehr stromsparende Systeme bauen. Den 8MHz Quarz kannst du noch zusätzlich an X2IN und X2OUT anschließen. Wie man den startet, steht in den C-Demos von TI öfters mal. Oder den X1 gegen den 8MHz tauschen, aber dann geht die Stromspar-Sache flöten. Der 149 hat keinen FLL+, also wird der DCO nur beim Einstellen so gut es geht an das Vielfache des Quarztaktes angenähert, und driftet dann leider weg. Hab ich an einem 1611 in der Klimakammer schön beobachten können.
Achso, bei einem Systemtakt von 8MHz muss die Betriebsspannung 3,6V sein, sonst gehts nicht zuverlässig.
also wenn ich die baudrate recht genau einstellen will, also was über 9600 geht benötige ich den 8mhz quarz, weil ich das ganze sonst nicht hin bekomme, da der takt sonst wegdriftet. das scheint auch das einfachste zu sein, da gibt es ja genügend beispielcode von ti zur einstellung der baudraten mit einem 8mhz quarz an X2IN/OUT. Kann ich da jeden x beliebigen quarz nehmen oder muss ich da auf was besonderes achten?
Na für UART Anwendungen reicht der DCO dicke zu. Den musst du halt einmal einstellen und wenn sich die Temperatur nicht drastisch ändert, klappt das mit der UART. Hier mal eine Funktion, um den DCO einzustellen: DELTA ist der Faktor, im Beispiel ergibt das 4,096MHz
1 | //------------------------------------------------------------------------------
|
2 | void Set_DCO (void) // Set DCO to selected frequency |
3 | //------------------------------------------------------------------------------
|
4 | {
|
5 | |
6 | #define DELTA 125 // target DCO = DELTA*(32768) = 4096000
|
7 | unsigned int Compare, Oldcapture = 0; |
8 | |
9 | CCTL2 = CM_1 + CCIS_1 + CAP; // CAP, ACLK |
10 | TACTL = TASSEL_2 + MC_2 + TACLR; // SMCLK, cont-mode, clear |
11 | |
12 | while (1) |
13 | {
|
14 | while (!(CCIFG & CCTL2)); // Wait until capture occured |
15 | CCTL2 &= ~CCIFG; // Capture occured, clear flag |
16 | Compare = CCR2; // Get current captured SMCLK |
17 | Compare = Compare - Oldcapture; // SMCLK difference |
18 | Oldcapture = CCR2; // Save current captured SMCLK |
19 | |
20 | if (DELTA == Compare) break; // If equal, leave "while(1)" |
21 | else if (DELTA < Compare) // DCO is too fast, slow it down |
22 | {
|
23 | DCOCTL--; |
24 | if (DCOCTL == 0xFF) |
25 | {
|
26 | if (!(BCSCTL1 == (XT2OFF))) |
27 | BCSCTL1--; // Did DCO roll under?, Sel lower RSEL |
28 | }
|
29 | }
|
30 | else
|
31 | {
|
32 | DCOCTL++; |
33 | if (DCOCTL == 0x00) |
34 | {
|
35 | if (!(BCSCTL1 == (XT2OFF + 0x07))) |
36 | BCSCTL1++; // Did DCO roll over? Sel higher RSEL |
37 | }
|
38 | }
|
39 | }
|
40 | CCTL2 = 0; // Stop CCR2 |
41 | TACTL = 0; // Stop Timer_A |
42 | }
|
Für 4MHz hab ich erfolgreich den Murata Resonator CSTCC 4,00 von Reichelt eingesetzt. Von dem gibt's auch ne 8MHZ Version. Für die bessere Stabilität vom internen DCO am besten einen externen Oazillator Widerstand (ROSC Pin) einsetzen!
Die von Christian gepostete Funktion kann man auch in den Timerinterrupt hängen, dann wird die Drift des DCO permanent ausgeglichen. Ein Beispiel dafür ist in einigen Beispielen von TI zu finden. Hier Beitrag "Re: MSP430 UART Baudrate einstellen" habe ich mich schon mal darüber ausgelassen. Sofern es nur um UART-Gebrauch geht, dürfte die leichte Timingungenauigkeit durch das Nachjustieren des DCO nicht stören.
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.