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
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
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
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.