Montag, 30. Juni 2014

Low Cost Tablet-Ablage

Eine Bauanleitung für eine faltbare Tablet-Ablage aus Holzresten.


Material:
  • Sperrholz 256 mm x 210 mm x 4 mm
  • Holzleiste 256 mm x 20 mm x 10 mm
  • 5 Holzschrauben 3 x 16
  • Gewebeband
  • Klebefilz


Mit Bleistift wurden die schwarzen Schnittlinien auf das Sperrholz übertragen und anschließend mit der Laubsäge ausgeschnitten.


Nach dem Entgraten und Abrunden der Teile mit feinem Schleifpapier (400er), wurden die Teile 1 bis 5 mit Gewebeband verbunden, so dass entlang der grünen Linien ein Scharnier entstand. 



Am unteren Ende der Platte wurde die Holzleiste mit 3 mm Schrauben angebracht. Dazu wurden die 3 mm Löcher in der Ablageplatte [1] gesenkt. Wenn die Holzleiste aus Hartholz ist, lohnt es sich dort entsprechende 2 mm Sacklöcher zu bohren. 5 Pads aus Klebefilz sorgen für einen weichen und ausreichenden Halt des Tablets.



Aufbau: Die Sicherungsklappe [3] wird nach oben geklappt und die Querverbinder [4] und [5] nach unten, um sie im abgewinkelten Standteil [2] einzuhaken. Beim Aufstellen klappt die Sicherungsklappe nach unten und verriegelt die Querverbinder.





Fertig ist die Tablet-Ablage:



PS: die Maße sind nach belieben variierbar und können z.B. dem etwas kleineren iPad angepasst werden. Die Holzleiste könnte auch schmaler sein.

Sonntag, 22. Juni 2014

Funktionsgenerator wiederbelebt

Auch alte Bausatzmodule müssen nicht in den Schrott wandern, nur weil es vermeintlich besseres bzw. moderneres auf dem Markt gibt. Für wenig Geld viel mir ein alter Funktionsgenerator von ELV in die Hände, den es aufzubereiten galt.



Es handelte sich um einen DDS 20 mit folgenden Werten:



Sinus Frequenzbereich:  
0,1 Hz - 20 MHz
Sinus Spannung:  
0 - 4 Vss, Ri = 50 W
Rechteck Frequenzbereich:  
0,5 Hz - 20 MHz
Rechteck Spannung:  
5 Vss, Ri = 50 W,  TTL-Pegel
Wobbelbereich:  
0,1 Hz - 20 MHz
Wobbelfrequenz:  
0,1 Hz - 20 Hz


1. Ausbau der Verschleißteile

... und das sind bei elektronischen Geräten meist die mechanischen Bauteile. In diesem Fall Taster, Potentiometer und Drehgeber. Bei Kontaktproblemen können diese Bauteile richtig Ärger verursachen, besonders wenn dann kein passender Ersatz zu finden ist und nachträglich die Frontplatte geändert werden muss.
Also lieber gleich ersetzen.





2. Bau eines Netzteils

Das Netzteil sollte 100 mA bei +5 V und -5 V liefern. Die Spannungsregler befinden sich schon auf der Platine des Funktionsgenerators. Das Netzteil musste also lediglich eine unstabilisierte Spannung liefern. Die maximale Dropout Spannung benötigt der positive Spannungsregler L7805CV mit 2,5 V, der negative L7905C ist mit 1,4 V unkritischer. Die unstabilisierte Eingangsspannung muss also > 7,5 V sein. 
Ein Transformator mit sekundärseitiger 6 V Wechselspannung liefert nach Gleichrichtung und Glättung und bei Nennlast, etwa 7,7 V. Da ich den Transformator etwas größer als notwendig wählte, lag die Ausgangsspannung noch etwas höher und war in jedem Fall ausreichend.


Die Bauteile:

2 Elektrolytkondensator, 16x25mm, RM 7,5mm
1 Brückengleichrichter B 40 C 1400
2 Sicherungshalter, 5x20mm, max. 6,3A-250V
2 Sicherungen 160mA träge
1 Trafo 2,3VA, 2x 6V, 2x 192mA
1 Netzschalter 2 polig




