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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.