-
-
Erfahrener Benutzer
Roboter-Spezialist
Hallo,
war in Urlaub, deshalb die späte Antwort.
Ohne jetzt sehr genau hinschauen zu müssen, kann ich Dir jetzt genau sagen, was da schiefläuft:
Du ruft deine mainloop in einem IRQ auf. NIEMALS tut man so etwas.
Und zwar aus folgenden Grund: Falls während Deines TIMER2_COMPA_vect (der ja sehr lange dauert) Dein Flanken IRQ 2x kommt, kann dieser 2. IRQ nicht ausgewertet werden. Es wird nur immer der nächste anstehende IRQ gespeichert.
Also lass diesem ganzen SIGNAL(TIMER2_COMPA_vect)
weg und lass diesen Inhalt in einer Endlosloop laufen.
Wenn Du diese Dinge zeitgesteuert laufen lassen willst:
Setze in SIGNAL(TIMER2_COMPA_vect) nur ein Flag und rufe in einer Endlos loop abhängig von diesem Flag Deinen ganzen Kram, was Du da im Timer IRQ hast, in der int main(void) auf (Flag dort wieder löschen).
Also:
SIGNAL(TIMER2_COMPA_vect) {
Flag = 1;
}
int main (void {
if (flag=1) {
main blabla
flag = 0;
}
und weiter....
}
Gruss
pctoaster
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen