so, jetzt habe ich herausgefunden, warum das programm nicht mehr funktioniert hat.
in meinem letzten post hab ich ja geschrieben, dass jetzt wieder alles funktioniert, seit ich alles neu installiert habe. das funktionierte aber nur so lange, bis ich meinen timer 1 in der library initialisiert habe. ab diesem zeitpunkt trat wieder das selbe problem auf.
darum habe ich die timerinitialisierung nun etwas abgeändert.
ursprünglich war der timer so initalisiert:
als er so initialisiert war hat folgendes programm nur ausschließlich den interrupt abgearbeitet (war über textmeldungen erkennbar) und sonst gar ncihts gemacht, also auch keinen eingang abgefragt.Code: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();
darum habe ich die timerinitialisierung so abgeändert, dass wieder der eingang abgefragt wird: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; }
nun ist es so, dass in meinem programm der eingang wieder abgefragt wird, aber nun kein interrupt mehr ausgelöst wird.Code:TCCR1B = (0 << ICNC1) | (0 << ICES1) | (0 << WGM13) | (1 << WGM12) | (0 << CS12) | (0 << CS11) | (1 << CS10); OCR1A = 221; TIMSK = (1<< OCIE1A); sei(); // Timer 2 - used for beeper: TCCR2 = 0; OCR2 = 0xFF; // Enable timer interrupts: TIMSK = (1 << OCIE0);
kann mir einer der RP6 experten sagen, warum das überhaupt so ist, dass die timerinitialisierung das programm derart beeinflusst?
was muss ich jetzt noch ändern, damit der eingang abgefragt wird und gleichzeitig der interrupt auslöst?
mfg







Zitieren

Lesezeichen