Forum: Compiler & IDEs MSP430: TIMER_A einstellen


von m@is (Gast)


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;
}

von m@is (Gast)


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ß?!?

von Benjamin Johann (Gast)


Angehängte Dateien:

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

von m@is (Gast)


Angehängte Dateien:

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 ;-)

von m@is (Gast)


Angehängte Dateien:

Lesenswert?

sorry, falsches Bsp angeklickt :-))

von Benjamin Johann (Gast)


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

von m@is (Gast)


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

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.