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
>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!
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.
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!
es wäre toll wenn du diesen Web-Hinweis wiederfindest interessehalber
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 ;)
>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.
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
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.