PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie schließe ich mein LC-Display an meinen RP5 (Conrad) an?



corone
24.03.2006, 17:01
Hallo allesamt :)
Ich habe ber einen Bekannten ein einfaches Display bekommen, ganz ähnlich dem gewöhnlichen LCD für den RP5, das es bei Conrad zu kaufen gibt. Ich habe hier im Forum gelesen, dass es einige Leute geschafft haben, ihr Display auch ohne Basiserweiterung zum Laufen zu bringen. Daher hoffe ich, dass mir hier jemand mit genau diesem Problem helfen kann.

Technische Daten des LCD's:
+2 Zeile, á 16 Zeichen
+jedes Zeichen hat 5*8 Punkte
+keine Hintergrundbeleuchtung
+läuft mit 5V Versorgungs- und Kontrastspannung
+nicht beschädigt, ist wirklich noch ganz^^


so... ich hab VCC und GND schon mal angeklemmt, kriege in der ersten Zeile wunderschön 16 Kästchen in tiefblau, die zweite Reihe bleibt leer (denke, dass das am fehlenden Signal zum aktivieren der 2. Zeile liegt...)

abgesehen von diesen beiden Drähten, habe ich keine Ahnung, wo die anderen hinmüssen (es sind 12 stück...) oder was sie sind. ich hab leider auch keine ahnung, wo hier R/W, RS und E liegen... brauche also Hilfe zum Display selbst und zum Anschluss an RP5 (wenn möglich, auch noch n kleines Testprogramm^^)


Habe bereits fleißig gegoogelt, das Forum und den RN-Wissen-Bereich durchsucht, allerdings ohne Erfolg...

Bitte helft mir!

Gruß
Corone

Dirk
24.03.2006, 20:46
Das LCD könnte am RP5 funktionieren.
Der Anschluß erfolgt bei dem Original-LCD an Byteport [2].
lcd_rs -> port[14]
lcd_rw -> port[13]
lcd_e -> port[15]
lcd_db4 -> port[9]
lcd_db5 -> port[10]
lcd_db6 -> port[11]
lcd_db7 -> port[12]

An den meisten LCDs ist die Reihenfolge so:
VSS (1, rote Ader)
VDD
Vo
RS
R/W
E
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7 (14)

DB0..3 werden nicht angeschlossen (4-Bit-Modus).

Gruß Dirk

corone
25.03.2006, 15:41
Hallo Dirk.
Danke für deine Hilfe... ich habe mir jetzt mit nem (größeren) Bissel Lötarbeit das Display angeklemmt... nach wie vor ist die erste Zeile komplett blau und die Zweite leer. Ich habe aus dem Downloadbereich die Datei zum Anschluss eines LCDs zu Rate gezogen und auch das erste dort vorgestellte Testprogramm ausprobiert, allerdings ohne Erfolg. Das Display kümmerte sich überhaupt nicht drum, blieb einfach fröhlich weiter blau... :(
Hbe dann auch in dem dortigen Programm byteport[1] durch [2] ersetzt (was du ja gesagt hattest), aber das hat keinerlei Veränderung gebracht. Könntest du mir vielleicht einen kleinen Testcode posten, mit dem das Display (richtiger Anschluss mal vorausgesetzt... hoffe, ich hab alles richtig gemacht) zumindest ein- oder zwei Zeichen ausspuckt? *liebguck*


Hoffe, dass mir weiterhin Jemand helfen kann :)

Gruß
Corone

Dirk
25.03.2006, 20:20
Hallo Corone,

nimm einfach irgendein Prog für den RP5 und füge das hier ein, wenn du das LCD richtig angeschlossen hast.
Evtl. must du Variablen ändern.

Gruß Dirk


'------ LCD INTERFACE ------
define lcd_port byteport[2] 'Frei, wenn kein LCD angeschlossen ist!
define lcd_rs port[14]
define lcd_rw port[13]
define lcd_e port[15]


'---- LCD DRIVER -------------
define lcd_buf byte[7] 'Bytes 7 und 8 frei, wenn LCD nicht genutzt wird!
define lcd_param byte[8]


