Wakeup Board für die S100 (T-Online Vision Box)

Überblick

Ich betreibe meine S100 als VDR mit einer USB DVB-S Receiver als VDR. Als Linux Distribution verwende ich zendeb. Die Distribution ist basierend auf Debian Etch und beinhaltet den Linux VDR und MMS (My Multimedia System).

Problem

Es stellte sich allerdings das Problem, dass ACPI Wakeup mit der S100 nicht funktioniert bzw. nicht im BIOS (Version 1.09) integriert ist. Was sich auch nach langer Suche in diversen Foren immer mehr festigte. Auch der Versuch mit nvram-wakeup scheiterte. Folge ist, dass das Gerät ständig laufen muss, soll eine Sendung zu einer bestimmten Zeit aufgenommen werden.

Lösungansatz

Nach mehreren anderen Versuche kam ich dann aber zu der Ansicht, dass mein Problem ohne ein wenig Bastelei nicht zu lösen sei. Also machte ich mich daran, basierent auf der Idee des ATX Wakeup, eine eigene Schaltung zu entwickeln.
Im Prinzip erfüllte dieses Board schon die Anforderung. Die Microcontroller Software lies sich aber nicht mehr mit dem aktuellen Winavr C Compliler für Atmel Prozessoren übersetzen, da die verwendete uart library noch auf einer älteren libc Version basierte und ich ja auch meine C Kenntnisse wieder auffrischen und erweitern wollte :-). Folgende Punkte sollte es erfüllen:
Das Board läuft bei mir seit 2 Monaten sehr zuverlässig. Einzig zu beachten ist, dass die S100 nicht über den On/Off Knopf der Fernbedienung ausgeschalten werden darf. Der Knopf löst zwar einen shutdown von Linux aus, doch ist in der S100 ein festeingestellter Timeout kodiert, der die Box hart ausschaltet bevor das Betriebssystem "sauber" heruntergefahren ist. Um nicht eine Inkonsistenz im Dateisystem zu bekommen, sollte man immer die nachfolgenden Möglichkeiten nutzen. Herunterfahren nur über das VDR/MMS Menü oder, so wie auf meinem VDR, den VDR so einstellen, dass er nach einer gewissen inaktiven Zeit selbst einen shutdown auslöst.

Projekt

Das Board, die Hardware

Das Board ist in der Minimalbestückung mit 3 Bauteile relativ schnell auf einer Lochrasterplatine aufgebaut. Ich habe deswegen darauf verzichtet ein Layout dafür zu erstellen. Für alle, die der Eagle Layout Software mächtig, sind stelle ich den Schaltplan (Schematic) im Eagle Format online und es kann, wenn gewünscht jeder sein eigenes Layout entwerfen. Die Freeware gibt's hier und ist für Hobbyanwendungen vollkommen ausreichend.
Meine erste Version des Boards ist noch eine "Luxusversion", d.h. es hat noch 3 Status LED's für:

Board läuft: LED 1 blinkt mit 0,5Hz
Counter ist aktiv: LED 2 blinkt mit 0,5Hz
Power Button wird betätigt: LED 3 ist für 200ms an.
Bei der Auswahl des Microcontrollers habe ich den atmega8 aus der Vorlage übernommen. Dafür sprachen:

Die Schaltung

Die minimal VersionDie minimal Version
mit ISP Anschlußpunkten
Die "luxus" Version
Die Ansteuerung der LED's ist in der Software immer aktiv. Ob jemand die LED's braucht ist im Prinzip Geschmackssache, nötig für die Funktion sind sie nicht und können samt Widerstände weggelassen werden. Unten auf den Schaltplänen sind vermerkt, an welche Punkte das Board in der S100 angeklemmt wird. Details zur Verkabelung folgen weiter unten.
Beide Versionen sind auch als Eagle Schematic im zip File enthalten.

Soll die Schaltung an einer seriellen Schnittstelle eines "normalen" PC betrieben werden, müsste noch eine Pegelanpassung der beiden seriellen Leitungen mittels MAX232 erfolgen.

Stückliste für die minimal Version(Bestellnummer und Preise sind ohne Gewähr und eine Momentaufnahme)

AnzahlBauteilBestellnummer ReicheltPreis bei Reichelt ca.BestellnummerPreis bei Segor ca.
1ATmega 8 Gehäuse DIP28ATMEGA 8-16 DIP1,25€ATmega 8-16PU2,50€
1Quarz 32,768Khz0,0327680,14€Q 32,768k-2x6mm0,40€
1Widerstand 1KOhmMETALL 1,00K0,10€MF 1k 1%?
Und für die luxus Version wird zusätzlich noch folgendes benötigt.
Da es hier um Standart, 08/15 Bauteile handelt verzichte ich auf eine detailierte Bestellnummer.
AnzahlBauteilPreis pro Stück ca.
3Widerstand 4700,10€
3LED 3/5mm0,10€
1IC Sockel 28pol(immer sinnvoll)0,70€

Controllerfirmware

Als Programmiersprache für den Controller bot sich C an. Zum einen habe ich schon früher einfache Programme in C geschrieben und zum anderen hätte ich beim Assembler von Atmel wieder bei NULL beginnen müssen. Der 8085 lässt grüßen. Wie war das noch mov a,b ?
Jetzt aber zum eigentlichen Programm. Um das Rad nicht neu erfinden zu müssen, greife ich für die Kommunikation über die serielle Schnittstelle auf die library von Peter Fleury zurück. Ich habe damit aber nur eine zuverlässige Verbindung mit 2400BAUD hinbekommen. Wenn da jemand einen Tipp für mich hat, wie man das mit 9600BAUD hinbekommt......
Ansonsten verwende ich nur C Standard libraries. Kurz zum Programmablauf:
Um nach einem Stromausfall keine Aufnahmen zu verpassen (auch das Wakeup Board läuft nicht ohne Strom :-) )habe ich noch folgende Funktion eingebaut: Vorwissen: Ich habe meinen VDR so eingestellt, dass die S100, sollte 20 min nichts zu tun sein, automatisch herunterfährt.
Sollte der PIN 26 auf Masse gelegt werden, wird nach einstecken der Stromversorgung die Box automatisch 15 Sekunden später gestartet. => Nach einem Stromausfall fährt der VDR automatisch hoch, wartet 20 min und trägt beim Herunterfahren den nächsten Timer wieder ein. So verliert man keine Aufnahme.

Folgende Kommandos versteht das Board

ATCSetzt einen aktiven Timer zurück
ATS123Setzt den Timer auf z.B. 123 Sekunden und betätigt den Powerbutton nach der abgelaufenen Zeit für 200ms.
ATPGibt den aktuellen Timerstatus über die serielle Schnittstelle aus.

Als Entwicklungsumgebung habe ich die zu diesem Zeitpunkt aktuelle Version (20071221) von WinAVR verwendet, sowie das Atmel STK500 Entwicklungsboard. Zum Programmieren reicht aber ein einfacher ISP Programmer aus. Noch mehr Auswahl an Programern gibt es hier. Sollte jemand keinen Zugang zu einem Programmiergerät haben und auch keinen bauen wollen, finden wir bestimmt einen Weg, wie Du an einen bereits programmierten Controller kommst. Aktuell ist die Version V1.1. Den Quelltext findet Ihr hier. Ist aber natürlich auch im zip File enthalten. Beim Lesen des Codes bitte nicht wundern über die eine oder andere if/else Verzweigung die keinen Code enthält. Das Programm ist die abgespeckte Version meiner Debug Version, die ich aber nur bis V1.0 gepflegt habe.

Kommandos an das Board zu schicken ist unter Linux ganz einfach. Nach dem boot einmal die Schnittstelle initialisiert (2400BAUD, 8Bit, kein Parity, kein Flowcontrol) mit:

stty -F /dev/ttyS0 2400 cs8 -cstopb -crtscts -ixon -ixoff

Und ein Kommando absetzen mit:

echo -e "\rATS123\r" > /dev/ttyS0

Das führende \r ist eigentlich nicht nötig. Die S100 schickt beim booten, wie ich leidlich feststellen musste, irgendetwas undefiniertes über die serielle Schnittstelle raus. Das \r bewirkt einfach, dass die zuvor gesendeten Zeichen als Kommondo abgeschlossen werden, auch wenn dann erstmal nicht passiert.

Schnittstelle VDR <-> Serielleschnittstelle

Einbau

Montage

Ich habe das Board an die Rückwand direkt neben der WLAN Antenne mit 2 Schrauben montiert


Verkabelung

Es sind 6 Leitung für das Board nötig (Zum ändern des Bildes bitte vorne in der Tabelle einfach mit der Maus über den Text fahren):

