Moin, man vergebe mir, dass ich im Betreff eine Null schiebe und dann auch noch wo es doch schon der default-Wert ist. Soll in der Übersicht nur genauer beschreiben, was ich möchte. ZIEL: Ich möchte PWM-Ausgabe Abschalten OHNE in die PWM eingreifen zu müssen. Der Timer soll weiter laufen, nur eben ohne Aktivitäten an dem entsprechenden Pin. Folgende Ausgangssituation: Timer1 konfiguriert zu "Compare Output Mode, Fast PWM" COM1A1=1 COM1A0=0 (non inverting mode @ PB5) So im DB steht folgendes: "OC1A, Output Compare Match A output: The PB5 pin can serve as an external output for the Timer/Counter1 Output Compare A. The pin has to be configured as an output (DDB5 set (one)) to serve this function. The OC1A pin is also the output pin for the PWM mode timer function." Was passiert an dem Pin wenn ich ihn als Eingang definiere? Falls schon mal jemand diese Sache erlebt hat, wäre eine kurze Antwort schön. Als zweite Alternative gäbe es dann noch: COM1A1=0 COM1A0=0 (Normal port operation @ PB5) Also den Ausgangspin von der PWM-Einheit abkoppeln. Welchen Wert nimmt der Pin denn dann an? Den zuletzt durch die PWM gegebenen oder den zuletzt durch PORTB festgelegten? Auch hier die Bitte an denjenigen, der das Verhalten kennt, eine kurze Antwort zu schreiben. Beiträge die den Sinn der Sache in Frage stellen oder das Ziel verfehlen, bitte ich zu vermeiden. Grüße aus dem verschneiten Hamburg
Ich kann Dir die Frage nicht mit 100%-iger Sicherheit beantworten, aber im allgemeinen stehen Pins, deren Alternativ-Funktion genutzt werden, nicht mehr als I/O-Pins zur Verfuegung. Leg doch einfach den Compare auf TOP oder BOTTOM um die PWM mit Dauer-0 bzw. Dauer-1 weiterlaufen zu lassen... Volker
Hi >If one or both of the COMnC1:0 bits are written to one, >the OCnC output overrides the normal port functionality of the I/O pin it >is connected to. However, note that the Data Direction Register (DDR) bit >corresponding to the OCnA, OCnB or OCnC pin must be set in order to enable >the output driver. Wenn du schon das Datenblatt liest, warum dann nicht richtig? MfG Spess
Hallo und erstmal vielen Dank für die Antworten. @Volker Genau diesen Eingriff in die PWM möchte ich vermeiden. Die soll einfach vor sich hinlaufen. @spess Deiner Aussage entnehme ich, dass am Pin nichts passiert, so lange er im DDR als Eingang definiert ist. Gruß, Olof
Nachtrag: aber was für einen Zustand hat der Pin dann? Entsprechend dem PORT-Register den Pull-Up an oder aus? Generell Hi-z? Gruß, Olof
Hi >@spess >Deiner Aussage entnehme ich, dass am Pin nichts passiert, so lange er im >DDR als Eingang definiert ist. Das ist eine Aussage von Atmel und hat sich auch in der Praxis bestätigt. MfG Spess
In den ATMega-Datenblättern gibt es unter "Alternate Port Functions" ein Innenschaltbild eines Ports. Der Zusammenhang zwischen den einzelnen Symbolen dort und den I/O-Modulen mit ihren Signalnamen (wie: OC1B wird PVOV im Schaltbild) ist im nachfolgenden Text für jedes Port beschrieben.
Hallo Spess, der Bezug zur Praxis war mir wichtig. Papier ist geduldig und TFT´s auch. Ich denke aber die Methode, COM1A1=0 COM1A0=0 zu setzen ist sauberer und dauert auch nicht länger als DDRB zu ändern. Gruß, Olof
Olof Gutowski schrieb: > @Volker > > Genau diesen Eingriff in die PWM möchte ich vermeiden. Die soll einfach > vor sich hinlaufen. Achso. Mir erschliesst sich der Sinn dahinter zwar nicht so ganz, muss er aber ja auch nicht. ;) Volker
Volker Schulz schrieb: > Olof Gutowski schrieb: >> @Volker >> >> Genau diesen Eingriff in die PWM möchte ich vermeiden. Die soll einfach >> vor sich hinlaufen. > > Achso. Mir erschliesst sich der Sinn dahinter zwar nicht so ganz, muss > er aber ja auch nicht. ;) > > Volker Hallo Volker, Manchmal muss man Sachen festsetzen um nicht zu viele Stellknöpfe zu haben. ;) Nein Sinn dieser Sache ist, dass ich nicht abwarten kann bis der derzeit laufende PWM-Zyklus durch ist. Sobald der Interrupt für die Strombegrenzung kommt, muss der Ausgang auf LOW gezogen werden. Unabhängig an welche Stelle des PWM-Zyklus man sich befindet. Eingesetzt werden soll das an einer PWM-Drehzahlregelung für DC-Motoren. Sobald die Endstufe öffnet steigt der Strom durch den Motor, bedingt durch sein induktives Verhalten, stetig bis zu einem gewissen Wert an. Sagen wir die ON-Zeit der PWM sei 1ms und nach 0,6ms ist der max. Strom erreicht, dann möchte ich darauf sofort reagieren können. Beim nächsten Zyklus geht das gleiche dann wieder von vorne los. Also die PWM möchte 1ms öffnen, aber nach 0,6ms reagiert die Strombegrenzung und schaltet ab. Gruß, Olof
Klingt interessant. Aber muesstest Du dann nicht jedes Mal zu Beginn der Periode den Pin wieder auf Ausgang schalten (falls er durch den Interrupt auf Eingang gezogen wurde um die PWM abzuschalten)? Da waere ein Deaktivieren und Reaktivieren des PWM Timers doch genauso moeglich, oder? Volker
Volker Schulz schrieb: > Klingt interessant. > > Aber muesstest Du dann nicht jedes Mal zu Beginn der Periode den Pin > wieder auf Ausgang schalten (falls er durch den Interrupt auf Eingang > gezogen wurde um die PWM abzuschalten)? Da waere ein Deaktivieren und > Reaktivieren des PWM Timers doch genauso moeglich, oder? > > Volker Hoffentlich funktioniert das auch... Im Datenblatt steht: "In non-inverting Compare Output mode, the Output Compare (OCnx) is cleared on the Compare Match between TCNTn and OCRnx, and set at BOTTOM." Somit werde ich einen Interrupt auf "Compare match" ("The OCnx interrupt flag will be set when a Compare Match occurs.") triggern. In dem schalte ich den Pin wieder zum Timer (COM1A1=1 und COM1A0=0), da er dann ja seitens der PWM eh auf LOW ist. Gruß, Olof
Olof Gutowski schrieb: > Hoffentlich funktioniert das auch... Ich druecke die Daumen! Lass es uns anschliessend wissen. > Im Datenblatt steht: > "In non-inverting Compare Output mode, the Output Compare (OCnx) is > cleared > on the Compare Match between TCNTn and OCRnx, and set at BOTTOM." Ich wusste nicht dass der Timer auch im PWM-Mode einen Interrupt auf Compare-Match ausloesen kann... Vermutlich weil ich es noch nie brauchte. ;) Wenn das aber moeglich ist, klingt das nach einer soliden Loesung. Wenn Du aber Compare-Match = TOP hast muesstest Du auf Ausgang schalten noch bevor der Timer das naechste mal tickt. Volker
> Ich wusste nicht dass der Timer auch im PWM-Mode einen Interrupt auf > Compare-Match ausloesen kann... Vermutlich weil ich es noch nie > brauchte. ;) Wenn das aber moeglich ist, klingt das nach einer soliden > Loesung. > > Wenn Du aber Compare-Match = TOP hast muesstest Du auf Ausgang schalten > noch bevor der Timer das naechste mal tickt. > > Volker Ich hoffe, dass das solide wird. Schöner Punkt, hatte ich noch nicht bedacht. Und dabei ist der ja sogar recht wichtig, wenn man das ganz als reine Strombegrenzung arbeiten lassen möchte. Da die PWM mit einem Grundtakt von so um 10khz laufen soll (eher weniger, mal sehen wie sich der Motor anstellt und wie es klingt) glaube ich nicht, dass es ein Problem gibt, wenn der Pin die paar Takte (bei 18,xyz MHz) später erst an die PWM gekoppelt und damit HIGH wird. Mit dem Start des neuen PWM-Zyklus wird ja zeitgleich der Compare-Match-Int aufgerufen, in dem der Pin an die PWM gebunden wird. Gruß, Olof
Ergänzung. Evtl. kann man auch einen anderes Compare-Register nehmen, welches stets ein paar Count niedriger ist als des Register für OC1A. Der M64 hat ja pro 16-bit Timer 3 Stck davon.
Mit einem Prescaler von 8 und einer PWM-Aufloesung von 8 Bit kaemst du dann ja so auf eine Frequenz von ca. 8.8 KHz... Und 8 Takte sollten wohl reichen um das DDR zu setzen. Du hast aber vermutlich Recht, dass es eigentlich egal ist, dass der Duty-Cycle bei der Periode nach der Strombegrenzung im Zweifel etwas kuerzer ausfaellt. Koenntest Du sogar als Feature verkaufen! ;) Volker
Volker Schulz schrieb: > Mit einem Prescaler von 8 und einer PWM-Aufloesung von 8 Bit kaemst du > dann ja so auf eine Frequenz von ca. 8.8 KHz... Und 8 Takte sollten wohl > reichen um das DDR zu setzen. > > Du hast aber vermutlich Recht, dass es eigentlich egal ist, dass der > Duty-Cycle bei der Periode nach der Strombegrenzung im Zweifel etwas > kuerzer ausfaellt. Koenntest Du sogar als Feature verkaufen! ;) > > Volker Es verleitet natürlich zu der Idee, die ON-time entsprechend durch eine Veränderung des Compare-Wertes einzukürzen, wenn die Strombegrenzung zugeschlagen hat. Nur wie sollte man die Bedingung für das Aufheben dieser Verkürzung setzen? Daher in jedem Zyklus das gleiche Spiel. Nebenbei hat man so sicher eine Aussage, ob man in die Strombegrenzung fährt oder nicht. Finde ich von der Theorie her ganz nett. Ich melde mich, wenn es in Hardware umgesetzt ist und berichte dann kurz über die Erfahrungen damit. Gruß, Olof
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.