' LC-Display initialisieren:
gosub LCD_INIT
pause 1
gosub LCD_CLS
lcd_param = &H54 : gosub lcd_writechar 'T
lcd_param = &H45 : gosub lcd_writechar 'E
lcd_param = &H53 : gosub lcd_writechar 'S
lcd_param = &H54 : gosub lcd_writechar 'T
end


'----------------------------------------
'------------- LCD ROUTINES -------------
'----------------------------------------
#LCD_INIT
' alle ports 0
lcd_port = OFF

' 8-Bit-Modus aktivieren
lcd_param=&H38 : gosub LCD_WRITECMD

' mit 8-Bit-Command in 4-Bit-Modus umschalten
lcd_port=&B00000010
tog lcd_e
tog lcd_e

' ab jetzt 4-Bit-Modus
lcd_param = &H28 : gosub LCD_WRITECMD
lcd_param = &H0C : gosub LCD_WRITECMD

' Display loeschen
#LCD_CLS
lcd_param = &H02 : gosub LCD_WRITECMD
lcd_param = &H01 : gosub LCD_WRITECMD
return

' Zeilenwechsel
#LCD_GOTOLINE
if lcd_param = 1 then lcd_param = &H80
if lcd_param = 2 then lcd_param = &HC0
goto LCD_WRITECMD

' LCD-Kommando
#LCD_WRITECMD
lcd_buf = OFF
goto LCD_WRITE

' Zeichenausgabe
#LCD_WRITECHAR
lcd_buf = &B00100000

' Kommando oder Zeichen an Display senden
#LCD_WRITE
lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
tog lcd_e
tog lcd_e
lcd_port = lcd_buf or (lcd_param and &H0F) ' Lo-Nibble
tog lcd_e
tog lcd_e
return

corone
25.03.2006, 22:52
Hallo Dirk,
vielen vielen Dank für deine Hilfe, damit bin ich schon ein gutes Stück weitergekommen :)
Das Proggi läuft noch nicht ganz, aber das Display ist auf jeden Fall richtig angeschlossen. Bei der Initialisierung wird wie gewünscht das Display geleert (auch in der ersten Zeile keine blauen Kästchen mehr^^), aber ich krieg das Wort TEST nicht rein...

Ich habe beim ersten 'T' mal aus spaß statt 'lcd_writechar' nur 'lcd_write' bzw. 'lcd_writecmd' hingeschrieben.' Im Ergebnis brachte er dann in der zweiten Zeile auf 4. oder 5. Position einen Cursor, beim darauf folgenden 'E' dann ein Sternchen (*) und dann für das 'S' und das zweite 'T' jeweils ein japanisches Zeichen... ich weiß nicht, warums nicht geht. Hoffe sehr, dass du noch ein wenig Geduld mit mir hast :)



Ich muss dich leider noch mit etlichen Fragen zum Code löchern, da ich den nicht so ganz kapiere :(



' Zeichenausgabe
#LCD_WRITECHAR
lcd_buf = &B00100000
Warum wird da LCD_BUF auf irgend einen Binärwert gesetzt? (sorry, ich versteh den Sinn der beiden Variablen lcd_buf und lcd_param innerhalb des Programms überhaupt nicht, kann leider weder Hex-, noch Binärzahlen / -codes). Und nach dem Setzen von buf, müsste dann nicht noch ein 'goto WRITE' oder so etwas in der Art kommen? Irgendwie muss das Zeichen doch zum Display gelangen... kannst du mir bitte diesen Abschnitt noch einmal genauer erklären?




' Kommando oder Zeichen an Display senden
#LCD_WRITE
lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
tog lcd_e
tog lcd_e
lcd_port = lcd_buf or (lcd_param and &H0F) ' Lo-Nibble
tog lcd_e
tog lcd_e
Auch hier versteh ich wieder die beiden Variablen nicht... und warum setzt du irgendwas (was eigentlich?) 4 Stellen nach rechts? *Die beiden klammern und deren Inhalt nicht kapiert...* und was bedeutet Hi- und Lo-Nibble? Warum führst du 'tog' immer doppelt aus?


Das mit dem 8- und 4-Bit-Modus kapier ich auch noch nicht...

Tut mir leid, wenn ich dich mit so vielen Fragen nerve, ist meine erste hardwaretechnische Erweiterung von RP5, hab da noch keine große Ahnung von ](*,)


