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; } }







Zitieren

Lesezeichen