www.mikrocontroller.net

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


Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...


Gruß
Max

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

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

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lötlackl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@Max
schau mal z.B. hier: 
http://www.sprut.de/electronic/pic/projekte/rc5tes...
ist zwar RC5-kodiert, aber man sieht das Prinzip.

mfg Lötlackl

Autor: Max (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.