www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F449 Timer A


Autor: Selina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag

Ich muss ein paar Schrittmotortreiberprints auf ihre Funktion testen,
dafür brauche ich zwei Clocks, welche ich aber unabhängig voneinander 
ansteuern muss. Ich habe nun Timer A gewählt und bekomme am Pin 1.2 auch 
die gewünschte Frequenz. Ist es möglich, dass ich P1.0 gleichzeitig mit 
einer anderen Frequenz ansteuern kann? Oder muss ich dafür Timer B 
nehmen?

So hab ich das bis jetzt programmiert:
  //--------------------------------------------------------------------
     //Initialisierung Timer A
     //--------------------------------------------------------------------
  WDTCTL = WDTPW + WDTHOLD;     //Stop Watchdog
  WDTCTL = WDT_ADLY_250;         //Set Watchdog Timer interval to ~250ms
  IE1 |= WDTIE;                  //Enable Watchdog Timer interrupt

  P1DIR |= 0x0C;                 //P1.2 and P1.3 als Ausgänge definieren
  P1SEL |= 0x0C;                 //P1.2 and P1.3 Selektion derPinfunktionen
  CCTL1 = OUTMOD_7;              //Timer Modus 7 = Reset/Set 
  TACTL = TASSEL_2 + MC_1;       //Takt Modus = Up Mode 

 //------------------------------------------------------------------------
 //Unterprogramm frequenz
 //------------------------------------------------------------------------
void frequenz(int period, int duty, int setup) 
{
  CCR0 = period;       //PWM Period
  CCR1 = duty;         // CCR1 PWM duty cycle
     
  P4OUT = setup;       //Port 4 = x      x       x   x   0  0  0  0     
                       //         ENABLE CW/CCW  M1  M2  NC NC NC NC 
}

  

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An und fuer sich kannst du das mit nur einem Timer machen, wenn die 
hoehere Frequenz ein Vielfaches ist. Nimm Dir dann einfach die 
Grundfrequenz und zaehle ein Register hoch, welches bei dem Wert X die 
Funktion ausfuehrt.

Die Frage ist nur WARUM... du hast doch mehrere Timer und warum willst 
du die dann nicht nutzen.

Autor: Selina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite erst zum zweiten Mal mit dem MSP430 und fühle mich ein 
bisschen überfordert mit all den neuen Befehlen. Timer A hab ich 
ansatzweise verstanden, daher dachte ich, es sei sinnvoll zu Beginn nur 
mit einem Timer zu arbeiten. Ich weiss nicht genau, wo die Unterschiede 
zwischen Timer A und Timer B in der Befehlsliste liegen.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sind an sich beide gleich aufgebaut. Nur halt, dass sich die 
Register mit TAxxx und TBxxx unterscheiden. Es wuerde eventuell Sinn 
machen, nur mit einem zu arbeiten, wenn man Strom sparen muss/will.

Wie gesagt, man kann sich eine Grundfrequenz schaffen (z.B. 1kHz) und 
davon mit Registern, welche man beim Interrupt incrementiert, alle 
Vielfachen von 1KHz schaffen.
Das hat gleichzeitig den Vorteil, dass sich der Code relativ leicht 
nachverfolgen laesst.

Kannst eigentlich gut mit dem MSP spielen. Im Debug-Mode kannst du live 
die Register veraendern und schauen was passiert und viel kaputt kann 
man dabei auch nicht machen.

Hoffe ich konnte Dir helfen...

Autor: Selina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke ich werde einfach noch Timer B ansteuern, die Befehle sind 
sich wirklich sehr ähnlich. Das mit den Registern hab ich auch gesehen, 
danke für den Hinweis.
Muss man den Watchdog eigentlich unbedingt ausschalten oder ist das 
egal?

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Muss man den Watchdog eigentlich unbedingt ausschalten oder ist das egal?
Der muss aus, ansonsten gibt's einen Reset :)
Oder du nutzt halt die Watchdog Funktion und setzt ihn immer zurück.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Timer B kannst du aber nicht P1.0 ansteuern. Da geht nur der Timer 
A0 drauf. Da der Timer A 3 CCR-Register hat, kannst du 3 unabhängige 
Frequenzen in Hardware erzeugen lassen. Das geht mit den Output-Units, 
schau mal auf Seite 452 im User Guide. Das Bild ganz unten verdeutlicht 
ein bisschen, wie der Timer arbeitet. Ist zugegeben nicht ganz einfach, 
aber gerade die Timer machen den MSP430 so interessant, mit denen kann 
man so gut wie alles veranstalten. Du musst dir dann nur für deine 
Anwendung den passenden OutMod aussuchen.

Autor: Selina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab jetzt mal versucht Timer B anzusteuern, aber wenn ich an P2.2 
messe zeigt der KO nur Müll an... könnte dies an der Initialisierung 
liegen?
  //-----------------------------------------------------------------------
  //Initialisierung Timer B und 8kHz ausgeben an P2.2 
  //-----------------------------------------------------------------------
   CCTL1 = OUTMOD_7;              //Timer Modus 7 = Reset/Set 
   TBCTL = TBSSEL_2 + MC_1;       //Takt Modus = Up Mode  
   CCR0 = 63;                     //PWM Period
   CCR1 = 32;                     // CCR1 PWM duty cycle 


Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P2DIR und P2SEL richtig eingestellt?

Autor: Selina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaub eben schon... und den Taster, welcher normalerweise an P2.2 
hängt hab ich mit Hilfe des Dip Switches ganz abgehängt...
  P2DIR = 0xF4;          //Taster = Eingänge; LED's = Ausgänge,ausser P2.2 auf Ausgang (TimerB1)
  P2SEL = 0x04;          //Alle Funktionen ausser TimerB1 werden "abgeschaltet" 

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, bei Timer B muss das natürlich TBCCR0 und TBCCR1 heißen. Du 
schreibst ja mit CCR0 die Register von Timer A. Jetzt seh ich´s erst. 
TBCCTL1 genauso.

Autor: S. Z. (szimmi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens wrote:
> Das sind an sich beide gleich aufgebaut. Nur halt, dass sich die
> Register mit TAxxx und TBxxx unterscheiden. Es
Ganz so gleich sind sie dann doch nicht. Timer_B ist doppelt gepuffert. 
D.h. wenn man bei einer PWM das Tastverhältnis aendert, wird der Wert 
erst zu Beginn der neuen Periode uebernommen (konfigurierbar). Timer_A 
hat das nicht. Wenn man da einen neuen Wert ins Register schreibt, und 
der Timer ist dummerweise schon vorbei, dann fällt das Signal für 
aktuelle Periode einfach mal aus. Ich berichte da aus eigener 
unangenehmer Erfahrung :-)
Ist zwar fuer die meisten Faelle nicht relevant, aber wenn es auf jeden 
Impuls ankommt, sollte man da drauf achten :-)

Autor: Selina (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh das ist mir nicht aufgefallen, ich dachte da man nicht TACCR0 
schreibt, muss man auch nicht TBCCR0 schreiben, da hab ich wohl falsch 
gedacht.
Ich werds morgen auf jeden Fall einmal probieren, wahrscheinlich wirds 
dann funktionieren. Danke fuer eure Hilfe!

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Selina wrote:
> Oh das ist mir nicht aufgefallen, ich dachte da man nicht TACCR0
> schreibt, muss man auch nicht TBCCR0 schreiben, da hab ich wohl falsch
> gedacht.

Hm...wie soll der Kompiler das denn dann unterscheiden können...?

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.