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
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
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
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?
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ß
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ß
SUPER, DANKE !!! Sag mal Daniel, Du hast mir echt super geholfen, kann ich Dir n Fläschchen Wein spendieren?
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
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
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
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
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ß
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!
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?
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
@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.
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
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?
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
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
Schande, der Thread ist ja asbach uralt ... meintest du das GPS Programm insgesamt oder nur die Ansteuerung des GLCD?
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ß
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.
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.
Danke erstmal, werd mich gleich mal ransetzen und versuchen zu entschlüsseln. Ich programmier sonst nämlich nur in Bascom. Danke erstmal
Wenn Du in Bascom arbeitest gibts auch ne Lib für den KS108 und ne Beispieldatei unter den Sample Dateien
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
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ß
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.
ja, wenn ich beide einschalte, ist auch auf beiden das gleiche zu sehen
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 '****************************
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.