Servoimpulse vom RC-Empfänger auswerten fehlgeschlagen
Hallo,
ich habe hier im Forum in verschiedenen Beiträgen Ansätze zum Auswerten eines Servosignals vom Empfänger gelesen. Nun habe ich versucht mir daraus mal einen eigenen Versuch zu programmieren um ein solches Signal auszulesen.
Mein Versuch sieht wie folgt aus:
Ich habe mein Signal auf den Eingang INT0 gelegt. Den Timer 1 habe ich mit dem Teiler CPU/8 gestartet (CPU-Takt 8MHz).
Nun wird bei der steigenden Flanke an INT0 ein Interrupt ausgelöst, da setze ich eine Variable, versuche den Counter TCNT1 in eine andere Variable abzulegen und setze den Interrupt auf fallende Flanke.
Bei der fallenden Flanke passiert das selbe in ähnlicher Weise.
Code:
void init_timer(void)
{
// Timer0 (8Bit)
TCCR0 |= (1<<CS00) | (1<<CS01); //Vorteiler auf CPU Takt/64
TIMSK |= (1<<TOIE0); //Interupt für Timer0 Overflow einschalten
//Timer 1 (16Bit)
TCCR1B |= (1<<CS11); //Vorteiler auf CPU Takt/8
}
void init_interrupt(void)
{
MCUCR |= (1<<ISC00) | (1<<ISC01); //INT0 auf Steigende Flanke
GICR |= (1<<INT0); //Interrupt von INT0 auf Enable
}
ISR(INT0_vect)
{
if (flanke == 1)
{
start = TCNT1;
MCUCR |= (1<<ISC01);
}
if (flanke == 0)
{
stop = TCNT1;
MCUCR |= (1<<ISC00) | (1<<ISC01); //INT0 auf Steigende Flanke
flanke = 0;
}
}
Mein µC (zur Zeit Mega16 später auch im Mega8) scheint auch auf die Impulse vom Empfänger zu reagieren, also ein Interrupt wird ausgelöst.
Mit dem Timer0 lasse ich einen Zähler hochzählen der mir dann durch If anweisungen Ausgänge setzt oder rücksetzt.
Mein Problem:
Sobald ich den Empfängerimpuls anschließe wird nur noch der Interrupt ausgeführt, das restliche Programm läuft nicht mehr ab.
Da ich hier schon öfter davon gelesen habe, meine ich das auch mehrere Impulse ausgewertet werden können und trotzdem noch komplexe Programme ausgeführt werden.
Was mache ich falsch?
Ist der Code im Interrupt zu Zeitaufwendig? (Frequenz ist 50Hz Impulslänge von 1ms bis 2ms)
Ist mein auslesen des Counterregisters richtig? (beim 8Bit Timer ging es so)
Ich hoffe ich habe mein Problem ausführlich genug beschrieben, sonst bitte einfach nachfragen. Bin noch am Anfang mit der C-Programmiererei.
Danke schon einmal im voraus für die Hilfe