Hallo Leute. Ich möchte mit einem ATMega 64 und dessen Timer 1 ein PWM erzeugen. Soll zur Ansteuerung eines Stromausgangs dienen. Ich möchte ein Fast PMW erzeugen. Ich habe folgendes initialisiert: // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 250,000 kHz // Mode: Fast PWM top=OCR1A // OC1A output: Toggle // OC1B output: Discon. // OC1C output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR1A=0x43; // Mode 15 Laut Datenblatt, Fast PWM mit OCR1A=Top TCCR1B=0x1B; // Prescaler auf 011=/64 entspricht 250kHz bei 16MHz Clk TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x7F; // Halber Top Wert --> 50% Tastverhältnis OCR1AH=0x00; OCR1AL=0xFF; // Top Wert OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; Leider messe ich am gewünschten PIN OCR1A (PIN 15, PORTB.5) kein PMW. Der Pegel ist ständig auf low. Ich habe das PORT PIN als Ausgang definiert und zunächst low gesetzt. Nach erfolgt die Timer 1 Initialisierung. Habe ich etwas vergessen, um den Timer richtig zu initialisieren?
> ICR1L=0x7F; // Halber Top Wert --> 50% Tastverhältnis
Wieso denkst du, du könntest mit ICR1 ein Tastverhältnis einstellen?
Wieso nicht? Verändere ich ICR1L verändert sich auch das Tastverhältnis.
Hi >Wieso nicht? >Verändere ich ICR1L verändert sich auch das Tastverhältnis. Beim Mode 15 ist ICR1 nicht beteiligt. Da ist OCR1A Top und OCR1B/OCR1B die Compare-Register. Und es macht sich auch gut, die OCR-Pins als Ausgang zu setzen. MfG Spess
Und bei den Modes, wo ICR1 beteiligt ist, hat es nichts mit dem Tastverhältnis zu tun, bzw nur indirekt über "Umwege". Wenn man den TOP-Wert ändert während man den Match-Wert gleich lässt, ändert sich damit natürlich auch das Tastverhältnis.
spess53 schrieb: > Beim Mode 15 ist ICR1 nicht beteiligt. Da ist OCR1A Top und OCR1B/OCR1B > die Compare-Register. stimmt das?
Ich habe die PINS als Ausgang gesetzt und bekomme nur ein Rechteck aus dem PIN 15. Welches Register muss ich denn nun ändern, um das PWM Verhältnis zu verändern?
Hi
>stimmt das?
Ist jetzt das Datenblatt vom ATMega64 aus dem www verschwunden oder
kannst du nicht Lesen?
MfG Spess
Sorry, aber ich kann im Datenblatt die Stelle nicht finden wo beschrieben wird, dass diese Register die Compare Rageister sind. Wenn dem so ist müßte bei der Veränderung der Inhalte der Register OCR1B/OCR1C auch das Tastverhätnis ändern. Ist das korrekt?
Michael_SS schrieb: > Sorry, aber ich kann im Datenblatt die Stelle nicht finden wo > beschrieben wird, dass diese Register die Compare Rageister sind. Wieso nicht? Im Datenblatt gibt es ein großes Kapitel über den Timer 1. In dem wird alles beschrieben, bis hin zu einer Einführung in PWM und deren unterschiedliche Modi. Hat man den ersten kapiert (und das ist so nicht weiter schwer), kann man sich alle anderen durch ein wenig lesen und logisches Querschliessen leicht erarbeiten. Aber lesen muss man schon. > Wenn dem so ist müßte bei der Veränderung der Inhalte der Register > OCR1B/OCR1C auch das Tastverhätnis ändern. > > Ist das korrekt? Du hast also eine Hypothese. Warum probierst du sie nicht einfach aus?
Das Ändern der Inhalte von OCR1B/OCR1C erbringt keine Änderung. Das Tastverhälrnis bleibt bei 50%. Was mach ich falsch?
> Was mach ich falsch?
3 Dinge
1 | TCCR1A=0x43; // Mode 15 Laut Datenblatt, Fast PWM mit OCR1A=Top |
2 | TCCR1B=0x1B; // Prescaler auf 011=/64 entspricht 250kHz bei 16MHz Clk |
3 | TCNT1H=0x00; |
4 | TCNT1L=0x00; |
* du benutzt keine vernünftige Schreibweise an der man schnell ablesen kann, welche Bits du wirklich gesetzt hast. Dann könnte man das nämlich einfach mit dem Datenblatt vergleichen, was du da wirklich gesezt hast. * du schaust nicht ins Datenblatt * du postet kein komplettes Programm
ok ich habe die Kritik verstanden. Versuche mich ab jetzt zu bessern.
Hi >Das Ändern der Inhalte von OCR1B/OCR1C erbringt keine Änderung. Das >Tastverhälrnis bleibt bei 50%. Wo? Bei deiner obigen 'Initialisierung' hast du lediglich das OC1A-Pin mit COM1A1:0 = 01 aktiviert. Das da überhaupt etwas herauskommt ist eine Besonderheit des ATMega64 bei Fast-PWM Mode15. Auf S.134 steht was da passiert. Um eine PWM zu erhalten musst du mit den COM1B- und COM1C-Bits das PIN-Verhalten von OC1B und OC1A einstellen. Vorzugsweise COM1B/C[1:0]=10. Und tue dir und anderen den Gefallen und benutze bitte statt TCCR1B=0x1B TCCR1B=1<<COMxy|1<<.... . MfG Spess
Hier nochmal meine Timer 1 Initialisierung // COM1A0 = 1, OCR1A wird aktiviert, Ausgabe PWM am PORT, WGM11 = 1, WGM10 = 1 TCCR1A=1<<COM1A0 | 1<<WGM11 | 1<<WGM10; // WGM12 = 1, WGM13 = 1, CS12 = 0, CS11 = 1, CS10 = 1, Prescaler auf !/64 entspricht maximal 250kHz bei 16MHz Clk TCCR1B=1<<WGM12 | 1<<WGM13 | 1<<CS11 | 1<< CS10; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x3F; // Top Wert, Einstellung der Frequenz OCR1BH=0x00; OCR1BL=0x10; // Einstellung Tastverhätnis 30% OCR1CH=0x00; OCR1CL=0x10; // Einstellung Tastverhätnis 30% Laut Datenblatt müßte dass jetzt funktionieren. Es kommt nach wie vor ein Rechteck mit einem Tastverhältnis von 50% heraus.
Hi >Laut Datenblatt müßte dass jetzt funktionieren. Nein. OC1A ist im Mode15 kein PWM-Ausgang >Es kommt nach wie vor ein Rechteck mit einem Tastverhältnis von 50% heraus. Kein Wunder. Datenblatt (für COMnA[1:0] = 01): WGMn3:0 = 15: Toggle OCnA on Compare Match, OCnB/OCnC disconnected (normal port operation). For all other WGMn settings, normal port operation, OCnA/OCnB/OCnC disconnected. Vergiss alles, was mit OCR1A zusammenhängt und benutze die PWM-Kanäle B unc C. MfG Spess
Ich mache jetzt hier erst mal Schluss uns lese erst mal das Datenblatt richtig. Wenn ich was nicht verstehe melde ich mich wieder. Danke für eure Zeit.
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.