Inhaltsverzeichnis[Verbergen]

Ein kleines Status-Display am Qnap ist eine schöne Sache.

Benutzt wurde der Sourcecode von serdisplib und
Die Sourcen basieren auf 'Serdisplib' Version 1.97.8 und 'lcd4linux' Version 0.10-RC2. Die Abhängigkeiten sind 'libgd' für Grafiken und 'libusb' für den Treiber.

 

Beide Packete wurden erweitert (siehe später unter Patch), auf dem Qnap compiliert und anschließend die Packages für IPKG erzeugt.

Beispiele für den Aufruf sind unter '/opt/doc/serdisplib' zu finden. Einfach mal das Testprogramm 'testserdisplib' aufrufen.
Evt. wird hier eine fehlende Libusb angemeckert. Dies habe ich folgendermaßen umgangen:

        - die Datei 'ld.so.conf' im Verzeichnis '/etc' um eine Zeile mit /opt/lib erweitern und speichern
- anschließend 'ldconfig' aufrufen

Hierdurch kennt das System dann den zusätzlichen Pfad für die Libraries.
Die Dateien werden nach einem Reboot wieder durch die Originale ersetzt. Daher rufe ich beim Neustart immer ein entsprechendes Script auf.


1. Änderungen und compilieren von Serdisplib

Diese Anleitung bezieht sich auf Version 1.97.8.

Bei ./configure kam die Fehlermeldung:

        checking how to run the C preprocessor... /lib/cpp
configure: error: C preprocessor "/lib/cpp" fails sanity check

Nach langem Recherchieren, war ich der Meinung, dass eigentlich schon alles auf dem Qnap installiert ist. Daher habe ich die Checks in der Datei "configure" einfach übersprungen. (Vorher die Datei sichern!)
In meiner configure waren die Checks an diesen Stellen:

        # Double quotes because CPP needs to be expanded
for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
do
ac_preproc_ok=: false

Ich habe dann einfach die Zeilen mit

        ac_preproc_ok=: false

durch

        ac_preproc_ok=:

ersetzt.

Wenn nur der gcc 3.xx installiert ist, wird noch die Datei syslimits.h gefordert. Diese habe ich aus einem Package des gcc 4.xx und in das Verzeichnis

        /opt/lib/gcc/arm-none-linux-gnuabi/3.4.4/include

kopiert. Die Datei ist hier.

Evt. wird noch ein Problem mit der libpthread.so.0 gemeldet.
Hier habe ich einfach den Symlink geändert und auf /lib/libpthread-0.10.so zeigen lassen.

Evt. wird noch eine fehlende Libusb angemeckert. Dies habe ich folgendermaßen umgangen:

        die Datei 'ld.so.conf' im Verzeichnis '/etc' um eine Zeile mit /opt/lib erweitern und speichern
anschließend 'ldconfig' aufrufen


Hierdurch kennt das System dann den zusätzlichen Pfad für die Libraries.
==> Die Dateien werden nach einem Reboot wieder durch die Originale ersetzt. Daher rufe ich beim Neustart immer ein entsprechendes Script auf.

Beim compilieren von serdisplib wurden folgende Schritte durchgeführt:

        ./configure --enable-libusb --with-lm4 --with-alphacool
make

Auch wenn im Netz steht, dass libusb nicht angegeben werden muss; dies stimmt nicht. In 'configure' ist es standardmäßig deaktiviert.

Mit dieser Standard-Library funktioniert das Alphacool einwandfrei.

Nur das L4M132C funktioniert nicht mit dem original Serdisplib auf dem Qnap. Hier wird auf das HID Device zurückgegriffen, da unter Linux wohl die Libusb nicht mit Cypress-Chips zusammen arbeiten soll.
Auf meinem Qnap gibt es aber ein Problem mit dem HID Queue (etc.). Dieser läuft wohl beim Ansprechen des Displays immer über.
Daher habe ich die Sourcen von 'serdisplib' etwas verändert, damit wieder Libusb als Treiber für das L4M132C benutzt werden kann.
Zusätzlich ist für den Display-Bug des L4M132C eine Kommunikations-Wiederholung eingebaut worden. Siehe weiter unten.
Die geänderten Sourcen können hier heruntergeladen werden

Anschließend:

./configure --enable-libusb --with-lm4 --with-alphacool
make




2. Erweiterungen und compilieren von lcd4linux

Diese Anleitung bezieht sich auf Version 0.10-RC2.


Zum compilieren von lcd4linux müssen die Headerdateien von serdisplib (im Verzeichnis include/serdisplib) in das Verzeichnis /opt/include/serdisplib kopiert werden.

Bei ./configure kann entweder Fehlermeldung "Segmentation fault" oder auch diverse Sonderzeichen (z.B. %) angemeckert werden.
Bei "Segmentation fault" waren es Einschränkungen der Programme egrep, fgrep, grep.
Bei den Sonderzeichen waren es Einschränkungen des Programms sed.

