Hallo zusammen, ich möchte mit einem ATtiny13 das RC6A-Protokoll detektieren, um Schaltvorgänge auszulösen. Die Anwendung ist nicht neu, ich kenne auch IRMP und habe damit einen ATmega8 entsprechend programmiert. Allerdings finde ich den ATmega8 für diese Belange überdimensioniert ;-) Im Anhang die Routine, die ich zur Dekodierung verwende. Sie benutzt INT0, um die Flanken (beide Richtungen) zu detektieren. Aus den Abständen wird ermittelt, ob es sich um das Startbit (Länge 6T), ein einfaches Bit (1T), ein Toggle bit (2T) oder um Kombinationen 0-1 bzw. 1-0 (2T bzw. 3T bei Toggle-Bits) handelt und entsprechend der Bitwert gesetzt. Die Routine funkitoniert gut, bis auf das letzte Bit: das fehlt immer. Ich zähle die Halbbits, RC6 basiert ja auf dem Pegelwechsel in der Mitte des Bits. Demnach reicht es, 73 Halbbits (wenn man Startbit und Togglebits mitzählt, überträgt RC6A 37 Bits) auszuwerten. Mit der Flanke, die das 73. Halbbit abschließt, ist das letzte Bit bekannt. Sieht jemand, wo mein Fehler ist? Das Hauptprogramm initialisiert nur den Timer, wartet auf das Setzen von tr_done und legt dann die erkannten Daten im EEPROM ab (dabei werden IRQs natürlich mit cli/sei deaktiviert). Danke und frohes Neues, Sebastian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.