Forum: Mikrocontroller und Digitale Elektronik MSP430FG4618 - Takt Timer Frequenz


von Stefan M. (stefan_m)


Lesenswert?

Hi,

als interessierter Neuling versuch ich mich gerade in der µC 
Programmierung :)
Meine erste Aufgabe zum herantasten an die Materie besteht darin, eine 
LED auf dem Developer Board MSP430 mit 1 Hz blinken zu lassen.

Die Frage ist, welchen der 3 Timer sollte ich nehmen und wie binde ich 
sie in den C-Code ein?

Persönlich wäre ich für den Basic Timer 1. Der läuft doch standardmäßig 
mit 32768 Hz. Allerdings wurden in diversen Beispielen und ähnlichen 
Fragen im Forum meist der Timer A oder Timer B verwendet.

Hier mal mein Code wie ich es bisher gelöst habe. Die LED blinkt 3 mal. 
Die Frequenz wurde mit einem Delay gelöst.

//-------------------------------------------------------------------
#include <msp430xg46x.h>

void main (void)
{
  volatile unsigned int i;
  volatile unsigned int j=0;

  WDTCTL = WDTPW + WDTHOLD;
  P5DIR |= 0x02;

  while (j<6)
  {
    j++;
    P5OUT ^= 0x02;

    for (i=50000;i>0;i--);
  }
}
//-------------------------------------------------------------------

von Stefan M. (stefan_m)


Lesenswert?

Nach ein wenig Recherche bin ich auf einen Ansatz gestoßen und hab mich 
für den TimerB entschieden, welchen ich als Source die SMLCK zuweise.

Warum muss man Interrupts eigentlich Enablen?

> //-------------------------------------------------------------------
> #include <msp430xg46x.h>
>
> void main (void)
> {
>   volatile unsigned int i;
>   volatile unsigned int j=0;
>
>   WDTCTL = WDTPW + WDTHOLD;
    TBCTL = TBSSEL_2 + MC_2 + TBCLR + TBIE;
>   P5DIR |= 0x02;
>
    while (1)
>   {

>   }
> }

#pragma vector=TIMERB1_VECTOR
__interrupt void TIMERB1_ISR(void)
{
  P5OUT ^= 0x02;
}
> //-------------------------------------------------------------------

Und wie ihr seht hab ich auch gleich die Interruptroutine mit eingefügt, 
die dann die Zustände der LED hin und her schaltet.

Allerdings bleibt die Frage, wie ich den Takt langsamer mache, damit ich 
das blinken auch sehe.

Und wie realisiere ich es, dass die Diode dauerhaft, bzw. nur 3 mal 
blinkt? Meine Anweisung dazu stand vorher in der while-Schleife. 
Eigentlich müssten ja nun die Interrupts des Timers gezählt werden.

von Stefan M. (stefan_m)


Lesenswert?

> Warum muss man Interrupts eigentlich Enablen?

Erkenntnis: Damit Interrupts auch wahrgenommen werden, sonst werden sie 
ignoriert.

von Stefan M. (stefan_m)


Lesenswert?


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.