so, nach weitereim rumtüfteln bin ich nun zu dem entschluss gekommen, dass irgendetwas an meiner timereinstellung nicht passen kann.
bei folgendem programm müsste die ir- pulspause nach meiner berechnung 690µs betragen. wenn ich das programm aber teste beträgt sie geschätzt nur etwa 0,1s.
irgendwie habe ich langsam das gefühl, dass mein oszi mit den 72Hz doch richtig misst und mein timer um den faktor 1000 falsch eingestellt ist...
hier die timereinstellung:
mein programm:Code:// Timer 1 erweiterung TCCR1B = (0 << ICNC1) | (0 << ICES1) | (0 << WGM13) | (1 << WGM12) | (0 << CS12) | (0 << CS11) | (1 << CS10); OCR1A = 221; // Timer 2 - used for beeper: TCCR2 = 0; OCR2 = 0xFF; // Enable timer interrupts: TIMSK = (1 << OCIE0)|(1<<OCIE1A); sei();
Code:#include "RP6ControlLib.h" uint8_t a; uint8_t interruptcounter; ISR(TIMER1_COMPA_vect) {interruptcounter++; if(interruptcounter <50) {PORTD ^= (1<<PD5); writeString_P("Interrupt Timer1 Compare\n");} if(interruptcounter > 50 && interruptcounter <101) {writeString_P("Interrupt Pause\n");} if(interruptcounter > 100) {interruptcounter =0;} } void infrarotempfang(void) {if (PINC & (1<<PC3)) { a++; } if (a >100) {writeString_P("Infrarot empfangen\n"); startStopwatch1();} if (getStopwatch1() >1000) {setStopwatch1(0);} } int main(void) {initRP6Control(); DDRD |= (1<<PD5); //PD5 als Ausgang DDRC &=~ (1<<PC3); //PC3 als Eingang while(true) { infrarotempfang(); } return 0; }
was meint ihr dazu?
weiß langsam nicht mehr weiter....
mfg andi







Zitieren

Lesezeichen