Der Wert im Register TACCR0 bestimmt die Zeit, wann der TIMER einen interrupt auslöst. Wenn ein Quarz mit 32768Hz verwendet wird, muss man für jeweils 1,5s Zeitabstand in TACCR0 32768 x 1,5 = 49152 oder 49152-1 = 49151 eintragen? MfG
In welchem Modus läuft dein Timer? Betreibe ihn im Continous-Mode und addiere in jedem Interrupt 1,5x32768 zum CCR-Register. Dann stimmt es immer.
Nachtrag: Es wird die Betriebsart MC0, also zählen bis TACCR0 erreicht wird, verwendet. Auch in dieser Betriebsart sollten 1,5 s einstellbar sein. Deshalb würde ich mich freuen, wenn jemand auf meine Frage nochmals eingehen würde MfG.
Wenn du bis zum CCR zählst, dann -1. Der Timer braucht einen Takt zum Rücksprung.
>Ich würde auf 49152 tippen.
als Ratespiel war meine Frage eigentlich nicht gedacht
MfG
Was meinst du mit Betriebsart MC0? Wenn die Mode control Bits Null sind ist der Timer gestoppt. Wenn du den Timer im Up-Mode betreibst dürfte 49151 der richtige Wert für 1,5 s sein weil von 0 gezählt wird: 0, 1, 2, ..., 49151, 0, ...
Wolfgang-G schrieb: > gibt es noch weitere Meinungen? Über Meinungsumfragen kann man das zwar lösen, aber viel besser als ein Ratespiel ist das auch nicht. Du schreibst nicht, welche Entwicklungsumgebung du benutzt, aber normalerweise sollte die über einen CPU-Taktzähler und/oder eine Stoppuhr verfügen, damit du im Zweifelsfall genau solche Dinge im Simulator ausmessen kannst. MfG
Du musst den Timer mit -1 laden! Hier kannste dir auch ein Example von TI angucken:
1 | //******************************************************************************
|
2 | // MSP430x26x Demo - Timer_A, Toggle P1.0, CCR0 Up Mode ISR, 32kHz ACLK
|
3 | //
|
4 | // Description: Toggle P1.0 using software and the TA_0 ISR. Timer_A is
|
5 | // configured for up mode, thus the timer overflows when TAR counts
|
6 | // to CCR0. In this example, CCR0 is loaded with 1000-1.
|
7 | // Toggle rate = 32768/(2*1000) = 16.384
|
8 | // ACLK = TACLK = 32768Hz, MCLK = SMCLK = default DCO ~1.045MHz
|
9 | // //* An external watch crystal on XIN XOUT is required for ACLK *//
|
10 | //
|
11 | // MSP430F261x/241x
|
12 | // ---------------
|
13 | // /|\| XIN|-
|
14 | // | | | 32kHz
|
15 | // --|RST XOUT|-
|
16 | // | |
|
17 | // | P1.0|-->LED
|
18 | //
|
19 | // B. Nisarga
|
20 | // Texas Instruments Inc.
|
21 | // September 2007
|
22 | // Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.42A
|
23 | //******************************************************************************
|
24 | |
25 | #include <msp430x26x.h> |
26 | |
27 | void main(void) |
28 | {
|
29 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT |
30 | P1DIR |= 0x01; // P1.0 output |
31 | CCTL0 = CCIE; // CCR0 interrupt enabled |
32 | CCR0 = 1000-1; |
33 | TACTL = TASSEL_1 + MC_1; // ACLK, upmode |
34 | |
35 | _BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt |
36 | }
|
37 | |
38 | // Timer A0 interrupt service routine
|
39 | #pragma vector=TIMERA0_VECTOR
|
40 | __interrupt void Timer_A (void) |
41 | {
|
42 | P1OUT ^= 0x01; // Toggle P1.0 |
43 | }
|
Dank an alle, die sich an der "Meinungsumfrage" beteiligt haben. Stefan und Denis, sowie Anwendungsbeispiele von TI und weitere eigene Überlegungen haben mich überzeugt, dass mit 49152-1 genau eine Taktzeit von 1,5s erzeugt wird. @Stefan Ich verwende mspgcc und hier ist in timera.h die Betriebsart wie folgt definiert: #define MC0 0x0010 /* Timer A mode control 0 */ #define MC_0 (0<<4) /* Timer A mode control: 0 - Stop */ #define MC_1 1<<4) /* Timer A mode control: 1 - Up to CCR0 d.h. MC0 ist gleich MC_1. Programmieren ist nicht so mein Ding. Deshalb mal die Frage: bedeutet (1<<4), dass die 1 4 Stellen nach links geschoben wird? MfG
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.