... übersichtlich auf einer Platine angeordnet:







3. Frontplattenbau

Ein altes lackiertes Stahlgehäuse hatte ich noch auf Lager. Da für die Frontplatte kein passendes Alublech zur Hand war, habe ich kurzerhand eine Frontplatte aus Sperrholz gebaut - mit dem guten Vorsatz, sie bald durch Alu zu ersetzen. 
Nun war es an der Zeit auch die "Verschleißteile" durch neue Bedienelemente zu ersetzen. Der Taster zum Aufruf der Einstellungen wurde nicht mehr als separater Schalter ausgeführt, sondern durch die Tastfunktion des Encoders ersetzt, was die Bedienung vereinfacht.



Bauteile:


1 Inkremental Encoder 12°, mit Taster
1 Drehpoti. linear, 4mm, mono 470 Ohm
2 Drehknöpfe
2 Bananenbuchse 4mm, vollisoliert, rot
2 Bananenbuchse 4mm, vollisoliert, schwarz
2 BNC-Einbaubuchse, 50 Ohm, Lötversion

Sinus- und Rechtecksignale können sowohl an BNC-Buchsen als auch an 4 mm Buchsen für Bananenstecker abgegriffen werden.




4. Einbau ins Gehäuse

Das Netzteil habe ich auf Abstandhaltern montiert und den Schutzleiter am Gehäuse befestigt. 

Der provisorische Stil der Frontplatte setzt sich in deren Beschriftung fort ;-)




5. Test mit dem Oszilloskop: 

10 MHz Rechteck, 5 V:




10 MHz Sinus, 4 Vss:



Die Kurvenform sieht brauchbar aus. Nun muss sich das Gerät der Praxis stellen ...

Sonntag, 8. Juni 2014

PC-Fernsteuerung mit TightVNC

PCs sind in der Regel wartungsbedürftig. Nun befand sich mein "Werkstattrechner" in der Werkstatt, während ich im Büro saß und gerne wissen wollte, wie der aktuelle Stand beim Windows-Update war ... Lauferei!
Der Optiplex FX160 hat auch mein altes Toshiba Laptop der Ladestation abgelöst und übernimmt nun mit LogView die Aufzeichnung des Akkuladevorgangs. Lauferei, wenn ich wissen wollte, ob der Ladevorgang beendet war und der Akku getauscht werden konnte. In Zukunft kann ich mir diese Wege sparen.

Zum Einsatz kommt nun TightVNC for Windows (Version 2.7.10) - eine Remote Control / Remote Desktop Software...

... die ohne richtige Fernbedienung auskommt ;-)

TightVNC besteht aus einem Server und einem Viewer (Client). Auf dem entfernten Rechner dient der Server dazu, den Desktop und dessen Kontrolle via Netzwerk an einen anderen Rechner quasi zu spiegeln. An diesem anderen Rechner - im meinem Fall der Büro-PC - kommt der Viewer zum Einsatz, mit dem ich nun die Kontrolle über den entfernten Rechner habe.

Auf beiden Rechnern installiert, ging es zunächst an die Konfiguration. 

Server-Konfiguration: 

Ein rechter Mausklick auf das V-Icon im Info-Bereich der Taskleiste und dann Configuration auswählen.


Im Anschluss erscheint das Konfigurationsfenster des Servers.


Die meisten Einstellungen sind schon gesetzt. Wichtig: Passworte setzen.
Eine komfortable Funktion ist die Möglichkeit Dateien vom lokalen Rechner auf den Remote-Rechner zu übertragen. Dazu wählt man unter Miscellaneous die Option Enable file transfers aus.
Der Server nutzt die Ports 5800 und 5900. Diese Ports sollten im eigenen Netzwerk nicht geblockt sein. 


Die Viewer Konfiguration:

... erreicht man z.B. über das Connection Fenster beim Aufruf des Viewer durch klick auf Configure.