Anschlußpunkt S100 (siehe auch Schaltplan)Beschreibung
1.Netzteil +5VSB5V Standby des Netzteils dient als Spannungsversorgung für das Wakeupboard.
2.Mainboard Stecker J13 Pin 8 (ttyS0 RxD)Serieller Transceiver des Wakeupboard (TxD)-> Receiver Mainboard
3.Mainboard Stecker J13 Pin 6 (ttyS0 TxD)Transceiver Mainbaord -> Serieller Receiver des Wakeupboard (RxD)
4.Netzteil GNDMasse
5.Netzteil +5VD5V Versorgungsspannung der S100, nimmt das Wakeup Board her um zu erkennen ob die S100 bereits läuft und löst den Powerbutton dann ggfs nicht aus..
6.Powerbutton obenDas Wakeupboard zieht den Eingang der S100 kurz gegen GND um die S100 einzuschalten. Um an den Powertaster ran zu kommen muß die Frontblende abmontiert werden.(Braucht da jemand Screenshoti wie die abgebaut wird?)

Kopplung des VDR mit dem Wakeupboard

Die Kopplung läuft über ein Perlscript. Angestoßen wird es über das an 2 Stellen zu modifizierte VDR Plugin vdr-addon-acpiwakeup. Das Plugin fehlt in der zendeb Grundinstallation. Also zuerst das plugin nachinstallieren :

apt-get install vdr-addon-acpiwakeup

Das perl script vdr-wake.pl per pscp oder WinSCP auf den VDR nach /etc/vdr kopieren. Ausführbar machen

chmod +x /etc/vdr/vdr-wakeup.pl

in der Datei /etc/vdr/vdr-addon-acpiwakeup.conf das ACPI Wakeup des VDR aktivieren durch ändern der Zeile:

ACPI_ENABLED=yes


und in /etc/init.d/vdr-addon-acpiwakeup sind die rot markierten Zeilen mit # auszukommentieren und die grün markierte einzufügen. Wichtig sind die Anführungszeichen:

reset_wakeup_time()
{
   echo "$NAME: Resetting wakeup time"
   # rm -f $WAKEUP_FILE >/dev/null 2>&1
   /etc/vdr/vdr-wakeup.pl 1
}

set_wakeup_time()
{
   if [ -e $WAKEUP_FILE ]; then
      TIME_TO_SET=`cat $WAKEUP_FILE`
      echo "$NAME: Setting wakeup time to $TIME_TO_SET"

      # echo $TIME_TO_SET >$ACPI_ALARM
      # Set it once more - some boards require this!
      # echo $TIME_TO_SET >$ACPI_ALARM
      /etc/vdr/vdr-wakeup.pl "$TIME_TO_SET"
   fi
}

Die Änderungen kurz erklärt:
# rm -f $WAKEUP_FILE >/dev/null 2>&1In das File $WAKEUP_FILE schreibt der VDR die "Aufwachzeit". Das löschen habe ich zu Debugzwecken auskommentiert
/etc/vdr/vdr-wakeup.pl 1Setzt die Aufwachzeit auf 01.01.1970, da der Zeitstempel in der Vergangenheit liegt erkennt vdr-wake.pl das der Timer gelöscht werden muß.
2x # echo $TIME_TO_SET >$ACPI_ALARMSchreibt die Aufwachzeit in den ACPI Zweig des proc Filesystems des Linux Kernel. Auskommentiert, geht ja eben nicht.
/etc/vdr/vdr-wakeup.pl "$TIME_TO_SET"Schreibt den nächsten Starttermin ins Wakeupboard


Download

Die Zipdatei beinhaltet:

BeschreibungVerzeichnis
Die Microcontrollerfirmware aktuell Version 1.1/firmware
Das VDR <-> Controller Kopplungsscript in Perl/script
Die Schaltpläne/schematic
Link auf die Website/doc

Links

S100 Hardware

Infos zu Motherboard, Jumper, Fernbedienung....
BIOS Update auf Version 1.09

S100 Software

zendeb 0.2.2, Linux Distribution basierend auf Debian Etch für S100.
zendeb update auf 0.3.0
Die Kollegen habe auch 'ne Menge Infos rund um S100, vdr, und mms zusammengetragen.

Atmel Mikrocontroller

Rund um Atmel Controller findet Ihr eine Menge auf http://www.mikrocontroller.net und bei den Avrfreaks. Bei letzteren müßte Ihr euch kostenlos registrieren um auf alle Infos Zugriff zu haben.

Schluß



Das ist jetzt der erste Entwurf, der vielleicht auch noch ein paar Fehler enthält.

Falls Ihr Fragen habt, evtl. fehlt noch was oder Fehler findet, einfach melden oder ins Gästebuch damit.

So und jetzt wünsche ich euch viel Spass beim Basteln.

Michael Albert

Stand 27.05.2008