mikrocontroller.net

Forum: Compiler & IDEs MSP430: TIMER_A einstellen


Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich das so richtig? TAIFG bei CCR0 und CCIFG bei CCR1 zurücksetzen?

TACTL  = TASSEL_2 + ID_3 + MC_1 + TAIE;
TACCTL0 = CM_0 + CCIS_3 + OUTMOD_3 + CCIE;
TACCTL1 = CM_0 + CCIS_3 + OUTMOD_3 + CCIE
CCR0 = 0x5000;
CCR1 = 0xa000;

interrupt[TIMERA0_VECTOR] void
Timer_A (void)
{
  out_ausgang ^= 0x02;   // LED2
  TACTL &= ~TAIFG;
}

interrupt[TIMERA1_VECTOR] void
Timer_A_Clock (void)
{
  out_ausgang ^= 0x01;   // LED1
  TACCTL1 &= ~CCIFG;
}

Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anmerkung:

natürlich hab ich CCR0 und CCR1 vertauscht, der Wert von CCR0 muß doch
größer sein um Sinn zu machen!?!

und noch ein define:
#define     out_ausgang   P3OUT

Leider erreiche ich nicht die zuvor berechneten Frequenzen, die
Veränderung von CCR0 zeigt keinen nachvollziehbaren Einfluß?!?

Autor: Benjamin Johann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Beispiel, wie ich das gemeistert habe....
Weißt du, wie ich einen interrupt durch einen Port auslösen lasse -
geneuer, durch einen pin an Port 1?
Benni

Autor: m@is (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Benjamin,

danke für deine Antwort, ich schaue in der Mittagspause über Deinen
Code, wird mir sicher weiterhelfen.

Zu deiner Frage mit den Interrupts schau mal hier:

"MSP Probleme mit den Interrupts"
http://www.mikrocontroller.net/forum/read-2-59577.html

und im Dateianhang ein kleines Beispiel.

PS offene Eingänge können zu ungewünschten Interrupts führen, am besten
Pull-Ups dran, Taster auf jeden Fall entprellen ;-)

Autor: m@is (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
sorry, falsches Bsp angeklickt :-))

Autor: Benjamin Johann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo M@is!
Danke! Hab den fehler diese "Nacht" noch gefunden. Deine antwort hat
meinen fund aber auch noch bestätigt: Ich habe das Interrupt-Flag nicht
zurückgesetzt.
Die Eingänge habe ich einfach alle parallel geschaltet - dann liegen
sie definiert (und das eh schon über einen pull down).
Habe in einem sehr kelein Prog reaktionszeiten von rund 200-300 ns bei
8 MHz Quarz - finde ich etwas viel! Hast du erhfahrungen?
Benni

Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mir jetzt einen variablen Takt mit Continuos-Mode eingestellt,
ist denke ich die beste Lösung:

TACTL = TASSEL_2 + ID_0 + MC_2 + TAIE;


in der ISR wird der Zählerwert immer neu gesetzt:

TACCR0 = (TACCR0 + Schrittweite);
if (TACCR0 >= 0xffff)
{
TACCR0 = (TACCR0 - 0xffff);
}

mit Schrittweite kann man dann prima seine Zeit einstellen, analog bei
den beiden anderen Registern.
Auch ein wechseln während des Prg-ablaufs ist möglich.

Gruß m@is

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.