VDR Extension Board - Hardware-Wakeup und LED-Erweiterung

  • Hallo,


    da im PIC noch ein wenig Platz war und Andreas beim Programmieren des Plugins kaum zu bremsen ist, habe ich mal ein paar Erweiterungen vorgenommen. Ohne Änderungen an der Hardware des Extension Boards ist nun folgendes möglich:

    • Alle Status-LEDs können nun auch blinken
    • Das Extension Board unterstützt nun einen Hardware-Wakeup


    Durch eine kleine Zusatzschaltung (siehe hier) können außerdem noch 8 weitere LEDs angeschlossen werden (mit den gleichen Eigenschaften wie die ersten 6 LEDs inklusive Dimmfunktion).


    Benötigt wird dazu eine neue PIC-Firmware ( 1.08 ), eine neue lircd.conf, eine neue Plugin-Version sowie ein Shutdownscript. Plugin und Shutdownscript wird Andreas im Anschluss noch vorstellen. Die Installation der neuen Firmware erfolgt wie gewohnt per Downloader. In der vorhandenen lircd.conf werden einfach SECTION 2 und 3 ausgetauscht (Hinweise in der neuen lircd.conf.extb). Die beiden Files liegen hier.


    Zur Funktionsweise des Hardware-Wakeups:
    Da der Microcontroller (PIC16F870) des Extension Boards weder eine eingebaute noch eine externe RTC (Realtime-Clock) besitzt, wird einfach ein Countdowntimer im PIC getartet, sobald der VDR im Standby ist. Der Timerwert wird wie alle anderen Steuerbefehle per RC5 an den PIC gesendet (hier als 6-stellige HEX-Zahl); das übernimmt das Shutdownscript. Damit ist theoretisch eine Zeitspanne von 102 Tagen möglich. Die Genauigkeit wird dabei einzig von der Genauigkeit des 4MHz-Quarzes des PICs bestimmt. Der Quarz hat Typischerweise eine Ungenauigkeit von ± 50ppm und ± 5ppm pro Jahr Alterung. Rechnen wir mal mit 100ppm, dann sind das pro Monat im schlechtesten Fall 4,3 Minuten Abweichung. Das kann also leicht durch einen kleinen Zeitpuffer von 5 oder 10 Minuten aufgefangen werden, so wie auch bei nvram-wakeup üblich ist. Der Wert dafür ist im Shutdownscript einstellbar.


    Aufgrund der fehlenden RTC und der ebenso fehlenden Batterie-Pufferung vergisst der PIC bei einem Netzausfall den Wert des Countdowntimers. Aus diesem Grund wird der VDR nach einem Netzausfall hochgefahren und sofort anschließend per Shutdownscript wieder herutergefahren. Damit erhält der PIC dann wieder den aktuellen Countdowntimer-Wert. Liegt beim Hochfahren zufällig ein Timerevent an, verhindert VDR das Herunterfahren automatisch. Ob überhaupt ein Countdowntimer gesetzt ist, wird im nichtflüchtigen EEPROM des PICs gespeichert. Dadurch wird ein unnötiges Hochfahren nach einem Netzausfall verhindert. Die Bicolor-Status-LED (üblicherweise dauerrot im Standby) geht alle 4 Sekunden für 0,5 Sekunden aus, wenn ein Timer gesetzt wurde.


    Der Countdowntimer im PIC wird nur dann gesetzt und gestartet, wenn ihm per Shutdownscript ein Wert übermittelt wird. Es muss also nichts beachtet werden, wenn die neue Hardware-Wakeupfunktion nicht genutzt werden soll.


    Bei Messungen an meinem ATX-Netzteil (und auch an Andreas’ Netzteil, danke!) hat sich gezeigt, dass es bei einem Netzausfall recht lange (im Bereich von einigen 10s) dauern kann, bis die Restspannung der +5V-Standby Versorgung auf Null abfällt. Der PIC hat eine eingebaute Resetschaltung, deren Funktion aber einen Start mit nahezu 0 Volt erfordert. Bei zu hoher Restspannung kann der Reset fehlschlagen und das PIC-Programm läuft nicht. Aus diesem Grund empfehle ich, einfach einen 47R/0,5W (besser 1W) Widerstand dauerhaft zwischen +5V_STBY und GND anzuschließen (direkt am WOL-Stecker oder z.B. an CON7), dann geht die Standby-Spannung bei Netzausfall sehr schnell gegen Null. Das ermöglicht einen zuverlässigen Reset. Bei einigen Netzteilen wird dieser Widerstand nicht notwendig sein; wer möchte, kann das durch einen Test herausfinden. Ansonsten einfach einbauen, die 0,5W Verlustleistung im Standby sind zu vernachlässigen.


    Getestet werden kann folgendermaßen (nach Update auf die neue Firmware etc.!)

    • VDR runterfahren mit einem gesetzten Timer
    • PWR-Leitung von CON4 abziehen bzw. Jumper JP1 ziehen, damit der VDR nicht laufend startet
    • Netz unterbrechen (Netzstecker/Netzschalter) mit unterschiedlicher Dauer (wenige Sekunden bis zu einer Minute). Besonders im Bereich von 2 ... 10 Sekunden sehr häufig wiederholen! Die LED muss jedes Mal, wenn das Netz wieder anliegt, grün blinken!
    • Wenn gelegentlich kein grünes Blinken kommt, sondern die LED rot wird oder sogar andere LEDs angehen, ist kein sauberer Reset erfolgt. Dann den Test mit dem 47R-Widerstand wiederholen, und bei Erfolg dauerhaft einbauen.


    Hier noch einmal alle Änderungen der Firmware 1.08 gegenüber 1.04:

    • Anzahl der Status LEDs auf 14 erhöht (Hardwareerweiterung mit 1 Schieberegister für 8 LEDs notwendig)
    • Blinkmodus für alle LEDs
    • Hardware-Wakeup
    • PWR-Taste der Fernbedienung und PWR-Taste an der Gerätefront können nun auch zum Abbruch des Shutdowns verwendet werden.


    Und nun viel Spaß,


    Tom


    Edit:
    - Blinken der Bicolor-Status-LED im Standby ergänzt
    - Files auf einen anderen Server gelegt und das '&' aus dem Dateinamen entfernt

  • Hallo,


    und damit die neuen Features der Firmware-1.08 des extb-board genutzt werden können
    gibt es auch eine neue Version extb-Plugins.


    http://deltab.de/vdr/extb.html
    http://deltab.de/vdr/vdr-extb-0.2.7.tgz


    Änderung seit der 0.2.6


    *) Hinzugefügt: Script für Wakeup per extb-board, siehe auch ./wakeup/README.de
    benötigt aber Update der auf minimal pic-firmware 1.08 und der passenden lircd.conf dazu
    *) Fix das fehlende M2 Senden beim Shutdown
    *) Hinzugefügt LED Quellen für Kanal als DVB-S/C/T bzw. nutzt Horizontale/Vertikale Polarisation
    *) Reduzierung der Debugger Nachrichten im LIRC-Loop
    *) Fix für Build mit gcc2.95, danke an Luzifer
    *) Hinzugefügt: Setup für die neuen Features wie LED Blinken oder LED 7-14 Erweiterung
    benötigt aber Update der auf minimal pic-firmware 1.05 und der passenden lircd.conf dazu



    Cu,
    Andreas


    Edit: fast das wichtigste Vergessen, der Shutdownscript für das extb-Board :D


    Was macht extb-poweroff.pl


    Mit dem Script extb-poweroff.pl kann der VDR heruntergefahren werden
    und dabei wird im PIC des extb-board ein Wakeup-Timer programmiert
    der den Rechner zum nächsten programmierten Zeitpunkt eines Timers im
    VDR aufwachen lässt.


    --------------------------------------------------------------------------------
    Erfordernisse
    *) perl, getestet mit perl v5.8.3 aber jede andere Version sollte auch gehen
    *) muss auf dem extb-Board mindestens die PIC-Firmware extb_1.08 eingespielt sein.
    *) lircd.conf muss mit extb_1.08+ übereinstimmen (Function: 0-9 (for setting the count down timer))


    --------------------------------------------------------------------------------
    Installation und Verwendung


    Den Script extb-poweroff.pl in ein beliebiges Verzeichnis(INSTALLATIONSORT) kopieren.
    Achtung, bitte den PATH zum INSTALLATIONSORT mit dem gewählten Verzeichnisnamen anpassen.
    ---
    Er sollte normalerwiese als VDR Parameter "-s shutdownscript" im
    Script runvdr angegeben und zur laufzeit als Shutdownscript durch den VDR ausgeführt.
    Ein manuelles Ausführen ist nicht notwendig.


    in runvdr:
    vdr -s PATH-INSTALLATIONSORT/extb-poweroff.pl
    z.B vdr -s /usr/local/bin/extb-poweroff.pl


    ---
    Der Script extb-poweroff.pl kann aber auch manuell ohne Parameter als
    direktes Kommando in der Konsole oder durch eine anderen Shellkommando aufgerufen werden.
    In diesem Modus wird der VDR per svdrpsend.pl nach dem nächsten Timer befragt,
    und der Wakeuptimer des extb-board dem entsprechend programmiert.



    --------------------------------------------------------------------------------
    Parameter innerhalb von extb-poweroff.pl


    $STARTUPMARGIN = "300";
    => 300 = 300 Sekunden, wieviel Sekunden soll der Rechner vor dem nächsten
    Programmieren Timer des VDR aufwachen, meist reichen schon 60 oder weniger Sekunden,
    um keinen Timer des VDR zu verpassen, bedenke aber das Linux in regelmässigen Abständen
    ein Festplattenscan auf korrekte Filesystemdaten durchführt, was die Startphase verlängern kann.


    $SHUTDOWNDURATION = "15";
    => 15 = 15 Sekunden, wie lange braucht der Rechner zwischen Programmierung des Timer
    und erreichen des Standbyzustandes. Der extb-Timer beginnt erst zulaufen wenn
    der Rechner den Standbyzustandes erreicht hat. (Einfach einmal ausmessen)


    $WAKEFOREPGSCAN = 0;
    => 1 - Jede Nacht den VDR um 2:00 aufwachen lassen um z.B. EPG scan ausführen zulassen,
    der VDR fährt nach gewählter Inaktiven Phase selbst ständig herrunter
    => 0 - nur bei programmieren Timer aufwachen


    $DEBUG = 0;
    => 1 - Diagnosemodus nur ausgaben auf der Konsole erzeugen, kein Shutdown ausführen.
    => 0 - Normaler Shutdown

  • Hallo TBE,


    könntest du die Datei mit der Firmware und dem lirc.conf-Script evtl. noch in dein Verzeichnis kopieren.


    Man kann die Datei im Moment nämlich unter dem Link nicht runterladen.

    Gruß
    Lu


    :]LinVDR 0.7 mit VDR 1.3.22, Kernel 2.6.10, Vdradmin-0.97, Burn-0.0.6, Text2Skin-1.0, MP3-0.9.11, MPlayer-0.9.11, (S)VCD-0.0.7, Yaepg-0.0.2, Sleeptimer-0.6, DVD-0.3.6-b02-cvs, Osdteletext-0.4.2, Osdpip-0.0.7.2, Director-0.2.1a, Graphlcd-0.1.2-pre4, Graphtft-0.0.8, Image-0.2.3, Femon-0.8.5, Extb-0.2.9:]

  • Hi Andreas,


    die Schaltung hatte ich nicht als Bild in den Thread gepackt, da sonst wieder die Breite anschwillt. In der verkleinerten Version kann man nun nicht mehr viel erkennen. Ersetze es doch mal hiermit (ebenfalls etwas verkleinert):
    http://www.tb-electronic.de/vdr/tmp/led-ext_1.gif (45k) oder
    http://www.tb-electronic.de/vdr/tmp/led-ext_1.png (23k)
    wenn es unbedingt als Dateianhang rein soll.


    Tom


    Edit:
    Files auf anderen Server verschoben

  • Quote

    Ersetze es doch mal hiermit


    Hmm ?( Sollte man dann nicht auch die Files auf den Server legen ?? 8o


    ;D Ansonsten funzen Firmware und Plugin bei mir einwandfrei, zumindest das LED-blinken was ich bis jetzt testen konnte.


    Danke für die tollen Erweiterungen...


    MFG
    Marco

  • Quote

    Original von LarsAC
    Wow, das ist cool! Aber mein VDR ist grad zerlegt ;(


    Lars


    Ja,das sehe ich genauso. Ich bin auch total begeistert! :)
    Tolle Arbeit!


    Und meine DVB-Karte dümpelt immer noch bei Wolfsoft dahin. ;(


    Viele Grüße
    rok

  • TBE : Ich haette noch einen Vorschlag bzgl des Drifts der Quarz(un)genauigkeit.


    Unter Linux gibts sowas aehnliches bzgl der RTC.


    Der PC legt sich schlafen und programmiert den PIC so, dass er zum Zeitpunkt X wieder aufwacht.


    Vorschlag:
    Beim Aufwachen stellt er fest, es ist gar nicht der Zeitpunkt X sondern X-34sec (zum Beispiel) und er berechnet für das naechste Schlafengehen einfach eine entsprechende Korrektur bei der Berechnung des Counters bis zum nächsten Aufwachen.


    Somit würde das nach dem zweiten (evtl. auch dritten) Aufwachen einigermassen korrekt arbeiten und das ganze ohne RTC.


    Gruss

  • Hi,


    ich habe mal die Files aus dem ersten Beitrag auf einen anderen Server gelegt. T-Online spinnt mal wieder, die Files waren gestern zunächst abrufbar, dann plötzlich nicht mehr.


    RaK
    Im Prinzip ne gute Idee, aber der Timer im PIC läuft ausschließlich im Standby (programmtechnisch nicht anders möglich). Die Zeiten zum Herunterfahren und zum Booten müssten dann sekundengenau mitberücksichtigt werden. Man könnte eine Routine schreiben, die während der VDR läuft einen Zeitabgleich möglich macht (und nur das), aber um da auf verwertbare Differenzen zu kommen, müsste das über wenigstens 12 Stunden laufen.


    Aber ich denke, 4 Minuten als maximale Abweichung ist zu verschmerzen. Bei den meisten dürfte ohnehin jeden Tag mindestens ein Timer programmiert sein, da geht es dann nur um Sekunden. Was man leicht machen könnte (hab' ich Andreas schon vorgeschlagen): zum Wert für STARTUPMARGIN werden pro Tag einfach 6 Sekunden addiert. Dann kann man den Wert für STARTUPMARGIN klein wählen (z.B. 120) und hätte trotzdem bei einem 'Langzeittimer' von 30 Tagen eine Vorlaufreserve von 300 Sekunden.


    Eine sinnvolle Ergänzung wäre IMHO noch eine Option im Plugin-Setup, ob der TV (und die Freigabe von Audio/Video) beim Hardware-Wakeup eingeschaltet werden soll oder nicht. Wenn man dann doch gerne Bild und Ton hätte, könnte ein Druck auf die PWR-Taste TV und Audio/Video einschalten.


    Edit: Noch ne Idee ...
    Statt der Option im Plugin könnte das Shutdownscript einfach einen weiteren Parameter an den PIC senden (Audio/Video ein bzw. nicht ein). Dann könnte man die Aufnahme-Timer per Default auf 'Audio/Video aus' setzen und kann zusätzlich einen Erinnerungstimer setzen (nur zum Anschauen, nicht zum Aufnehmen), bei dem per Default dann 'Audio/Video ein' gesetzt wird. Ein solcher Timer müsste dann nur im Plugin gesetzt werden können.


    Tom

  • Hi,


    ich habe in den Shutdownscript einen Parameter "$DAILYOFFSET" mit aufgenommen,
    um mit steigender Tagesdifferenz zwischen Shutdown und nächsten Einschaltpunkt
    die mögliche Drift des Quarz kompensieren zu können.


    Der Parameter ist aber im Script per default "0" gesetzt und muss selbstständig anpasst
    werden, z.B. auf die von Tom empfohlenen 6 Sekunden.


    Ich möchte aber zubedenken geben die hier errechneten Driftwerte des Quarzes sind
    rein theoretische Werte und wenn der VDR im täglichen, selbst nur im wöchtlichen
    Einsatz ist, sind die Abweichungen zu minimal um überhaupt ins Gewicht zufallen.
    Dazu kommt das es nicht nur eine permantene Abweichung, sondern auch eine
    temperaturabhängig gibt. Aber wir reden hier über ppm (part per million)


    Wenn die Quarzabweichung sogar negativ ist wacht der VDR sowieso immer zu früh auf.


    Die auftretenende zeitliche Abweichung ist auch kein additiver Fehler, wie bei
    einer einfachen Armbanduhr, da ja der Wakeup-Timer bei jedem Shutdown des VDR
    neu parametiert wird.


    Wer über längeren Zeitraum ganz sicher gehen will, kann ja auch die Funktion des
    "$WAKEFOREPGSCAN" nutzen, und damit den VDR täglich um 2:00 wecken lassen
    und damit den Timer schrittweise an den nächsten offiziellen Weckup heranführen.
    Damit bleibt der Fehler wirklich unter maximal angenommen sechs Sekunden.



    Ganz im Gegensatz zu doch ab- und zu auftretenden automatischen Filesystemcheck
    oder das den Programmverschiebungen der meist öffentlich rechtlichen Sender ;D




    PS: Ich glaub manche ein RTC auf dem Mainboard ist hier bedeutend ungenauer :D


    Cu,
    Andreas

  • Hi,

    Quote

    Ich möchte aber zubedenken geben die hier errechneten Driftwerte des Quarzes sind
    rein theoretische Werte und wenn der VDR im täglichen, selbst nur im wöchtlichen
    Einsatz ist, sind die Abweichungen zu minimal um überhaupt ins Gewicht zufallen

    Ich verwende seit nun über einem halben Jahr einen µC zum timergesteuerten Aufwachen. Der arbeietet ebenfalls als Countdowntimer, ohne RTC und mit einem 4 MHz Quarz. Ich kann nur bestätigen, dass die theoretische Quarzabweichung im praktischen Einsatz zu vernachlässigen ist. Korrekturen waren bislang nicht erforderlich (außer bei meinem ersten Modell, aber das arbeitete mit einem Resonator ;)) und 5 Minuten reichen nach meiner Erfahrung auch mit ggf. Filesystemcheck als "Vorlaufzeit" aus
    Sehr schöne Arbeit auch mit den eingebundenen Skripten und natürlich dem Plugin :tup
    Gruß
    steini

    1.: Multitainer, P3 Celeron 1,1GHz, 320MB, Samsung 300GB, TT 1.3 (4MB), TT-Budget, IR Selbstbau, µC-Wakeup-Selbstbau, RGB & SPDif über Platine von STB
    mod. Linvdr 0.7 (auf 512 Mb CF), AC3-Firmware 2623
    2.: Met@box 500, 64 MB, mod. Linvdr0.7 (auf 128 Mb CF), 20GB Seagate, TT 1.5

  • Hi,


    da stellt sich mir die Frage ob es nicht möglich ist dem Extension Board eine Hardware Erweiterung zukommen zu lassen, welche eine RTC und eine Baterie enthält.


    Ich weiss es ist nicht nötig, und soll hier auch nicht Thema sein, aber interessieren würde es mich doch schon.


    Gruß
    Markus

  • Hi Hulk


    Bräuchte wieder mal Deine Hilfe
    Möchte die extb-poweroff.pl zum laufen bringen
    Verwende die ct´v2 und die hat in /etc/vdr/ die shutdown-hook um ein Script beim herunterfahren aufzurufen.
    Welchen Eintrag muss ich dort hineinschreiben.
    Mein zweites Problem:
    Habe versuch die extb-poweroff.pl auf der Kommandozeile mit "perl extb-poweroff.pl" aufzurufen und bekomme nur die Meldung "HELP! What to do?".
    Düfte bei der ct´distri etwas anders sein.


    Danke


    Pit

    Intel 1800Mhz c´t 6.1 VDR 1.6.0 Multipatch (Tobi) Plugin Timelinie Nordlicht-EPG Epgsearch Noad

  • Hi,


    Quote

    Original von Pit Carlo
    Verwende die ct´v2 und die hat in /etc/vdr/ die shutdown-hook um ein Script beim herunterfahren aufzurufen.
    Welchen Eintrag muss ich dort hineinschreiben.


    Keine Ahnung wie die shutdown-hook funktionieren,
    im Zweifel sollte das in der Readme des Pakete dazu stehen, meist README.gz/README.Debian.gz


    Überprüfe doch einfach die Dateiliste des vdr-paketes. (dpkg -L paketname)
    #> dpkg -L vdr | grep README
    das verrät wo die zum vdr-Debian-Paket gehörigen Dateien zu finden sind (grep filtert nur noch die README heraus)



    Quote

    Original von Pit Carlo
    Habe versuch die extb-poweroff.pl auf der Kommandozeile mit "perl extb-poweroff.pl" aufzurufen und bekomme nur die Meldung "HELP! What to do?".
    Düfte bei der ct´distri etwas anders sein.


    für die Kommandozeile muss svdrpsend.pl vorhanden sein, (kommt vom VDR)
    damit wird der nächste Zeitpunkt des nächsten timer befragt.
    aber für Aufruffunktion aus dem VDR heraus ist svdrpsend.pl nicht notwendig.


    folgendes sollte in der Konsole funktionieren.
    #> svdrpsend.pl next abs
    220 vdr SVDRP VideoDiskRecorder 1.3.10; Thu Jul 15 21:29:12 2004
    250 2 1089924600
    221 vdr closing connection


    eine andere Methode wäre per anderem Programm nc(netcat), mit dem selben Ergebnis.
    #> echo -e "next abs\nquit" | nc 127.0.0.1 2001
    220 vdr SVDRP VideoDiskRecorder 1.3.10; Thu Jul 15 21:29:12 2004
    250 2 1089924600
    221 vdr closing connection



    Folgende Zeile in ext-poweroff.pl können als verfeinerung anpasst werden
    my $next = `svdrpsend.pl next abs`;


    wenn bloss der Path nicht stimmt
    my $next = `/usr/local/bin/svdrpsend.pl next abs`;


    ansonsten wenn nc als anderes Kommando verwendet werden soll.
    my $next = `echo -e "next abs\nquit" | nc 127.0.0.1 2001`;


    ich hoffe das hilft weiter,
    Andreas


    PS zulesen von gz-komprimierten README's
    #> zcat README.gz | less

  • Danke Hulk


    Stehe aber damit voll auf dem Schlauch, habe zwar die poweroff.pl angepasst aber der Fehler muss schon in der shutdown-hook liegen.
    Bekomme auch über syslog keine Auskunft ob es aufgerufen wird oder nicht.
    Die Kommandos auf der Eingabezeile werden mit einer Fehlermeldung quittiert.
    Vielleicht hat das schon wer mit der ct am laufen und kann mir helfen.


    auf alle Fälle danke


    Pit

    Intel 1800Mhz c´t 6.1 VDR 1.6.0 Multipatch (Tobi) Plugin Timelinie Nordlicht-EPG Epgsearch Noad

  • Hallo Hulk,


    Ich hätte da noch ein paar Vorschläge für das plugin / shutdownscript:


    a) Plugin:
    Ich fände es ganz praktisch, wenn man es beim Plugin konfigurieren könnte, was das Extension-Board beim runterfahren machen soll. Also ich stelle mir das folgendermassen vor:
    1. Option: M2 senden, wie bisher auch. Falls das nicht aktiviert ist gibt es die beiden folgenden Auswahlmöglichkeiten.
    2. Option: für Video die folgenden Möglichkeiten: ganz aus, VGA, AUX oder DVB.
    3. Option: für Audio analog muten, digital muten, beides muten oder an lassen.


    b) shutdownscript:
    Für das nvram-shutdownscript gab es hier im Forum eine Erweiterung mit dem checkscript, daß den shutdown unterbinden konnte, wenn z.B. noch eine User eingeloggt ist. Kann man dieses Abfrage auch in das shutdown script fürs extension board einbauen? Ich habe leider nicht genug Ahnung von Perl um das selber hinzukriegen. In meinem bisherigen shutdownscript wird das ganze so aufgerufen:



    Wenn das checkscript keine Einwände gegen den shutdown hat, gibt es gar nichts aus und das shutdown-script macht ganz normal mit dem shutdown weiter. Ansonsten wird die Ausgabe vom checkscript als Message an den vdr geschickt und das shutdownscript beendet sich.


    Lars

    Chieftech BE-01B-SL-B mit ExtensionBoard + LCD + eigene Frontplatte (noch in Arbeit), Siemens DVB-C, PVR-250, Athlon XP 1800, SAMSUNG SV160, Gentoo gentoo-dev-sources-2.6.11