Raspberry Pi - IR Remote ON/OFF
Anforderungen
Ob wirklich alle Anforderungen umgesetzt werden können steht noch nicht fest.
Stromversorgung für den Raspberry Pi muss Ein- und Ausschaltbar sein.
Steuerung über Fernbedienung und Taster.
Das IR-Signal muss auch an den Raspberry Pi übertragen werden (Media-Center Steuerung).
Wenn der Raspberry Pi heruntergefahren wird sollte, wenn er heruntergefahren ist, die Stromversorgung ausgeschaltet werden.
Kleiner Aufbau! Wenn möglich IR-Empfänger und Taster über Kabel und Stiftleiste anschließbar.
Art der IR-Signal Codierung und IR-Code einstellbar (RCA / RC5).
LED zur Anzeige ob An/Aus.
zu Beachten / Nice to have
Verwendung des PIC12F683 (vorhanden, klein, unter Linux Programmierbar)
Programmierung des PIC in C, nicht in Assembler (Einarbeitung für größere Projekte)
Ausschließliche Verwendung von OpenSource Software
gputils (gpasm, gplink)
sdcc (small device c compiler)
piklab (IDE für PICs unter Linux)
kicad (Schaltplan und Layout Software)
Stromverbrauch der Schaltung sollte gering sein (sleep nutzen)
Übertragungsfehler im IR-Signal sollten erkannt werden.
Automatische Erkennung von RCA und RC5
Die IR-Codes (Tasten) sollten ohne den PIC neu zu Programmieren änderbar sein.
RCA und RC5 Codes zum Ein-/Ausschalten im EEProm sichern
Updates der Codes wenn z.B. der Taster > 8s betätigt wurde.
- Taster >8s –> IR-Code aufnehmen.
- 1. „STOP“-Taste
- 2. „SELECT“-Taste
- 3. „POWER“-Taste
- [4. „ANZAHL der STOP-Codes“ (STOP so oft betätigen wie es zum einschalten genutzt werden soll) (Default: 2 (z.B. bei „Skip“))]
1)
- [5. „ANZAHL der STOP-Codes“ (STOP so oft betätigen wie es zum ausschalten genutzt werden soll) (Default: 4 (z.B. bei „Skip“))]
2)
- [6. „ANZAHL der POWER-Codes“ (POWER so oft betätigen wie es zum Ein-/Ausschalten genutzt werden soll) (Default: 1 (z.B. bei „Skip“))]
3)
Entscheidung ob RCA oder RC5 gespeichert wird innerhalb des PICs treffen
Wenn ein Code nicht gespeichert werden soll (z.B. keine „POWER“-Taste vorhanden) sollte dieser Abschnitt durch ein kurzes betätigen des Tasters übersprungen werden können.
Anzeige über LED ob CODE richtig entgegen genommen wurde.
Automatischer Abbruch der Aufzeichnung wenn länger als 2 Minuten keine Befehle empfangen wurden.
Taster > 20 Sekunden betätigt –> RESET der IR-Codes auf „Standard“ Werte!
PIC-Code und Schaltplan/Layout in Subversion verwalten.
Zum Einschalten sollte der Taster länger als 500ms Sekunden betätigt werden und beim Ausschalter sicherheitshalber länger als 4 Sekunden!
Über die Fernbedienung sollten „Kombinationen“ zum Ein/Ausschalten verwendet werden, z.B.:
2x STOP, dann SELECT –> Einschalten
4x STOP, dann SELECT –> Ausschalten
Aber auch das Ein-/Ausschalten über eine „POWER“-Taste auf der Fernbedienung sollte möglich sein.
Timing Diagramme von Fernbedienungen
Folgende Fernbedienungen sollten unterstützt werden (da Sie bei mir über sind):
XBox 1 DVD-Fernbedienung
Mögliche "Dekodierung"
Andere Möglichkeit
Weitere Möglichkeit
Muss nochmal überdacht werden, war ein kurzfristiger Einfall der nicht zu Ende gedacht wurde!
Wenn keine Logik hinter diesem erkannt werden kann, einfach diesen Punkt entfernen und nicht weiter drüber nachdenken!
Während der gesamten Erkennung der Daten Bits darf der Timer-Interrupt nicht 2 mal nacheinander auftreten!
Dies bedeutet ein Fehler und es muss auf insgesamt 5 (inklusive der 2 bereits empfangenen) Timer-Interrupts gewartet werden (Neue IR-Daten).
Wenn mehr als 10 Timer-Interrupts aufgetreten sind, werden keine Daten mehr Empfangen und der Timer kann deaktiviert werden.
Aktivierung bei nächsten On-Change-Interrupt. Außerdem kann in diesem Fall in den „Sleep“-Mode übergegangen werden, ein Erwachen
findet dann bei dem nächsten On-Change-Interrupt statt.
Technisat DigiPal 2 - DBV-T Fernbedienung
Codierung der einer Taste auf der DigiPal 2 (ohne 'e') Fernbedienung (RC5 - Format)
search?q=private%3Arasperry_pi_ir-onoff%3Atiming_digipal_remote&btnI=lucky
Dieses Timing ist für das RC5 Format, im Nachhinein wurde festgestellt das einige Tasten ein „extended“ RC5 Format übertragen.
Bei diesem ist die START Codierung anders ('10' statt '11 → somit low-Pegel für 1,8ms). Dadurch überschneidet sich die Zeitmessung mit dem RCA Format.
Außerdem gibt es Probleme beim „fehlerfreien“ Empfang des RCA Formats:
Das Start-Bit ist, bei direkter Richtung der Fernbedienung auf den IR-Empänger, nicht 4ms lang sondern schwankt zwischen 0.8ms und 4ms. Teilweise werden auch mehrere Pulse erkannt!
Die Logitech Harmony wird besser erkannt als die Original MS XBox Fernbedienung.
Die nachfolgenden Zeiten wurden mit dem Oszilloskop ermittelt.
Timings | t_low | t_high | t_puls | t_soll |
Start | 0.9ms | 0.9ms | 1.8ms | x.y ms |
„0“ | 0.9ms | 0.9ms | 1.8ms | x.y ms |
„1“ | 0.9ms | 0.9ms | 1.8ms | x.y ms |
Ablaufdiagramm
<uml>
„IR Active“ –> if „IR-Code“ then
left→ [RCA] „Decode RCA“
→ „IR Decoded“
else
right→ [RC5] „Decode RC5“
→ „IR Decoded“
endif
–> if „Power On“ then
→ if „Power Off“ then
>[true] „Turn Power Off“
else
→ „Sleep and\nwait for next IR“
endif
else
>[true] „Turn Power On“
endif
</uml>
Umsetzung
Verwendete Module
TIMER0: Increment alle 32µs (Bei 4MHz –> Prescaler 1:32), Overflow bei 8,192ms
TIMER1: Increment alle 8µs (Bei 4MHz –> Prescaler 1:8), Overflow bei 524,288ms
Schaltplan
Layout