Forum: Mikrocontroller und Digitale Elektronik PWM-Signal mit MSP430, TBCCR Problem


von Mike (Gast)


Lesenswert?

Hallo liebe Leute.
Ich bin relativ neu in uP Technik und stehe gerade vor einem kleinen 
Problem.
Ich habe am P4.0 und P4.1 EINEN Summer "hängen" (auf 2 Pins für größere 
Spg. wenn man einen normal und den anderen invertiert ansteuert).
Jetzt mein Problem:
Am 4.0 ist der TBO, 4.1 der TB1, 4.2 der TB2.
Laut meinen "Programm-versuchen" stellt man mit dem TBCCR0 die Pulslänge 
des PWM Signals ein und mit dem TBCCR1 und/oder TBCCR2 kann man dann die 
Pulsweiten einstellen. Oder liege ich da falsch??
Da ich aber den Summer mit 2 PWM Signalen ansteuern möchte liegt hier 
mein Problem: Wie kann ich mit dem TBCCR0 die Pulsweite einstellen, oder 
geht das überhaupt gar nicht und dient dieser nur zum einstellen der 
Pulslänge??

Bitte um tatkräftige Unterstützung ;)

mfg Mike

von Stefan (Gast)


Lesenswert?

>Ich habe am P4.0 und P4.1 EINEN Summer "hängen" (auf 2 Pins für größere
>Spg. wenn man einen normal und den anderen invertiert ansteuert).
Aha... wie genau steuert man beim MSP noch gleich einen Pin invertiert 
an (mit -3V)???

>Laut meinen "Programm-versuchen" stellt man mit dem TBCCR0 die Pulslänge
>des PWM Signals ein und mit dem TBCCR1 und/oder TBCCR2 kann man dann die
>Pulsweiten einstellen. Oder liege ich da falsch??
Das hängt von den Einstellungen der Output-Einheit zusammen. 
Normalerweise stellt man mit CCR0 die PWM-Frequenz ein und mit den CCRx 
die jeweilige Pulsbreite (oder nenn' es Duty-Cycle).

>Da ich aber den Summer mit 2 PWM Signalen ansteuern möchte...
Ich versteh's immer noch nicht... Ein Pin ist high, der andere low, da 
kommt beim Piepser immer der gleiche Spannungshub (Vcc) an!

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Ich hätt es mir auch nicht gedacht, theoretisch hast du recht dass immer 
3V anliegen müssten.
Aber diesen Tipp hab ich mal wo auf einer Webseite gelesen.
So brauchst du dein Signal nicht verstärken oder ähnliches und du hast 
am Summer ganze 6 V.
Beweis: siehe Bild (hier habe ich zwischen TB1 und TB2 gemessen und 
diese im gegentakt geschalten)

Weist du das zufällig wie man das einstellt, dass man auch mit dem CCR0 
die Puls weite einstellt und vielleicht mit einem anderen CCR die 
Frequenz?

Mit freundlichen Grüßen
Mike

PS. Sry für das unscharfe Bild, aber habs grad mit dem Oszi gemessen.

von Stefan (Gast)


Lesenswert?

Hmm... glaub ich Dir halt mal.
Zum ernsthaften Nachdenken hab ich jetzt keine Lust mehr.
Aber unter einem "Beweisfoto" verstehe ich was anderes!

Zur Gegentaktansteuerung brauchst Du m.E. Outputmode 3 u. 7, die sind 
genau gegenläufig. Nur funktionieren die beiden eben nicht mit CCR0. 
Musst also auf 4.1 und 4.2 umlöten!

von Torsten B. (tbrox)


Lesenswert?

es wäre toll wenn du diesen Web-Hinweis wiederfindest
interessehalber

von Mike (Gast)


Lesenswert?

an Stefan:
Was verstehst du sonst unter Beweisphoto?

Leider kann ich den nicht mehr umlöten, da dies bereits auf einer nicht 
von mir fertig hergestellten platine ist und der TB2 auch bereits 
vergeben ist.
Und ich verwende bereits Outputmode 2 und 6.

Gibt es da nicht eine andere Lösung?
Vieleicht mit einem CLK die 2 PINs toggln lassn?


an Thorsten:
Nein, leider weiß ich das nicht mehr. Aber es war irgendwo in einem 
anderen Forum.
Aber es funktionert auf diese Weise ;)

