HIER GEHTS MIT "ICP1 funktioniert nur einmal" WEITER
Code:
ISR(SIG_INPUT_CAPTURE1)
{
PORTB |= (1<<PB0);
if(TCCR1B & (1<<ICES1)) {
TCCR1B &= ~(1<<ICES1);
ramptimeusec = (ICR1>>1);
ramptimemsec = mtime;
}
else {
TCCR1B |= (1<<ICES1);
unsigned int ramptime = ((unsigned int)(mtime - ramptimemsec)) * 1000;
ramptime = (signed int)ramptime + (signed int)(ICR1>>1) - (signed int)ramptimeusec;
.....
}
PORTB &= ~(1<<PB0);
}
in dieser ISR versuche ich eine impulslänge zu messen ...
die flanken werden u.a. durch start und stop ausgelöst/erzeugt
kann es sein, dass durch das LÖSCHEN des edgeselect
TCCR1B &= ~(1<<ICES1);
der interrupt gestört wird ? wenn ich die zeile aus dem true-zweig nämlich rauseditiere gehts, dann bekomme ich den strobe mit!
ich hab jetzt die startbedingung geändert und den edgeselect auf falling initialisiert, und siehe da ich bekommen GARKEINEN impuls ... hab ich meinen komparator geschrottet ? hab ich beim schreiben der ISR was nicht beachtet ??? warum bekomm cih auf fallende flanken plötzlich keinen interrupt mehr ?
das signal hab ich auf dem oszi überprüft, einwandfrei!
Lesezeichen