Blog der Heimetli Software AG

Velleman K8055 an Debian-Rechner

Bei mir liegt seit längerer Zeit ein K8055-Board von Velleman. Das ist ein Interface-Board mit 5 digitalen Eingängen, 2 analogen Eingängen, 8 digitalen Ausgängen und 2 analogen Ausgängen.

K8055-Board

Meines Wissens gab es dazu nie einen offiziellen Linux-Treiber, also habe ich Google gefragt ob es immer noch nichts dafür gibt.

https://github.com/rm-hull/k8055

Die Suche brachte dieses Repository an erster Stelle, also habe ich mein Gück damit versucht. Die GUI dazu wollte ich nicht, und deshalb habe ich mir nur drei Files aus dem Repository geholt:

  • main.c
  • k8055.h
  • libk8055.c

Ein erster Versuch diese Files zu übersetzen ist gescheitert weil usb.h nicht gefunden wurde. Also habe ich die nötigen Files installiert:

sudo apt-get install libusb-dev

Als nächstes meckerte der Compiler dass VERSION nicht definiert sei. Faule Abhilfe: VERSION in Quotes setzen...

Die Entwickler haben libk8055 als dynamische Library geplant, aber sie lässt sich problemlos statisch linken:

g++ -Wall -o 8055 main.c libk8055.c -lusb

So gibt es noch zwei Warnungen, aber die habe ich erst mal ignoriert:

main.c: In function ‘int main(int, char**)’:
main.c:278:33: warning: comparison of integer expressions of different signedness: ‘long unsigned int’ and ‘int’ [-Wsign-compare]
  while ( time_msec()-mstart < i*delay );
          ~~~~~~~~~~~~~~~~~~~^~~~~~~~~
libk8055.c: In function ‘char* Version()’:
libk8055.c:600:21: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
 return("VERSION");

Die Bedienung

Das User-Interface ist sehr gewöhnungsbedürftig, aber man kriegt es in den Griff:

> ./8055 -d:1
227;0;128;133;0;0

Die Option -d setzt die digitalen Ausgänge, in diesem Fall das LSB. Aehnliche Optionen gibt es auch für die anderen Ausgänge.

Die Ausgabe setzt sich wie folgt zusammen:

227   ist die Anzahl der Millisekunden seit das Programm gestartet ist
0     ist der Status der digitalen Eingänge
128   der analoge Wert an Ain 1
133   der analoge Wert an Ain 2
0     Stand von Counter 1
0     Stand von Counter 2

Das ; als Trennzeichen soll vermutlich das Speichern als CSV erleichtern.