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
> ir_edge_time[count]=ICR1; //Stores the counter value at signal edge
Wenn der "counter" gar nicht läuft, wird der "value" natürlich immer 0
sein.
hm, so wie ich das jetzt verstehe ist ICR1 falsch.. hat denn PCINT0 auch einen zählenden wert? Habe leider nichts dazu gefunden. Timer1 anstatt PCINT0 kann ich nicht nehmen, da es halt ein changed pin i Interrupt bleiben soll.
Daniel schrieb: > hm, so wie ich das jetzt verstehe ist ICR1 falsch.. hat denn PCINT0 auch > einen zählenden wert? Habe leider nichts dazu gefunden. Timer1 anstatt > PCINT0 kann ich nicht nehmen, da es halt ein changed pin i > Interrupt bleiben soll. Sorry, dass ich das jetzt sagen muss, aber das ist ja völlig konfus. Timer1 kannst du nicht nehmen? Was dachtest du, wo ICR1 zu gehört? Wieso soll es unbedingt ein "changed pin i Interrupt" bleiben? Wie hattest du vor, die Zeit zwischen zwei Pin-Change-Events zu ermitteln?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.