Forum: Mikrocontroller und Digitale Elektronik MSP430 Timer


von Justus (Gast)


Lesenswert?

Hi,

Ich habe mich ein wenig mit den Timern beim MSP beschäftigt und die 
grundlegende Funktionalität ist schonmal da. Jetzt wollte ich als 
nächstes den Timer nicht bis zum Maximalwert zählen lassen, sondern zum 
im TBCL0 stehenden.
Das kriege ich aber nett hin. Weiß einer wie es geht und teilt sein 
Wissen mit mir?

Gruss




void init_TimerB(long Endswert)
{
  TBCTL = TBSSEL_2 + TBCLR;              // SMCLK, clear TAR
  TBCCTL0 = CCIE;                       // CCR0 interrupt enabled
  TBCCR0 = Endwert;
  TBCTL |= MC1;                         // Start Timer_A in continuous 
mode
  _EINT();                              // interrupt enable
}

von Nico (Gast)


Lesenswert?

Du musst schon ein bißchen genauer werden! Was geht denn nicht?

von Justus .. (justusjonas)


Lesenswert?

Naja, der Timer läuft immer von Null bis 65536 und ich will eigentlich 
dass er nur bis Endwert=7200 läuft.

von Nico (Gast)


Lesenswert?

1. Warum übergibst Du der Funktion einen long-Wert? Integer reicht 
völlig aus!
2. Dein Übergabeparameter heißt Endswert und in der Funktion lädst Du 
den Timer mit Endwert! Also ein "s" zuviel!

von Justus .. (justusjonas)


Lesenswert?

Du hast recht, sorry, dass mit dem "s" war ein Tippfehler, aber nur hier 
im Forum nicht im Code.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Da steht es doch, von einem kleinen Fehler im Kommentar abgesehen:

  TBCTL |= MC1;        // Start Timer_A in continuous mode

(Du verwendest Timer_B, nicht Timer_A).

Um nur bis zum Wert in TBCL0 zu zählen, musst Du MC0 setzen und MC1 
gelöscht lassen.



von Justus .. (justusjonas)


Lesenswert?

Danke Rufus, hat wunderbar funktioniert.


void init_TimerB(int Endwert)           // Endwert mit 7209 Übergeben
{
  TBCTL = TBSSEL_2 + TBCLR;             // SMCLK, clear TAR
  TBCCTL0 = CCIE;                       // CCR0 interrupt enabled
  TBCCR0 = Endwert;                     // Setzt den Endwert des Timers
  TBCTL |= MC0;                         // Start Timer_B in up mode
  _EINT();                              // interrupt enable
}

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.