Panasonic-Zapper

Aus Hobbyelektronik.org
Wechseln zu: Navigation, Suche
AVR
Typ ATtiny13
Takt 9,6 MHz
Fuses
High 0xF9
Low 0x7A
Engbedded com logo.png Details


Mein Vater hat, wie viele, die Angewohnheit, vor dem Fernseher einzuschlafen. Soweit nicht schlimm, allerdings geht es auf Dauer unnötigerweise auf die Stromrechnung und die Flimmerkiste wird dadurch auch nicht jünger.

Manchmal kommt noch jemand am Wohnzimmer vorbei und schaltet das Gerät ab.

Das muss doch auch einfacher gehen...

Ideen

Meine erste Idee war, dem Teil per Zeitschaltuhr zumindest für eine Minute pro Nacht den Saft abzudrehen. Anders als unser alter Telefunken geht der Panasonic nach Spannungsrückkehr _nicht_ in den Stand-By. Genauso ist ihm die 12V-Steuerspannung am Scart grundsätzlich egal, sodass man selbes Spiel mit dem SAT-Receiver treiben könnte.

Die zweite Idee war (auch noch vor dem Erlangen von Kenntnissen in der µC-Programmierung) war, eine Universal-Fernbedienung mit einem Wecker zu verheiraten.

Blöd nur: Der Wecker schaltet seinen Alarmkontakt für einige Minuten, die Fernbedienung wird also unnötig lange betätigt, die Batterien gehen schnell leer und man hat eine Aperatur, die zwei Mal am Tag die Glotze abdreht und gleichzeitig die Fernbedienung zum wiederanschalten in dieser Zeit blockiert. Das hat weder WAF noch FAF.

Das mit der Universal-Fernbedienung habe ich daher auch relativ schnell verworfen, die Idee mit dem Wecker blieb noch eine Weile.

Die Lösung

Der nächste Ansatz war, die Fernbedienung in einem Mikrocontroller nachzubilden. Seit dem TV-B-Gone ist das massenhafte Abschalten von TV-Geräten ein Geek-Volkssport geworden. Ein guter Ansatz.

Als nächstes schaute ich mir die Fernbedienungs-Bibliothek von LIRC an. Von Panasonic gibt es genügend Codes. Allerdings keinen, der (auf den ersten Blick) exakt auf die Fernbedienung hier passt.

Also: Fototranse an die Soundkarte anklemmen, aufnehmen (Datei:Panasonic.wav) und genauer anschauen (z. B. mit Audacity).

Netterweise war die Soundkarte lahm und übersteuert genug, dass man keinen 38kHz-Filter auf die Aufnahme anwenden musste (an den Flanken sieht man noch ein bisschen was). Mit Papier und Bleistift habe ich dann das Protokoll analysiert und vollständige Übereinstimmung zu einer Definition von LIRC gefunden.

Muss das Signal nur noch nachgebaut werden. Die Ausgabe der Bytes ist kein Problem, nur das Trägersignal von 38kHz macht mir etwas Sorgen. Zwar kann man dies auch mit C halbwegs gut zu Fuß ausgeben, muss aber beim Timing etwas aufpassen.

Netterweise kann man selbst mit dem sonst recht schwachen ATtiny13 hardwareseitig Signale mit einem Rechteck moduliert ausgeben. Spart man sich einen NE555 bzw. nervige Timinganpassungen. Den Code hierfür habe ich auch beim TV-B-Gone wiederentdeckt.

Nachdem der Fernbedienungscode dem Mikrocontroller beigebracht und das Timing noch ein bisschen angepasst wurde (kommt auf 99% an das Original heran), ging die Überlegerei wieder los: wie auslösen?

Hier kommt der Wecker wieder ins Spiel: Statt meinen Vater zu wecken (damit er den Fernseher abstellt), kann der doch die Stromversorgung schalten.

Blöd auch hier wieder: Zwei Spannungsquellen, weil der AVR halbwegs genau 5V sehen will, da sonst der RC-Taktgeber einen zu niedrigen Takt ausgibt und von der IR-LED nur noch Kauderwelsch kommt. Außerdem sind Wecker unerhört teuer - da lohnt es sich schon fast, eine RTC samt Display an den kleinen anzuschließen. Totaler Overkill

Die bessere Lösung

Irgendwann fiel es mir wie Schuppen von den Augen: Das deutlichste Indiz für die (Nicht-)Benutzung des Fernsehers ist die Bedienung!

