www.mikrocontroller.net

Forum: PC-Programmierung TimerA programmieren


Autor: Eigen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich will Daten über die UART meines MSP430135 schicken. Dann muss
innerhalb von 3ms eine Antwort kommen. Um diese "Wartezeit" zu
realisieren, wollte ich einen Timer nehmen. Aber irgendwie funktioniert
der nicht ganz. Und mit dem User's Guide komm ich nicht so klar. Kann
mir da wer weiterhelfen?

Hier mein Code in C:
  /* Ab hier die Konfiguration für den Timer A eingefuegt */

  TACTL = TASSEL_2 | TAIE;
  TACCTL0 = 0x0020;
  TACCTL1 = 0x0000;
  TACCTL2 = 0x0000;
  TACCR0 = 10;
  TACCR1 = 9;
  TACCR2 = 0;
  TACCTL0 |= CCIE;

  //Timer aktivieren, falls erreicht Zeichen nochmal senden
  TACTL |= MC1;
  if((TACCTL0 & 0x0004) == 0x0004)
  {
    TACTL |=MC0;
    TXBUF0 = 'h';
  }

Falls aber eine Antwort über den RX-Interrupt kommt, soll dort auch der
Timer deaktiviert und auf null gesetzt werden. Die Abfrage, ob der Timer
abgelaufen ist funktioniert so aber nicht, muss ich da ein
Interrupt-Flag zur Abfrage benutzen, oder gar eine Interrupt-Routine
schreiben?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst ja auf den Timer warten.
D.h. dass Programm muss solange in einer Schleife
laufen, solange der von dir gewünschte Timerstand
noch nicht erreicht wurde.

Innerhalb der Schleife checkst du dann ab, ob über
den Rx Interrupt ein Zeichen eingetroffen ist
und brichst die Schleife vorzeitig ab.

Und noch was: Ich würde den Timer auf jeden Fall
so abfragen, ob sein Zählerstand schon größer als
der von dir vorausberechnete ist. Wenn Deine Schleife
nämlich ein bischen trödelt, könnte es schon sein,
dass du den exakten Timerstand nie zu Gesicht kriegst.
Stell Dir einfach vor Du müsstest eine bistimmte Zeit
warten, sagen wir 30 Sekunden. Dazu hast du eine Stoppuhr
auf die du immer wieder drauf schaust, während du Fussball
WM schaust. Es ist herzlich unwahrscheinlich, dass du die
Stoppuhr bei exakt 30.00 Sekunden betrachtest und feststellst
dass die Zeit um ist. Bei einer Zeit von 31 Sekunden oder 33
Sekunden, weisst du auch dass die Zeit um ist und du deine
Freundin abholen musst.

Autor: Eigen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke ich kann mit Fussball herzlich wenig anfangen.

Das ich eine Schleife programmieren muss ist mir auch schon klar
geworden. Aber wie frage ich den Timer des MSP ab. Das ist ja mein
eigenliches Problem.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das weis ich nicht, weil ich den MSP nicht kenne.
Steht aber sicher im Datenblatt.

Ich hab mich halt einfach mal an deinem Code orientiert.
Da steht:

  //Timer aktivieren, falls erreicht Zeichen nochmal senden
  TACTL |= MC1;
  if((TACCTL0 & 0x0004) == 0x0004)

also geh ich mal davon aus, dass TACCTL0 den momentanen
Inhalt des Timers repräsentiert.

Nur wird das halt mit einem einfach 'if' nichts werden,
weil 'if' ja nicht darauf wartet, bis die Bedinung eintrifft,
sondern nur entscheidet ob die Bedingung jetzt, zu dem Zeitpunkt
an dem 'if' sie auswertet gültig ist oder nicht.

wie wäre es mal mit:

  //Timer aktivieren
  TACTL |= MC1;

  // warten bis der Timer den Wert erreicht hat
  while( TACCTL0 < 4 )
    ;

Wie gesagt: ich kenn den Chip nicht. Ich arbeite nur mit dem
was du mir gibst. Ob TACCTL0 das richtige Register ist oder
ob das anders heist, steht im Datenblatt deines µC

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.