Forum: Mikrocontroller und Digitale Elektronik KS0108B Displaytech 64128A


von Marko (Gast)


Angehängte Dateien:

Lesenswert?

Hi All,

ich hab mir n Graphik LCD zugelegt:

Displaytech 64128A mit Controller KS0108B

Hat von Euch schonmal jemand das Ding an nen ATMega ran gehängt
und zum Laufen gebracht? Evtl. sogar in Bascom?

Gibts da ne LIB für oder ist da noch Pioniergeist gefordert?

Laut Help gibts da Befehle für, hab auch schon gegoogelt, aber das
schein insgesamt noch ziemliches Neuland zu sein ... kamen bei der
Suche
nur verzweifelte Hlfeschreie raus.

Bin um jedes Bit Info dankbar,

mfg

Marko

von Daniel Lancelle (Gast)


Lesenswert?

Guck mal unter Codesammlung, da ist ein Thread. Ich hab grad mit nem
Conrad-Display 128x64 (mit 2 von diesen Ks0108) und nem Mega128 ein
GPS-Gerät realisiert. Hab den ganzen Kram in Basom programmiert. Ist
allerdings nicht gut kommentiert und alles in einer Datei, also ohne
libs, aber ich kann den Code ja mal reinstellen; geht aber nicht
sofort, denn ich bin gerade bei meiner Freundin.

Gruß
                   Daniel

von sven lpa (Gast)


Lesenswert?

Hallo,

bin gerade vor zwei Wochen mit dem Ansteuern eines solchen Displays,
mittels 8515, fertig geworden. Ich habe die Ansteuerungsroutinen in C
selber programmiert und dies erfordert eigentlich keinen grossen
Pioniergeist. Man benötigt ledeglich vier Routinen zum Steuern des
Displays: Initialisierung, Daten Schreiben, Instruktionen schreiben,
Busy-Flag auslesen und Displaydaten Auslesen. Damit kann man dann eine
Routine schreiben um einen Punkt (Dot) an beliebiger Stelle zu setzen
bzw. zu löschen. Daraus kann man dann weitere gewüschte Funktionen wie
zB. Schrift, Linien etc. ableiten. Mit dieser Methode hat man die
Möglichkeit sich zB. den Font so zu gestallten wie man in Haben
möchte.

Ich persönlich Programmiere so etwas lieber selber, weil ich dann auch
weiss was genau passiert.

Viel Spass

