Hallo, ich bin neue hier und völlig verzweifelt und hoffe hier auf Hilfe. Ich stehe kurz vor meiner Mikroprozessortechnikklausur ( Grundlagen ) und mir macht eine Aufgabenstellung große Probleme: Ich habe ein 8-Bit-Timer mit den eine PWM-Signal erzeuge. Davon von möchte ich die Periodendauer errechnen ohne Vorteiler. Das ist nicht weiter schwierig: T= (2^N)*Takt= 32 Mikrosekunden. Jetzt soll das PWM-Signal eine Frequenz von 15,625 Hz haben und ein Tastverhältnis von 3:1 (ein:aus) besitzen. Welcher Vorteiler (1,8,64,256,1024) und welcher Umschaltwert des Timers muss gewählt werden, um diese Forderungen zu erfüllen? Ich hoffe das mir einer Schritt für Schritt erklären kann wie vorzugehen ist. Ich danke schonmal im voraus Smiley.
Dennis Schwarz schrieb: > Das ist nicht weiter schwierig: T= (2^N)*Takt= 32 Mikrosekunden. Aber nur, wenn ein Takt 32µs/(2^n) dauert. ;-) > Jetzt soll das PWM-Signal eine Frequenz von 15,625 Hz haben und ein > Tastverhältnis von 3:1 (ein:aus) besitzen. > Welcher Vorteiler (1,8,64,256,1024) und welcher Umschaltwert des Timers > muss gewählt werden, um diese Forderungen zu erfüllen? Na ja, wenn das PWM-Signal eine Frequenz von 15,625 Hz haben soll, muss der Takt so weit heruntergeteilt werden, dass der Timer von der PWM-Einheit für eine Runde 1/15,625 Hz = 64 ms braucht.
Hmm okay, aber welcher Umschaltwert und Vorteiler muss gewählt werden? LG
Dennis Schwarz schrieb: > Hmm okay, aber welcher Umschaltwert und Vorteiler muss gewählt werden? Das kommt drauf an, welche Taktfrequenz am Eingang vom Vorteiler anliegt und wieviel Takte die PWM-Einheit für eine Periode braucht. Der Umschaltwert muss so gewählt werden, dass sich innerhalb einer Periode der PWM-Einheit das gewünschte Tastverhältnis ergibt (3-Satz).
Hmm okay, das steht leider nicht dabei. Habe gedacht da gibt es eine allgemeine Formel. Lg
Sieh mal hier FAQ: Timer Wenn du das gelesen und verstanden hast, dann lachst du über deine Frage und .... löst sie ganz einfach. Man braucht nicht für alles vorgekaute Formeln. Verstehen was abgeht und den Hausverstand benutzen .... damit kommt man schon recht weit. Nur darauf einlassen muss man sich halt mal und nicht gleich den Korn in die Flinte schütten.
Dennis Schwarz schrieb: > Habe gedacht da gibt es eine allgemeine Formel. Die meinte ich mit "3-Satz" ;-)
Also es wir von einer Taktfrequenz von 8 Mhz ausgegangen. Jetzt braucht er für eine Periode 32 Mikrosekunden . So ich möchte eine Frequenz haben von 15,625 Hz und ein Tastverhältnis von 3:1 . Das heisst er muss für eine Runde 64 ms brauchen. Ich verstehe dann nicht mit welchen Vorladewert und Vorteiler (1,8,64,256,10249 ich benutzen soll LG
Also ich habe jetzt den Vorteiler 1024 der braucht 16,384 ms . Den brauch ich jetzt nur noch anpassen. Mit Voraldewert und Vergleichswert
Meiner Meinung nach ist das so: Dein Timer braucht 32,768ms zwischen 2 Überläufen bei Vorteiler 1024. Rechnung: 1/(8MHz) * 1024*2^8 = 32,768 ms. Wenn du nun den PWM Phase Correct Modus benutzt, zählt der Timer ja von 0 bis 255 hoch und wieder auf 0 runter. D.h. also das du einen Vergleichswert von 192 einstellen kannst , ( nämlich 256 / 4 * 3 ) , hast du dein Verhältnis von 3 : 1 . Was ich mich grad noch frage ist, ob man hier den Timer vorladen muss mit dem Wert 6 , damit ich genau auf 32ms komme.? Bitte korrigieren wenn das nicht stimmen sollte. MfG Max
Die Frage ist, ob der Modus der durchzurechnen ist überhaupt eine Phase Correct PWM ist. Die andere Frage, und die sollte man sich immer stellen, lautet: gibt es einen Timer Modus bei dem man dieses bescheuerte Vorladen des Timers nicht benötigt. AVR haben für beides einen Ausweg: Es gibt einen Fast-PWM Modus, bei dem man keine Kopfstände wegen rauf/runter zählen machen muss. Der Timer zählt durch von 0 bis zum Endwert, bei 0 wird der Pin eingeschaltet, beim Vergleichswert wird er ausgeschaltet. Und: Es gibt auch einen Modus, bei dem der Endwert nicht fix vorgegeben ist, sondern bei dem man ihn in einem Register einstellen kann. Daher: Fast PWM durchrechnen, welchen Endwert man bei welchem Vorteiler einstellen muss, damit die Zykluszeit dafür rauskommt. 2/3 dieses Endwerts sind dann der einzustellende Endwert. Meiner Meinung nach spricht aus der geposteten Aufgabenstellung, ausser das er den Prozessor nicht genannt hat und daher nicht klar ist, was der alles kann, nichts dagegen, das erst mal so zu rechnen.
Bei 8 MHz CPU-Takt und 15,625 Hz PWM-Frequenz vergehen in einem PWM-Zyklus 8 MHz / 15,625 Hz = 512.000 CPU-Takte. Wenn Du den Vorteiler 1024 benutzt, sind es noch 512.000 / 1024 = 500 Zählschritte, die der Timer in einem PWM-Zyklus machen müsste. Da ein 8-Bit-Timer nur von 0 bis 255 zählen kann, klappt das nicht in Hardware. Also gehen wir mal von nur 2 MHz CPU-Takt aus. 2 MHz / 15,625 Hz = 128.000 CPU-Takte. Mit Vorteiler 1024 muss der Timer 128.000 / 1024 = 125 Zählschritte pro PWM-Zyklus machen. Also setzt Du das Top-Register auf 124, so dass der Timer von 0 bis 124 zählt. Für das Tastverhältnis 3:1 muss der Ausgang 3/4 der Zeit an sein, also müsstest Du das Compare-Register auf 3/4 * 124 = 93 setzten.
Karl Heinz Buchegger schrieb: > 2/3 dieses Endwerts sind dann der einzustellende Endwert. 3/4 natürlich. 3/4 Und das sind auch nicht der Endwert sondern der Umschaltwert. Sorry for that. Edit: Fabian hats richtig gesehen.
Ok, wenn dann der Fast PWM Mode benutzt wird, dann würde ich auch den Vorteiler von 1024 wählen. Mit der Überlaufzeit von 32,768ms müsste man dann so verfahren. 1.) Wenn keine 1 im Überlaufregister steht, darf der Pegel des PWM Signals nicht geändert werden. 2.) Wenn eine 1 im Überlaufregister steht ( also nach dem ersten mal Hochzählen), muss beim erreichen des Vergleichswertes von 119 der Pegel getoggelt werden. Danach ist das Überlaufregister wieder zu löschen. Rechnung für Schritt 2 : Zeit zwischen 2 Überläufen ist 32,768ms. Dann haben wir noch 31,232ms bis 64ms erreicht sind. Davon 16ms für die Ausschaltzeit abziehen. Sind 15,232ms. Vergleichswert = 15,232ms * 8MHz / 1024 = 119. Stimmt das so?
Mäx schrieb: > Stimmt das so? Ja, bzw. fast. Der Timer muss 8 MHz / 15,625 Hz / 1024 = 500 Zählschritte pro Zyklus machen. Nach 3/4 der Zeit muss umgeschaltet werden, also nach 3/4 * 500 = 375 Schritten. Im ersten Durchgang zählt er 256 Schritte, also fehlen im zweiten Durchgang noch 375 - 256 = 119 Schritte. Dazu muss man allerdings das Compare-Register auf 118 setzen, denn der nullte Schritt zählt ja mit. Man muss aber natürlich noch bedenken, dass nach weiteren 125 Schritten für die Aus-Zeit das ganze wieder zurück auf die Ausgangsposition gesetzt werden muss ...
In der Praxis wäre allerdings die einfachere Lösung, den Timer alle 16 ms einen Interrupt auslösen zu lassen und das Tastverhältnis von 3/4 mit einem Softwarezähler zu realisieren. Dann kann man den Timer einfach ohne Rumpfuschen an den Counter- und Compareregistern durchlaufen lassen ...
Wenn der Prozessor das in Hardware kann, wozu sollte ich ihn mit Software quälen? Außerdem kann man in moderneren AVRs den Vorteiler des Taktgebers programmieren. Es gibt nicht nur DIV8. Und wenn es einfacher ist, die Quarzfrequenz passend zu wählen, kann man das auch machen.
... schrieb: > Wenn der Prozessor das in Hardware kann, wozu sollte ich ihn mit > Software quälen? Kann er bei 8 MHz ja eben nicht ...
Fabian O. schrieb: > Kann er bei 8 MHz ja eben nicht ... Natürlich kann er das. Was war gleich gefordert? 15625Hz PWM-Cycle 3:1 Duty Also: Prescaler 8 Timer-Mode 7 OCR0A auf 63 OCR0B auf 15 COM0B auf 0b11 PWM fällt aus dem OC0B-Pin raus. Zyklus stimmt exakt, Duty stimmt exakt. Was genau soll er da jetzt deiner Meinung nach nicht können?
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.