exile
16.08.2005, 22:10
Hallo allerseits,
ich versuche seit geraumer Zeit auf meinem Atmega16 mittel des timer0 eine Wartefunktion zu implementieren.
Meine Funktion timer_set(unsigned short ms) erechnet aus dem übergebenem Parameter ms, wie oft der voreingestellte Timer durchlaufen werden muss. In meiner SIGNAL ( SIG_OVERFLOW0 ) soll aber kein spezieller Code aufgeführt werden, ausser den timer stoppen wenn er fertig ist.
Der Timer selbst funktioniert gut aber ein Aufruf wie:
for (i = 160; i > 0; i--) {
pwm ( A | B, i);
timer_run(100);
}
um eine beschleunigung beider Motoren A und B zu erzeugen, funktioniert aber nicht. Ich vermute, dass der Timer gestartet wird, aber der µC parallel dazu den Rest ausführt.
Gibt es eine Möglichkeit so eine Wartefunktion zu implementieren, ohne zb Zeiger auf Funktionen, oder eine while-Schleife mit "nop", zu benutzen?
Denn ein _delay_ms(xyz) funktioniert, aber der µC führt Befehle erst nach dem beenden von _delay_ms aus, selbst Interrupts.
Vielleicht gibts ja eine bessere Lösung?!
mfg
Martin
ich versuche seit geraumer Zeit auf meinem Atmega16 mittel des timer0 eine Wartefunktion zu implementieren.
Meine Funktion timer_set(unsigned short ms) erechnet aus dem übergebenem Parameter ms, wie oft der voreingestellte Timer durchlaufen werden muss. In meiner SIGNAL ( SIG_OVERFLOW0 ) soll aber kein spezieller Code aufgeführt werden, ausser den timer stoppen wenn er fertig ist.
Der Timer selbst funktioniert gut aber ein Aufruf wie:
for (i = 160; i > 0; i--) {
pwm ( A | B, i);
timer_run(100);
}
um eine beschleunigung beider Motoren A und B zu erzeugen, funktioniert aber nicht. Ich vermute, dass der Timer gestartet wird, aber der µC parallel dazu den Rest ausführt.
Gibt es eine Möglichkeit so eine Wartefunktion zu implementieren, ohne zb Zeiger auf Funktionen, oder eine while-Schleife mit "nop", zu benutzen?
Denn ein _delay_ms(xyz) funktioniert, aber der µC führt Befehle erst nach dem beenden von _delay_ms aus, selbst Interrupts.
Vielleicht gibts ja eine bessere Lösung?!
mfg
Martin