kater
31.08.2005, 10:16
Hai, folgendes nerfiges Problem:
SIG_INTERRUPT0 ist an einem Taster angeschlossen. Wenn es ausloest. soll der Bot eine ausweich Funktion ausfuehren. Das funktionier auch alles fast perfekt. Das Problem ist, er fuehrt die Funktion ausweichen() 2, manchmal auch 4 mal hintereinander aus. Hm erstmal Quelltext:
// Ausfuehren wenn Interrupt 0 ausloest
INTERRUPT(SIG_INTERRUPT0)
{
// Interrupt INT0 ausschalten
GICR &=~ (1 << INT0);
// Mehrmals ausgeloesten Interrupt loeschen
GIFR = (1 << INTF0);
ausweichen();
// Interrupt INT0 einschalten
GICR = (1<<INT0);
}
Ich muss hier INTERRUPT statt SIGNAL nehmen weil ich die Interrupts brauche um die Geschwindigkeit zu regeln. Nun zum Code. Wenn der INT ausloest wird erstmal INT0 ausgeschaltet damit der INT nicht mehrmals ausloesen kann. Dann wird der INT0 zurueckgesetzt falls er doch ein 2. mal ausgeloest hat. Danach solle der Bot einmal ein stueck zurueck fahren und stehenbleiben. Und erst dann wird INT0 wieder eingeschlaltet.
Ich habe keine Idee mehr warum er mehrmals zurueck faehrt. Kann mir da jemand ein Tipp geben?
SIG_INTERRUPT0 ist an einem Taster angeschlossen. Wenn es ausloest. soll der Bot eine ausweich Funktion ausfuehren. Das funktionier auch alles fast perfekt. Das Problem ist, er fuehrt die Funktion ausweichen() 2, manchmal auch 4 mal hintereinander aus. Hm erstmal Quelltext:
// Ausfuehren wenn Interrupt 0 ausloest
INTERRUPT(SIG_INTERRUPT0)
{
// Interrupt INT0 ausschalten
GICR &=~ (1 << INT0);
// Mehrmals ausgeloesten Interrupt loeschen
GIFR = (1 << INTF0);
ausweichen();
// Interrupt INT0 einschalten
GICR = (1<<INT0);
}
Ich muss hier INTERRUPT statt SIGNAL nehmen weil ich die Interrupts brauche um die Geschwindigkeit zu regeln. Nun zum Code. Wenn der INT ausloest wird erstmal INT0 ausgeschaltet damit der INT nicht mehrmals ausloesen kann. Dann wird der INT0 zurueckgesetzt falls er doch ein 2. mal ausgeloest hat. Danach solle der Bot einmal ein stueck zurueck fahren und stehenbleiben. Und erst dann wird INT0 wieder eingeschlaltet.
Ich habe keine Idee mehr warum er mehrmals zurueck faehrt. Kann mir da jemand ein Tipp geben?