von Daniel Lancelle (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist der Code für den Mega128.

von Daniel Lancelle (Gast)


Angehängte Dateien:

Lesenswert?

Und hier das EEpromfile.

von Marko (Gast)


Lesenswert?

Also ich bin schon etwas überrascht über die tollen Rückmeldungen.

Ich hab mir die Codesammlung mal angesehen, aber da ich kein
ASM und auch kein C progge (ich glaub aber php ist der syntax ähnlich)
bin ich da n bisschen auf der Rolle ... was nicht bedeutet das ich
aufgebe :oD

@Daniel: Das wär echt supi, wenn Du mich mal da n blick rein werfen
liesest, da Bascom auch meine bevorzugte Sprache is.

Beiden Alphanumerichen LCD kann man in nen 4-Bit Modus schalten,
was einem eben 4 Datenleitungen erspart, geht das bei dem Ding auch?

von Daniel Lancelle (Gast)


Lesenswert?

Nein, soweit ich weiß, geht das nicht. Ich hab die vollen Datenleitungen
verwendet. Ach ja, und die Prozedur zum lesen der Displaydaten funzt
nicht immer, deshalb habe ich darauf verzichtet und meine Daten im Ram
gespeichert. Diese werden dann mit der Prozedur "Refresh" aufs
display geschrieben. Das Ram vom Mega128 arbeitet sowieso schneller als
das vom Display.

Gruß

von Daniel Lancelle (Gast)


Lesenswert?

Noch eine Anmerkung. Ich hab aus versehen die neuere von den beiden
Dateien geschickt, die ich habe. Da hab ich unter dem Punkt "Kurs"
etwas programmiert, was noch nicht fertig ist. außerdem ist bei der
Variablemdeklaration ein Tipfehler, da meckert der Compiler. ansonsten
sollte es eigentlich laufen.

Gruß

von Marko (Gast)


Lesenswert?

SUPER, DANKE !!!

Sag mal Daniel, Du hast mir echt super geholfen,
kann ich Dir n Fläschchen Wein spendieren?

von Marko (Gast)


Lesenswert?

Eine Frage heb ich aber doch noch ... Die Stromversorgung.

Ich werd da einfach nicht schlau aus dem Datenblatt ... oder denk ich
zu kompliziert?

Pin 1 und 2 sind klar, Vss Vdd,

Also an Pin 3 ist V0, Input Voltage for LCD, ich interpretier das mal
als UB für die Beleuchtung.

Dann hats an Pin 18 Vout (-5V) (for LCD) ?¿ macht das Ding seine
eigene
symmetrische Versorgungsspannung asu TTL 5V? Oder muß ich Da meine
Spannung für die CPU per 7805 von GND her bilden und die
Versorgungsspannung dann an V0?
Oder kann ich das DIng einfach an 5V stabilisiert hängen, K an Vout, A
an +5V (sicher, Rv brauchts dann noch, aber nur vom Prinzip her) wo
kommt dann V0 hin? Ich vermute mal GND, aber ich seh schon die
Rauchwolken :o(

Habt Ihr mal n Tip zur Beschaltung?

Grüßle

Marko

von plitzi (Gast)


Lesenswert?

Pin3 hat nichts mit der Beleuchtung zu tun, das ist der Eingang für die
Kontratseinstellung. Die meisten Grafikdisplays verlangen dort eine
leicht negative Spannung für einen annehmbaren Kontrast. Und damit
nicht jeder Anwender sich diese negative Spannung erzeugen muss, ist
auf den meisten Displays auch eine entsprechnede Ladungspumpe
integriert, die ihre ca. -5V am Pin 18 bereitstellt. Also Poti mit
Schleifer den Enden zwischen Pin18 und GND(oder +5V) und den Schleifer
am Pin3.

Jörg

von Marko (Gast)


Lesenswert?

Ach, der Kontrast ich Dummer Mensch ... glatt übersehn

DANKE

von Daniel Lancelle (Gast)


Lesenswert?

Hehe, paßt schon. Ich helfe ja gerne, das kostet nix.

Gruß

von Marko (Gast)


Angehängte Dateien:

Lesenswert?

Ist mir ja fast peinlich,

ich hab mal n entwurf gemacht für die Beschaltung,

kannste das Ding mal überfliegen ob das so in etwa hin kommt?

Wäre sehr verbunden

von Gerd Laschinski (Gast)


Lesenswert?

Hallo Marko,

habe mal kurz über Deine Schaltung geschaut. Dazu ein paar
Anmerkungen:

- Ich würde statt PortB den PortC nehmen (außer Du hast was
  wichtiges mit PortC vor, z.B. du nutzt JTAG). Denn über PortB
  programmierst Du vermutlich den AVR, Wenn Du das Display an
  PortC anschließt, bitte JTAG in den Fusebits abschalten.

- Die Helligkeit würde ich nicht über ein Poti regeln, sondern
  per PWM über den AVR. Sieht wirklich toll aus, wenn ein Display
  in der Helligkeit fast stufenlos hoch- und runtefährt. Kostet
  Dich nur einen zuätzlichen Transistor und einen Widerstand. Und
  ein Pin vom AVR.

- Reset-Leitung nicht angeschlossen.

- Ein paar 100nF Kondensatoren fehlen an MC und Display.

- Programmierschnittstelle fehlt.

- Ich bin mit nicht sicher, ob Du RN1 brauchst. Bei mir geht es
  ohne.

Gruß
Gerd

von Daniel Lancelle (Gast)


Lesenswert?

Wenn du meinen Code nehmen willst, wirst du mit einem Mega16 nich
hinkommen. Ich speicher den ganzen Displayinhalt im Ram vom Controller.
das sind 512 Byte pro KS0180-Controller. Hinzu kommen noch die
Variablen.

Gruß

von Marko (Gast)


Lesenswert?

Ich hab den Code mal überflogen und wenn ich an die

Mouswheel-Aktion denk hab ich auch Bedenken das der rein passt

Ich werd aber nur einen Teil nehmen um Kurven zu plotten.

Mein Projekt geht über Temperaturregelung von Weinlagertaks

wo ich den Verlauf eben tracken möchte.

Die Circle-Funktion z.B. brauch ich dafür nicht und die Messwerte
schieb

ich ins EEPROM dachte ich mir (zusätzlich auch Ausfallsicher).

Aber ich seh mir mal den Code noc genau an wo ich da noch was

straffen kann z.B. über DDRA - DDRC anstatt config.

Sensoren möcht ich die DS1820 nehmen und 1-Wire Bus.

Die Routine muss noch rein und ne Matrixtastatur sollte noch abgefragt

werden ... Alternativ zum 16er hab ich noch n paar MEGA32 hier rum

liegen. Ich denk die brauch ich auch.



Mit dem PortA haste recht, ich brauch nämlich noch n ADC für die

Tastatur. andererseits bräucht ich noch evtl. den I2C, da ich den

Aufbau noch für n anderes Projekt verwenden möchte.

Die Helligkeitsregelung per PWM hat schon was, mal schaun

wo ich vom Platz her hin komme wenn die Hautptaufgaben programmiert

sind.

Insgesamt haste das ganz ordentlich und schön programmiert, Respekt!

Schön übersichtlich!

von Marko (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

war ne Weile verhindert, daher so lange nix Neues.

Wärt Ihr evtl. nochmal so nett n Blick auf meine Schaltung zu werfen?

funzt das so in etwa?

von plitzi (Gast)


Lesenswert?

Wenn ich die Wahl hätte, würde ich den E-Eingang des Displays NIE mit
einer anderen Funktion teilen (hier ISP), denn dieser ist die
"globale" Freigabe für das Display. Alle anderen Anschlüsse sind
wirkungssloas, solange E=0. ALso bei den anderen Pins stört der ISP
nicht. Stattdessen würde ich das E-Signal noch zusätzlich mit einem
Widerstand (4,7k o.ä.) gegen GND versehen, damit auch zum Zeitpunkt des
RESET das Display nicht aktiv ist.

Die Potentiometer (Potenziometer?... sieht einfach nur Sch... aus!) für
die Hintergrundbeleuchtung würde ich auch weglassen und durch
Festwiderstände ersetzen. Beleuchtung (ersteinmal) über den Prozessor
und Transistor ein/ausschalten und wenn eine Helligkeitssteuerung
gewünscht ist, diese über PWM realisieren. Dazu sollte aber der
Ausgang, der die Beleuchtung schaltet auch gleich auf einen PWM-fähigen
Ausgang gelegt werden (z.B. OC0/PB3 o.ä. - siehe Datenblatt).
(Ich sehe gerade, der liegt schon auf OC1A/PD5, ev. würde ich den doch
lieber auf OC2/PD7 legen, um die den 16-bit-Teimer T1 nicht
unnötigerweise zu verbauen.)

Jörg

von Marko (Gast)


Angehängte Dateien:

Lesenswert?

@plitzi:

Hi, vielen Dank für die konstruktiven Tips, SUPER!

Hab die auc hsoweit realisiert, sehr sinnvoll,

ne Frage hab ich noch zu USART und ISP.

Speziell die Beschaltung des Max für Anschluss an COM1

und ist die Pinbelegung dem STK200 bzw. RN-Board kompatibel so?

Hab auch schon die Datenblätter geblättert, denk das es so hin

kommt, aber man übersieht halt doch schnell mal was.

von plitzi (Gast)


Lesenswert?

So, ich hab jetzt doch nochmal etwas genauer hingeschaut.

1.Die Beschaltung an Deinem Max232 stimmt so nicht!
TXD/AVR -> Pin11/Max
Pin14/Max -> Pin3/Sub-D-Stift
Pin2/SubD-Stift -> Pin13/Max
Pin12/Max -> RXD/AVR
Wenn Du RTS und CTS (pin7+8/SubD-Stift) nicht verwenden willst, dann
lass sie besser weg. Die beiden, noch freien Eingänge des Max232 sollte
man auch einen defineirten Pegel geben (z.B. Pin10->+5V und Pin7mit Pin8
verbinden). Eine solche Standardbeschaltung sollte sich aber auch in
jedem besseren Tutotial oder auf jedem Einsteigerboard finden lassen
;)

2.Der Schaltausgang für die hintergrundbeleuchtung ist mir auch etwas
suspeckt. Ganz einfach: Anode der Hintergrundbeleuchtung an +5V, Katode
über einen Strombegrenzungswiderstand Deiner Wahl an den Kollektor eines
NPN-Transistors, dessen Emitter an GND und vor die Basis noch ein 4,7k
zum Prozessor, und fertig.

Jörg

von Marko (Gast)


Lesenswert?

Salut Jörg,

Dankeschön für die superflotte Reply,

seltsam, das die Beschaltung des Max aus nem Tut kommt ... aber

wie halt immer ... graue Theorie, dshalb frag ich halt n bissl mehr

die Praktiker. Es käm mir ja auf das learning by doing garnicht so an,

aber das GLCD is mir halt einfach zu teuer um da wild drauflos zu
äzen.

Eine Frage hab ich aber dennoch, Pin 7= T2Out, Pin 8= R2IN ... wozu

werden die verbunden? verträgt sich das Spannungsmäßig? die Out sollten


doch irgendwo bei +/- 12V liegen, die IN bei 0 bzw. 5V, oder?

von plitzi (Gast)


Lesenswert?

Ist immer die Frage, welches OUT und welches IN.

Der Max232 hat 2 TTL-Eingänge (Pin 10 und 11) die ihr Signal an den
Pins 14 und 7 auf die V24-konformen +-12V umsetzen. Desweiteren hat der
Max232 noch 2 Eingänge Pin 13 und 8, die einen Pegel von +-12 in
TTL-Pegel an den Pins 12 und 9 umsetzen. Also IN != IN und OUT != OUT.

Die Funktion der Verbindung Pin 7 und 8 ist einfach: unbenutzte
Eingänge sollte man ja nach Möglichkeit nicht offen lassen. Also habe
ich den unbenutzten TTL-Eingang Pin 10 an +5V gelegt. Damit hat sein
zugehöriger +-12V-Ausgang Pin7 -12V (negative Logik!). Die lege ich
einfach an den unbenutzten +-12V-Eingang Pin8 und der hat damit auch
immer ein definiertes Potential. Es gibt aber auch noch andere
Möglichkeiten dazu, aber ich mach es halt so und bin dabei bisher nicht
schlecht gefahren. (den unbenutzten +-12V-Eingang könnet man auch offen
lassen, die Max232 o.ä. vertragen das eigentlich, den TTL-Eingang
könnte man auch auf GND legen...)

Jörg

von Marcel Bersch (Gast)


Lesenswert?

Ich komm mit dem riesigen Programm nicht ganz klar, da ich nur nen
Mega16 hab. Hat vielleicht mal jemand ne Version, die auch auf einem
Mega16 läuft. Ich hab's selber schon versucht, aber irgendwie wird bei
mir das Display nur weiß !?! warum auch immer

von Marko (Gast)


Lesenswert?

Schande, der Thread ist ja asbach uralt ...

meintest du das GPS Programm insgesamt oder nur die
Ansteuerung des GLCD?

von Daniel (Gast)


Lesenswert?

Das Problem ist, da ich aus Geschwindigkeitsgründen den Displayinhalt im
RAM abgelegt habe. Das sind allein 2*512 Byte für den Displayinhalt.
Deswegen hab ich auch den Mega 128 genommen. Allerdings kannst du die
low level Prozeduren zum schreiben von Befelen und Daten verwenden, die
brauchen nicht diesen Speicherplatz. Übrigens, das GPSprogramm ist jetzt
fertig; mit Trackingmode. Wenns jemanden interessiert kann ich ja mal
posten.

Gruß

von Marcel Bersch (Gast)


Lesenswert?

Ja, ist wirklich schon alles ein wenig alt ...

Ich würd nur mal gerne ein ganz kleines Programm haben mit vielleicht
Init und PutPixel, den Rest bekomm ich dann sicherlich (vielleicht)
auch allein hin.
Ich wäre für jegliche Dateien, Codes und Links dankbar.

von Marko (Gast)


Angehängte Dateien:

Lesenswert?

Hi, ich hab fürn Mega16 und dem GLCD etwas gebastelt.
Ich arbeite normalerweise mit Bascom, aber
die LIB die für das 64128 bzw. dem KS108 da drin ist
belegt bast zwei komplette Ports. Daher hab ich mir
eben in Bascom selbst was gebastelt, damit ich mir
die Displaypins "zusammenstoppeln" kann.
Die Grundlegende Funktion kann man sich ja in jede
beliebige Syntax übertragen.

von Marcel Bersch (Gast)


Lesenswert?

Danke erstmal, werd mich gleich mal ransetzen und versuchen zu
entschlüsseln. Ich programmier sonst nämlich nur in Bascom.
Danke erstmal

von Marko (Gast)


Lesenswert?

Wenn Du in Bascom arbeitest gibts auch
ne Lib für den KS108 und ne Beispieldatei
unter den Sample Dateien

von Marcel Bersch (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich hab mal ein ganz kleines Programm geschrieben, um das Display zu
testen. Kann es sich vielleicht mal jemand anschauen und mir sagen,
warum er nichts ausgibt?!?
Vor dem 2. Reset ist meist immer alles weiß, nur ein paar pixel bleiben
blau. Bei allen Befehlen danach ist das Display nur blau.

Es wär echt toll, wenn jemand helfen könnte.

Grüße Marcel

von Marcel Bersch (Gast)


Lesenswert?

Hallo?!? Weiß keiner mehr was?

von Daniel (Gast)


Lesenswert?

Du hast nach dem Einschalten deines Displays nochmal einen Reset
ausgeführt, das hab ich bei mir nicht. Nimm das mal raus und probier ob
es dann geht.

Gruß

von Marcel Bersch (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe das Programm noch ein wenig erweitert und ein kleines 16x2
Zeichen Display hinzugefügt, um den Status anzuzeigen.


Zusammenfassung:
1 - Display blau, kein Zeichen
2 - Display wird komplett weiß (nur auf der linken Seite)
3 - Display wird wieder komplett blau und bleibt dann auch so

wenn ich das Reset rausnehme, bleibt das ganze Display (bzw ein Hälfte
komplett weiß, also ausgefüllt)

es muss an mir liegen, wenn der Pc starten und warlos etwas sendet,
dann werden auch immer wieder verschiedene Bilder auf dem Display
ausgegeben. Ich frag mich nur, was falsch ist.

von Daniel (Gast)


Lesenswert?

Wie ich das sehe hast du auch nur eine Displayhälfte eingeschaltet.

von Marcel Bersch (Gast)


Lesenswert?

ja, wenn ich beide einschalte, ist auch auf beiden das gleiche zu sehen

von Daniel (Gast)


Lesenswert?

Ich sehe gerade, daß du nachdem du die eine Hälfte eingeschaltet hast
nochmal einen Reset ausführst. Dann kann das imo nicht gehen. Nimm das
mal raus.


'****************************
Lowerline : Lcd "1 - on"
Portc = 63
En = 1 : Waitms 10 : En = 0     <-- Hier machste das Display an. Ok...
Waitms 100 : Do : Loop Until Taste = 0
'****************************
'Lowerline : Lcd "2 - reset"
Rs = 1 : Waitms 10 : Rs = 0 : Waitms 10 : Rs = 1  <-- Hier führst du
wieder ein reset aus. Weg mit diesem Abschnitt
Waitms 100 : Do : Loop Until Taste = 0
'****************************
Lowerline : Lcd "3 - startzeile"
'Startzeile 0
Portc = 192
En = 1 : Waitms 10 : En = 0
Waitms 100 : Do : Loop Until Taste = 0
'****************************

von Marcel Bersch (Gast)


Lesenswert?

ich hab's jetzt rausgenommen und alles noch ein klein wenig geändert,
jetzt geht's, ich weiß zwar nicht ganz genau wo der Fehler lag, aber
hauptsache es funktioniert

von Daniel (Gast)


Lesenswert?

Das Problem lad darin, daß du das Display nach dem Einschalten resettet
hast. Wenn das Display resettet wird, dann ist es automatisch im
ausgeschalteten Zustand.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.