so, jetzt habe ich meine ganze isr nochmal überarbeitet. in einem anderen internetforum habe ich gelesen, dass das agc des ir- empfängers zu macht, es dauerhaft ir- impulse empfängt. kann mir jemand ähnliches bestätigen?
darum habe ich jetzt die isr abgeändert, und eine zyklische pulspause eingefügt.
wenn ich nun mit einer handykamera die ir- led beobachte, kann ich ein blinken erkennen. d.h. die ansteuerung der ir- led funktioniert so weit.
nur leider empfängt mein ir- empfänger immer noch keine ir- signale.
letztens habe ich mit einem alten oszi (weiß leider nicht ob es korrekt funktioniert) die pulsfrequenz ir signale gemessen (vor der abänderung des programms auf pulpausen). da habe ich eine pulsfrequenz von 72Hz gemessen. also genau um den faktor 1000 die falsche.
darum die frage, ob vielleicht jemand mal meine timereinstellung überprüfen kann:
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();
mein abgeändertes programm:
Code:
#include "RP6ControlLib.h"
uint8_t a;
uint8_t interruptcounter;
ISR(TIMER1_COMPA_vect)
{interruptcounter++;
if(interruptcounter <51)
{PORTD ^= (1<<PD5);
writeString_P("Interrupt Timer1 Compare\n");}
if(interruptcounter > 50)
{writeString_P("Interrupt Pause\n");}
if(interruptcounter > 80)
{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;
}
bin um jede hilfe dankbar.
mfg andi
Lesezeichen