Wichtig ist hier m.E. die Option Warn at switching to full-screen mode, denn bei dieser Warnung wird noch mal die Tastenkombination angezeigt, mit der man den Full Screen wieder abschalten kann: CTRL-ALT-SHIFT-F.


Mit Klick auf Options ... können im folgenden Fenster die Verbindungsparameter geändert werden.


Hat man alle Einstellung zur eigenen Zufriedenheit gewählt, kann die Verbindung aufgebaut werden. Im Connection Fenster wird der entfernte Rechner dazu z.B. per IP-Adresse spezifiziert. Es folgt die Passwort-Abfrage ...



... und bei richtiger Eingabe wird der Bildschirm des Remote PCs angezeigt:


... in diesem Fall schon mit laufendem LogView Programm.
Oder ohne bereits gestartetes Programm mit dem Desktop:


Mit Hilfe der File Transfer Funktion lassen sich ohne großen Aufwand Dateien zwischen den Rechner austauschen:



Als nächstes werde ich Apps testen, um die Fernsteuerung per Tablet oder Smartphone zu testen.

Mittwoch, 21. Mai 2014

Thin Client Tuning


In der Werkstatt kann es hilfreich sein, wenn man z.B. Datenblätter schnell per Internet verfügbar hat. Bisher habe ich dazu einen betagten (BJ 1998) HP Vectra VE mit 350 MHz Pentium II Prozessor und 96 MByte RAM genutzt. SuSE Linux 7.1 lief auch recht flüssig, ist jedoch auch längst überholt. Möchte man sich jedoch umfangreichere Grafiken anschauen oder auch mal etwas mit Eagle bearbeiten, stößt man schnell an die Grenzen des Machbaren. Zudem hat die Festplatte mittlerweile einen Gräuchpegel erreicht, der auf ein nahes Ableben schließen lässt.
Mein Toshiba Laptop mit noch etwas lahmeren PII und Win XP ist auch keine Alternative mehr. Schon das für's Internet erforderliche Security Pack würde ihn gnadenlos in die Knie zwingen.

Bei Nerdbench fand ich einen Artikel über einen Thin Client von Dell, den Optiplex FX160. Mit seiner Grundausstattung entspricht er nicht mehr dem klassischen Konzept eines Thin Clients. Er ist quasi ein "Thin PC". Zudem war er für günstige 25 € erhältlich.



Ausstattung:

CPU: 
RAM: 
1 GB DDR2
Festplatte: 
512 MB Flash
Grafik: 
SiS onboard bis 256 MB
Netzwerk: 
10/100/1000 Ethernet (Broadcom)
Anschlüsse: 


6x USB 2.0, 1x DVI-D, 1x VGA, 1x seriell, 2x PS2, 1x RJ45,2x intern SATA, Audio in/out (front)

Der ca. 1 cm dicke Standsockel ist abnehmbar. Darunter verbirgt sich eine Befestigungsmöglichkeitnach VESA 100.



Zum Öffnen des Gehäuses werden auf der Rückseite 2 Kreuzschrauben entfernt und das Oberteil Richtung Front geschoben. Erst dann kann es abgehoben werden.



Der FX160 wird passiv gekühlt, also keine nervigen Lüftergeräuche.



Auf dem SATA0 Steckplatz sitzt der 512 MB Flash Speicher. Auf ihm ist eine Linux Client-Software installiert, die lediglich einen Browser öffnet, um das Netzwerk zu nutzen. Hier beginnt das Tuning.



Tuning:

Mein Ziel war, Windows 7 als Betriebssystem zu installieren, die angenehme Eigenschaft der Lautlosigkeit beizubehalten und möglichst viel Performance aus dem FX160 herauszukitzeln.

Der kleine Flash wurde deshalb gegen eine 60 GB SSD von Kingston (SSDNow V300) ausgetauscht. 
Da der SATA Anschluss orthogonal zum Motherboard ausgerichtet ist, bedurfte es zum Anschluss der SSD eines Adapterkabels mit Kombistecker. Da keine Befestigungsmöglichkeit vorhanden war, habe ich die SSD einfach lose untergebracht. Der Kabelstrang und die Enge des Gehäuses sorgen für den nötigen Halt.