Würde mich sehr freuen, wenn du meine Fragen noch beantworten könntest.

(sehr, sehr dankbar)
Corone

ps: ich hab aufgepast, dass keine Ports / Variablenplätze mit dem andern Zeug des Programms in Konflikt kommen, daran dürfte es nicht liegen...

Dirk
26.03.2006, 21:22
Hallo corone,

sieh dir 'mal diese Seite an:
http://www.sprut.de/electronic/lcd/index.htm
Da werden die Initialisierungsbefehle der üblichen LCDs gut beschrieben.
Du findest da auch den 4-Bit-Modus (wie in LCD_WRITE) beschrieben. Beim 4-Bit-Modus wird zuerst das High-Nibble (obere 4 Bit) nach unten geschoben (SHR) und an das LCD ausgegeben. Durch tog wird ein Impuls auf lcd_e ausgegeben, mit dem die 4 Bits eingelesen werden. Dann folgen die unteren 4 Bits durch maskieren (and &H0F) genauso.

Gruß Dirk

P.S.: Wie hast du eigentlich die Kontrasteinstellung gemacht?? Kann evtl. auch daran liegen.

corone
28.03.2006, 18:53
Hallo Dirk,
danke wieder für deine Hilfe!
Die Seite kannte ich schon, hat mir auch etwas geholfen... aber meine Fragen konnte ich damit leider nicht ganz beantworten. Hauptsächlich scheitert es an den mir unverständlichen Hex- / Binärzahlen... :(

Die Kontrastspannung liegt zusammen mit der Versorgungsspannung einfach auf konstant 5 V, das passt ganz gut. Gestern Abend ging leider ne Kleinigkeit schief: er hat, nachdem ich frische Akkus reingemacht hatte, auf einmal beide Displayzeilen blau angezeigt (ohne jedes Programm... nur direkt nachm Anschalten) und kurz danach is die Sicherung durchgebrannt. Hoffe, ich krieg da morgen ne neue...

Danke für deine Hilfe!
Gruß Corone

Dirk
30.03.2006, 17:38
Hallo Corone,

mit Hex-/Dez-/Binär-Zahlen ist das im Prinzip einfach:

Hex Binär
00 0000 (Dez.: 0)
01 0001
02 0010
03 0011
04 0100
05 0101
06 0110
07 0111
08 1000
09 1001
0A 1010 (Dez.: 10)
0B 1011
0C 1100
0D 1101
0E 1110
0F 1111 (Dez.: 15)

Die Binär-Bits (= Stellen) haben also einen "Wert": Von links nach rechts 8 4 2 1.
Immer wenn da eine 1 steht, wird mit dem Wert multipliziert.
0B = 1011 ist also 8+2+1 = dezimal 11
Das sind also einstellige Hex-Zahlen (bis 15 dez.).

Bei den zweistelligen Hex-Zahlen (z.B. 2F) kommen links noch mal 4 Bit dazu:
Hex. 2F = 00101111
Die Werte der 8 Bits sind: 128 64 32 16 8 4 2 1
Die höchste 8-Bit-Binärzahl ist also 11111111 = dez. 255 = hex. FF

Gruß Dirk

corone
02.04.2006, 13:59
So, da bin ich wieder...
habe nun endlich eine passende Sicherung auftreiben können.
Vielen Dank, dass du mir dieses Zahlensystem erklärt hast, jetzt verstehe ich zumindest schon mal, was da überhaupt im Quellcode steht. Ich wär wohl nie alleine darauf gekommen, dass da in diesen hexadezimalen Zahlen ASCII-Zeichen stehen...^^

Ich werde nachher erst einmal weiter herumprobieren, ob ich vielleicht doch noch das Wort TEST auf mein Display bekomme ;)


Danke für die viele Hilfe!!!

Gruß
Corone