PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RC5 Dekoder aus empfängt nur Nullen



martin02
14.09.2010, 11:25
Hallo zusammen,

ich habe diesen http://www.rn-wissen.de/index.php/RC5-Decoder_f%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


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;




}


}

martin02
14.09.2010, 11:31
Fehler gefunden, sorry...

http://www.rn-wissen.de/index.php/Diskussion:RC5-Decoder_f%C3%BCr_ATMega

ganz unten. Das war in der rn-wissen Seite noch nicht aktualisiert!

Martin