Gast
#1686477
Hallo Zusammen,
ich versuche gerade an einem Atmega 168 (eines iRobot Creates) ein
Infrarot reciever zu installieren. Leider komme ich seit ein paar Tagen
nicht weiter. Das IRD Signal ist an PINB0 angeschlossen. Das ganze soll
durch einen Interrupt ausgeführt werden. Der Interrupt funktioniert
soweit auch, nur das ich kein Signal bekomme. Der Interrupt sieht wie
folgt aus:
ISR(PCINT0_vect)
/* vormals: SIGNAL(siglabel) dabei Vectorname != siglabel ! */
{
if(count < 16){
ir_edge_time[count]=ICR1; //Stores the counter value at signal edge
count++;
}
else
{
read_IR(); // translates the bits
}
if (TCCR1B & (1<<ICES1))
{
TCCR1B &= ~(1<<ICES1); // falling edge next
LED2On;
}
else
{
TCCR1B |= (1<<ICES1); // rising edge next
LED2Off;
}
}
Ich denke das der Fehler bei ICR1 liegt. Durch die LED Tests bin ich mir
sicher, dass der Interrupt ausgeführt wird.
Die initalisierung für diesen Interrupt sieht wie folgt aus:
void initialize(void)
{
cli();
// Set I/O pins
DDRB = 0x00; //Input
PORTB = 0xFF; //Pull ups eingschaltet
PCICR |=(1<<PCIE0); // PCIE0 pin change interrupt auf 0 bis 7
aktiviert
PCMSK0|=(1<<PCINT0); // pcint0 aktivieren
// Turn on interrupts
sei();
}
Vielleicht hat ja jemand eine Idee oder hatte schon ein ähnliches
Projekt
Grüße
Daniel