kann mir jmd auf hochdeutsch erklären, was diese compare latches machen? Suche nach einer Möglichkeit,das die Eigenschaft eines Timer (z.B. Wert von CCR0) zu einem bestimmten Zeitpunkt zu ändernh. Ich weiß nicht, ob dass das Gesuchte ist.
Del schrieb: > kann mir jmd auf hochdeutsch erklären, was diese compare latches > machen? > Suche nach einer Möglichkeit,das die Eigenschaft eines Timer (z.B. Wert > von CCR0) zu einem bestimmten Zeitpunkt zu ändernh. Ich weiß nicht, ob > dass das Gesuchte ist. hat jedmand eine Ahnung
Del schrieb: > kann mir jmd auf hochdeutsch erklären, was diese compare latches machen? > Suche nach einer Möglichkeit,das die Eigenschaft eines Timer (z.B. Wert > von CCR0) zu einem bestimmten Zeitpunkt zu ändernh. Ich weiß nicht, ob > dass das Gesuchte ist. Ist es nicht. Die Compare Register der Timer sind gepuffert. Die Puffer heißen Compare Latch. Und die von dir eingekreisten Bits bestimmen, wann der geschriebene Wert vom Latch ins Register übertragen wird. Falls dir "Compare" nichts sagen sollte - RTFM! Wenn du ernsthaft Hilfe erwartest, dann beschreibe genau was du tun willst. Irgendwelche Timereinstellungen zu einem genauen Zeitpunkt ändern zu wollen, ist seltenst eine gute Lösung.
Axel S. schrieb: > Wenn du ernsthaft Hilfe erwartest, dann beschreibe genau was du tun > willst. Irgendwelche Timereinstellungen zu einem genauen Zeitpunkt > ändern zu wollen, ist seltenst eine gute Lösung. zur Erzeugung eines PWM Signals mit variabler Frequenz. D.h., dass ich nach jeder Periode sowohl die Frequenz als auch Pulsbreite ändere, indem ich in der ISR eines zweiten Timers eine entsprechende Variable ändere. Die Wechselzeit des zweiten Timers sollte dabei natürlich schneller sein als die Frequenz, dass das eign Signal erzeugt. Wenn ich aber jz die Frequenz über die Variable auf eine kleinere Frequenz einstelle, kann das zum Überlauf führen.
Das Latch hat den Sinn, daß der neue Comparewert erst beim Nulldurchgang gültig wird. Wird ohne Latch ein kleinerer Comparewert geladen, kann dieser schon vorbei sein und dann muß der Timer ne volle Runde machen, die bei 32Bit schon ne kleine Ewigkeit dauert.
Del schrieb: > Die Wechselzeit des zweiten Timers sollte dabei natürlich schneller sein > als die Frequenz, dass das eign Signal erzeugt. Eher umgekehrt. Ein Wechsel sollte wenigstens eine PWM-Periode abwarten, besser mehrere. Mit eingeschaltetem Latch ist auch kein schnellerer Wechsel möglich.
Del schrieb: > Axel S. schrieb: >> Wenn du ernsthaft Hilfe erwartest, dann beschreibe genau was du tun >> willst. Irgendwelche Timereinstellungen zu einem genauen Zeitpunkt >> ändern zu wollen, ist seltenst eine gute Lösung. > > zur Erzeugung eines PWM Signals mit variabler Frequenz. D.h., dass ich > nach jeder Periode sowohl die Frequenz als auch Pulsbreite ändere Wenn der Timer deines µC einen PWM-Modus hat, wo das eine Compare-Register die Periodendauer vorgibt und ein anderes den PWM-Umschaltzeitpunkt, dann sind diese Latches genau das richtige. Du kannst damit dann zu einem beliebigen Zeitpunkt innerhalb des PWM-Zyklus die beiden Register ändern und am Ende des aktuellen PWM-Zyklus werden die Werte aus den Latches in die Register übernommen. > indem > ich in der ISR eines zweiten Timers eine entsprechende Variable ändere. Dazu brauchst du keinen zweiten Timer. Öfter als einmal pro PWM-Zyklus brauchst du die Werte ja nicht zu ändern.
Peter D. schrieb: > Das Latch hat den Sinn, daß der neue Comparewert erst beim > Nulldurchgang > gültig wird. > Wird ohne Latch ein kleinerer Comparewert geladen, kann dieser schon > vorbei sein und dann muß der Timer ne volle Runde machen, die bei 32Bit > schon ne kleine Ewigkeit dauert. das ist GENAU das was ich meine =)
Axel S. schrieb: > Wenn der Timer deines µC einen PWM-Modus hat, wo das eine > Compare-Register die Periodendauer vorgibt und ein anderes den > PWM-Umschaltzeitpunkt, dann sind diese Latches genau das richtige. > > Du kannst damit dann zu einem beliebigen Zeitpunkt innerhalb des > PWM-Zyklus die beiden Register ändern und am Ende des aktuellen > PWM-Zyklus werden die Werte aus den Latches in die Register übernommen. arbeite mit dem MSP430 f5529, wäre echt sexy zu wissen wie das geht. Die timer verfügen über eine PWM funktion, mir ist trotzdem nicht so ganz klar wie du das meinst
Peter D. schrieb: > Eher umgekehrt. Ein Wechsel sollte wenigstens eine PWM-Periode abwarten, > besser mehrere. Mit eingeschaltetem Latch ist auch kein schnellerer > Wechsel möglich. aber wie kann man dann eine flüssig steigende Frequenz realisieren?
Del schrieb: > arbeite mit dem MSP430 f5529, wäre echt sexy zu wissen wie das geht. Das Rumgeblödel nennst du arbeiten? Du kannst keine Frage verständlich stellen, kannst kein Datenblatt lesen, verstehst keine Erklärungen, ... du kannst eigentlich nur rumirren und rumsülzen! Sexy ist das ganz sicher nicht, eher eine Zumutung! Warum Talentfreie wie du, z.B. nicht lieber Hunde ausführen gehen, verstehe ich nicht. Dem Hund wäre dein Gesülze doch egal, aber uns nicht!
Del schrieb: > Peter D. schrieb: >> Ein Wechsel sollte wenigstens eine PWM-Periode abwarten, >> besser mehrere. Mit eingeschaltetem Latch ist auch kein schnellerer >> Wechsel möglich. > > aber wie kann man dann eine flüssig steigende Frequenz realisieren? Streng genommen: gar nicht. Der Teilerfaktor ist eine ganze Zahl, damit kannst du nur diskrete Frequenzen erzeugen. Beim Wechsel gibt es dann immer einen Sprung. Vielleicht erzählst du einfach mal, was die eigentliche Aufgabe ist.
Axel S. schrieb: > Streng genommen: gar nicht. Der Teilerfaktor ist eine ganze Zahl, damit > kannst du nur diskrete Frequenzen erzeugen. Beim Wechsel gibt es dann > immer einen Sprung. haha immer diese Missverständnisse =) ich möchte eine Frequenzband diskret durchlaufen. Von 100 Hz bis 2000 Hz.Das macht z.b. timer B. Habe meine Wechselzeit auf 2000 Hz gelegt (GRUND DAFÜR IST DOCH KLAR? möchte nach jeder periode eine neue Frequenz einstellen können)(das macht timer A) . D.h. dass alle 2000 Hz eine ISR aufegrufen wird, in der die nächste Frequenz dem CCR-Register des timer B zugewiesen wird. Würde entsprechend CLLD_1 setzten Jetzt das Problem: wie würde man den diesen PWM Generator realisieren, wenn man für Timer A kleine Zeiten wählt. und zwar so kleine zeiten, dass ein Wechsel der CCR-werte MEHRMALS erfolgt, bevor die erste Periode durchlaufen wurde. (das ist bei 2000 Hz der fall) normalerweise würden ja die Werte immer wieder überschrieben werden, sodass nur der Wert übernommen wird, der im Moment des Nulldurchganges gesetzt wurde
Del schrieb: > Axel S. schrieb: >> Streng genommen: gar nicht. Der Teilerfaktor ist eine ganze Zahl, damit >> kannst du nur diskrete Frequenzen erzeugen. Beim Wechsel gibt es dann >> immer einen Sprung. > > haha immer diese Missverständnisse =) > > ich möchte eine Frequenzband diskret durchlaufen. Von 100 Hz bis 2000 > Hz.Das macht z.b. timer B. Habe meine Wechselzeit auf 2000 Hz gelegt > (GRUND DAFÜR IST DOCH KLAR? möchte nach jeder periode eine neue Frequenz > einstellen können) Das ergibt keinen Sinn. Eine Frequenz kannst du nur für ein periodisches Signal angeben. Wenn du eine Frequenz von 100Hz ausgeben willst, dann kannst du frühestens nach Ablauf einer Periode die Frequenz ändern. Also maximal mit 100Hz und nicht mit 2kHz. > Jetzt das Problem: wie würde man den diesen PWM Generator realisieren, > wenn man für Timer A kleine Zeiten wählt. und zwar so kleine zeiten, > dass ein Wechsel der CCR-werte MEHRMALS erfolgt, bevor die erste Periode > durchlaufen wurde. (das ist bei 2000 Hz der fall) Wenn du am Timer (sagen wir mal: am Endwert) mehrfach innerhalb einer Periode herumstellst, dann wird das bestenfalls bewirken, daß du frühere Einstellungen überschreibst, bevor sie irgendeinen Effekt gehabt haben können. Es kann aber auch passieren, daß der Timer den Endwert überspringt. Einfaches Beispiel: ein 8-Bit-Timer, eingestellt auf den Endwert 100. Der Timer läuft los. Als er bei 80 ist, setzt du den Endwert auf 50. Jetzt wird der Timer bis 255 laufen, auf 0 zurückspringen und erst im nächsten Durchlauf den Endwert von 50 respektieren. Und genau um so etwas zu vermeiden, sind die Compare-Register typischerweise gepuffert. Damit man sie nicht innerhalb des laufenden Zyklus überschreiben kann. > normalerweise würden ja die Werte immer wieder überschrieben werden, > sodass nur der Wert übernommen wird, der im Moment des Nulldurchganges > gesetzt wurde Das ist nicht "normalerweise". Das ist das was passiert, wenn du den Timer so konfigurierst, daß die Compare-Register erst beim Überlauf des Timers aus den Latches geladen werden. "Normal" ist der ungelatchte Fall, wo du direkt in das Compare-Register schreibst. Ohne Latch.
Axel S. schrieb: > Das ergibt keinen Sinn. Eine Frequenz kannst du nur für ein > periodisches Signal angeben. Wenn du eine Frequenz von 100Hz ausgeben > willst, dann kannst du frühestens nach Ablauf einer Periode die Frequenz > ändern. Also maximal mit 100Hz und nicht mit 2kHz. genau, das Signal vom dem ich rede, verändert seine Frequenz und seine Pulsbreite, sobald eine Periode durchlaufen wurde. Wie ein PWM Signal mit variabler Frequenz.Die Wechselzeit soll mindestens genauso schnell, wie die größte Frequenz sein, damit nach jeder Frequenz die Periode geändert wird. Deswegen 2000Hz Axel S. schrieb: > Das ist nicht "normalerweise". Das ist das was passiert, wenn du den > Timer so konfigurierst, daß die Compare-Register erst beim Überlauf des > Timers aus den Latches geladen werden. > > "Normal" ist der ungelatchte Fall, wo du direkt in das Compare-Register > schreibst. Ohne Latch. genau. das meinte ich Axel S. schrieb: > Es kann aber auch passieren, daß der Timer den Endwert > überspringt. Einfaches Beispiel: ein 8-Bit-Timer, eingestellt auf den > Endwert 100. Der Timer läuft los. Als er bei 80 ist, setzt du den > Endwert auf 50. Jetzt wird der Timer bis 255 laufen, auf 0 > zurückspringen und erst im nächsten Durchlauf den Endwert von 50 > respektieren. das Verhalten konnte ich auch so beobachten. Aber wie löse ich das Dilemma mit der Wechselzeit. Übrigens, danke das du die Geduld hast.
rocket schrieb: > Aber wie löse ich das > Dilemma mit der Wechselzeit. Mit Dilemma ist gemeint, das ich nach jeder Periode eine neue Pulsbreite, und Frequenz haben möchte will. Ich hatt es noch nicht scharf formuliert: das frequenzband wird diskret in 50 Hz-Schritten durchlaufen.
Del schrieb: > rocket schrieb: >> Aber wie löse ich das >> Dilemma mit der Wechselzeit. > > Mit Dilemma ist gemeint, das ich nach jeder Periode eine neue > Pulsbreite, und Frequenz haben möchte will. Welches Dilemma? Wurde doch schon gesagt: Axel S. schrieb: > Wenn der Timer deines µC einen PWM-Modus hat, wo das eine > Compare-Register die Periodendauer vorgibt und ein anderes den > PWM-Umschaltzeitpunkt, dann sind diese Latches genau das richtige. > > Du kannst damit dann zu einem beliebigen Zeitpunkt innerhalb des > PWM-Zyklus die beiden Register ändern und am Ende des aktuellen > PWM-Zyklus werden die Werte aus den Latches in die Register übernommen. Und nein, du brauchst keinen zweiten Timer. So konfigurieren, daß die Latches beim Nulldurchgang übernommen werden. Den Überlauf-Interrupt für den Timer aktivieren und in der ISR die neuen Werte für TOP und PWM in die Compare-Latches schreiben. Die werden dann am Ende des gerade laufenden Zyklus aktiv.
Axel S. schrieb: > So konfigurieren, daß die > Latches beim Nulldurchgang übernommen werden. das würde ich dann durch setzen vonn CLLD_1 eins machen Axel S. schrieb: > Den Überlauf-Interrupt für > den Timer aktivieren weiß ich nicht, was du meinst. du meinst die ISR, wenn CCRO erreicht ist? Axel S. schrieb: > TOP top?
Axel S. schrieb: > Den Überlauf-Interrupt für > den Timer aktivieren wenn man es so macht wie du beschreibst, würde es doch zu keinem Überlauf kommen. Kannst du mir das nochmal erklären?
Del schrieb: > Axel S. schrieb: >> Den Überlauf-Interrupt für >> den Timer aktivieren > > wenn man es so macht wie du beschreibst, würde es doch zu keinem > Überlauf kommen. Kannst du mir das nochmal erklären? Wenn der Zähler den konfigurierten TOP Wert erreicht und zurück auf 0 springt, dann ist das im Prinzip auch ein Überlauf. Ich schau jetzt nicht für dich ins Manual deines µC, um nachzusehen für welche Timer-Events da jeweils in Interrupt generiert werden kann und wie der Hersteller das Event genannt hat.
Axel S. schrieb: > Wenn der Zähler den konfigurierten TOP Wert erreicht und zurück auf 0 > springt, dann ist das im Prinzip auch ein Überlauf. Ich schau jetzt > nicht für dich ins Manual deines µC, um nachzusehen für welche > Timer-Events da jeweils in Interrupt generiert werden kann und wie der > Hersteller das Event genannt hat. ah okay, du hast mit Überlauf einfach etwas anderes gemeint. So wie du es beschreibst, ist es der Interrupt von CCR0. Danke Dir. Aber das bedeutet auch, das der Timer, wenn er anfängt zu zählen, zweimal die gleiche Periode/ Frequenz hat,bis der neue gesetzt wird.
Del schrieb: > Aber das > bedeutet auch, das der Timer, wenn er anfängt zu zählen, zweimal die > gleiche Periode/ Frequenz hat,bis der neue gesetzt wird. Nicht notwendig. Du setzt Frequenz und Pulsweite, startest den Timer und setzt sofort die Werte für die nächste Periode. Ab dann in der ISR. Du kannst das ja in eine eigene Funktion verpacken, die du einmal aus dem Hauptprogramm und danach immer aus der ISR aufrufst. Dann brauchst du den Code (und die Logik) nicht zu duplizieren.
Axel S. schrieb: > Du setzt Frequenz und Pulsweite, startest den Timer und setzt sofort die > Werte für die nächste Periode. Ab dann in der ISR. Du kannst das ja in > eine eigene Funktion verpacken, die du einmal aus dem Hauptprogramm und > danach immer aus der ISR aufrufst. > > Dann brauchst du den Code (und die Logik) nicht zu duplizieren. habe ich verstanden, danke dir!
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.