MSP430FG4618 - Takt Timer Frequenz

OP #1894415
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--);
  }
}
//-------------------------------------------------------------------
OP #1894559
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren