Hallo, ich möchte mit meinem MSP430F1232 einen Takt mit ca 130 kHz generieren. Ist das möglich? Und wie geh ich's am besten an? Mir ist klar, dass das über Timer realisiert werden muss, nur leider steige ich gerade nicht richtig dahinter und bräuchte einen Denkanstoß. Gruß Klaus
Am einfachsten geht das mit dem Timer und den Output Units. Schau dir mal den User Guide zu dem MSP an, da findest du unter Timer jede Menge Infos. Wenn du die Register passend setzt, dann kannst du bei einem bestimmten Zählerstand den Ausgabe-Pin setzen und bei einem anderen Zählerstand bzw. Timer-Überlauf wieder rücksetzen lassen. Es gibt da auch ein schönes Beispiel von TI:
1 | //******************************************************************************
|
2 | // MSP-FET430X120 Demo - Timer_A, Toggle P1.1/TA0, Up Mode, 32kHz ACLK
|
3 | //
|
4 | // Description: Toggle P1.1 using hardware TA0 output. Timer_A is configured
|
5 | // for up mode with CCR0 defining period, TA0 also output on P1.1. In this
|
6 | // example, CCR0 is loaded with 10-1 and TA0 will toggle P1.1 at TACLK/10.
|
7 | // Thus the output frequency on P1.1 will be the TACLK/20. No CPU or software
|
8 | // resources required. Normal operating mode is LPM3.
|
9 | // ACLK = TACLK = 32kHz, MCLK = default DCO ~800kHz
|
10 | // As coded with TACLK = ACLK, P1.1 output frequency = 32768/20 = 1.6384kHz
|
11 | // //* External watch crystal installed on XIN XOUT is required for ACLK *//
|
12 | //
|
13 | // MSP430F123(2)
|
14 | // -----------------
|
15 | // /|\| XIN|-
|
16 | // | | | 32kHz
|
17 | // --|RST XOUT|-
|
18 | // | |
|
19 | // | P1.1/TA0|--> ACLK/20
|
20 | //
|
21 | // M. Buccini
|
22 | // Texas Instruments Inc.
|
23 | // Feb 2005
|
24 | // Built with IAR Embedded Workbench Version: 3.21A
|
25 | //******************************************************************************
|
26 | |
27 | #include <msp430x12x2.h> |
28 | |
29 | void main(void) |
30 | {
|
31 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT |
32 | P1DIR |= 0x02; // P1.1 output |
33 | P1SEL |= 0x02; // P1.1 option select |
34 | CCTL0 = OUTMOD_4; // CCR0 toggle mode |
35 | CCR0 = 10-1; |
36 | TACTL = TASSEL_1 + MC_1; // ACLK, upmode |
37 | |
38 | _BIS_SR(LPM3_bits); // Enter LPM3 w/interrupt |
39 | }
|
Das müsstest du halt an deine Frequenz und Taktquelle anpassen. Wenn die Ausgangsfrequenz halbwegs genau sein soll, müsstest du einen passenden Quarz dran bauen.
Also, so wie's da steht, ist die maximal mögliche Frequenz 32,768 KHz? Also müsst ich für 130 KHz einen entsprechenden Quarz verbaun?
Richtig. Oder halt den internen DCO benutzen, der geht ja bei den neuen Typen bis 16MHz. Wenn du den passend einstellst, und Temperaturdrift nicht weiter stört, kannst du den als Taktbasis nutzen.
Hab jetzt mal das Oszi rangehangen. Der DCO ist nicht gerade sehr genau.
Sag ich doch. Steht ja aber auch im Datenblatt und im User Guide.
> Der DCO ist nicht gerade sehr genau.
Externen Oszillatorwiderstand benutzen, dann wird's wesentlich genauer.
...aber immer noch weit entfernt von einem Quarz.
Ich hab vor einen anderen Quarz zu installieren.
> ...aber immer noch weit entfernt von einem Quarz.
Für ein "ca 130 kHz" wird es dicke reichen.
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.