Hallo zusammen,

ich habe diesen http://www.rn-wissen.de/index.php/RC...%C3%BCr_ATMega Dekoder in einen ATmega8 programmiert.

TSOP1838 hängt am INT0
F_CPU ist 7372800
Prescaler ist 1024

In "rc5.c" habe ich unten stehendes Programm angehängt.

UART läuft. Aber das Ding empfängt nur Nullen. Habe 3 Fernbedienungen ausprobiert, alle gehen, aber es kommt immer Adresse und Code = 0 raus.

Was kann ich tun? Habe ich was falsch gemacht?

Grüße
Martin

Code:
int uart_putc (char c)
{
    while (!(UCSRA & (1<<UDRE))); // warten bis Senden moeglich
    UDR = c;                      // sende Zeichen
    return 0;
}

void uart_puts (char *s)
{
    while (*s)
    {   // so lange *s != '\0' also ungleich dem "String-Endezeichen"
        uart_putc(*s);
        s++;
    }
}

int main (void)
{	
	uint8_t Hunderter;
	uint8_t Zener;
	uint8_t Einer;

	UCSRB = (1<<RXEN)|(1<<TXEN);					// rx INT, rx/tx en
	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);		// 8 Bit
	UBRRL = 47;										// 9.600 Baud	
	
	DDRB = (1<<PB1)|(1<<PB2);
	
	/* der ensprechende INT-Port muss INPUT sein */
	/* RC5 initialisieren, alle Adressen zulassen */
	rc5_init (RC5_ALL);
	/* Interrupts zulassen */
	sei();

	while(1)
	{
		while (rc5.flip == -1);
		uint8_t code = rc5.code;
		uint8_t addr = rc5.addr;
		
		Hunderter = 0;
		Zener = 0;
		Einer = addr;

    	while(Einer >= 100)
		{
      		Einer = Einer - 100;
	  		Hunderter = Hunderter + 1;
		}
    	while(Einer >= 10)
		{
      		Einer = Einer - 10;
	  		Zener = Zener + 1;
		}

		uart_puts("Adresse:");
		uart_putc(48+Hunderter);
		uart_putc(48+Zener);
		uart_putc(48+Einer);
		uart_putc(10);  
		uart_putc(13);

		Hunderter = 0;
		Zener = 0;
		Einer = code;

    	while(Einer >= 100)
		{
      		Einer = Einer - 100;
	  		Hunderter = Hunderter + 1;
		}
    	while(Einer >= 10)
		{
      		Einer = Einer - 10;
	  		Zener = Zener + 1;
		}

		uart_puts("Code:");
		uart_putc(48+Hunderter);
		uart_putc(48+Zener);
		uart_putc(48+Einer);
		uart_putc(10);  
		uart_putc(13);



		rc5.flip = -1;




	}


}