PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : vier Lcd's



-illu-
03.05.07, 08:38
hallo erst mal,
ich hab mir 4 displays gekauft
http://www.pollin.de/shop/images/article/big/G120422.JPG
und möchte diese per lpt-port betreiben. ich hab mir die portbelgungen angeschaut und bemerkt das eine steuerleitung für ein viertes lcd fehlt. es sind zwar vier steuerleitungen vorhanden aber eine wird ja von allen displays für das RS-Signal benutzt, bleiben also nur noch drei steuer- für vier enableleitungen. aber das hat ja bereits hier (http://www.linuxforen.de/forums/showthread.php?t=202611&highlight=enable4) ein anderer user festgestellt wie ich grad gesehen hab.

naja scheint sich wohl dann erledigt zu haben mit vier lcd's und dem 8bit mode, oder?
dann muss ich also den 4bit mode löten. steht der 4 dem 8bit mode in irgendetwas nach oder hat er sogar vorteile (auf der seite von lcd4linux steht der wäre für experten)?
ich hoffe mir kann jemand helfen...

Azrae1
03.05.07, 12:36
Der 4-Bit mode ist ein bisschen langsamer, weil du die Daten auf 2Takte aufteilen musst. Effektiv wirst du nicht viel davon merken.

Vorteiloe -> du brauchst um 4 Leitungen weniger

lg Azrael

-illu-
03.05.07, 13:42
gut danke schön, dann werd ich das versuchen hoffe die dinger kommen morgen an.

achja auf der seite von lcd4linux is das recht abstrakt beschrieben. hätte jemand von euch zufällig ein schaltplan für die 4-bit-schaltung im bildformat? (die dinger sind meines erachtens um einiges verständlicher)

baumgartner
04.05.07, 09:45
Nur so als Gedankenanstoss:
Du könntest hinter den 3 Enable-Leitungen auch ne Logik hinsetzen und damit dann 2^3 Displays ansteuern. Natürlich musst du dafür die Software anpassen und wie die geschrieben ist kann ich dir nicht sagen. Aber aus den 3 Leitungen könntest du so immerhin bis zu 7 Displays ansteuern was ja auch nicht schlecht wäre. Vielleicht findest du ja dazu hilfe auf den entsprechenden Mailinglisten...

pcAlko
12.05.07, 10:28
Moin.

Ich kenn mich zwar überhaupt nicht in der Elektronik aus,
aber da ich mich zur Zeit für die Ansteuerung auf Programmierebene interresiere, kann ich hier auf das Buch "Elektronik am PC" hinweisen.

.......
< gecancelt >
ups
entschuldigung, ich lese gerade hier geht es um LCD's
wunderte mich schon wegen dem ersten Bild *grins*
ich hatte zuvor LED gelesen

pcAlko

-illu-
14.05.07, 02:06
ahhhhhhhhhhhhhhh !!! problem !!!

folgendes:
ich hab den 4bit modus verwendet und beleuchtung etc. aller lcd's funktioniert.

das erste problem was sich dann aber auftat war das ich trotz 4bit modus lediglich 3lcd's anschließen kann. wenn ich das 'rs' auf 'strobe' gelegt habe und alle 4 enable leitungen auf 'db4...7' dann kamm eine fehlermeldung das die leitung strobe nicht für rs sei. also ich zack umgelötet rs an db4 und dafür eine enable leitung an strobe. aber nein wieder der fehler.

...@linux:~$ lcd4linux -Ff /home/iluvatar/Desktop/lcd4linux.conf
udelay: The file 'include/asm/msr.h' was missing at compile time.
udelay: Even if your CPU supports TSC, it will not be used!
udelay: You *really* should install msr.h and recompile LCD4linux!
HD44780: unknown signal <STROBE> for data line <ENABLE>
HD44780: should be DB0..7 or GND
HD44780: start display failed!


das zweite problem ist das komischer weise immer nur zwei der drei angschlossenen lcd's funktionieren. und das kuriose wenn ich die enable reihen folge in der config ändere springt immer ein anderes nicht an.

ich hoffe mir kann jemand zumindest bei problem eins helfen...

-illu-
16.05.07, 15:35
da mir noch keiner helfen konnte gebe ich mal einen genaueren fehlerbericht:

ich habe den 4-bit modus verwendet.
die verbindungen sind diese:

Display --> LPT-Port
DB4...DB7 --> DB0...DB3
RS --> DB4
RW --> GND(pin25)
ENABLE1 --> DB5
ENABLE2 --> DB6
ENABLE3 --> DB7
ENABLE4 --> STROBE

die lcd4linux.conf die ich verwende:
Display HD44780-Quad {
Driver 'HD44780'
Model 'generic'
Controllers 3
Bits 4
UseBusy 0
asc255bug 0
Port '/dev/parport0'
Size '16x6'
Size1 '16x2'
Size2 '16x2'
Size3 '16x2'
# Size4 '16x2'

Wire {
RW 'GND'
RS 'DB4'
ENABLE 'DB5'
ENABLE2 'DB6'
ENABLE3 'DB7'
# ENABLE4 'STROBE'
}
}

Widget Disp1 {
class 'Text'
expression 'Display #1 Test'
width 16
align 'L'
update tick
}

Widget Disp2 {
class 'Text'
expression 'Display #2 Test'
width 16
align 'L'
update tack
}

Widget Disp3 {
class 'Text'
expression 'Display #3 Test'
width 16
align 'L'
update tick
}

Layout Meins {
Row1 {
Col1 'Disp1'
}
Row3 {
Col1 'Disp2'
}
Row5 {
Col1 'Disp3'
}
}

Display 'HD44780-Quad'
Layout 'Meins'

Variables {
tick 500
tack 100
minute 60000
}

die anzeigen sehen nach dem start dann allerdings nur so aus:
http://www.hgw07.de/Disp.JPG

mal abgesehen davon das STROBE für ENABLE4 nicht akzeptiert wird (s. post vorher) und ich die zeilen für das vierte lcd aus der config ausgeklammert habe, wird wie man sieht das 3. display nicht angesprochen und zeigt nichts an obwohl die config etwas anderes bewirken sollte. wenn ich die reihenfolge der ENABLE-leitungen vertausche fällt jeweils das dritte display aus. es funktionieren aber alle displays.

vll kann mir jemand helfen wo das problem liegt.
ich vermute das im quelltext von lcd4linux etwas nicht ganz stimmt, denn ein hardware problem scheint es nicht zu sein.

evtl. kann mir auch jemand sagen welche dateien und welcher bereich im quelltext mit den mehrfachen HD44780-LCD's zusammen hängt, so dass ich selbst da mal nachschaun kann.

geronet
16.05.07, 22:54
Huhu, zufällig bin ich derjenige welcher diese Multi-display-ansteuerung in lcd4linux reingebastelt hat, nur leider funktioniert mein Server grad nicht sonst hätt ich da gleich mal nachgeschaut ;)

Am besten du lässt lcd4linux mal im Debug Modus laufen und schreibst hier die Ausgabe rein..

Grüsse, Stefan

-illu-
17.05.07, 09:12
danke schon mal im vorraus für deine mühen
das ist die debugausgabe

iluvatar@linux:~$ lcd4linux -Fvvf /home/iluvatar/Desktop/lcd.conf
Version 0.10.1-RC2-796 starting
plugin_cfg.c: Variable minute = '60000' (60000)
plugin_cfg.c: Variable tack = '100' (100)
plugin_cfg.c: Variable tick = '500' (500)
[KVV] Using station 89
[KVV] Using default port 80
[KVV] Using default refresh interval of 60 seconds
[KVV] Default abbreviation setting: off
lcd4linux.c: initializing driver HD44780
HD44780: $Rev: 773 $
HD44780: using model 'generic'
HD44780: using parallel port
HD44780: using 3 Controller(s)
HD44780: Controller 1: 16x2
HD44780: Controller 2: 16x2
HD44780: Controller 3: 16x2
HD44780: using 4 bit mode
udelay: The file 'include/asm/msr.h' was missing at compile time.
udelay: Even if your CPU supports TSC, it will not be used!
udelay: You *really* should install msr.h and recompile LCD4linux!
udelay: using gettimeofday() delay loop
HD44780: using ppdev /dev/parport0
HD44780: wiring: DISPLAY:RS - PARPORT:DB4 (Pin 6)
HD44780: wiring: DISPLAY:RW - PARPORT:GND
HD44780: wiring: DISPLAY:ENABLE - PARPORT:DB5 (Pin 7)
HD44780: wiring: DISPLAY:ENABLE2 - PARPORT:DB6 (Pin 8)
HD44780: wiring: DISPLAY:ENABLE3 - PARPORT:DB7 (Pin 9)
HD44780: wiring: DISPLAY:ENABLE4 - PARPORT:GND
HD44780: wiring: DISPLAY:BACKLIGHT - PARPORT:GND
HD44780: wiring: DISPLAY:GPO - PARPORT:GND
HD44780: wiring: DISPLAY:POWER - PARPORT:GND
HD44780: timing: CY = 1000 ns (default)
HD44780: timing: PW = 450 ns (default)
HD44780: timing: AS = 140 ns (default)
HD44780: timing: AH = 20 ns (default)
HD44780: timing: INIT1 = 4100 us (default)
HD44780: timing: INIT2 = 100 us (default)
HD44780: timing: EXEC = 80 us (default)
HD44780: timing: WRCG = 120 us (default)
HD44780: timing: CLEAR = 2250 us (default)
HD44780: timing: HOME = 2250 us (default)
HD44780: timing: ONOFF = 2250 us (default)
HD44780: not using busy-flag checking
HD44780: using 0 GPI's and 0 GPO's
initializing layout 'Meins'
lcd4linux.c: starting main loop