Es reicht zu beobachten, ob der Verseher aktiv genutzt wird, sprich: ob man den Sender wechselt, die Lautstärke verändert oder einfach nur wahllos auf der Fernbedienung herumdrückt.

Ein IR-Empfänger mit Tageslicht- und 38kHz-Filter liegt noch herum, also anschließen und gucken, was passiert. Der Einfachheit halber hängt das Teil am Interrupt-Eingang des AVR. Beim auslösen wird ein Zähler gesetzt und per Timer langsam heruntergezählt.

Damit die Glotze nicht an der spannensten Stelle eines längeren Films einfach ausgeht, blinkt in den letzten 15 Minuten eine LED. Diese wird auch beim Auslösen des Interrupts des IR-Empfängers kurz aktiviert.

Beim Herumspielen mit der Schaltung habe ich jedoch eine Feststellung gemacht: ab und zu reagiert der Empfänger auch auf andere Lichteinflüsse (oder er hat einfach nur einen Knall) und gibt einen kurzen Impuls ab. Der Puls reicht aus, um den Timer wieder zurückzusetzen, also sehr ungeschickt.

Filter

Ein Filter muss her. Da ich keine größere Lust hatte und gleichzeitig mit meinem DSO spielen wollte, wurde er heuristisch aufgebaut. Mehr oder weniger wahllos Bauteile gesetzt, bis das herauskam, was ich wollte.

Panasonic filter.png

Kurz zur Funktionsweise: R1 zieht den Ausgang OpenCollector-Ausgang des IR-Empfängers auf 5V, gleiches macht R3 mit dem Elko. Hat der Empfänger ein Signal erkannt, zieht er seinen Ausgang auf Low und dadurch die Spannung am Elko auf etwa 0,7V (bedingt durch die Diode). Die Diode bewirkt, dass der Kondensator nur durch den 10k-Widerstand (und nicht auch durch R1 und R2) geladen wird. R2 kann man bei entsprechender Wahl von R1 auch weglassen - nachdem es so aber recht gut klappte: never change a running system ;)

CH1 (cyan) ist jeweils das "gefilterte" Ausgangssignal, CH2 (gelb) das, was vom Empfänger kommt. Die blauen Linien sind stehen für die Spannung, ab der der AVR eine Eingangsspannung als Low-Pegel erkennt. Beim Empfang einer Fernbedienung sieht man, dass die Spannung zuverlässig unterschritten wird.

Im rechten Bild wurde mit einem Laserpointer mit hohem IR-Anteil das Auslösen provoziert beim ersten Schalten des Empfängers wäre der Timer bereits zurückgesetzt worden, durch die Entladekurve, bleibt die Spannung allerdings noch über dem Ansprechwert. Bei der zweiten Störung, die ich empfangen habe, löste die Schaltung gerade so nach knapp 9ms aus. Allerdings ist auch der Spannungspegel vor der erneuten Störung zu beachten: durch die vorhergehende Spitze wurde der Kondensator schon ein Stück entladen, eine Auslösung fällt bei nachfolgenden Signalen also leichter.

Schaltung

So schauts aus:

Download

Datei:PanasonicOff.zip C-Code und EAGLE-Dateien

Nachtrag

Das Teil hat ein riesengroßes Problem, das den Spareffekt zunichte machen kann: Schaltet man den Fernseher per Fernbedienung ab, wird dies natürlich auch getriggert. Nach der voreingestellten Zeit wird dann wieder der Power-Befehl gesendet.

Problem an der Sache: Zumindest unser Panasonic lässt sich per Power-Knopf auf der Fernbedienung sowohl aus- als auch einschalten. Wenn es dumm läuft, ist die Flimmerkiste nach abgelaufener Zeit wieder an (und geht dann ohne Zutun auch nicht wieder aus). Gleiches passiert natürlich auch, wenn der Empfänger längerfristig gestört wird und somit versehentlich getriggert wird.

Lösung: Wenn man sieht, dass die Standby-LED leuchtet: mechanisch abschalten.

Technisch gäbe es für das Problem mehrere Lösungen:

  • Schalt- oder Videosignal vom SCART verwenden, um den Betriebszustand zu ermitteln
  • Stromverbrauch der Kiste messen (z. B. mit Spule um die Zuleitung)
  • Temperatur am Gehäuse messen

Da ich jedoch nicht auf die technischen Lösungen zurückgreife, landet die Schaltung zusätzlich in der Kategorie Murks.