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:
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.
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.
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...
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?
>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.
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.
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.
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 :-)
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!
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...?