Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Propeller 8 Kern Controller - C Programmierung

Infrarot Empfänger und IR Sender

Mit einem IR Empfänger lassen sich IR Impulse empfangen. Wir kennen diese Technik von der Fernbedienung eines Fernsehers und einer Audioanlage zu Hause. Der Sender schickt ein Muster von HIGH/LOW Signalen an einen Empfänger, die dieser decodiert und in eine entsprechende Anweisung umsetzt.

In unseren Übungen wird das Signal an einen Propeller I/O Pin geschickt und dort weiterverarbeitet.

 

Der IR-Empfängerbaustein

Ein IR Empfänger verfügt über drei Anschlüsse: 5V, GND und einen I/O Pin, über den das Signal gelesen wird.

Abbildung 1 - IR Empfänger mit Anschlussbelegung (Courtesy of Parallax Inc.)
Bauteile
  • 1x  Prop-BoE oder Prop-AB
  • 1x  Infrarot-Empfänger
  • 1x  Widerstand 220 Ohm (rot-rot-braun)
  • 1x  Fernbedienung
  • 2x  Steckdraht
Aufgaben
  • Baue die Schaltung nach Abb. 2 auf.
  • Übertrage das Programm IR_1.c in den SimpleIDE Editor und speichere es ab.
  • Starte das Programm.

Schaltungsaufbau und Schaltskizzen

Abbildung 2 - Schaltungsaufbau und Schaltskizze mit IR-Empfänger (Courtesy of Parallax Inc.)

2 - Eine Fernbedienung dekodieren

In dieser Übung wird das Signal einer SONY-kompatiblen Fernbedienung dekodiert und im SimpleIDE Terminal der Zahlenwert der jeweils auslösenden Taste angezeigt. Dazu binden wir in das Programm die Bibliothek sirc ein.

Auszug aus der Bibliothek sirc der Simple Tools Library

 

  • void sirc_setTimeout(int ms)
    

Setzt das Zeitlimit bis zu dem ein SONY IR Impuls eingegangen sein muss.

 

  • int sirc_button(int pin)
    

Gibt aus, welche Taste auf einer SONY IR Fernbedienung gedrückt wurde. Löscht Geräteinformation und Geräte ID aus dem Datenpaket und gibt nur den Zahlenwert der gedrückten Taste zurück.

 

  • int sirc_device(int pin)
    

Gibt das Gerät an, das von der Fernbedienung angesteuert wird. Gerätebeispiele sind u.a.: TV(1), VCR 1(2) und Projektor (20).

 

  • int sirc_code(int pin, int bits)
    

Gibt den kompletten IR Wert zurück.

Das Programm IR_1.c

Programm IR_1.c

Wie arbeitet das Programm IR_1.c?

Der IR Empfänger wartet auf einen IR Impuls von 38kHz im Wellenlängenbereich von 980nm. Die Fernbedienung sendet kurze IR Lichtimpulse von 38kHz  mit ON/OFF Mustern, die spezifisch für jede einzelne Taste der Fernbedienung sind. Sobald der IR Empfänger ein Signal erhält, sendet er eine 0 an den Propeller I/O Pin, wenn nicht, eine 1.

Die Funktionen der sirc-Bibliothek übernehmen die Aufgabe der Dekodierung der ON/OFF Muster. Sirc steht für "SONY Infrared Remote Code", da es Signale dekodiert, die dem SONY Protokoll für Fernbedienungen folgen. Deshalb wird dieses Programm nicht jede Fernbedienung erkennen.

Abbildung 3 - (Courtesy of Parallax Inc.)

Das Beispielprogramm ist sehr kurz. Es ruft zwei Funktionen der sirc-Bibliothek auf:

  • sirc_setTimeout(int ms) und
    
    sirc_button(int pin)
    
    

Die Funktion sirc_button setzt den I/O Pin auf Eingang, dekodiert jedes hereinkommende IR Signal und gibt einen Wert zurück, der der gedrückten Taste auf der Fernbedienung entspricht. Wird innerhalb der festgesetzten Zeit von sirc_Timeout kein Wert zurückgegeben, erscheint im Terminal der Wert -1.

 

In der Endlosschleife wird über den print-Befehl der Tastenwert im Terminal ausgegeben. Der Formatierungsbefehl HOME stellt den Cursor bei jedem Schleifendurchlauf zurück in die linke obere Ecke des SimpleIDE Terminals und CLREOL (clear to end of line) löscht die Zeile vor einem neuen Ausdruck. Die Schleife wird ungefähr 10 mal pro Sekunde durchlaufen, da pause(100) eine Zeitverzögerung von 100ms erzeugt.

3 - Mit Fernbedienung eine LED einschalten

In dieser Übung haben wir bis jetzt die Daten dekodiert, die eine Fernbedienung via IR an einen Empfänger schickt. Jetzt wenden wir die Fernbedienung auf unser Board an und schalten eine LED ein bzw. aus per Knopfdruck auf der Fernbedienung. Dazu muss der Schaltungsaufbau mit einer LED und einem Vorwiderstand ergänzt und das Programm entsprechend angepasst werden.

Auch das bestehende Programm bekommt ein paar Programmzeilen mehr. Füge als erstes eine lokale Variable in das Programm ein und initialisiere sie mit einem Wert der von der Funktion sirc_button zurückgegeben wird. Eine Reihe von zusätzlichen IF...THEN  Befehlen sorgt dafür, dass jeweils eine bestimmte LED ein- bzw. ausgeschaltet wird, je nachdem welche Taste der Fernbedienung gedrückt wurde.

Jetzt kommst du!  -  IR Nachweis

Mit einer IF...ELSE Anweisung kann das Programm so erweitert werden, dass die LED an P26 eingeschaltet wird, sobald irgendeine Taste auf einer Fernbedienung betätigt wird. Auf diese Weise kann man einen IR-Sender sehr leicht nachweisen. Wird statt eines Steckernetzteils eine Batterie an das Board angeschlossen und das Programm über Load EEPROM & Run gestartet, lassen sich Feldversuche damit an jedem beliebigen Ort durchführen.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf