Archive for December, 2012

DX7s

Sunday, December 30th, 2012

Nach 4 Jahren mit der DX7i habe ich mir einen neuen Sender geleistet: Spektrum DX7s. Die Entscheidung war spontan. Kurz vor Weihnachten war an der DX6i ein Knüppelaggregat defekt (Sender vom Tisch gefallen 🙁 ) Das Ersatzteil würde ich vor meinem Urlaub nicht mehr bekommen. Die 10 Modellspeicher der DX6i haben schon lange nicht mehr ausgereicht.

DX7s
+ bessere Knüppelmechanik (Kugellager, einstellbar)
+ 20 Modellspeicher
+ Export & Import von Modellen via SD-Card – XML-Dateien!
+ Firmwareupdates via SD-Card
+ Timer läuft automatisch wenn der Motor läuft
+ größeres Display
+ integriertes Ladegerät für NiMH und 2S-Lipo
+ Warnungen per Ton oder Vibration sind einzeln abschaltbar
+ Telemetrie mit entsprechenden Empfängern

– ca.100€ bzw. 100% teurer als DX6i
– Laden dauert 12(NiMH) bis 30h(Lipo) Stunden
– 30 Gramm schwerer als DX6i
– Display ohne Backlight (kann man mit Turnigy backlight nachrüsten)

Drucken ohne CUPS

Thursday, December 20th, 2012

Auf meinem Schreibtisch liegt seit ein paar Tagen ein kleiner mobiler Drucker: RW 420 von Zebra. Das Ziel: Von einem Android Gerät darauf drucken. Die Zebra Utility App hift momentan nicht, denn die App kann nur Blutooth und WLAN und der Drucker kann nur RS232 und USB.
Also den Drucker erst mal ans Linux Laptop angeschlossen. Linux Mint erkennt ihn nicht automatisch, aber ich konnte ihn mit Cups manuell einrichten (Zebra CPCL Label Printer). Danach konnte ich z.B. von LibreOffice aus drucken, auch Grafik mit 203dpi.
Der nächste Schritt war, es ohne CUPS zu probieren.
Der Drucker versteht “CPCL” – Dazu gibts beim Hersteller das Handbuch als pdf. Ein Hello World sieht z.B. so aus:

! 0 200 200 210 1
TEXT 4 0 30 40 Hello World
PRINT

Das habe ich mit

cat test.cpcl > /dev/usb/lp0 

geschickt, aber nix passierte. Im Handbuch steht CR+LF als Zeilenende wäre wichtig. hmmm….

hexdump -c test.cpcl
unix2dos test.cpcl
unix2dos: Datei test.cpcl wird ins DOS-Format konvertiert ...
hexdump -c test.cpcl
cat test.cpcl > /dev/usb/lp0

Es funktioniert! 🙂

Android als USB Host, Arduino

Sunday, December 16th, 2012

Seit einiger Zeit entwickle ich Android Software in Python (mit SL4A, PythonAPK). Mein aktuelles Android Tablet ist das Arnova 10d G3 (Android 4.0.3, Linux Kernel 3.0.8). Es hat leider kein Bluetooth aber es hat 2 USB Anschlüsse, einer davon als USB Host. Also habe ich mit dmesg und logcat geschaut, was passiert, wenn man verschiedene USB Geräte anschließt.

* USB-Tastatur & -Maus werden automatisch erkannt und können sofort benutzt werden. Tastatur-Layout ist aber immer US ?!

* USB Drucker werden zwar vom Kernel als “full speed USB device” erkannt aber nicht als Drucker.
Zum Vergleich ubuntu Linux:

usblp0: USB Bidirectional printer dev 14 if 0 alt 0 proto 2 vid 0x0482 pid 0x0011
[114688.541019] usbcore: registered new interface driver usblp

* USB-RS232-Konverter
1.) FTDI FT232RL – Das gleiche wie bei den Drucken. Ich habe zwar eine “Treiber-App” dafür gefunden, hatte damit aber bisher keinen Erfolg damit. http://android.serverbox.ch/?p=370

2.) Prolific PL2303
Der Kernel erkennt diesen USB-nach-Seriell Converter und stellt das serielle Device /dev/ttyUSB5 zur Verfügung:

<6>[27051.309145] usb 2-2: new full speed USB device number 3 using uhci_hcd
<6>[27051.478195] pl2303 2-2:1.0: pl2303 converter detected
<6>[27051.501198] usb 2-2: pl2303 converter now attached to ttyUSB5

Also habe ich versucht, von meinem Python Script aus den per pl2303 angeschlossenen Arduino anzusprechen. Es funktioniert! 🙂

python code:

import serial
ser = serial.Serial('/dev/ttyUSB5', 2400, timeout=1)
ser.write("hello")
ser.close()

arduino code:

#include <LiquidCrystal.h>
int inByte = 0;         // incoming serial byte
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print(".");
  lcd.setCursor(16, 0);
  lcd.autoscroll();
  Serial.begin(2400);
}
void loop() {
  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();
    Serial.write(inByte);
    lcd.write(inByte);
  }
}

Alternativ gibt es für den pl2303 eine Erweiterung(Custom Facade) zu SL4A: https://bitbucket.org/kuri65536/usbhostserialfacade

Die hat bei mir aber nicht funktioniert (“device was not found” ) Möglicherweise werden von der Android API Geräte, die bereits durch einen Kernel Treiber verwaltet werden nicht mehr angeboten.