PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD-Dislpay



Richard
11.08.2008, 19:45
Moin moin allerseits.

Ich bin zufällig beim großen C vorbeigekommen und habe mir
eine LCD Anzeige gekauft. Datenblatt gibt es übers I-Net sagt
C. Stimmt auch, nur ist das eher ein Datenblättchen.:-(((
Wie das Teil angeschlossen wird ist ersichtlich, aber wie Mensch dann
die Anzeige ansteuert wird leider verschwiegen!

Wie z.B. adressiere ich die Register der einzelnen Anzeigen, oder
muß man immer den ganzen Speicher neu "überbügeln"? Dabei stellt sich
allerdings auch die Frage Wie das dann ablaufen muß.

Ich hoffe mir kann hier jemand helfen das "Datenblatt" hänge ich mal an.

Danke Richard

linux_80
11.08.2008, 19:55
Hi,

ja mit dem DB wars nix.

Erzähl mal mehr über das LCD, Text oder Grafik zB. ?
Welche Prog-Sprache ist angepeilt usw.

Richard
11.08.2008, 20:10
Hi,

ja mit dem DB wars nix.

Erzähl mal mehr über das LCD, Text oder Grafik zB. ?
Welche Prog-Sprache ist angepeilt usw.

OK ich versuche es noch einmal, ich hatte die doppelt gepostet, und
1. gelöscht (dachte ich).....

Programmiersprache Assembler/Basic. Ich habe hier noch etliche
1684 PIC herumliegen die könnten nützlich sein das Display I²C
tauglich zu machen.

Gruß Richard

fhs
11.08.2008, 20:32
Hi,

nach Deinem Datenblatt basiert das LCD auf einem KS0066 Controller. Dessen Datenblatt findest Du hier (http://www.datasheetcatalog.org/datasheet/SamsungElectronic/mXuuzvr.pdf). Die Steuerleitungen entsprechen denen des HD44780. Mit dem KS0066 habe ich selbst keine Erfahrungen, der Controller ist aber angeblich HD44780-kompatibel!

Viele Grüße

Fred

Richard
12.08.2008, 19:31
Hi,

nach Deinem Datenblatt basiert das LCD auf einem KS0066 Controller. Dessen Datenblatt findest Du hier (http://www.datasheetarchive.com/pdf/1914414.pdf). Die Steuerleitungen entsprechen denen des HD44780. Mit dem KS0066 habe ich selbst keine Erfahrungen, der Controller ist aber angeblich HD44780-kompatibel!

Viele Grüße

FredMoin moin,

Danke das muß ich mir erst einmal zur Gemüte führen. Heute Morgen so
auf die schnelle konnte ich da allerdings kein 4 X 16 Finden. Aber wenn die
Ansteuerung ansonsten passt ist mir schon etwas weiter geholfen. :-)

fhs
12.08.2008, 19:56
Hallo Richard,

üblicherweise sind die 4x16 Displays mit nur einem Controller aufgebaut. Die Zeile 0 beginnt mit der Adresse 0, Zeile 2 mit 16 (0x10), Zeile 1 mit 64 (0x40), Zeile 3 mit 80 (0x50). Der Datenblatt-Link oben hat gerade nicht mehr funktioniert; ich werde ihn korrigieren und hoffe, dass er nicht Session-abhängig ist.

Viele Grüße

Fred

Richard
12.08.2008, 21:36
Hallo Richard,

üblicherweise sind die 4x16 Displays mit nur einem Controller aufgebaut. Die Zeile 0 beginnt mit der Adresse 0, Zeile 2 mit 16 (0x10), Zeile 1 mit 64 (0x40), Zeile 3 mit 80 (0x50). Der Datenblatt-Link oben hat gerade nicht mehr funktioniert; ich werde ihn korrigieren und hoffe, dass er nicht Session-abhängig ist.

Viele Grüße

Fred

Moin Fred,

Die Adresstabelle ist ja im Conraddatenblatt vorhanden. Die Anzeige soll ja
auch "intilligent" sein, ich verstehe darunter jetzt einmal das ich Klartext in
ASCII reinschreiben kann. Was mich eher interessiert wie das letztendlich
gemacht wird, wenn ich zur Steuerung 2 von den 8 Datenbits brauche fehlen mir diese ja bei den ASCII Zeichen. Die Datei unter Deinen Link
habe ich schon auf dem PC bin aber heute zu müde mich da durchzuarbeiten.

Ich habe in einen anderen Thread gesehen das dort unter Bascom einfach
ein LCD Befehl ähnlich "Print" verwendet wurde. Hat Bascom da eigene
Treiberroutinen oder sind die selbstprogrammiert?

Gruß Richard

fhs
13.08.2008, 09:57
Hallo Richard,

von Bascom habe ich keine Ahnung, weiß aber von einem Freund, dass es dort vorgefertigte Routinen zur LCD-Ansteuerung gibt.

In C verwende ich bei den AVRs neuerdings die LCD-Bibliothek von Peter Fleury (http://jump.to/fleury), nachdem ich früher sowohl in Assembler als auch in C eigene Routinen (8-Bit Modus) geschrieben habe. Bei den Peter-Fleury-Bibliotheken kommt eine 4-Bit-Ansteuerung zur Anwendung.

Deine Frage nach "fehlenden" Bits verstehe ich nicht. Hier (http://home.iae.nl/users/pouweha/lcd/lcd.shtml) findest Du weitere Erklärungen und auch ein PIC-Beispiel (8-Bit-Modus).

Viel Erfolg!

Fred

StevieL
13.08.2008, 23:16
Hallo Richard,

für BASCOM gibt es Routinen für die einzelnen Displaycontroller. Am Beginn des Programmes werden über Config-Befehle die Pins und der Controllertyp festgelegt, den Rest macht BASCOM dann automatisch wenn man LCD "Text" eingibt. Über Locate und einige weitere Steuerbefehle kann man festlegen, wo der Text auf dem Display erscheinen soll.

Richard
24.08.2008, 17:34
Hallo Richard,

für BASCOM gibt es Routinen für die einzelnen Displaycontroller. Am Beginn des Programmes werden über Config-Befehle die Pins und der Controllertyp festgelegt, den Rest macht BASCOM dann automatisch wenn man LCD "Text" eingibt. Über Locate und einige weitere Steuerbefehle kann man festlegen, wo der Text auf dem Display erscheinen soll.

Es hat etwas gedauert bis ich wieder Zeit hatte, die Arbeit halt. :-(

Die Befehle zur Ansteuerung scheinen anscheinend Komplatiebel zum
Standart Kontroller zu sein, aber bei der Pinbelegung bin ich mir da nicht
wirklich sicher. Das dürfte aber nicht zum Problem werden da diese ja
in Bascom angepasst werden kann.

@fhs

Mit Fehlenden Bit meinte ich bei 8 Bit Ansteuerung Bit 7 welches ja
signalisiert wann man neue Daten/Befehle senden kann/darf. Da muß
man dann anscheinend den Port für Bit7 nach dem Senden auf Eingang
setzen abwarten bis Bit7 L wird, dann wieder auf Ausgang setzen und
das nächste Byte übertragen. Klar, die RS Leitung muß auch entsprechend
umgeschaltet werden.

Das Display scheint auch nicht das neuste zu sein, ich habe da bei
Google Problemanfragen von 2003 gefunden! Datenblätter gibt es
anschenend nur Für einen Kontrollertyp mit 2*40, für den KS0066
selber (ohne Zusatzbezeichnung) finde ich keins oder ich bin zu dumm?

Grüße Richard

wolli_bolli
26.08.2008, 10:53
Hallo Richard,
Ich habe vor ein paar Monaten ebenfalls ein Display dieser Serie verwendet.(2*8Zeichen, 4bit-Modus, AVR als Controller, Assembler). Nach mühseliger Bastelei hat es bei mir schließlich geklappt. Ich habe mich an dem Datenblatt des KS0066U orientiert.
Wichtig war meinen Erkenntnissen zufolge, dass die Initalisierung in der richtigen Reihenfolge abläuft (Achtung: 4Bit Modus, das musst du evt. ändern) :
- dreimal 0011 an LCD
- 0001 (4-bit Modus)
Die 8-bittigen Befehle werden im 4-bit Modus nibbleweise hintereinander gesendet:
- 001XXXXX Hier wird der Cursor an die entsprechende Stelle positoniert (vom Displaytyp abhängig)(bei mir:00101000)
- 00001100 Display ist an, Cursor ist ausgeblendet, blinkt nicht
- 00000001 Lösche alle Zeichen aus Display
- 00000110 Cursor bewegt sich nach schreiben eines Zeichens nach rechts,
Displayshift ist aus

Logischerweise musst du den Befehlsmodus verwenden, jeweils das Enable Bit setzen und rücksetzen und entsprechende Wartezeiten zwischen den Befehlen einhalten.

Ist das Display erst einmal initalisiert, musst du nur noch ein Ascii Zeichen reipumpen und du siehst es auf dem Bildschirm (Datenmodus nicht Befehlsmodus!!!)

Ich hoffe dir hiermit geholfen zu haben,
wolli_bolli

Richard
26.08.2008, 18:25
Hallo Richard,

Ich habe mich an dem Datenblatt des KS0066U orientiert.
Ich hoffe dir hiermit geholfen zu haben,
wolli_bolli

Danke, ein anderes Datenblatt, ohne "U" scheint auch nicht zu existieren?
Angeblich soll sich die Anzeige selber (grund) Initialisieren mann muß
allerdings vor jeden Befehl b.z.w. Datensatz Bit 7 abfragen und warten
bis das anzeigt das wieder gesendet werden darf. So die Theorie aus
dem Datenblatt. Entweder man schaltet den mit Bit7 verbundenen
Ausgang zwischenzeitlich auf Eingang, oder man opfert ein zusätzliches Pord Bit als Eingang und geht damit Parallel auf Bi7 der Anzeige.

So kann man z.B. beim CAN BUS auf Sender mit höhere Berechtigung
eines anderen Teielnehmers prüfen, man liest sich selber ein und wenn
das eigene Bit überschriben wird muß man raus und neu anfangen.

Da ich noch etliche PIC herumliegen habe, versuche ich es erst einmal
damit. Mein Testboart und Programmer sin allerdings gut 10..15 Jahre
alt und benötigen DOS, also win 98. Das habe ich mir jetzt unter VMWARE
eingerichtet, aber die alten Programme, warscheinlich mit Torbopascal
erstellt, machen Runtime error. Die C´t hat glücklicherweise einen Patch
der das Problem behebt, jetzt laufen diese Programme auch mit heutigen
schnellen Prozessoren. Es klappt also langsam mit Soft /Hardware, auch der Programmer liest/schreibt die PIC`s.

Ich muß nun etwas Handbücher neu nachlesen, ich habe mindestens
auch 10..15 Jahre nicht mehr programmiert.....Deshalb werde ich
auch so einsteigen wie ich angefangen bin, mit Assembler. Das ist
einfach näher an die Hardware, in diesem Fall der vom Display.

Mit Turbo Pascal bin ich FRÜÜÜÜHER ganz gut zurecht gekommen,
C hat mir irgendwie nie zugesagt, Java auch nicht wirklich. Basic ist
ja recht einfach, damit habe/hatte ich weniger Probleme aber besonders
schnell und Platzschonend ist das dann auch nicht.

Ich bin aber auf der Suche nach dem "richtigem" AVR Board. Es sollte
möglichst flexiebel sein was den Prozessor betrifft (von AVR gibt es da
ja ein Prototypen Board) K100 oder ähnlich. Es sollte aber auch test
Aufauten ermöglichen ohne all zu viel herumlöten zu müssen. Also
ein Board mit xyz 100 Anschlüssen, für das man dann aber erst einmal
selber ne Platine zum draufsteken mit entsprechender Hartware bauen
muß fällt somit erst einmal aus und 3 Boards im Monat kann/will ich
mir dann auch nicht leisten. :-(

Was würdet ihr da jetzt vorschlagen? Am liebsten währe mir ein
Mittelweg, halbwegs vielseitig einsetzbar und aufgebaut zu kaufen.

Grüße Richard

Richard
27.10.2008, 20:14
moin moin allerseits,


Jetzt da ich entdlich mal etwas Urlaub habe, habe ich mich um oben
benanntes LCD gekümmert.

Aus einem Beitrag in dieser NG AUS (20059habe ich eine Innitialusierungs
Routine gefunden ; da diese mir etwas zu lang war habe ich das einmal
anders umgesetzt.


$regfile = "m16def.dat" ' specify the used micro
$crystal = 16000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40
'$sim


Config Portb = Output


Dim A(8) As Byte
Dim I As Byte
'
A(1) = &B00000000 ' Inni H_Byte
A(2) = &B00001001 ' Inni L_Byte
A(3) = &B00000010
A(4) = &B00001000
A(5) = &B00000000
A(6) = &B00000110
A(7) = &B00000000
A(8) = &B00001100 ' u.s.W.

For I = 1 To 8 ' LCD INI

Portb = A(i) And 00001111 'PB 0...3 Auf 0, BP 4...7 Data
Portb.1 = 1 'E setzen und Daten übernehmen
Waitms 1 ' Waaaaarten
Portb.1 = 0
Waitms 1

Next I

Cls ' Das klappt schon Hier...!?

'Pins des LCD-Modules setzen ggf. an eigene Anschlüsse anpassen
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 16 * 4
Initlcd


Locate 1 , 2
Lcd "Motor_L"
Locate 1 , 10
Lcd "255"
Portb.0 = 0 'Leider setzt die Bascom LCD Routine Rs nach LCD "xyz" auf Hight,
'Dadurch Wird Die Anzeige Ausgeschaltet = Instrucktionsmodus. Deshalb
'musste ich diese Portb.0 = 0 einfügen. :-(


End


Leider gibt es da noch ein Problem, Im Bscomm Simulator wird "rs" ordentlich
auf "1" gesetzt und das LCD zeigt ..lcd "Hallo" an. In der realen Welt, nicht!
setze ich nach lcd "xyz" portb.0 (alias Rb.0) = 0, bekomme ich eine Anzeige.

RS Piin Daenblatt :

Used as register selection input.
When RS = “High”, Data register is
selected.
When RS = “Low”, Instruction register is
selected.

Sollte doch eher umgedreht sein?

Nach 3 Tagen mit quasie 24h reicht es mir jetzt erst einmal ein wenig. :-(

Immerhin, Die Motoren sind von Masse befreit und mit Hallgebern
ausgerüßtet, die "Ticks" kommen sauber an und lösen bei einem Rad
mit 20 cm Durchmesser ~ 0,26mm auf Wenn da dann noch die Softwre
mitmacht?

Gruß Richard.

oberallgeier
27.10.2008, 20:29
Schönen Abend,

vor ein paar Tagen hatte ich hier im Forum zwei LCDisplays gewonnen. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=401593#401593) Davor hatte ich KEINE Ahnung, wie man so etwas zum Laufen bekommt. Das Datenblatt ist deutlich länger als das hier genannte, aber es trifft auch alle Displaytypen von Seiko und hatte mir beim Anschluss nicht wirklich geholfen (es war mir zu viel zum Lesen).

Sowohl der Anschluss als auch die Inbetriebnahme mit C waren trotzdem problemlos. Ich habe die beiden Seiten im Wiki als Vorlage und die lib von P.Fleury genommen. Und nun läufts bestens. Spezialzeichen wie σ (sigma), fernöstliche Zeichen oder so, kann ich in meinem Datenblatt nachlesen.

Viel Erfolg

Richard
28.10.2008, 11:43
Moin moin allerseits,

Ich habe mein Display angeschlossen und alle Möglichen Ini
Prozeduren welche so im netz zu finden sind ausgetestet.
mit eher lauen erfolg.

Es hat sich jetzt herausgestellt das das Vorgehen aus dem
RN_Wissen mit Bascom ausreicht. NUR, zumindest (MEIN)
LCD zeigt nur dann etwas an wenn (RS)= Bit PB.0 = 0 gesetzt
ist?


$regfile = "m16def.dat" ' specify the used micro
$crystal = 16000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40
'$sim

Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 16 * 4

Config Lcdbus = 4

Cls
Locate 1 , 1
Lcd "Hallo"
Portb.0 = 0 'Nur wenn ich diesen Befehl nach dem lcd Befehl
'setze bekomme ich eine Anzeige?????
End


Laut Datenblatt ist die Bascom Routine aber richtig.....

Used as register selection input.
When RS = “High”, Data register is
selected.
When RS = “Low”, Instruction register is
selected

Ich habe soeben auch mal mit nen Meßgerät vom Chip M16 nach
RS geprüft ob es einen Verdratungsfehler gibt. Nee, ist alles O.K.
Sehr eigenartig, außerdem gibt es Kontrastprobleme wenn ich mehrere
Zeilen anspreche. Von Zeile 1,1 an nimmt der Kontrast ab, die jeweil
letzte Zeile bleibt komplett O.K.?

Ich glaube ich besorg mir ein anderes Display......:-(((

Grüße Richard