SMT-Wakeup

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Über SMT-WakeUp

Dokumentation zur SMT-WakeUp-Erweiterung, vorgestellt und entwickelt im VDR-Portal von "Steve135". Link zum Thread im VDR-Portal

Die SMT-WakeUp-Erweiterung dient zum timergesteuerten Aufwecken des linuxfähigen DVB-S-Receivers Samsung SMT7020s. Die Festplattenaktivität und der Timerstatus werden über zwei zusätzliche LEDs im Frontpanel derSMT7020s angezeigt. Optional ist eine PWM-Lüftersteuerung integriert. Die Funktionen werden über einen Atmel ATmega48-RISC-Prozessor gesteuert, der auch die Kommunikation über die serielle Schnittstelle ttyS0 der SMT7020s bewerkstelligt.

Die Erweiterung besteht aus drei Platinen, einer Hauptplatine, einer Temperatursensorplatine und einer Frontpanelplatine. Die Hauptplatine ersetzt nach dem Umbau die Modemplatine in der SMT7020s. Für die Kommunikation mit der Wakeup-Controller-Platine wird die bisher durch das integrierte Modem verwendete serielle Schnittstelle ttyS0 benutzt.

Anleitung zum "Bau" der Platine

Die zwei folgenden Links zeigen jeweils auf einen Warenkorb bei Reichelt, welcher die Bauelemente für eine der zwei möglichen Bestückungsvarianten enthält:

http://www.reichelt.de/?ACTION=20;AWKID=67515;PROVID=2084

http://www.reichelt.de/?ACTION=20;AWKID=67519;PROVID=2084

Der erste Warenkorb beinhaltet alle Bauelemente die für die Komplettversion (inklusive Lüftersteuerung) benötigt werden. Der zweite Warenkorb beinhaltet ausschließlich die Bauelemente, die für die reine Wakeup Funktion der Platine benötigt werden.

Hier ist die Platine im Rohzustand zu sehen:

SMT Wakeup Rohplatine.jpg

Zum Bestücken der Platinen bitte folgende Stück-Liste benutzen: Die Bauelemente-Positionen sind jeweils mit den Abkürzungen der Bauteile durch den Bestückungsdruck auf der Platine gekennzeichnet:

C1 22pF
C2 22pF
C3 0,1μ
C4 0,1μ
C5 0,1μ
C6 0,1μ
C7 47μ
C8 330μ
C9 22μ (47μ)
C10 0.1μ
D1 1N5819
IC1 74HCT00
IC2 ATMEGA48
IC3 LM75CIM-5
K1 AVR-ISP
K2 K1X10
K3 K1X5
K4 K1X3
K5 K1X5
K6 K1X5
K7 K1X2
K8 K1X13
K9 K1X5
Q1 11,0592MHZ
R1 15K
R2 150
R3 15K
R4 15K
R5 1,0K
R6 15K
R7 1K
R8 120
R9 10K
R10 1,5K
R11 1K
R12 1K
R13 1K
R14 1K
R15 1K
R16 1K
R17 15K
R18 15K
R19 15K
T1 BC556B
T2 BC550B
T3 BC550B
T4 BC547C (BC550B/C)
T5 BC640

Bestückt und gelötet sieht das dann folgendermaßen aus (oben ohne Lüftersteuerung, unten mit Lüftersteuerung):

SMT Wakeup Bestueckt.jpg

Nachdem die Platinen fertig sind, geht es ans Kabelverlegen...

Fangen wir mit der Spannungsversorgung an. Hier ist zu beachten, dass Netzteile lange Spannung speichern können und noch einige Zeit nach dem Abschalten gefährliche Spannung führen können. Deswegen am besten den Netzstecker ziehen und anschließend den Einschalter nochmals drücken um die Entladung der Kondensatoren im Netzteil zu unterstützen.

Auf dem Bild sind die entsprechenden Lötpunkte zum Anlöten der Stromversorgung für die Wakeup-Controller-Platine an das Netzteil zu sehen:

SMT Wakeup Netzteil.jpg

Zum Anschluß der Hauptplatine an die SMT7020s wird die bisherige Modem-Schnittstelle verwendet. Die Hauptplatine besitzt zwei Bohrungen, sodass diese dann statt dem Modem an der vorhandenen Modemhalterung befestigt werden kann. Zum Anschließen wird das originale Modem-Kabel verwendet, welches direkt über dem Anschluß auf der 'alten' Modemplatine abgeschnitten wird. Anschließend wird die zur Wakeup-Controller-Platine führende Seite des Kabels mit den Metallsteckkontakten verlötet die dann in die zehnpoligen Stecker-Leergehäuse 'eingeklickt' werden.

