hallo,
mit dem MSP430 kann man mit den OUTMOD - Bits im TAxCCTLn - Register ja
bestimmte Pins direkt mit dem Erreichen des CCR-Wertes setzen, löschen,
oder toggeln lassen.
Ist es möglich, ohne das Hauptprogramm zu unterbrechen, hiermit ein
unterschiedliches Puls-Pausen-Verhältnis zu erreichen, oder müssten
dafür immer wieder neue, unterschiedliche, Werte in das CCR0 Register
geladen werden?
Ein unterschiedliches Puls-Pausenverhältnis scheint mir nur in dem
Continuous-Mode möglich zu sein, und dies würde ja wieder voraussetzen,
dass eine ISR betreten werde muss, die sodann Rechenzeit verschlingt...
Hat jemand eine Idee, man einen einzigen Pin mit einem unterschiedlich
langen ON-OFF-Verhältnis toggeln lassen kann, ohne dabei das
Hauptprogramm zu unterbrechen?
Schön wäre es ja, wenn ich die CCR0 und CCR1 - Interrupts beide auf
denselben Pin legen könnte..., dann wäre die Aufgabe leicht.
mfg
MSP430 schrieb im Beitrag #3082890:
> Schön wäre es ja, wenn ich die CCR0 und CCR1 - Interrupts beide auf> denselben Pin legen könnte..., dann wäre die Aufgabe leicht.
Genauso macht man es auch. Ohne jetzt nachgeguckt zu haben ist das
glaube ich OUTMOD_7 im Up-Mode des Timers. Dann hast du Set/Reset - also
die Hardware-PWM. Ohne ISR.
Wenn du den Wert ändern willst musst du natürlich die Werte neu setzen.
Aber halt ohne ISR.
hmmm, ok danke, da kommt mir ja gleich die nächste Frage, nämlich was es
genau mit den Befehlen
"Toogle/reset",
"Set/reset",
"Toggle/set"
und "reset/set"
auf sich hat?
Der Family-Guide verrät mir am Beispiel von "Toggle/set", dass der
Output toggled, wenn der Zählerstand ein beliebiges TAxCCRn erreicht.
Die vielleicht etwas doofe Frage: Es gibt doch meistens mehrere
CCRn-Register. Woher genau weiß der Controller, dass ich den Pin P1.0
toggeln möchte, wenn die CCR0, CCR1 und CCR2 Registerwerte erreicht
werden?
Was passiert, wenn ich die Register CCR3, CCR4 und CCR5 für andere
Zwecke nutzen möchte, und bei erreichen dieser Zählerstände eben nicht
toggeln will?
mfg
...und noch eine Anschlussfrage:
muss das bzw. die CCIE Flags gesetzt sein, wenn ich den OUTMOD nutze?
In den Set/reset-Modi wäre ja grundsätzlich das CCR0 und ein CCRn
beteiligt. Die frage also, ob beide CCIE gesetzt sein müssen.
MSP430 schrieb im Beitrag #3082975:
> Der Family-Guide verrät mir am Beispiel von "Toggle/set", dass der> Output toggled, wenn der Zählerstand ein beliebiges TAxCCRn erreicht.
Genau - im FamilyGuide siehst du ja die einzelnen Modi genau
beschrieben. Der Set/Reset arbeitet folgendermaßen:
CCR0 legt die Periodendauer fest, also die Zeit die insgesamt mit AN +
AUS vergeht. Wenn CCR0 erreicht wird, dann wird der Ausgang immer auf
Set, also high gestellt. Der Wert in beispielsweise CCR1 sagt, bei
welchem Wert der Reset erfolgt, also das Signal auf low geht. Das bleibt
dann solange low, bis CCR0 wieder kommt und den Pegel wieder auf high
setzt. Dann wieder CCR1 mit low usw... CCR1 muss folglich immer <= CCR0
sein. Damit bestimmst du die EIN- und AUS-Zeit.
Beispiel:
CCR0 hat 10000
CCR1 hat 7500
Dann ist dein Signal 75% an und 25% aus.
MSP430 schrieb im Beitrag #3082975:
> Es gibt doch meistens mehrere> CCRn-Register. Woher genau weiß der Controller, dass ich den Pin P1.0> toggeln möchte, wenn die CCR0, CCR1 und CCR2 Registerwerte erreicht> werden?
An den Pins steht z.B. TA0.1 - das ist dann CCR1, TA0.2 eben halt CCR2
usw. Und dass der Controller den Pin mit dem Timer verknüpfen soll, dass
sagst du ihm mit den PxSEL-Bits (Achtung: die neueren G-Varianten z.B.
haben zwei Register für SEL - DB gucken!)
MSP430 schrieb im Beitrag #3082975:
> Was passiert, wenn ich die Register CCR3, CCR4 und CCR5 für andere> Zwecke nutzen möchte, und bei erreichen dieser Zählerstände eben nicht> toggeln will?
Dann darfst du die Pins nicht in den Toggle-Mode bringen, siehe
vorherige Anmerkung. Wenn du den OUTMOD nicht dafür setzt, dann kannst
du natürlich auch ganz normal die CCRx für CaptureCompare o.ä.
verwenden.
MSP430 schrieb im Beitrag #3083098:
> muss das bzw. die CCIE Flags gesetzt sein, wenn ich den OUTMOD nutze?
Nein. Du willst ja keinen Interruot auslösen, das läuft alles in
Hardware. Nur für ein CaptureCompare musst du es setzen und dann
unbedingt auch eine ISR dafür haben, sonst kann der Controller ins leere
laufen und dein Programm hängt.
Schau dir doch mal die Code-Examples du den Controllern an - da ist doch
zu jeder Anwendung was dabei.
Gruß, Dennis