Nochmals Hallo,

ich habe den Fehler gefunden, die LEDs leuchten wieder. Ausserdem habe ich die Wertausgabe auf mein I2C LCD eingebaut:
Code:
// Die Anoden der rechten IR-LEDs hängen mit Vorwiderstand an PA0 (X1-AN0)
// Die Anoden der linken IR-LEDs hängen mit Vorwiderstand an PA1 (X1-AN1)
// Die Kathoden beider IR-LEDs sind mit PA3 (X3-AN3) verbunden
// Der Empfänger SFH5110 ist mit PA2 (X2-AN2) verbunden

#define acs_led_l (1<<PA1) // Anoden der IR-LEDs
#define acs_led_r (1<<PA0)
#define acs_36kHz (1<<PA3) // Kathoden der IR-LEDS mit 36kHz getaktet und 150R
#define acs_tsop  (1<<PA2) // Ausgang IR-Empfänger

#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>
#include <stdlib.h>
#include <nibobee/i2cmaster.h>
#include <nibobee/lcdi2c.h>

volatile uint8_t count36kHz;
volatile uint8_t acs=0;

void Sleep(uint8_t pause);
void Msleep(uint16_t pause);
void ACSData(uint16_t *data);

int main(void)
{
   uint16_t data[2]; // Speicher für ACS-Werte

   led_init();
   i2c_init();
   lcd_init(0x27);
   lcd_setBacklight(0);
   printf("Pinsel's NIBObee");

   // Setup Timer2
   TCCR2 = (1 << WGM20)|(1 << CS20); // PhaseCorrect-PWM, no prescaling, no OC2-Pin!
   TCNT2  = 96; // (512-416) 36kHz @15MHz
   OCR2 = 151; // (255-(208/2)) 151 ist 50:50 Compare Match für symetrische Halbwellen
   TIMSK |= (1 << OCIE2)|(1 << TOIE2); // Comp und OVF-ISR enable, Overflow bei Bottum!
   enable_interrupts();

//   led_set(0,1);
   Msleep(1000); // wait4programmer

   DDRA |= acs_led_l|acs_led_r;         // die Anoden der IR-LEDs
   PORTA &= ~(acs_led_l|acs_led_r);    // muss angepasst werden!!!
   DDRA |= acs_36kHz;                  // die Kathoden der IR-LEDs

   while(1)
   {
      ACSData(data);
//      PORTB &= ~15; // alle Leds aus

      lcd_setCursor(0,1);
      printf("WERT LI:  %4d", data[0]);
      lcd_setCursor(0,2);
      printf("WERT RE:  %4d", data[1]);
      Msleep(100);
   }
   return(0);
}

ISR (TIMER2_COMP_vect)
{
   PORTA ^= acs_36kHz; // IR-LEDs togglen
}
// Frequenzkorrektur für 36kHz (512-416 plus 3 Takte fürs Laden von TCNT2?)
 ISR (TIMER2_OVF_vect)
{
   TCNT2  += 99; // += bewirkt, dass schon erfolgte Zähltakte nicht ignoriert werden!
   PORTA &= ~acs_36kHz; // bei Nulldurchgang soll die IR-LED aus sein!
   if(count36kHz) count36kHz--;
   if(acs) acs--;
}


void Sleep(uint8_t pause) // 1/36000 Pause blockierend
{
   count36kHz=pause;
   while(count36kHz);
}
void Msleep(uint16_t pause) // 1/1000 Pause blockierend
{
   while(pause--) Sleep(36);
}
void ACSData(uint16_t *data)
{
   OCR2=253;
   PORTA |= acs_led_l; // ACS LED left on
   while((PINA & acs_tsop) && (OCR2 > 151))
   {
      acs=30; //15 Impulse senden, acs wird in OVF-ISR runtergezählt
      while(acs);
      OCR2--;
   }
   PORTA &= ~acs_led_l; // ACS LED left off
   data[0]=OCR2;
   while(!(PINA & acs_tsop)); // warten bis keine Echo mehr

   OCR2=253;
   PORTA|= acs_led_r; // ACS LED right on
   while((PINA & acs_tsop) && (OCR2 > 151))
   {
      acs=30;
      while(acs);
      OCR2--;
   }
   PORTA &= ~acs_led_r; // ACS LED right off
   data[1]=OCR2;
   while(!(PINA & acs_tsop));
}
Nun wird für Links und Rechts jeweils der Wert von 252 angezeigt. Sollte der Wert sich nicht ändern, wenn die Bee bewegt wird?