Donnerstag, 10. April 2008

SAA1064-Sieben-Segment-Anzeige via I2C an Parallelport

Das geht, wie man der Dokumentation des i2c-pport Moduls entnehmen kann, ohne weitere Bauteile. Einfach SDA an Pin14 und SCL an Pin16 des Parallelports.

Damit das ganze unter Kubuntu 7.10 mit Kernel 2.6.22-14-generic geht müssen einige Vorraussetzungen erfüllt sein:

Man braucht die Packete build-essential lm-sensors.
Der Parallelport muss auf Adresse 0x378 im SPP (!) Modus laufen.
Man muss die Module lp und parport_pc auf die blacklist (/etc/modprobe.d/blacklist) setzen, ein nachträgliches modprobe -r reicht nicht.

Das i2c-pport Modul ist leider nicht als einfaches Paket zu kriegen und nicht (mehr?) Teil der lm-sensors. Eine für Kernel 2.6.X angepasste Version findet man hier (direkt).
Die kompiliert aber nicht einfach so, es sind, wie hier und hier diskutiert folgende Anpassungen nötig:
In der i2c-pport.c folgende zeilen auskommentieren: /* ... */
  • #include <linux/config.h>
  • .mdelay = 80,
  • i2c_bit_del_bus(&bit_pport_ops);
  • MODULE_PARM(base, "i");
Man kann zur static struct i2c_adapter bit_pport_ops noch folgende Zeile hinzufügen (war hier in anderem Zusammenhang hilfreich):
  • .class = I2C_CLASS_HWMON
Dann konnte ich das Modul kompilieren wie in der README beschrieben.

Modul laden:
(i2c_core ist bei mir standardmäßig geladen)
  • modprobe i2c_dev
  • modprobe i2c_core
  • insmod ./i2c-pport.ko

Danach sollten unter /dev/i2c-1 der "Primitive Parallel port adaptor" finden (Kontrolle via i2cdetect -l, bei mir liegt auf i2c-0 ein Sensor des Mainboards), und der von extern mit 5V versorgte SAA1064 Chip sollte mit i2cdetect 1 zu finden sein: wenn der Adress-Pin auf GND liegt unter der Adresse 0x38.

Nicht ganz die erwartete, aber immerhin die erste Reaktion zeigte das Display mit diesem C-Programm, angepasst mindestens um ein zusätzliches #include <stdio.h>, durch das Ersetzen aller exit(?) durch return(?), und durch anpassen des Devices von /dev/i2c0 auf /dev/i2c-1.
Eigene Programme lassen sich leicht nach dieser Anleitung schreiben, wobei auf dieser Seite die nötige include-Datei #include <linux/i2c.h> verschwiegen wird.


Offtopic:
manche scripte brauchen das dialog-paket
screen: C-a C-g macht die nervige vbell aus

2 Kommentare:

Anonym hat gesagt…

modprobe i2c-algo-bit
(vergessen)

Unknown hat gesagt…

#define I2C_HW_B_PPORT 0x01000c

musste noch irgendwo definiert werden (kernel 2.6.31-17)