Hallo Ihr Alle,
ich melde mich auch mal wieder. Meine Schaltung, die ich auf Grundlage der von Carlo geätzten Platine gebaut habe, hat glücklicherweise gleich funktioniert. Sehr hilfreich beim Testen war ebenfalls ein Display was ich aus einem alten Gerät ausgebaut habe. So siehts bei mir inzwischen aus:
[Blocked Image: http://www.jepsennet.de/wakeup_board.jpg]
Netterweise hat mir Carlo nicht nur eine Platine geätzt sondern auch gleich einen programmierten Atmel zur Verfügung gestellt. Heute habe ich auch endlich meinen seriellen Programmieradapter fertiggestellt und mit PonyProg erfolgreich getestet.
[Blocked Image: http://www.jepsennet.de/wakeup_prog.jpg]
Ich habe vorerst nur den Cursor abgeschaltet und die Anzeige für mein 16x2-Zeichen Display angepasst.
[Blocked Image: http://www.jepsennet.de/wakeup_all.jpg]
Am Anfang hatte ich auch das RC5-Problem. Ich habe auch erst meine Fernbedienung OneForAll URC-7562 auch erst auf einen RC5-Code umprogrammieren müssen.
Dann musste ich, da ich LIRC benutze den COM-Port erst freibekommen um die Wakeup-Schaltung zu programmieren. Hier mein ShutdownHook für die c't-Distribution:
- #
- # VDR shutdown hook for hw-wakeup - Frank Jepsen
- # --------------------------------------------------
- # inspired by shutdown hook for nvram-wakeup
- # by Tobias Grimm
- #
- # This shutdown hook sets the wakeup time for the next timer using
- # hw-wakeup.
- #
- # read arguments for nvram-wakeup from conf-file
- . /etc/vdr/vdr-addon-hw-wakeup.conf
- # Defaults:
- [ -z "$ENABLED" ] && export ENABLED="no"
- [ -z "$WAKEUP_PORT" ] && export WAKEUP_PORT="/dev/ttyS0"
- [ -z "$KILL_LIRC" ] && export KILL_LIRC="yes"
- [ -z "$MIN_PRE_TIMER" ] && export MIN_PRE_TIMER=5
- [ -z "$MAX_POWEROFF_TIME" ] && export MAX_POWEROFF_TIME=0
- [ -z "$MAX_TRY_AGAIN" ] && export MAX_TRY_AGAIN=0
- if [ $MAX_TRY_AGAIN -gt 0 ]
- then
- # another script wants to retry shutdown later
- logger -t vdr-addon-hw-wakeup "hw-wakeup not called - shutdown suspended by other script"
- EXITCODE=0
- else
- if [ $ENABLED = "no" ]
- then
- # vdr-addon-hw-wakeup is disabled, so just exit
- logger -t vdr-addon-hw-wakeup "hw-wakeup functionality is disabled"
- EXITCODE=0
- else
- # calculate, at what time the machine should be powered on
- NOW=$((`date +%s`))
- if [ -z $1 ] || [ $1 -eq 0 ]
- then
- WAKEUPSTR="00000000"
- else
- NEXTTIMER=`expr $1 - $MIN_PRE_TIMER \* 60`
- if [ $NEXTTIMER -gt $NOW ]
- then
- if [ $MAX_POWEROFF_TIME -eq 0 ]
- then
- WAKEUPTIME=$NEXTTIMER
- else
- WAKEUPTIME=`expr $NOW + $MAX_POWEROFF_TIME \* 60`
- if [ $WAKEUPTIME -gt $NEXTTIMER ] && [ $NEXTTIMER -gt 0 ]
- then
- WAKEUPTIME=$NEXTTIMER
- fi
- fi
- fi
- WAKEUPSTR=`date -d "1970-01-01 $WAKEUPTIME seconds UTC" +%H%M%d%m`
- fi
- TIMESTR=`date +%H%M%d%m`
- logger -t vdr-addon-hw-wakeup "echo ATS00000000 > $WAKEUP_PORT"
- logger -t vdr-addon-hw-wakeup "echo ATS$WAKEUPSTR > $WAKEUP_PORT"
- logger -t vdr-addon-hw-wakeup "echo RTS$TIMESTR > $WAKEUP_PORT"
- if [ $KILL_LIRC = "yes" ]
- then
- /etc/init.d/lirc stop
- setserial $WAKEUP_PORT uart 16550A
- fi
- sleep 1
- echo ATS00000000 > $WAKEUP_PORT
- sleep 1
- echo ATS$WAKEUPSTR > $WAKEUP_PORT
- sleep 1
- echo RTS$TIMESTR > $WAKEUP_PORT
- EXITCODE=0
- fi
- fi
Die Parameterübergabe über die serielle Schnittstelle ist leider so gut wie garnicht abgesichert. Schickt man mehr als 11 Bytes bevor der Befehl abgearbeitet wurde, kann es sogar zu Überläufen im Datenbereich des Atmel kommen. Deshalb Vorsicht, es ist leider kein Endezeichen vorgesehen. Die Newlines \n dürften das Programm total aus dem Tritt bringen. Ich hoffe das hilft Euch erstmal ein bischen weiter.
So nun muß ich aber langsam ins Bett.
Tschüß Frank