Einen schönen guten Abend zusammen, habe ein Problem das ich selber nicht so ganz verstehe, vielleicht kann mir dabei jemand helfen. Es geht dabei um die erzeugung eines PWM Signals mit dem Timer 1 am atmega8. Code: DDRB = 0xff; sei(); TIMSK = (1<<TOIE1); ICR1 = 400; OCR1B = 150; TCCR1A = (1<<COM1B1) | (1<<WGM11); TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10); Dieser erzeugt mir kein PWM bzw. es wird nicht einmal ein Overflow (TOV1) ausgelöst wenn der Zähler (TCNT1) den Wert in ICR1 erreicht. ICR1 wurde jedoch als TOP durch das Fast-PWM festgelegt. Kann in dem Code jemand einen Fehler entdecken? Danke schon mal im Voraus. Mfg
Eichi schrieb: > Kann in dem Code jemand einen Fehler entdecken? Datasheet:
1 | The ICR1 Register can only be written when using a Waveform Generation mode that utilizes |
2 | the ICR1 Register for defining the counter’s TOP value. In these cases the Waveform Generation |
3 | mode (WGM13:0) bits must be set before the TOP value can be written to the ICR1 |
4 | Register. |
hey, vielen Dank für die Hilfe. Habe nun mal das Programm nach euren Hilfen hin abgeändert. Das Programm sieht soweit so aus:
1 | DDRB = 0xff; |
2 | sei(); |
3 | TCCR1A = (1<<COM1B1) | (1<<WGM11); |
4 | TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10); |
5 | ICR1 = 0x190; |
6 | OCR1B = 0xc8; |
7 | TIMSK = (1<<TOIE1); |
Am Ausgang OC1B passiert aber leider immer noch nichts d.h. dieser ist weiterhin dauerhaft low. Befinden sich in dem Code noch Fehler zur Erzeugung des PWM (mein Blick reicht leider nicht mehr aus)? Wenn nicht, kann ich diesen nämlich als Fehlerquelle ausschließen. Danke für die Hilfen. Mfg
Hat sich erledigt. Habe den Fehler gerade beim Posten entdeckt. Nochmals Danke für die Hilfe.
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.