SMT Wakeup Modemkabel.jpg

Auf diesem Bild sieht man das Kabel angeschlossen an der Box und Platine.

SMT Wakeup Platine verbaut.jpg

Frontpanel

Kommen wir nun zum Frontpanel. Hier müssen ein paar Leitungen angeschlossen werden um die Box später durch den Wakeup-Controller ein- und ausschalten zu können. Zusätzlich werden 2 LED's in das Sichtfenster des Frontpanels gelegt (HDD, Timer). Auf dem 1.Bild ist rechts die Platine für das Frontpanel zu sehen. Diese wird mittels einer in ein Stück Plastik eingeklebten M3-Schraube befestigt(Bild 2). Auf Bild 3 ist die Platine für das Frontpanel zusehen.

Bild 1 SMT Wakeup Power taster.jpg

Bild 2 SMT Wakeup Schraube.jpg

Bild 3 SMT Wakeup Frontplatine.jpg


Hier ist jetzt die genaue Beschaltung der Frontplatine zu sehen, extra durchnummeriert SMT Wakeup Frontplatine beschriftet.jpg

Die Beschaltung ist wie folgt:

Die Belegung der Anschlüsse der Frontpanel-Zusatzplatine:

1: GND
2: HDD-LED-Kathode
3: Panel-Reset
4: Power-Switch
5: Timer-LED-Anode (1-5) werden verbunden mit "Front" links auf der Hauptplatine.
6: Timer-Led Anode (+)
7: Timer-Led Kathode (-)
8: zum Power-Taster (weiss)
9: zum Panel Reset (grau)
10: HDD LED Kathode
11: HDD LED Anode
12: Frontpanel 5V (rot)
13: Frontpanel GND (blau)

Beschaltung der Hauptplatine

SMT Wakeup Hauptplatine beschriftet.jpg

Die Kabel die an der Front Platine der Samsung Box angebracht werden müssen, werden wie folgt verbunden

SMT Wakeup Frontplatine samsung.jpg auf der Rückseite der Platine ist noch ein weiteres Kabel anzulöten wie auf dem Bild zusehen

SMT Wakeup Power taster 2.jpg

Dann müssen nur noch die LED's auf Pin 6,7(Timer Led) und 10,11(HDD Led) angelötet werden

SMT Wakeup LEDs.jpg

Die Led's müssen mit einem Stück Plastik isoliert von der Platine auf dieser verklebt werden, hierfür hat sich Sekundenkleber als praktisch erwiesen. Um die Led-Zuleitungen etwas zu fixieren, diese am besten vorsichtig durch die Kontakte des Steckverbinders fädeln. Wenn alles fertig verlötet ist sollte es etwa so aussehen wie auf der nächsten Seite. Bevor das Front-Panel wieder angebracht wird sollte noch das Loch für die Befestigungsschraube (M3-Senkkopf) des Temperatur-Sensors an der Gehäuse-Vorderseite gebohrt werden (wird natürlich für die 'nur Wakeup-Variante' nicht benötigt!). Natürlich kann man die Schraube auch auf einem Stück Metall innen ankleben. Beim Bohren bitte aufpassen das keine Metall-Späne in das Gehäuse bzw. das Mainboard fallen! Aus dieser Sicht ist das Ankleben eines Stückchen Metalls mit der Schraube wohl der 'sichere' Weg. Bitte nochmal überprüfen das die Kabel des Sensors weit genug vom Gehäuse weg sind damit es keine Kurzschlüsse gibt. Anschließend natürlich noch das Kabel des Temperatur-Sensors an den Wakeup-Controller anstecken. Über den Schraubenkopf habe ich zur Sicherheit immer nochmal drei Lagen Isolierband geklebt damit er auch im ungünstigsten Fall keinen Kurzschluss auf der Front-Panel-Platine 'zaubern' kann.

Temperaturfühler Platine

Fertig bestückt sollte die Platine etwa so aussehen:

SMT Wakeup Temp platine.jpg

Oben auf dem Bild mit der beschrifteten Hauptplatine ist zu sehen wie die Temperaturfühlerplatine mit der Hauptplatine verbunden werden muss.

