- Mitglied seit
- 13 Mai 2008
- Beiträge
- 2,432
- Punkte für Reaktionen
- 29
- Punkte
- 48
SP (W)500V mit BS zur "Schaltbox" umbauen
Ich beschreibe hier in Stichpunkten, wie man das Speedport 500V so umbauen kann (Hardware und Software), dass es zwei Schaltausgänge und einen Signaleingang bereitstellt, die dann auch per Bedienoberfläche oder eigenen Applikationen gesteuert und abgefragt werden können. Dafür wird der Telefonteil (VoIP) "geopfert" (ausgebaut bzw. aus der Firmware entfernt).
Diese Modifikation wurde an einem Speedport 500V mit Leiterplatten-Version 613A200079_A1 (lt. Aufdruck) durchgeführt, bei dem der Telefonteil als aufgesteckte Huckepack-Platine ausgeführt ist. Die im folgenden genannten Bauteil-Bezeichnungen beziehen sich auf die o.a. LP-Version. Bei anderen Hardware-Versionen bzw. bei der Ausführung mit WLAN (W500V) können die Bauteilbezeichnungen abweichen bzw. die Modifikation nicht vollständig umsetzbar sein.
Hardware-Änderungen
1. Huckepack-Platine ausbauen
Die Zusatzplatine ist mit einer oder zwei verlöteten Stiftleisten rein mechanisch gesichert. Die Signal-Verbindung wird mit drei vielpoligen Steckverbindern hergestellt, die erst nach dem Ausbau sichtbar werden.
Die Stiftleisten tragen die Bezeichnungen "J2" auf der Basisplatine bzw. "J9" auf der Zusatzplatine und "J4" auf der Basisplatine bzw. "J3" auf der Zusatzplatine (es kann sein, dass "J4"/"J3" nicht existieren).
Die Stiftleisten mit einem Seitenschneider trennen (so geht es am schnellsten), danach die Zusatzplatine vorsichtig abnehmen. Stiftleistenstummel einzeln aus der Basisplatine auslöten (weil's dann einfach besser aussieht).
2. Relais "K1" und TAE-Buchsen "J604" und "J605" ausbauen
Das Relais "K1" ist ein Kleinsignalrelais, dessen Verschaltung mit den TAE-Buchsen für einen universellen Einsatz so recht nicht geeignet ist. Für höhere Schaltlasten und/oder eine galvanische Trennung (z.b. zum Stromnetz) ist die Leiterbahnführung auf der Basisplatine eh nicht ausgelegt.
Das Auslöten geht am besten mit einem Heißluftgerät (ca. 300°, schwache Luftleistung) von der Unterseite der Basis-Leiterplatte aus.
3. Außerdem ausbauen:
RJ11-Buchse "J606", Widerstand "R163" (auf der Oberseite), Widerstände "R623" und R624" (beide auf der Unterseite).
4. Ansteuerung für das Relais "K2" nachrüsten
Dies ist der Nachbau der vorhandenen Ansteuerung für Relais "K1".
Benötigt werden:
"U24": Einfach-Inverter 74LVC1GU04, auf der Oberseite
"R167": Widerstand 10kOhm, auf der Oberseite
"Q14": Transistor NPN BC846A, auf der Oberseite
"D18": Doppeldiode MMBD7000, auf der Unterseite
(Freilaufdiode, fall ein Relais betrieben wird. Hier tut es jede andere Einfach-Diode auch, sofern sie generell als Freilaufdiode taugt).
5. Eingangs-Schaltung nachrüsten
Benötigt werden:
"PC1": Optokoppler, auf der Oberseite
"R164": Widerstand 10kOhm, auf der Oberseite
---: Widerstand 2.2kOhm, bedrahtet
Der Optokoppler hat ausschließlich den Sinn einer Schutzbeschaltung, der Eingang würde sonst direkt mit dem GPIO-Pin des Prozessors verbunden sein.
Ich habe in meinen Bastelvorräten keinen Optokoppler gefunden, der dem im Leiterplatten-Aufdruck angegebenen Anschlussbild entspricht, wohl aber einen SFH610-3, dem ich dann die Anschlussbeine umgebogen und mit der Oberseite nach unten montiert habe. Bezüglich der Anschlussbelegung der Eingangsdiode des Optokopplers bin ich eh wahlfrei.
Der 2.2kOhm-Widerstand dient zur Strombegrenzug für die Eingangsdiode des Optokopplers und wird zwischen die inneren ehedem Relais-Anschlüsse motiert (s. Skizze unten, alternativ an Einbauplatz "C213" auf der Unterseite).
6. Außerdem:
Stiftleiste mit zwei Stiften, wird bei den innenliegenden Anschlüssen für die RJ11-Buchse eingesetzt,
Stiftleiste mit sechs Stiften, wird bei den Spulen-Anschlüssen der Relais eingesetzt (zwei Stifte entfernt).
Die Plus-Anschlüsse bei den Schaltausgängen sind die 12V der Spannungsversorgung des SP 500V (nach dem
Ein-/Ausschalter). Die Schaltausgänge schalten nach Masse (Gnd). Der Signal-Eingang ist im Prinzip potentialfrei, der Eingang wird als aktiv betrachtet, wenn die Eingangsdiode des Optokopplers bestromt wird. Die Position des Plus-Anschlusses des Eingangs gilt für die Lösung mit dem umgedrehten Optokoppler. Die verbauten Schalttransistoren (BC846A) sind mit einen Maximalstrom von 100mA spezifiziert.
Firmware-Änderungen
Als Grundlage diente mir die Bitswitcher-Version 0.3.8 (svn co https://bitswitcher.svn.sourceforge.net/svnroot/bitswitcher/tags/0.3.8).
Generell bleibt der VoIP-Teil außen vor, deshalb die Generierung immer mit
# make WITH_VOIP=0
anwerfen (oder das WITH_VOIP=0 in das Top-Makefile aufnehmen).
Der Relais-Ausgang "K1" wird mit GPIO 7 angesteuert, der Relais-Ausgang "K2" wird mit GPIO 35 angesteuert, der Optokoppler- Eingang "PC1" wird mit GPIO 27 erfasst. Die Zugriffe darauf (Lesen zum Abfragen des Schalt- bzw. Eingangszustands, Schreiben zum Setzen des Schaltzustands) leistet ein Kernel-Treiber (extio.c), der hierfür drei character devices implementiert.
Integration des Treibers:
Datei extio.c nach .../dev_tree/bcmdrivers/opensource/char/board/bcm963xx/imp1 kopieren.
Im gleichen Verzeichnis das Makefile um die rot markierte Angabe ergänzen:
In .../dev_tree/bs_extra/start_scripts die Datei preinit.sh um folgenden Abschnitt ergänzen, um die character devices zu erzeugen:
Firmware neu generieren und auf das SP 500V als Firmware-Update laden. Beim Booten wird der extio-Treiber automatisch installiert.
Anwenderschnittstelle:
/dev/extout0 bedient den Schaltausgang "K1",
/dev/extout1 bedient den Schaltausgang "K2",
/dev/extin0 bedient den Signaleingang "PC1".
Der Zugriff erfolgt ganz banal über die Standard C-Funktionen fread() und fwrite() (natürlich muss zuvor ein fopen() mit Option "r+" bei den Ausgängen bzw "r" beim Eingang erfolgreich gewesen sein).
Beim Lesen (je Aufruf von fread) wird genau ein Zeichen (ein Byte) zurückgeliefert, das den Schaltzustand wiedergibt:
Zeichen (Ziffer) '0' (0x30): Ein- bzw. Ausgang nicht aktiv
Zeichen (Ziffer) '1' (0x31): Ein- bzw. Ausgang aktiviert
Beim Schreiben der Schaltausgänge (je Aufruf von fwrite) können beliebig viele Zeichen (Bytes) ausgegeben werden, es wird nur das erste davon interpretiert:
Zeichen (Ziffer) '0' (0x30): Ausgang nicht aktiv (abgeschaltet)
Zeichen (Ziffer) '1' (0x31): Ausgang aktiviert (eingeschaltet)
Deshalb funktionieren in einer Applikation, die als Shellscript umgesetzt ist (s.u. Plugin als Beispiel):
zum Schaltzustand lesen und z.B. ein
zum Einschalten von "K1".
BS-Plugin:
Natürlich darf ein Plugin nicht fehlen, mit dem die "Schalterei" demonstriert und getestet werden kann. Die Datei hierzu heißt extio.cgi und muss als Plugin intalliert werden. In der BS-Bedienoberfläche heißt das Plugin "External I/O". Die Bedienung ist denkbar einfach: Nach Auswahl des gewünschten Schaltzustands für die Ausgänge mit [ Run << ] den Zustand wirksam werden lassen. Angezeigt wird immer der aktuelle Schaltzustand.
Test des Signaleingangs (vgl. Skizze oben):
Plus des Signaleingangs mit dem Plus eines der Ausgänge (z.B. "K2") verbinden, den verbleibenden Anschluss des Signaleingangs mit dem Schaltanschluss des Ausgangs verbinden. Beim Ändern des Schaltzustands des Ausgangs mit Hilfe des Plugins muss der Eingang dem Ausgang folgen.
Mängel:
Das Relais "K1" hat ursprünglich die Aufgabe, bei ausgeschaltetem SP 500V eine direkte Verbindung zwischen der Telefon-Eingangsbuchse (RJ11-Buchse, "J606") und der TAE-Buchse 1 ("J605") herzustellen. Beim Einschalten und nachfolgendem Firmware-Bootvorgang wird dann das Relais aktiviert und damit der Telefonteil der Hardware (die Zusatzplatine) in die Verbindung zur TAE-Buchse 1 eingeschleift. Seltsamerweise und wider Erwarten wird das Relais nicht vom Telefontreiber (endpointdd) eingeschaltet, sondern einmalig vom Netzwerk-Treiber (bcm_enet), mit der Folge, dass das Relais auch bei weg-konfiguriertem VoIP (WITH_VOIP=0, d.h. u.A. kein endpointdd) beim Hochlauf klackert. Das hierfür verantwortliche Bit im Netzwerk-Treiber ist aber identifiziert (und gehackt ...).
Hinweis:
Treiber und Plugin können auch im Voraus ohne den Hardware-Umbau getestet werden (es geht dann halt nur "K1").
Ausblick:
An den beiden Steckverbindern "J602" und "J603", mit denen die Zusatzplatine angeschaltet war, ist ein kompletter Adress-/Daten-/Steuer-Bus verfügbar (22Bit Adressen, 16 Bit Daten). Die Belegung bezüglich Adress- und Daten-Leitungen ist mir weitgehend bekannt, nicht jedoch bezüglich der Steuersignale zum Lesen und Schreiben etc. Für diesen Bus scheinen obendrein verschiedene Betriebsarten möglich zu sein (vgl. board-Treiber der FW). Auch da steckt noch Potential drin.
Das Plugin im Einsatz:
Code von Treiber und Plugin im Anhang.
G., -#####o:
Ich beschreibe hier in Stichpunkten, wie man das Speedport 500V so umbauen kann (Hardware und Software), dass es zwei Schaltausgänge und einen Signaleingang bereitstellt, die dann auch per Bedienoberfläche oder eigenen Applikationen gesteuert und abgefragt werden können. Dafür wird der Telefonteil (VoIP) "geopfert" (ausgebaut bzw. aus der Firmware entfernt).
Diese Modifikation wurde an einem Speedport 500V mit Leiterplatten-Version 613A200079_A1 (lt. Aufdruck) durchgeführt, bei dem der Telefonteil als aufgesteckte Huckepack-Platine ausgeführt ist. Die im folgenden genannten Bauteil-Bezeichnungen beziehen sich auf die o.a. LP-Version. Bei anderen Hardware-Versionen bzw. bei der Ausführung mit WLAN (W500V) können die Bauteilbezeichnungen abweichen bzw. die Modifikation nicht vollständig umsetzbar sein.
Hardware-Änderungen
1. Huckepack-Platine ausbauen
Die Zusatzplatine ist mit einer oder zwei verlöteten Stiftleisten rein mechanisch gesichert. Die Signal-Verbindung wird mit drei vielpoligen Steckverbindern hergestellt, die erst nach dem Ausbau sichtbar werden.
Die Stiftleisten tragen die Bezeichnungen "J2" auf der Basisplatine bzw. "J9" auf der Zusatzplatine und "J4" auf der Basisplatine bzw. "J3" auf der Zusatzplatine (es kann sein, dass "J4"/"J3" nicht existieren).
Die Stiftleisten mit einem Seitenschneider trennen (so geht es am schnellsten), danach die Zusatzplatine vorsichtig abnehmen. Stiftleistenstummel einzeln aus der Basisplatine auslöten (weil's dann einfach besser aussieht).
2. Relais "K1" und TAE-Buchsen "J604" und "J605" ausbauen
Das Relais "K1" ist ein Kleinsignalrelais, dessen Verschaltung mit den TAE-Buchsen für einen universellen Einsatz so recht nicht geeignet ist. Für höhere Schaltlasten und/oder eine galvanische Trennung (z.b. zum Stromnetz) ist die Leiterbahnführung auf der Basisplatine eh nicht ausgelegt.
Das Auslöten geht am besten mit einem Heißluftgerät (ca. 300°, schwache Luftleistung) von der Unterseite der Basis-Leiterplatte aus.
3. Außerdem ausbauen:
RJ11-Buchse "J606", Widerstand "R163" (auf der Oberseite), Widerstände "R623" und R624" (beide auf der Unterseite).
4. Ansteuerung für das Relais "K2" nachrüsten
Dies ist der Nachbau der vorhandenen Ansteuerung für Relais "K1".
Benötigt werden:
"U24": Einfach-Inverter 74LVC1GU04, auf der Oberseite
"R167": Widerstand 10kOhm, auf der Oberseite
"Q14": Transistor NPN BC846A, auf der Oberseite
"D18": Doppeldiode MMBD7000, auf der Unterseite
(Freilaufdiode, fall ein Relais betrieben wird. Hier tut es jede andere Einfach-Diode auch, sofern sie generell als Freilaufdiode taugt).
5. Eingangs-Schaltung nachrüsten
Benötigt werden:
"PC1": Optokoppler, auf der Oberseite
"R164": Widerstand 10kOhm, auf der Oberseite
---: Widerstand 2.2kOhm, bedrahtet
Der Optokoppler hat ausschließlich den Sinn einer Schutzbeschaltung, der Eingang würde sonst direkt mit dem GPIO-Pin des Prozessors verbunden sein.
Ich habe in meinen Bastelvorräten keinen Optokoppler gefunden, der dem im Leiterplatten-Aufdruck angegebenen Anschlussbild entspricht, wohl aber einen SFH610-3, dem ich dann die Anschlussbeine umgebogen und mit der Oberseite nach unten montiert habe. Bezüglich der Anschlussbelegung der Eingangsdiode des Optokopplers bin ich eh wahlfrei.
Der 2.2kOhm-Widerstand dient zur Strombegrenzug für die Eingangsdiode des Optokopplers und wird zwischen die inneren ehedem Relais-Anschlüsse motiert (s. Skizze unten, alternativ an Einbauplatz "C213" auf der Unterseite).
6. Außerdem:
Stiftleiste mit zwei Stiften, wird bei den innenliegenden Anschlüssen für die RJ11-Buchse eingesetzt,
Stiftleiste mit sechs Stiften, wird bei den Spulen-Anschlüssen der Relais eingesetzt (zwei Stifte entfernt).
Code:
Abb. 1 - Einbauskizze
o [b]*[/b] J606
[b][color=red]*[/b][/color] o
K2 K1
[color=red][b]*[/b][/color] [b]*[/b] [color=red][b]*[/b][/color] [b]*[/b]
o[b]==[/b]o o o
o o o o
o o o o
[b]*[/b] Stiftleisten-Stift
[b]==[/b] Widerstand 2.2kOhm
[color=red][b]rot[/b][/color] Pluspol
Ein-/Ausschalter). Die Schaltausgänge schalten nach Masse (Gnd). Der Signal-Eingang ist im Prinzip potentialfrei, der Eingang wird als aktiv betrachtet, wenn die Eingangsdiode des Optokopplers bestromt wird. Die Position des Plus-Anschlusses des Eingangs gilt für die Lösung mit dem umgedrehten Optokoppler. Die verbauten Schalttransistoren (BC846A) sind mit einen Maximalstrom von 100mA spezifiziert.
Firmware-Änderungen
Als Grundlage diente mir die Bitswitcher-Version 0.3.8 (svn co https://bitswitcher.svn.sourceforge.net/svnroot/bitswitcher/tags/0.3.8).
Generell bleibt der VoIP-Teil außen vor, deshalb die Generierung immer mit
# make WITH_VOIP=0
anwerfen (oder das WITH_VOIP=0 in das Top-Makefile aufnehmen).
Der Relais-Ausgang "K1" wird mit GPIO 7 angesteuert, der Relais-Ausgang "K2" wird mit GPIO 35 angesteuert, der Optokoppler- Eingang "PC1" wird mit GPIO 27 erfasst. Die Zugriffe darauf (Lesen zum Abfragen des Schalt- bzw. Eingangszustands, Schreiben zum Setzen des Schaltzustands) leistet ein Kernel-Treiber (extio.c), der hierfür drei character devices implementiert.
Integration des Treibers:
Datei extio.c nach .../dev_tree/bcmdrivers/opensource/char/board/bcm963xx/imp1 kopieren.
Im gleichen Verzeichnis das Makefile um die rot markierte Angabe ergänzen:
Code:
obj-y := board.o cfiflash.o bcm63xx_flash.o bcm63xx_led.o [color=red]extio.o[/color]
Code:
mknod /dev/extout0 c 200 0
mknod /dev/extout1 c 200 1
chmod 666 /dev/extout*
mknod /dev/extin0 c 200 2
chmod 444 /dev/extin*
Anwenderschnittstelle:
/dev/extout0 bedient den Schaltausgang "K1",
/dev/extout1 bedient den Schaltausgang "K2",
/dev/extin0 bedient den Signaleingang "PC1".
Der Zugriff erfolgt ganz banal über die Standard C-Funktionen fread() und fwrite() (natürlich muss zuvor ein fopen() mit Option "r+" bei den Ausgängen bzw "r" beim Eingang erfolgreich gewesen sein).
Beim Lesen (je Aufruf von fread) wird genau ein Zeichen (ein Byte) zurückgeliefert, das den Schaltzustand wiedergibt:
Zeichen (Ziffer) '0' (0x30): Ein- bzw. Ausgang nicht aktiv
Zeichen (Ziffer) '1' (0x31): Ein- bzw. Ausgang aktiviert
Beim Schreiben der Schaltausgänge (je Aufruf von fwrite) können beliebig viele Zeichen (Bytes) ausgegeben werden, es wird nur das erste davon interpretiert:
Zeichen (Ziffer) '0' (0x30): Ausgang nicht aktiv (abgeschaltet)
Zeichen (Ziffer) '1' (0x31): Ausgang aktiviert (eingeschaltet)
Deshalb funktionieren in einer Applikation, die als Shellscript umgesetzt ist (s.u. Plugin als Beispiel):
Code:
# cat /dev/extout0
Code:
# echo 1 > /dev/extout0
BS-Plugin:
Natürlich darf ein Plugin nicht fehlen, mit dem die "Schalterei" demonstriert und getestet werden kann. Die Datei hierzu heißt extio.cgi und muss als Plugin intalliert werden. In der BS-Bedienoberfläche heißt das Plugin "External I/O". Die Bedienung ist denkbar einfach: Nach Auswahl des gewünschten Schaltzustands für die Ausgänge mit [ Run << ] den Zustand wirksam werden lassen. Angezeigt wird immer der aktuelle Schaltzustand.
Test des Signaleingangs (vgl. Skizze oben):
Plus des Signaleingangs mit dem Plus eines der Ausgänge (z.B. "K2") verbinden, den verbleibenden Anschluss des Signaleingangs mit dem Schaltanschluss des Ausgangs verbinden. Beim Ändern des Schaltzustands des Ausgangs mit Hilfe des Plugins muss der Eingang dem Ausgang folgen.
Mängel:
Das Relais "K1" hat ursprünglich die Aufgabe, bei ausgeschaltetem SP 500V eine direkte Verbindung zwischen der Telefon-Eingangsbuchse (RJ11-Buchse, "J606") und der TAE-Buchse 1 ("J605") herzustellen. Beim Einschalten und nachfolgendem Firmware-Bootvorgang wird dann das Relais aktiviert und damit der Telefonteil der Hardware (die Zusatzplatine) in die Verbindung zur TAE-Buchse 1 eingeschleift. Seltsamerweise und wider Erwarten wird das Relais nicht vom Telefontreiber (endpointdd) eingeschaltet, sondern einmalig vom Netzwerk-Treiber (bcm_enet), mit der Folge, dass das Relais auch bei weg-konfiguriertem VoIP (WITH_VOIP=0, d.h. u.A. kein endpointdd) beim Hochlauf klackert. Das hierfür verantwortliche Bit im Netzwerk-Treiber ist aber identifiziert (und gehackt ...).
Hinweis:
Treiber und Plugin können auch im Voraus ohne den Hardware-Umbau getestet werden (es geht dann halt nur "K1").
Ausblick:
An den beiden Steckverbindern "J602" und "J603", mit denen die Zusatzplatine angeschaltet war, ist ein kompletter Adress-/Daten-/Steuer-Bus verfügbar (22Bit Adressen, 16 Bit Daten). Die Belegung bezüglich Adress- und Daten-Leitungen ist mir weitgehend bekannt, nicht jedoch bezüglich der Steuersignale zum Lesen und Schreiben etc. Für diesen Bus scheinen obendrein verschiedene Betriebsarten möglich zu sein (vgl. board-Treiber der FW). Auch da steckt noch Potential drin.
Das Plugin im Einsatz:
Code von Treiber und Plugin im Anhang.
G., -#####o:
Anhänge
Zuletzt bearbeitet: