Stefan "stefb" B. wrote:
> Der Codefetzen ist nicht ausreichend, um das Problem eindeutig zu lösen.
>
> Was passiert sein kann ist, dass der Timer überhaupt nicht angeschaltet
> ist. In dem Fall läuft das *while (!m_timer_stoped)* so lange bis *if
> (m_timer_stop_counter >= 132)* erfüllt ist.
Das Problem ist daß er nur einmal in "if (!(TIFR3 & (1<<TOV3)))"
reinkommt, und nie bis 132 kommt.
> Wie geschrieben, kann man das nicht eindeutig beurteilen, weil die
> Definition der Schlüsselvariablen (m_timer_stop_counter, m_timer_stoped,
> volatile notwendig?) und des Timerinterrupts nicht angegeben ist und der
> grundsätzliche Aufbau von main unbekannt ist.
alle "m_..." Variablen sind volatile.
es soll kein (ISR) Timerinterrupt geben sondern nur das polling!
im main wird die Funktion "mv1_ein();" aufgerufen
> Und weil nicht klar ist,
> wie der Timer3 eineschaltet wird, denn die Definition von
> power_timer3_enable() fehlt.
die definition ist in der avr-libc und schaltet die versorgung des
Timers ein
eingeschaltet wird der Timer mit "TCCR3B = (1<<WGM33) | (1<<WGM32) |
(1<<CS30); // Fast PWM"
> IMHO würde ich auch ein
> power_timer3_enable() nicht vor den Initialisierungszuweisungen
> schreiben bzw. die Zuweisungen würde ich in der Funktion machen. Dito
> für power_timer3_disable().
Ich verstehe leider nicht was du damit meinst.