HDD LED

Bei Verwendung einer 3,5" Festplatte muss Pin 39 am IDE Kabel(liegt bei der Nase), mit Pin 2 auf der Hauptplatine verbunden werden.

Zu der Variante mit einer 2,5" Festplatte gibt es ein Bild zur Beschaltung, Pin 1 an der Platine muss an das schwarze Kabel an dem IDE Adapter, Pin 2 siehe Bild

SMT Wakeup 2 5 Zoll.jpg

Bei LEDs ist auf die Polung zu achten, da die LED sonst nicht leuchtet, zur Erkennung von Anode und Kathode die Markierungen an den LEDs wie nachstehend beachten.


SMT Wakeup SMD LED.jpg

Programmierung

Der verbaute ATMEGA muss erst noch programmiert werden um seine Funktion auszuführen. Dies geschieht über die standardisierte ISP Schnittstelle die auf der Wakeup-Controller-Platine enthalten ist. Zur Programmierung kann jeder zum Atmel-STK 200/300/500 kompatible Programmer verwendet werden.

SMT Wakeup ISP.jpg

Die Belegung des Stecker lautet:

Pin 1 MOSI
Pin 2 5V
Pin 3 n.c.
Pin 4 GND
Pin 5 /Reset
Pin 6 GND
Pin 7 SCK
Pin 8 GND
Pin 9 MISO
Pin10 GND

Zum Programmieren des ATMEGA48 kann entweder ein fertiges Programmiergerät verwendet werden oder es besteht auch die Möglichkeit solch eines selbst zu bauen. Auf dieser Seite gibt es z.Bsp. Anleitungen für Parallele und Serielle Interfaces: http://s-huehn.de/elektronik/avr-prog/avr-prog.htm

Zum Programmieren unter Windows/Linux kann die kostenlose Software PonyProg benutzt werden. Das aktuelle Flash-File ladet ihr am besten direkt im VDR Portal.

Wichtig ist, dass für den Atmel-Controller einmalig die entsprechenden Fuse-Bits gesetzt werden, bevor der ATMEGA48 mit dem eigentlichen 'Abarbeitungsprogramm' programmiert wird. Ein geschirmtes Kabel zwischen ISP und Interface ist zu empfehlen, um Übertragungsfehler zu vermeiden. Die benötigte Einstellung der Fuse-Bits ist auf dem folgenden Bild zu sehen.

SMT Wakeup FuseBits.jpg

Inbetriebnahme

Funktion des Controllers prüfen

Dazu müssen die Spannungsversorgung, das zweipolig Kabel zur Festplatte und das Frontpanel an der Mikrocontroller-Platine angeschlossen sein. Es schadet nicht, wenn Temperatursensor und Modemkabel auch angeschlossen sind, sonst muss man dies vor dem Einspielen der Software nachholen. Nun die Box starten. Bei Festplattenzugriffen sollte nun die rote LED im Frontpanel aufleuchten. Da der Mikrocontroller das Signal vom IDE-Kabel abgreift und damit die LED steuert, ist das ein Zeichen, dass der Mikrocontroller arbeitet. Falls die LED nicht leuchtet können folgende Fehler aufgetreten sein:

  • die LED wurde falsch angelötet
  • der Atmega48 wurde nicht richtig programmiert
  • Versorgungsspannung (Gnd = schwarz, 5V = lila) liegt nicht korrekt an.
  • Der Quartz schwingt nicht
  • Kabelbrüche oder kalte Lötstellen
Warnung
Warnung

Vor Änderungen an der Elektrik immer den Stecker der Box ziehen, weil das Wakeup-Board mit der 5V-Standby versorgt wird. Ausschalten reicht nicht, um das Board spannungsfrei zu machen!


Die Modemschnittstelle aktivieren

Im Verzeichnis /usr/model/7020 oder /usr/sbin (je nach Distribution) befindet sich das Programm smt-ready, das bei seinem Aufruf die interne Modemschnittstelle im BIOS deaktiviert. Mit folgenden Befehlen schaltet man das Programm aus:

cd /usr/model/7020
mv smt-ready smt-ready.orig
touch smt-ready
chmod +x smt-ready 

