Hallo, Ich möchte die Ausgabefrequenz eines PWMs mit dem ATmega8 um 16bit genau regeln. Dazu habe ich folgende Initialisierung gemacht: void pwm_init(void) { DDRB = 0b00000010 //Nur OC1A als Ausgang ICR1 = 30576; //Bliebiger Wert TCCR1A = (1<<WGM11)|(0<<WGM10)|(1<<COM1A1); TCCR1B = (1<<WGM13)|(0<<WGM12)|(0<<CS10)|(1<<CS11)|(0<<CS12); //16bit, ICR1 Top, Prescaler /8 } Ich bekomme allerdings nur einen 5V Pegel ausgegeben. Kann den Fehler nicht finden, hat jemand einen Rat? Danke im Voraus.
Hi >Ich bekomme allerdings nur einen 5V Pegel ausgegeben. Kann den Fehler >nicht finden, hat jemand einen Rat? Danke im Voraus. Vielleicht solltest du auch OCR1A initialisieren. MfG Spess
Dann habe ich es nicht richtig verstanden? Ich dachte Durch TCR1 hat der Zähler seinen maximalen Wert vorgegeben? Das heißt er zählt immer von 0 bis TCR1 bevor es sich zurücksetzt? Was hat OCR1A damit zu tun?
Jabu schrieb: > Dann habe ich es nicht richtig verstanden? Ich dachte Durch TCR1 hat der > Zähler seinen maximalen Wert vorgegeben? Das heißt er zählt immer von 0 > bis TCR1 bevor es sich zurücksetzt? Was hat OCR1A damit zu tun? Stimmt, du hast es nicht richtig verstanden ;-) Wenn du ins Datenblatt guckst, ist da eine Tabelle, die dir die WGM Modi aufzeigt. Du hast alle WGM Register gesetzt, also (in der Tabelle kurz nachgeguckt) eine FAST PWM, die als TOP OCR1A hat. Also musst du OCR1A einen Wert zuweisen. ICR1 ist TOP, wenn du einen anderen Modi nimmst. Zum Beispiel CTC oder Phace Correct.
PWM schrieb: > Jabu schrieb: >> Dann habe ich es nicht richtig verstanden? Ich dachte Durch TCR1 hat der >> Zähler seinen maximalen Wert vorgegeben? Das heißt er zählt immer von 0 >> bis TCR1 bevor es sich zurücksetzt? Was hat OCR1A damit zu tun? > > Stimmt, du hast es nicht richtig verstanden ;-) > > Wenn du ins Datenblatt guckst, ist da eine Tabelle, die dir die WGM Modi > aufzeigt. Du hast alle WGM Register gesetzt, Nö hat er nicht. Schau noch mal genau auf den Code
Ach bah... Mein Fehler! Sorry! Hab nicht gesehen, dass du "0" gesetzt hast!
Hi Stimmt ICR1 ist der Top-Wert. Aber du brauchst auch einen Comparewert. Bei OCR1A=0 passiert nichts. MfG Spess
Was habt ihr nur immer mit diesem bescheuerten Phase Correct PWM Modus? Will denn jeder benutzen, weil die Bezeichnung so cool klingt, oder wie ist das? Im Phase Corrrect Mode gibt es eine Beschränkung. Der Compare Wert kann nicht kleiner als 3 sein. Du hast OCR1A nicht angerührt, also steht da 0 drinnen. -> undefiniert was dann alles passiert. Generell würde ich es nicht für eine besonders gute Idee halten, wenn man zum Testen einer PWM gleich auf die Extremwerte losgeht. Erst mal einen mittleren Compare Wert nehmen, fern ab von jeglichen möglichen Sonderfällen.
Er zählt bis ICR1 und vergleicht OCRnx damit. Folgich brauchst du für 16Bit deine 2^16 -1 im ICR1. Ingo
Moooment. Angenommen ich möchte 65Hz erzeugen. Ich führe die Initialisierung wie gezeigt durch. Mit welchen Werten muss ich ICR1 und OCR1A dann laden?
Ich habe ICR1 nun auf 40000 gesetzt und OCR1A auf 30000. Der 5V Pegel ist immer noch konstant. Nix Frequenz.
Jabu schrieb: > Moooment. Angenommen ich möchte 65Hz erzeugen. Ich führe die > Initialisierung wie gezeigt durch. Mit welchen Werten muss ich ICR1 und > OCR1A dann laden? Wie wärs mit ..... rechnen?
Jabu schrieb: > Ich habe ICR1 nun auf 40000 gesetzt und OCR1A auf 30000. Der 5V Pegel > ist immer noch konstant. Nix Frequenz. Dann wirst du wohl zum äussersten greifen müssen und dein komplettes Programm mal zeigen müsssen.
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.