www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430FG4618 - Takt Timer Frequenz


Autor: Stefan M. (stefan_m)
Datum:

Bewertung
0 lesenswert
nicht 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--);
  }
}
//-------------------------------------------------------------------

Autor: Stefan M. (stefan_m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan M. (stefan_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Warum muss man Interrupts eigentlich Enablen?

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

Autor: Stefan M. (stefan_m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.