Anschließend das System neu starten und mit der F2-Taste in das BIOS gehen. Hier müssen jetzt die beiden Punkte bei ICH2 GPUs Configuration auf Off gestellt werden. Falls in Euren Startscripten das Programm 'smt-ready' bisher nicht aufgerufen wurde ist jetzt damit schon alles O.K. Falls das Programm 'smt-ready' jedoch auf Eurer Box schon mal ausgeführt wurde, müssen wir die Sache jetzt leider aufwändiger beheben. Es hat sich nachfolgendes Vorgehen bewährt:

Wenn die beiden Punkte bei "ICH2 GPUs Configuration" im BIOS schon auf OFF stehen, diese bitte auf ON stellen und die BIOS-Daten speichern. Jetzt startet die 'Kiste' ja neu. Sofort beim 'blauen BIOS-Bildschirm' wieder F2-Taste drücken und in das BIOS gehen. Die beiden Punkte jetzt auf OFF stellen, speichern und bis in das Betriebssystem (Linux) booten. Sollten die Punkte im BIOS allerdings von Anfang an auf ON gestanden haben, ist vorher nochmal ein Schritt von ON auf OFF notwendig!

Ablauf bei Anfangswert OFF im BIOS: von OFF auf ON stellen-->speichern-->BIOS-reboot-->von ON auf OFF stellen-->speichern-->Linux booten Ablauf bei Anfangswert ON im BIOS: von ON auf OFF stellen-->speichern-->BIOS-reboot-->von OFF auf ON stellen-->speichern-->BIOS-reboot-->von ON auf OFF stellen-->speichern-->Linux booten

Falls Ihr die Einstellungen im SMT-BIOS nicht korrekt vornehmt, ist später keine Kommunikation der Box über die interne Modemschnittstelle mit dem Wakeup-Controller möglich! Sprich die ganze Sache funktioniert dann nicht!

Einspielen und Übersetzen der Software

Hinweis
Hinweis

Die folgende Beschreibung bezieht sich auf Det's-ISO V2.0b. Bitte selber an die eigene Distribution anpassen und danach diese Beschreibung hier ergänzen.


Die Box ist mit dem Linux-Betriebssystem gebootet. Jetzt bitte das Archiv mit den von Steve135 im VDR-Portal-Thread zur Verfügung gestellten Linux-Quellen herunterladen und z.B. in /usr/local/src/SMT entpacken. Die beiden Quelldateien heißen:

SMTWakeup_LinuxSrc.zip 
SMTWakeup_LinuxBeispielScripts.zip 

Auf Seite 6 des Threads finden sich entsprechende Scripte für andere Distributionen:

gen2vdr_scripte.tar.bz2 
zenslack_scripte.tar.bz2 

Von den Quellen wird zunächst SMTWakeup_LinuxSrc gebraucht. Wir gehen nun in jedes Unterverzeichnis von /usr/local/src/SMT und übersetzen das jeweilige Programm mit

make all 

Außer dem Programm SMTConnectTest werden alle übersetzten Programme in das Verzeichnis /usr/model/7020 kopiert. Hatte man die .zip-Dateien unter Windows entpackt, kann es sein, dass SMTSCD sich nicht übersetzen lässt, da die Groß- in eine Kleinschreibung umgewandelt wurde. Hier den Dateinamen einfach wieder in Großschreibung umsetzen.

Test der Modemschnittstelle

Jetzt gehen wir in das Verzeichnis /usr/local/src/SMT/SMTConnectTest und rufen das übersetzte Programm SMTConnectTest auf. Wenn die Kommunikation korrekt läuft und alles funktioniert kommen jetzt z.Bsp. nachfolgende Bildschirmausgaben:

Gelesener Wert: 6
Gelesener Wert: 27

Das sagt nur aus, das vom Atmel-Controller ein Kommando 'GetTemp' (Wert 6) mit dem Wert 27 (sprich 27 Grad) übermittelt wurde. Im Sekundentakt sollte jetzt eigentlich immer so eine Kommandosequenz eintreffen. Der Wert für die Temperatur ist natürlich von der Temp in Eurer Box abhängig und es ist kein Fehler wenn er nicht 27 ist! Für diesen Verbindungstest darf das Programm SMTSCD welches sich auch in dem Quellarchiv befindet noch nicht aktiv sein!!! Wenn soweit alles O.K. war und Ihr die entsprechenden Konsolenausgaben bekommen habt, SMTConnectTest einfach mit Ctrl+C abbrechen.

Einbinden der Programme

