Hallo

Danke für den Tipp, er kommt leider zu spät ;)

Bild hier   Bild hier   Bild hier   Bild hier  
(Wegen der Qualität meiner Lötstellen sind die Pics mit Absicht unscharf ;)

Ich verwende nur einen 120 Ohm Widerstand für beide LEDs an der Kathode, der erscheint mir allerdings zu groß. Links habe ich noch keinen Empfang mit der IR-LED, mit der Fernbedienung funzt es aber. Ich verwende einen IRM 2636A mit 3mm-IR-LEDS aus der Kruschtelkiste (von meiner Cam= 100%-Recycling;). Vielleicht passen die Wellenlängen nicht optimal. Mein Code mit LCD:
Code:
// Nibobee ACS mit radbruchbee                                          13.1.2010 mic

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

#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>
#include <stdlib.h>
#include "lcd_lib.c"

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();
	lcd_init();                   // lcd initialisieren

	// 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(2000); // wait4programmer

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

   lcd_cls();                    // lcd Inhalt löschen
   lcd_locate(2,0);
   lcd_writeString("NIBOBee mit ACS");
   lcd_locate(8,2);
   lcd_writeString("13.1.10 mic");
   lcd_locate(0,3);
   lcd_writeString("Bitte Taste druecken");
   while(!lcd_getkeys())
		{Msleep(100); PORTB ^= (1<<PB0);} // hektisches Blinken mit LED0

   lcd_cls();                    // lcd Inhalt löschen
   lcd_locate(2,0);
   lcd_writeString("NIBOBee mit ACS");
   lcd_locate(0,2);
   lcd_writeString("ACS links:");
   lcd_locate(0,3);
   lcd_writeString("ACS rechts:");

	while(1)
	{
	   ACSData(data);
		lcd_locate(13,2);
		lcd_writeInteger(data[0], 10);
   	lcd_writeString("  ");
   	lcd_locate(13,3);
		lcd_writeInteger(data[1], 10);
   	lcd_writeString("  ");
	   Msleep(100);
	}
	return(0);
}
ISR (TIMER2_COMP_vect)
{
	PORTC ^= 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;
	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((PINC & 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(!(PINC & acs_tsop)); // warten bis keine Echo mehr

   OCR2=253;
   PORTA|= acs_led_r; // ACS LED right on
   while((PINC & acs_tsop) && (OCR2 > 151))
   {
      acs=30;
      while(acs);
      OCR2--;
   }
   PORTA &= ~acs_led_r; // ACS LED right off
   data[1]=OCR2;
   while(!(PINC & acs_tsop));
}
Gruß

mic