Der FX160 besitzt 2 RAM Slots, die in Summe mit bis zu 4 GB bestückt werden können.



Den eingebauten 1 GB Riegel habe ich durch 2x 1 GB von Corsair ersetzt. Der 2. Speicher Slot ist schräg angebracht. Vermutlich um die Effektivität des CPU-Kühlers zu verbessern, wenn der FX160 hochkant aufgestellt wird.






Es folgte nun ein BIOS Update auf die Version A13. Mein BIOS Update Stick war hier besonders hilfreich.
Anschließend habe ich mit Hilfe eines externen CD-Laufwerks Windows 7 (32-bit) problemlos installieren können. Auch das Einspielen der Treiber verlief problemlos. Das anschließende Update von Windows erforderte jedoch einige Zeit. Fast 150 Pakete wurden heruntergeladen und installiert.
Da ich nur gelegentlich nach dem Fortschritt des Updates geschaut habe und zwischendurch öfters ein Neustart erforderlich war, zog sich die Aktion über einen kompletten Tag.


Ergebnis:

Einen ersten Überblick zur Performance liefert der Windows-Leistungsindex:
















Die SSD erreicht einen ordentlich hohen Wert. Schwächtes Glied ist der Prozessor.

Die Zeiten für den Wechsel des Betriebszustandes:


Booten:
 15 Sekunden
Shutdown:
  3 Sekunden
Start aus Standby:
  3 Sekunden
Standby:
  3 Sekunden

Abschließend hat mich noch die ungefähre Leistungsaufnahme interessiert. Dazu habe ich ein simples Verbrauchsmessgerät genutzt. Unter Berücksichtigung dass die letzte Stelle der Anzeige ungenau ist, ergeben sich folgende Leistungswerte:

Heruntergefahren bzw. Energiesparmodus


4,6 W ... 9,2 W





Hochgefahren und angemeldet


28 W ... 32 W





Ein 24x7 Standby mit einem Tarif von 26 ct/kWh kostet damit im Jahr ca. 11,40 € ... 22,80 €. Angesichts der kurzen Boot-Zeit lohnt es sich den Rechner auszuschalten und vom Netz zu trennen.

Der BIOS Update Stick

In den Tiefen meiner Schreibtischschublade fristete ein alter LG XTICK USB-Stick mit 128 MB ein jämmerliches Dasein zwischen anderen unbeachteten Kleinteilen und der permanenten Aussicht im Müll zu landen...

Doch mittlerweile hat er eine neue Aufgabe erhalten, die ihm einen dauerhaften Platz in meinem PC Werkzeugkoffer sichert.

Der BIOS Update Stick


Viele Motherboards haben Software Tools im Beipack, die ein BIOS Update unter Windows erlauben. Da bei Windows viele Dienste und Programme im Hintergrund laufen, besteht latent die Gefahr, dass diese im Fehlerfall das BIOS Update gefährden. Seit Windows 7 schätze ich diese Gefahr als gering ein, unter Windows XP hat es mich jedoch schon ein Motherboard gekostet, nachdem ein Fehler in einem Hintergrundprozess zu Blue Screen führte.

Abhilfe schafft hier ein Boot-Medium mit dem guten alten MS-DOS - oder wenn es Freeware sein soll: einem aktuelleren FreeDOS. Besonders wertvoll wird diese Möglichkeit des Updates, wenn man Linux installieren möchte, da dafür meist keine BIOS Update Tools angeboten werden.

Folgende Voraussetzungen müssen erfüllt sein:
  1. Im alten BIOS als "first boot device" USB (oder removable) einstellen.
  2. Der USB-Stick muss "bootable" sein, also über einen Bootrecord im MBR verfügen.

Ein komfortabler Weg dahin bietet Rufus von Pete Batard.
Mit diesem Programm formatiert und partioniert den USB-Stick - ACHTUNG: gespeicherte Daten gehen verloren! Es legt einen Bootrecord an und schreibt ein Minimal-Set von FreeDOS auf den Stick, wenn man es entsprechend auswählt. Möchte man ein umfangreicheres FreeDOS, dann findet man dies unter http://www.freedos.org/download/.