Diese Programme habe ich durch vollwertige aus dem IPKG-Packages ersetzt.

Anschließend:

./configure
make

Die Änderungen an lcd4linux betreffen ein neues Plugin.
Das Plugin
qnaplog liest den letzten Eintrag aus der conn.log oder vent.log per sqlite3 aus.

Mehr Beschreibungen dazu auf der Seite von

Zusätzlich ist für den Display-Bug des L4M132C eine Fehlererweiterung zum serdisplib eingebaut worden. Siehe weiter unten.

Die geänderten Sourcen können hier heruntergeladen werden


3. Die Funktion wurde für folgende Displays getestet:

Display

Typ

Auflösung

Foto

Alphacool

Monochrome (White on blue)

240x128

L4M132C

Color (64k)

128x64


Die oberste Zeile ist Laufschrift. Die Moiree-Streifen kommen durchs fotografieren.




4. Probleme mit L4M132C

Das L4M132C lief bisher mit lcd4linux max. 2 Tage durch. Das Display stürtze immer wieder ab (teilweise bunte horizontale Striche im Display), und musste dann ab- und angesteckt werden.
Es scheint an der Softwareversion des Display zu liegen (Pufferüberlauf o.ä.); da selbst ein Reboot vom Qnap das Display nicht neu erweckt. Es muss immer ab- und angesteckt werden.

Hier habe ich inzwischen einen Workaround mit Hardware- und Softwareänderungen.
Die Hardware besteht aus einem Watchdog-Baustein MAX1232. Dieser wird bei einem normal laufenden Display regelmäßig getriggert.

L4M132C Pin36, ohne Displayzugriffe   L4M132C Pin36, mit Displayzugriffen   L4M132C Pin36, mit Displayzugriffen

Stürzt es mal wieder ab, kommt nur noch ein Rechtecksignal mit ca. 794Hz. Durch den einfachen Tiefpass kommt am MAx kein Triggersignal mehr an und es wird nach ca. 1.2 Sekunden ein Reset für das Display ausgelöst.
Kann ich manchmal beobachten wenn ich danebensitze.

Die erweiterte Software serdisplib und lcd4linux versucht bei Kommunikationsfehlern (wenn gerade ein Neustart vom Display läuft) mehrmals wieder die Verbindung aufzunehmen. Dieses klappt fast immer. Vielleicht alle vier Monate muss ich per Hand die Software lcd4linux neustarten.

4.1.1. Software-Änderungen

Die geänderten Sourcen für serdisplib können hier heruntergeladen werden


Die geänderten Sourcen für lcd4linux können hier heruntergeladen werden
Für direkt kompilierte Packages siehe hier.

5. Umbau L4M132C

     
Der MAX1232 wurde hier verkehrt herum aufgeklebt; also mit der Beschriftung nach unten.

PinBeschreibungAnmerkung
1 unbenutzt
2 an VCC
3 an VCC
4 GND direkt an die vorher freigekratzte Massefläche gelötet
5 Reset an PIN 36 vom Prozessor
6 unbenutzt
7 Trigger *1 10k an PIN 6 vom Prozessor und Kondensator gegen GND
8 VCC kommt von PIN16 von IC3

Die anderen freigekratzten Pins sollten nicht irritieren. Dies war zum messen notwendig.

*1

Ich habe den entsprechenden Pin mit dem benötigten Triggerpuls durch langes ausprobieren heraus bekommen.
Dazu habe ich am funtionierenden Display alle PIN-Zustände des Prozessors mit einem Oszilloskop gemessen und alle Pins mit Impulsen aufgeschrieben.
Dann habe ich das Display mit sehr vielen Befehlen gestresst, bis es abgestürzt ist.
Jetzt nochmal alle PIN-Zustände des Prozessors gemessen.
Der Pin, der keine Impulse mehr geliefert hat war mein Favorit. In meinem Fall Pin 6 des Prozessors.

5.1. Nachtrag vom 2011.04.09

Der 1k Widerstand war falsch angegeben. Es muss ein 10k Widerstand sein.

5.2. Nachtrag vom 2011.04.14

Der 100nF Kondensator bildet mit dem 10k Widerstand einen Tiefpass. Mit meinem Display (Hardware V3.0 vom April 2009) funktioniert diese Kombination einwandfrei.

Bei anderen Displays ist es eventuell notwendig den Widerstand geringfügig zu verändern, bis das Display normal startet.

 


6. Weitere Fotos

Die USB Verbindung zum Display wurde direkt vom Frontstecker abgenommen. Dieser kann dann aber nicht mehr extern benutzt werden.




Durch das Blitzlicht ist hier das Innenleben zu erkennen. Eigentlich ist die Scheibe dunkelblau.

6.1.1.1. Genannte Marken oder Produktnamen sind Warenzeichen oder eingetragene Warenzeichen der jeweiligen Eigentümer.




Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
OK