geronet
17.05.07, 14:26
In der drv_generic_parport.c stehen die Belegungen zu den Pins, dort müsste der Fehler mit dem ENABLE4 stehen.

Und in der hd44780.c müsste die Ansteuerung der max. 4 Displays drin sein.

Ich such grade ein wenig..

geronet
17.05.07, 16:13
Ab Zeile 523 in der hd44780.c muss es so aussehen:


if ((SIGNAL_RS = drv_generic_parport_wire_ctrl("RS", "DB4")) == 0xff)
return -1;
if ((SIGNAL_RW = drv_generic_parport_wire_ctrl("RW", "DB5")) == 0xff)
return -1;

Damit funktioniert die config


RW 'GND'
RS 'STROBE'
ENABLE 'DB4'
ENABLE2 'DB5'
ENABLE3 'DB6'
ENABLE4 'DB7'
}

Falls du es anders angelötest hast und es nicht mehr ändern willst, musst du evt. den Code dort ändern (statt "drv_generic_parport_wire_ctrl" "drv_generic_parport_wire_data" schreiben oder andersrum falls er meckert.

Berichte dann welche LCD's nicht gehen, eventuell das Timing verändern da die Busleitung recht lange ist.

Grüsse, Stefan

-illu-
17.05.07, 16:48
hab mich da auch schon mal umgeschaut... :D (dabei kann ich noch kein C)
ich hab das so gemacht wie du es gesagt hast (umgelötet).
was dann mit den LCD's passiert: nichts.

ich glaube das liegt daran das drv_generic_parport_wire_data und drv_generic_parport_wire_ctrl zusammen verwendet werden oder nicht?

müsste man nicht einfach in HD44780.c die funktion drv_generic_parport_wire_data umschreiben das diese auch andere leitungen als DB.. zulässt?

-illu-
17.05.07, 18:14
ich habs auch noch mal so gelötet wie ich es vorher hatte und dem entsprechend HD44780.c umgeschrieben, aber wieder keine regung auf den anzeigen. wie sieht das eigentlich in 'lcd4linux' aus die funktion drv_HD_PP_load wird laut suchanfrage darin auch aufgerufen. nur wie öffne ich diese?

geronet
17.05.07, 18:33
Versteh ich nicht ganz, was meinst du mit öffnen?

-illu-
17.05.07, 18:38
habs erst grad verstanden. lcd4linux ist das compilierte programm und da muss zwangsläufig diese fkt. drin stecken. diese datei nochmal öffnen zu wollen ist also schwachsinn wenn man doch denn quelltext da hat. hat sich also erledigt.

bin ansonsten noch nicht sonderlich schlau aus dem quelltext geworden, aber das wird schon...

-illu-
17.05.07, 23:00
i did it!!!

drc_HD44780.c Zeile 839 bis 847

/* handle multiple controllers */
for (pos = 0, controller = 0; controller < numControllers; controller++) {
pos += CROWS[controller];
if (row < pos) {
currController = (1 << controller);
break;
}
row -= CROWS[controller];
}

da liegt der hase im pfeffer.

ich hab ein wenig am code herumgedoktert und es ist dabei sogar etwas rausgekommen, was jedenfalls für mich funktioniert.
Damit laufen immerhin schonmal 3 der 4 Lcd's.

/* handle multiple controllers */
for (pos = 0, controller = 0; controller < numControllers; controller++) {
pos += 1;
if (row-1 < pos) {
currController = (1 << controller);
break;
} else {
currController = (1 << controller);
pos = 0;
}
row -= CROWS[controller];
}
sieht wahrscheinlich wüst aus aber das sind meine ersten schritte mit C.
und zugegeben, so ganz bin ich auch noch nicht dahintergekommen warum es damit läuft.

die variable CROWS scheint in diesem fall etwas auszumachen. CROWS ist nämlich gleich gesamtanzahl der zeilen durch anzahl der displays

achja
@ geronet:
vielleicht überprüfst du das stück code oben noch einmal und schreibst es evtl. nochmal in 'schön'. fehlt nur noch das der STROBE akzeptiert, dann steht der unterstützung für bis zu vier hd44780 displays auch nichts mehr im wege.

geronet
03.06.07, 22:37
Hoppla, hab ich gar nicht gesehen was du geschrieben hast ;)

Ich kümmer mich mal darum wenn etwas Zeit übrig ist..

geronet
04.06.07, 21:29
Hallo, der Abschnitt oben muss so aussehen:

/* handle multiple controllers */
for (pos = 0, controller = 0; controller < numControllers; controller++)
{
pos += CROWS[controller];
if (row < pos)
{
currController = (1 << controller);
break;
}
}

for (pos = 0; pos < controller; pos++)
row -= CROWS[pos];


Grüsse, Stefan