Forum: Mikrocontroller und Digitale Elektronik 1,5s mit Timer (MSP430) erzeugen


von Wolfgang-G (Gast)


Lesenswert?

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

von Dennis (Gast)


Lesenswert?

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.

von Wolfgang-G (Gast)


Lesenswert?

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.

von Jörg S. (joerg-s)


Lesenswert?

Ich würde auf 49152 tippen.

von Dennis (Gast)


Lesenswert?

Wenn du bis zum CCR zählst, dann -1. Der Timer braucht einen Takt zum 
Rücksprung.

von Wolfgang-G (Gast)


Lesenswert?

>Ich würde auf 49152 tippen.
als Ratespiel war meine Frage eigentlich nicht gedacht
MfG

von Wolfgang-G (Gast)


Lesenswert?

gibt es noch weitere Meinungen?
MfG

von Stefan (Gast)


Lesenswert?

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, ...

von Tip (Gast)


Lesenswert?

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

von Dennis (Gast)


Lesenswert?

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
}

von Wolfgang-G (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.