Anschließend waren folgende Dateien auf dem USB-Stick zu finden:


Insgesamt rund 300 kB an Daten.

In der Praxis durfte sich der Stick gleich am FX160 Thin Client bewähren (dazu später mehr). 
Das BIOS Update File habe ich ins Hauptverzeichnis des Sticks kopiert. Anschließend wurde der Rechner mit dem FreeDOS-Stick gebootet und das Update File gestartet. 
Das Update verlief ohne weitere Vorkommnisse und dem guten Gefühl, dass solche auch nicht zu erwarten waren.


Sonntag, 18. Mai 2014

Hacking Intertec Funksteckdosen

Sie hingen im Baumarkt, zu viert mit einer Fernbedienung, und haben mich mit einem Preis unter 15 € angelacht: Funksteckdosen. Schaltleistung bis 1000 W (4,35 A), eine 12 V Batterie Typ A23 für die Fernbedienung ist dabei, und der Hersteller verspricht 15 m Reichweite bei einer Frequenz von 433,92 MHz.






Und nirgendwo steht, dass man zum Fernbedienen ausschließlich die Fernbedienung nutzen darf. ;-)

1. Schritt: Bedienungsanleitung lesen

Sie gibt z.B. Auskunft über die Konfigurierbarkeit der Steckdosen. 
Auf der Rückseite der Fernbedienung befindet sich unterhalb des Batteriefachs ein 5-fach DIP-Schalter, mit dem der Systemcode eingestellt werden kann. 



Der Systemcode kann aus 32 Werten beliebig ausgewählt werden. Falls die eigenen Steckdosen auch auf die Fernbedienung des Nachbarn reagieren, kann hier durch Wahl eines anderen Codes Abhilfe geschaffen werden. 

Auf der Rückseite jeder Funksteckdose verbirgt sich hinter einer zugeschraubten Klappe ein 10-fach DIP-Schalter. Mit den Schaltern 1-5 wird wieder der (eigene) Systemcode eingestellt. Die Schalter A-E legen fest, mit welchen Tasten auf der Fernbedienung diese Steckdose gesteuert werden kann.




2. Schritt: Was wird per Funk übertragen?

Das Werkzeug der Wahl ist ein DVB-T USB-Dongle (VG0002A) von LogiLink, der mit der richtigen Software zum Spektrumanalyser wird. Mein Lieblingsprogramm ist in diesem Fall die Open Source Software SDR#.



Beim Druck auf eine Taste der Fernbedienung ist das Sendesignal schnell gefunden. Per Recording Plugin habe ich den Audio-Output aufgezeichnet, um auszuwerten, was auf der 433,92 MHz Trägerfrequenz aufmoduliert ist:



Zum Auswerten nutzte ich das Open Source Programm Audacity. Hier die Gesamtansicht eines zweimaligen Tastendrucks:



Durch Zoomen der Zeitachse werden Details erkennbar:



Es ist im Signal ein Bitstrom erkennbar. 

Beim Drücken der verschiedenen Tasten ergaben sich unterschiedliche Bitströme mit 25 bit Länge und einer Periodendauer von 25x1,25 ms. Während des Tastendrucks wird der Bitstrom ständig wiederholt, mit einer Pause von 10 ms zwischen den Sequenzen.



3. Schritt: Die Auswertung

Ich habe alle Tastendrücke aufgezeichnet, die Sequenzen ermittelt und die Ergebnisse korreliert:



Die Bits 12, 14, 16 und 18 ändern sich abhängig von den gedrückten Tasten A-D, während gleichzeitig Bit 22 abhängig davon ist, ob man die ON-Taste oder die OFF-Taste betätigt. 
Beim Ändern des Systemcodes ergaben sich Änderungen bei den Bits 2, 4, 6, 8 und 10, entsprechend den Schaltern 1-5.



Hält man eine Taste längere Zeit gedrückt ändert sich jegliche Sequenz in 



