Brands_Freund
24.02.2006, 21:55
Moinsen.
Hab mal ne kleine Frage bezüglich externen Interrupts.
Wollte meine Drehgeber auslesen und einen Zähler runter zählen lassen. Hab vorher schon meinen Bot mit nem IS741 stoppen lassen Programm (ähnlich und läuft). Für die Drehgeber habe ich das Programm modifiziert. Jetzt mein Problem: Programmbeginn - Der Roboter fährt los - Interrupt wird erkannt -Roboter hält an Warum? Die If Bedingung ist garnicht erfüllt. Oder doch? Counter schon runtergezählt? Kann das durch die Sinuscharteristik des Signals passieren? Funktioniert auch nicht wenn ich mit nem Taster ein besseres Signal eingebe. Oder habe ich einen kleine Fehler im Programm? Hier der Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
volatile uint8_t counter;
void initialise (Void)
{
DDRB = 0xFF;
DDRD = 0x00;
GIMSK |= (1<<INT0)|(1<<INT1);
MCUCR |= (0<<ISC01)|(0<<ISC00);
}
void warte (void)
{
warte();
}
SIGNAL (SIG_INTERRUPT0)
{
counter = counter - 1 ;
if (counter == 0)
{
PORTB = 0b11111111;
}
}
int main (void)
{
initialise();
counter == 10;
PORTB = 0b11110101;
sei();
warte();
}
Schonmal danke für mögliche Denkanstöße ](*,)
Hab mal ne kleine Frage bezüglich externen Interrupts.
Wollte meine Drehgeber auslesen und einen Zähler runter zählen lassen. Hab vorher schon meinen Bot mit nem IS741 stoppen lassen Programm (ähnlich und läuft). Für die Drehgeber habe ich das Programm modifiziert. Jetzt mein Problem: Programmbeginn - Der Roboter fährt los - Interrupt wird erkannt -Roboter hält an Warum? Die If Bedingung ist garnicht erfüllt. Oder doch? Counter schon runtergezählt? Kann das durch die Sinuscharteristik des Signals passieren? Funktioniert auch nicht wenn ich mit nem Taster ein besseres Signal eingebe. Oder habe ich einen kleine Fehler im Programm? Hier der Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
volatile uint8_t counter;
void initialise (Void)
{
DDRB = 0xFF;
DDRD = 0x00;
GIMSK |= (1<<INT0)|(1<<INT1);
MCUCR |= (0<<ISC01)|(0<<ISC00);
}
void warte (void)
{
warte();
}
SIGNAL (SIG_INTERRUPT0)
{
counter = counter - 1 ;
if (counter == 0)
{
PORTB = 0b11111111;
}
}
int main (void)
{
initialise();
counter == 10;
PORTB = 0b11110101;
sei();
warte();
}
Schonmal danke für mögliche Denkanstöße ](*,)