Forum: Mikrocontroller und Digitale Elektronik uC IR-Empfänger


von Max (Gast)


Lesenswert?

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

von Mark (Gast)


Lesenswert?

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?

von Max (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

Du shiftest die einzelnen bits in ein byte (oder word) und dann 
vergleichst du byte(word) weise...

von Max (Gast)


Lesenswert?

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

von Max (Gast)


Lesenswert?

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

von Lötlackl (Gast)


Lesenswert?

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

von Max (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.