Die Funktion dieser Sequenz konnte ich nicht ermitteln. Ich vermute, dass sie eine Art "neutrales Kommando" ohne Funktion ist, um Fehlinterpretationen durch Übertragungsfehler zu minimieren.

Bei der Übermittlung des Systemcodes ist mir aufgefallen, dass die relevanten Bits als "0 = kein Signal" übertragen werden, wenn der entsprechende Schalter auf Schalterstellung 1 steht.
Ich habe daher die Zuordnung getroffen:

1-Signal = logisch 0
0-Signal = logisch 1

Das Übertragungsformat kann dann wie folgt zusammengefasst werden:



E*:  Es gibt an der Fernbedienung zwar keine E-Tasten, die Steckdosen haben am DIP-Schalter jedoch die Möglichkeit als E konfiguriert zu werden. Von der Logik her vermute ich deshalb, dass Bit 20 nicht zwangsläufig zum EIN-AUS Kommando gehört, sondern für die E-Tasten vorgesehen war.

Soweit die Theorie. Ob diese Auswertungen stimmen, musste die Praxis zeigen.


4. Schritt: Wie kann man die Übertragung nachbilden?

Als Sender benutzte ich ein Modul, dass mit der Bezeichnung XY-FST bei diversen Händlern günstig zu finden ist.


Technische Daten XY-FST:
  • Betriebsspannung: 3,5 - 12V DC
  • Reichweite: 20 - 200m (Abhängig von der Betriebsspannung)
  • Betriebsart: AM
  • Übertragungsrate: 4KB / s
  • Sendeleistung: 10mW
  • Sendefrequenz: 433Mhz
  • Abmessungen: 19 x 19mm
  • Pinbelegung: Data, VCC, Masse (von links nach rechts)





Das Modulationssignal habe ich mit einem Arduino Uno generiert. Ein Testaufbau auf einem Breadboard ist schnell erledigt.



Der zeitliche Signalaufbau der Bits ergab sich aus der Auswertung und musste im Programm nachgebildet werden:



Der dazu passende Arduino-Code:

int sigTX = 7;
int LEDpin = 13;
int aOnFrame[] =  {1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1};  // sys=11111, D, EIN
int aOffFrame[] = {1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1}; // sys=11111, D, AUS

void setup() {
  pinMode( sigTX, OUTPUT );
  pinMode( LEDpin, OUTPUT );
}

void loop() {
  sendOnFrame();  // 2 Sekunden ON
  delay( 2000 );
  sendOffFrame(); // 2 Sekunden OFF
  delay( 2000 );
}

void sendOnFrame() {
  int j = 0;
  int i = 0;
  digitalWrite( LEDpin, HIGH );
  for( j=0; j<20; j++ ){     // 10x ON Sequenz senden                     
    for( i=0; i<25; i++ ){   // 25 bit Frame erzeugen
      if( aOnFrame[i] == 1 ) { sendHighLevel(); }
      if( aOnFrame[i] == 0 ) { sendLowLevel(); }
      }
    delay( 10 );
    }
  digitalWrite( LEDpin, LOW );
}

void sendOffFrame() {
  int j = 0;
  int i = 0;
  digitalWrite( LEDpin, HIGH );
  for( j=0; j<20; j++ ){     // 10x OFF Sequenz senden
    for( i=0; i<25; i++ ){   // 25 bit Frame erzeugen
      if( aOffFrame[i] == 1 ) { sendHighLevel(); }
      if( aOffFrame[i] == 0 ) { sendLowLevel(); }
      }
    delay( 10 );
    }
  digitalWrite( LEDpin, LOW );
}

// Logisch 1 Signal generieren 
void sendHighLevel() {
  digitalWrite( sigTX, HIGH );
  delayMicroseconds( 300 );
  digitalWrite( sigTX, LOW );
  delayMicroseconds( 950 );
}

// Logisch 0 Signal generieren
void sendLowLevel() {
  digitalWrite( sigTX, HIGH );
  delayMicroseconds( 930 );
  digitalWrite( sigTX, LOW );
  delayMicroseconds( 320 );
}


4. Uuuuuuund Action!