Hi! Ich baue mir gerade einen Empfänger für meine IR-Fernbedienung! Am Oszi habe ich schon einmal die ganzen Bytes rausgelesen, welche gesendet werden! sieht wie folgt aus: 0x77/0xE1/0xA0/0x62 (ähnelt sehr dem NEC-Protocol) , das dritte Byte ändert sich hierbei immer (0xA0, 0x50, 0x60, 0x30, 0xC0, 0x90) Programmieren wollte ich das ganze nun mit Assembler für einen Pic, da man es dort zu Beginn(bin beim Programmieren mit Assembler ein ziemlicher Anfänger)leichter hat. Nun bräuchte ich für das Empfangen ja eine bestimmte Empfangs-Routine, irgendeinen Befehl welcher die einzelnen empfangenen Bytes-Zeitabhängig in ein Register speichert, und man dann damit weiter Arbeiten kann. Zum erkennen welche Taste gedrückt wurde habe ich mir überlegt, das man einfach den in das Register gespeicherten Wert mit einer Tabelle vergleicht und dann entsprechend einen Port-Pin auf High setzt!So nun meine Frage habt ihr irgenwelche "Grundbefehle, Programmschnipsel" mit denen ich weiter Arbeiten könnte(sprich Zeitabhängigempfangen sowie Werte Vergleichen), bzw welche mir weiter helfen könnten? Hier mal ein Bild von einem Signal http://www.barchard.net/appleremote/protocol/files/page10-1000-full.jpg Gruß Max
So hab ichs gemacht: IR-Empfänger wurde mit dem PIC (RB0) verbunden. Das Start-Bit ist immer ein High-Bit. Dieses löst einen interrupt aus. In der Interrupt-Service-Routine warte ich dann so lange, wie ein IR-Übertragungstakt dauert und lese RB0 wieder ein, danach wieder warten... Ist ziemlich einfach. Du solltest nur darauf achten, dass du ungefähr so lange wartest, bis du die Mitte des Bits ausliest und nicht genau in dem Moment RB0 liest, wenn ein Pegelwechsel stattfinden kann. Das Ganze funktioniert bei mir ziemlich robust. Wie hast du den IR Empfang gelöst? TSOP?
Empfang hab ich mit einem TSOP1738 gelöst! Ok das mit dem Einlesen klingt simpel! Aber wie Arbeitest du mit den einzelnen Bits weiter.. bzw wie vergleichst du sie, um herauszufinden welche Taste du gedrückt hast?(Befehl zb..) Gruß Max
Du shiftest die einzelnen bits in ein byte (oder word) und dann vergleichst du byte(word) weise...
mit SHR shiften? und mit cmpsb vergleichen? lieg ich da richtig? bzw könntest du vll ein Code Beispiel reinschreiben, wenn du eins parat hättest, damit ich mir da leichter tu? Gruß Max
Hi! Ich hab mir mal ein paar Sachen übelegt, ich hoffe ihr könnt mir sagen ob das so funktionieren würde! Also zuerst definiert man ja einen Port-Pin als Eingang, sowie die restlichen Configs wie WDT, Oszillator etc (ist verständlich wie das geht!) Zusätzlich noch die Definition des Pin´s als Interrupt bei Veränderung, eingelesen wird das ganze dann über: main: in "Arbeits-Register", PINx ;habe den C-Schnipsel nur gefunden..,ich ;denke mal ;das das aber nicht so einfach mit "in" SHL "Arbeits-Register",1 ;Bit in Register schieben CPI "Arbeits-Register",Tabelle Tabelle: Wert1 Wert2 ..... Ok, falls das so gehen würde (was ich nicht glaube), würde das noch mit der Zeitabhängigkeit fehlen, sprich wann jeweils Eingelesen wird, dies könnte man ja mit einem Timer lösen, welcher die Schleife in bestimmten Abständen aufruft?! So ist schonmal ein Anfang, wenn er auch nicht gerade gut sein wird.., ich hoffe ihr könnt mir helfen und mich verbessern, bzw Vorschläge bringen. Gruß Max
Hallo, @Max schau mal z.B. hier: http://www.sprut.de/electronic/pic/projekte/rc5test/index.htm ist zwar RC5-kodiert, aber man sieht das Prinzip. mfg Lötlackl
Hi! So habe nun mal ein bisschen was geschrieben, mit Hilfe des RC5 Programms, wäre nett wenn sich das einer von euch mal durchschaun würde und es soweit beurteilt ob es funktioniert, weil langsam häng ich irgendwie fest! Was bis jetzt noch fehlt ist der Vergleich der in data reingeschriebenen Bit´s mit der Tabelle, sowie die Zeitschleifen da sitz ich gerade davor. Wo ich mir überhaupt nicht sicher bin ist das Einlesen der einzelnen Bit´s da komme ich irgendwie nicht klar was damit gemeint ist. Ich hoffe einer von euch kann mir das mit ein paar Sätzen "schnell" erklären! Gruß Max
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.