kein erfolg ....
Code:
/** Interruptservice routine for timer 1 input compare.
*/
ISR(SIG_INPUT_CAPTURE1)
{
PORTB |= (1<<PB0);
if(TCCR1B & (1<<ICES1)) {
TCCR1B &= ~(1<<ICES1);
TIFR |= ICF1;
ramptimeusec = (ICR1>>1);
ramptimemsec = mtime;
}
else {
TCCR1B |= (1<<ICES1);
TIFR |= ICF1;
unsigned int ramptime = ((unsigned int)(mtime - ramptimemsec)) * 1000;
ramptime = (signed int)ramptime + (signed int)(ICR1>>1) - (signed int)ramptimeusec;
}
PORTB &= ~(1<<PB0);
}
//initialisierung
...
OCR1A = 2000;
TCCR1A |= (1<<WGM11) | (1<<WGM10);
TCCR1B |= (1<<WGM13) | (1<<WGM12) | (1<<CS11) | (1<<ICES1);
TIFR |= (1<<TOV1) | (1<<ICF1);
TIMSK |= (1<<TICIE1) | (1<<TOIE1);
...
ich bekomme genau EINEN impuls und dann totenstille
EDIT: ich kann auch nur ausdrücklich betonen: das eingangssignal ist ein rechtecksignal, beginnend mit steigender und abschliessend fallender flanke, variabler länge und wiederholfrequenz mit pegeln von 0V und 5V und sieht auf dem oszi traumhaft aus! ich kanns mir nciht erklären oder ich hab was elementares übersehen ... es hat aber SO schonmal funktioniert ... selbst mit nem 2008 compiler gehts nciht ... 2007 (also der ganz alte) finde cih garnichtmehr zum
EDIT: es liegt nicht am computer! habs grad an nem anderen compiliert ...
ich habe es mal simuliert und einfach den ICP pin über das port register geschaltet, da funktioniert es einwandfrei ...
da ich das ICES in der ISR ändere, muss ich laut simulation nicht mal das flag löschen ... das scheint da automatisch zu passieren ...
in der realität habe ich einen spannungspegel von einem anderen pin angeschlossen, der etwas schaltet das signal ist aber ganz normal und dennoch detektier ich KEINE FALLENDEN flanken
Lesezeichen