Hallo

Die fehlende Kommunikation nervt mich auch. Ich bin auch dran mit dem asuro-IR-Transceiver zu experimentieren, aber es klappt noch nicht wirklich:
Code:
// Nibobee IR-Kommunikation mit den LineLEDs.                          15.11.09 mic

// Die #defines in der iodefs_nibobee.h sind mir zu umständlich ;)

#define LineLEDs_on 		PORTB &=~(1<<PB4)
#define LineLEDs_off 	PORTB |= (1<<PB4)


#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/led.h>
#include <nibobee/sens.h>

void IRwriteChar(uint8_t zeichen)
{
	uint8_t i, temp=0;
	// oje :(
	for(i=0; i<8; i++) if(zeichen & (1<<(7-i))) temp&=~(1<<i); else temp|=(1<<i);
	UCSRB |= (1<<TXEN);
	UCSRA=1<<TXC;									// TXC-Flag löschen falls gesetzt
 	UDR = temp; 				 				// Zeichen ins Senderegister des UARTs
	while (!(UCSRA & (1<<TXC)))            // Solange das Schieberegister nicht leer ist,
	{
	}
	UCSRA=1<<TXC;                          // TXC-Flag setzen bedeutet löschen!!!
	UCSRB &= ~(1<<TXEN);
}
int main(void) {
	uint8_t c;
	led_init();                      // IO-Ports der LEDs als Ausgänge konfigurieren
	sens_init();                     // und Fühler aktivieren

	#define BAUD_2400 		2400					//IR speed - 2400 Baud
	//#define UBRR_BAUD_2400	(((15000000/16)/BAUD_2400)-1)
	#define UBRR_BAUD_2400 390
   UBRRH = UBRR_BAUD_2400 >> 8;           // Baudrate auf 2400 setzen
	UBRRL = (uint8_t) UBRR_BAUD_2400;

	UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0); // 8, none, 1

	TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
	OCR2  = 208; // 36kHz @15MHz
	TIMSK |= (1 << OCIE2);
	
	DDRB |= (1<<PB4); // LineLED ist ein Ausgang
	LineLEDs_on; 		// LineLED schaltet gegen GND!
	DDRD |= 2;  	 	// TXD Ausgang und low
	PORTD &= ~2;
	sei();

	led_set(LED_L_YE, 1);
	while(!sens_getLeft() && !sens_getRight());
	led_set(LED_L_YE, 0);

	while(1)
	{
		c=65;
		IRwriteChar(c); // Zeichen in Sendepuffer schreiben
	   delay(200);
	}
	return 0;
}

// Die ISR erzeugt die 36kHz-Trägerfrequenz und "lauscht" gleichzeitig am TXD-Pin
// um die seriellen Daten auf die Trägerfrequenz zu mischen. Die IR-Leds sind immer
// an wenn nicht gesendet wird.

ISR (TIMER2_COMP_vect)
{
	static uint8_t status=0;
   if(status)
   {
		if(PIND & 2) led_set(LED_R_YE, 1); else led_set(LED_R_YE, 0);
		if(PIND & 2) LineLEDs_off; else  LineLEDs_on;
		status=0;
	}
	else
	{
	   led_set(LED_R_YE, 0);
	   LineLEDs_on;
		status=1;
	}
}
Das delay-Problem habe ich auch gefixt: Die Funktion heißt delay(), im Linienprogramm wir _delay_ms() verwendet.

Frohes Weitertesten

mic