von Stefan (Gast)


Lesenswert?

>Was verstehst du sonst unter Beweisphoto?
Eins auf dem man die wichtigen Parameter erkennt ;-)

>Und ich verwende bereits Outputmode 2 und 6.
Die beiden gehen für CCR0 ja auch nicht!

Ich verstehe noch nicht so ganz den Sinn dieser PWM-Geschichte.
Ich vermute mal, Du willst ein akustisches Signal erzeugen?
Dann ist dafür die Frequenz entscheidend und nicht der Duty-Cycle. Wobei 
man wohl idealerweise DC=50% wählen würde.
Oder habe ich jetzt den entscheidenden Ansatz, der eine "echte" PWM 
notwendig macht verpasst?!

Dann nimm halt outmode4 (toggle) mit CCR0 = CCR1 als frequenzbestimmende 
Komponente. Vorher einmal einen output setzen und anderen output 
löschen (z.B. über outmode 0 und OUTx = 0/1), damit die Gegenläufigkeit 
erreicht wird.

Oder ganz anders: Timer-Interrupt über z.B. CCR0 und in der ISR dann 4.0 
und 4.1 gegentaktmäßig toggeln.

von Mike (Gast)


Lesenswert?

Ja da hast du recht, ich will ein akustisches Signal erzeugen.
Und ich dachte mir ich machs so, dass wenn der Summer eh schon am Timer 
Pin hängt dann mach ich es über ein PWM Signal mit DC = 50%.

Deine Idee mit dem Outmode 4 mit CCR0 = CCR1 versteh ich nicht so ganz 
wie du es meinst. Vielleicht könntest du mir es ein wenig genauer 
erklären, oder vl gleich die paar Zeilen Code verraten.

Ich machs jetzt einmal so, dass ich die BCSCTL und DCOCTL einstell und 
dann mit dieser Frequez die Pins im Gegentakt toggle.
So erspar ich mir dir ISR.

Gruß
Mike

von Stefan (Gast)


Lesenswert?

>Deine Idee mit dem Outmode 4 mit CCR0 = CCR1 versteh ich nicht so ganz
>wie du es meinst.
Hast Du Dir eigentlich mal den User-Guide zum Thema Output-Modes näher 
angeschaut?
Outmode 4 (toggle): Wie der Name schon sagt, jedesmal wenn der Timer den 
Wert CCRx erreicht, toggelt der entsprechende Ausgang P4.x! Da Du P4.0 
und P4.1 im Gegentakt betreiben willst, musst Du also vorher einmal 
einen der Ausgänge auf 1 setzen, während der andere auf 0 bleibt, 
ansonsten wäre das Toggeln von 4.0 und 4.1 ja im Gleichtakt!
Desweiteren darf der Timer natürlich nur bis zum Wert CCR0 laufen und 
muss dann wieder von 0 beginnen, sonst stimmt ja die Frequenz, die Du 
mit CCR0 (und CCR1) eingestellt hast, nicht!

>Ich machs jetzt einmal so, dass ich die BCSCTL und DCOCTL einstell und
>dann mit dieser Frequez die Pins im Gegentakt toggle.
Das ist dann so ziemlich die ineffizienteste Methode, die es gibt.
Außerdem änderst Du damit ja nicht nur die Tonfrequenz, sondern auch den 
Takt für die CPU...

>So erspar ich mir dir ISR.
Das wäre allerdings (außer der PWM-Variante) so ziemlich die 
effizienteste Methode!

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.