Forum: Mikrocontroller und Digitale Elektronik MSP430 - ON-OFF-Verhältnis mit CCR-Timer


von MSP430 (Gast)


Lesenswert?

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

von Dennis (Gast)


Lesenswert?

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.

von MSP430 (Gast)


Lesenswert?

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

von MSP430 (Gast)


Lesenswert?

...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.

von Dennis (Gast)


Lesenswert?

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

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.