so, nach längerer abstinenz in diesem thread mache ich mich meinen rp6 nun mit einem ir kollissionssensor ausgestattet.
siehe hier:
Bild hier
empfänger und sender sind die selben wie bei der RP6 Base.
die 36 KHz möchte ich über den freien Timer 1 auf der M32 mittels CTC modus erzeugen.
dazu hab ich die controllib.c folgendermaßen abgeändert:
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();
mein programmcode dazu sieht bisher so aus:
Code:
#include "RP6ControlLib.h"
uint8_t a;
ISR(TIMER1_COMPA_vect)
{
PORTD ^= PD5;
writeString_P("\Interrupt Timer1 Compare");
}
void infrarotempfang(void)
{if (PINC & PC3)
{
a++;}
if (a >100)
{writeString_P("\Infrarot empfangen");
startStopwatch1();}
if (getStopwatch1() >1000)
{setStopwatch1(0);}
}
int main(void)
{initRP6Control();
DDRD |= PD5; //PD5 als Ausgang
DDRC &=~ PC3; //PC3 als Eingang
while(true)
{
infrarotempfang();
}
return 0;
}
obwohl ich mittlerweile das datenblatt der M32 genau seziert habe, löst mein timer 1 immer noch keinen interrupt aus. die einstellungen hab ich genauestens überprüft.
kann es sein, dass der interrupt irgendwo an anderer stelle in der controllib blockiert wird?
gruß
Lesezeichen