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:
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();
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:
#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;
}
darum habe ich die timerinitialisierung so abgeändert, dass wieder der eingang abgefragt 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);
nun ist es so, dass in meinem programm der eingang wieder abgefragt wird, aber nun kein interrupt mehr ausgelöst wird.
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
Lesezeichen