Nun das Archiv mit den Beispiel-Scripts SMTWakeup_LinuxBeispielScripts.zip öffnen. Im Archiv findet man im Verzeichnis /usr/model/7020 die zwei Scripte fanmon2.sh und TemperatureInfo.sh. Diese nach /usr/model/7020 kopieren und mit chmod ausführbar machen. Dann aus dem Archiv das Script /usr/local/bin/vdrshutdown nach /usr/local/bin kopieren und auch wieder mit chmod ausführbar machen. Im Archiv befindet sich jetzt noch im Verzeichnis /etc/init.d/ das Beispiel-Script RCStart. Ihr müsst in Eure RCStart jetzt noch den Aufruf von SMTSCD und fanmon2.sh einfügen. Das könnt z.Bsp. so aussehen:

Datei
/etc/init.d/RCStart
##### Model #####
if lspci | egrep '01:08.0' > /dev/null
then
# fbset 720x576-60
modprobe i2c-dev 
modprobe i2c-i810 
modprobe cx88xx card=57 
modprobe cx88-dvb 
modprobe dvb-core 
modprobe stv0299
/usr/model/7020/fanmon.sh &
/usr/model/7020/fanmon2.sh &
/usr/model/7020/SMTSCD
/usr/model/7020/smtlircd
/usr/bin/irexec &
/usr/model/7020/tvout.sh
fi 


Nun müssen wir noch im Script /etc/init.d/Runvdr den Parameter '-s /usr/local/bin/vdrshutdown' an den Aufruf vom vdr-Programm anhängen.

Im Script /etc/init.d/RCShutdown muss jetzt noch der nachfolgende Block angepasst werden. Das sollte dann in etwa so aussehen:

Datei
/etc/init.d/RCShutdown
if [ ${MODEL} == SMT ]; then
hwclock --systohc
/bin/sync
sleep 2
#Power-Off in 3 Sekunden
/usr/model/7020/SMTPowerOff -p 3
/sbin/hdparm -Y /dev/hda
sleep 5
#und jetzt das spezielle poweroff
echo -e -n "\x20\x30\x20\x30\x20\x30\x01\x01" > /dev/ttyS1
else 


Den Block im Script /etc/init.d/halt in etwa so anpassen:

Datei
/etc/init.d/halt
if [ ${MODEL} == SMT ]; then
/bin/sync
sleep 2
#Power-Off in 3 Sekunden
/usr/model/7020/SMTPowerOff -p 3 
/sbin/hdparm -Y /dev/hda
sleep 5
#und jetzt das spezielle poweroff
echo -e -n "\x20\x30\x20\x30\x20\x30\x01\x01" > /dev/ttyS1
else
if [ ${MODEL} == Z101 ]; then 
/bin/stty 38400 cs8 -parenb -cstopb < /dev/ttyS1 > /dev/ttyS1
echo -e '\xa2\xb1\xa2\xb1\xa2\xb1' > /dev/ttyS1
fi
#und fuer die normalen Rechner
halt -d -f $netdown $poweroff $hddown
fi 


Jetzt sind erstmal die Start/Stop-Scripte so angepasst, das das Ausschalten mit der 'neuen Technik' korrekt funktionieren sollte. Leider können wir den VDR nun immer noch nicht mit einem kurzen Druck auf die Power-Taste der Fernbedienung ausschalten. Damit das korrekt funktioniert, sind noch zwei weitere Änderungen notwendig:

In /etc/lirc/lircrc den nachfolgenden Block entfernen...

Datei
/etc/lirc/lircrc
begin
button = POWER
prog = irexec
repeat = 0
config = /usr/model/7020/smt-sleep.sh
end 


In /etc/vdr/remotes.conf die Zeile 'LIRC.Power Power' in 'LIRC.Power POWER' abändern.

Jetzt lässt sich nach einem Neustart der VDR durch einen kurzen Druck auf die Power-Taste der Fernbedienung herunterfahren/ausschalten.

Im VDR-Einstellungsmenü noch bei 'System-->VDR-Setup-->VDR-Einstellungen-->Sonstiges-->VDR ausschalten bei Inaktivität(min)' einen Wert > 0 (z.Bsp. 180) eintragen.

Jetzt sollten alle notwendigen Veränderungen durchgeführt sein und der VDR lässt sich mit einem aktiven Timer (muss mindestens 30 Minuten in der Zukunft liegen!!!) herunterfahren. Dabei sollte dann natürlich die gelbe Timer-LED im Frontpanel angehen.