Grafik Displays - gLCD

romeo

Neues Mitglied
11. Juli 2008
19
0
0
Sprachen
Hi!

Um mir von einem Labornetzteil die Spannung und den Strom anzeigen zu lassen habe ich mir ein Programm geschrieben welches mir die zwei Werte auf einem LCD 2x16 ausgibt.

Das war eigentlich alles ganz einfach und deswegen habe ich mir überlegt anstatt einem normalen LCD ein grafik LCD zu benutzten. Zu dem Beschluss bin ich gekommen da glcds einen besseren optischen Eindruck machen und ich einfach lernen will wie man diese richtig ansteuert. Da kommt auch schon meine Problem. Ich hab zwar selber schon im Internet gesucht aber noch keine Tutorial oder ähnliches gefunden wo etwas über Grafik LCDs erklärt wird. Vielleich wisst ja ihr eine gute Seite, oder könnt mir sogar selber was über dieses Thema erzählen? Würd mich echt sehr freuen.

Folgende Displays habe ich mir mal heraus gesucht:

Graphic Touch Screen LCD Display 128*64 Blue

oder das hier:

DOG LCD-Grafikmodul

Und zum Ansteuern das Mikrocontroller-Modul mit ATmega128 von eurem Shop.

Programmiersprach ist Basic, Assembler kann ich auch ein bisschen.

Optimal wäre es halt wenn die Erklärung bei Null anfangen würde. Ich weiß ich erwarte gleich soviel, aber ich hoffe ihr nehmt mir das nicht übel.

Schöne Grüße!

PS: So würde mir das ganz gut gefallen :)

IMG_1182.jpg
 
Kann mir keiner helfen? Ihr müsst das doch auch irgendwie gelernt haben? Ich kann mir vorstellen das dieses Thema sehr vielen Leuten interessieren würde!
 
Hallo,

wenn du in Basic programmierst, dann sehe dir einmal das in BascomAVR geschriebene Projekt "Wolkensensor" von Thomas an. Hier setzt er zuerst ein Grafik-Display von electronic assembly ein, ich glaube 128x64, später nutzt er ein größeres Display mit 240x128 Pixel.

In C geschriebene Beispiele für Grafikdisplays findet man im Internet öfters, Beispiele in Assembler wirst du weniger oft finden.

Wenn du nicht selber das Interface/Protokoll programmieren möchtest, suche dir ein Display mit einem Standard LCD-Controller aus. Du findest dann schneller Beispiel-Programme.

Möchtest du jedoch etwas selber programmieren, sehe dir das Datenblatt des Displays an. Hier ist neben der Anschlußbelegung die Art der Datenübertragung beschrieben. Oft ist im Datenblatt nicht der Befehlssatz des LCD-Controllers beschrieben, da der Displayhersteller nicht Hersteller des LCD-Controllers ist, sondern diesen selber einkauft. Du benötigst dann also noch ein weiteres Datenblatt des LCD-Controllers.

Eine komplettes Tutorial "Grafik-Display" wäre an dieser Stelle im Forum zu aufwendig. Ich hatte zwar schon einmal daran gedacht so ein Tutorial zu schreiben, allerdings fehlt mir im Moment die Zeit :rolleyes: Ich werde das aber bestimmt nachholen! Vielleicht kannst du ja auch Fragen stellen, die du gerne beantwortest haben möchtest, ich würde dann versuchen diese zu beantworten.

Wenn du eine schnelle Lösung benötigst, verwende ein Standarddisplay und programmiere in Bascom.

Wenn du einen Lerneffekt haben möchtest, dann suche dir ein Display aus, welches für deine Applikation geeignet ist, du benötigst Datenblätter des Displays und des LCD-Controllers. Beim Programmieren kann ich dir vielleicht auch weiterhelfen.

Grüße,
Dirk
 
Ok super! Danke! Werd mich jetzt die nächste Zeit damit stark beschäftigen und hier ab und zu meine Erfahrungen schreiben, vielleicht hilft das dann auch anderen Anfänger in Sachen gLCD.
 
So, mein Grafikdisplay ist da, ein KS0108.

Hab es auch gleich an ein Atmega8-Board angeschlossen, um es zu testen. Als erstes hab ich ein Programm getestet, welches ich hier gefunden habe.

Soweit sieht das auch ganz gut aus, scheint alles zu funktionieren:

Test1.JPG


Ok, also hab ich mal das KS0108 Sample von Bascom (KS108.bas) geöffnet, Controller und Ports angepasst und auf den Chip geflasht. Jetzt gibts leider Probleme, scheint so als würde es einfach das alte Bild überschreiben:

Test2.JPG


Jetzt weiß ich halt nicht ob es am Programm oder am Display liegt. Daher hätte ich eine ganz große Bitte an euch. Könnte sich von euch jemand kurz Zeit nehmen und mir ein Programm schreiben das lediglich einen kurzen Text auf dem glcd ausgibt?

Daten:

- Atmega8
- 3,6864 Mhz Quarz
- Dataport ist D
- Controlport ist C
Ce = 3
Ce2 = 4
Cd = 0
Rd = 1
Reset = 6
Enable = 2

Wär auf alle Fälle ne super Sache, wenn sich jemand kurz die Zeit nimmt. Danke!
 
Zeig doch einfach mal den Programmtext deines neuen Programms...

Es könnte sein, dass dort einfach ein CLS fehlt...

Gruß Rainer

[edit]

Oder kappe mal deinen gnazen Aufbau vom Strom... Vll ist es nur ein Init-Fehler...
 
Das mit Strom abschalten hat nichts gebracht. Hier mal mein Programmtext:

Code:
$regfile = "M8def.dat"                                      ' specify the used micro
$crystal = 3686400                                          ' used crystal frequency
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space

$lib "glcdKS108.lbx"


Wait 2

Print "Config"

Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portc , Ce = 4 , Ce2 = 3 , Cd = 0 , Rd = 1 , Reset = 6 , Enable = 2

'The dataport is the portname that is connected to the data lines of the LCD
'The controlport is the portname which pins are used to control the lcd
'CE =CS1  Chip select
'CE2=CS2  Chip select second chip
'CD=Data/instruction
'RD=Read
'RESET = reset
'ENABLE= Chip Enable


Print "Cls"
Cls

Wait 1

Setfont Font8x8

Lcdat 1 , 1 , "123"

Lcdat 2 , 1 , "123" , 1

End

$include "font8x8.font"

Den Dataport hab ich von PORTA auf PORTD geändert und beim Controlport habe ich nur die einzelnen belegungen geändert.

Schauts euch einfach mal an, danke!
 
Test 3_2.JPG


So, jetzt hats endlich geklappt. Hab noch eine Frage, kann man die Schrift auch Pixelweise verschieben? Würde das 1, 2, 3 gerne einen Pixel nach oben setzen, gebe ich aber im Programm eine Zeile weniger ein, rutschts gleich wieder acht Pixel hoch.
 
habe das selbe Problem

Hey ich habe mir auch ein KS0108 128x64 bei LEDSEE gekauft und bekomme es nicht zum laufen, das Display zeigt immer nur wilde Pixel an...

Kannst du mir vielleicht mal deinen Quellcode schicken?

Danke...
 
Hi!

Ja klar, hier mal ein kleines Testprogramm:

Code:
$regfile = "m8def.dat"
$crystal = 3686400
$lib "glcdKS108.lbx"

Ddrb = &B11111111
Portb = &B11111111

Ddrd = &B11111111
Portd = &B11111111

Dim X As Byte , Y As Integer

Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portb , Ce = 3 , Ce2 = 2 , Cd = 0 , Rd = 5 , Reset = 4 , Enable = 1

Setfont Font8x8

Cls
Waitms 600

   Lcdat 3 , 34 , "ks108" , 0

   Waitms 200


End

$include "font8x8.font"

Wichtig ist das du die Font Datei und die .lbx Datei im gleichen Ordner hast wie deine .bas Datei.

Und um zu sehen wie das LCD an den ATmega angeschlossen wird, musst dir das Datenblatt auf Seite 10 anschauen (gibts direkt bei Ledsee.com). Ansonsten die Verbindungen wie sie im Programm vorgegeben sind setzen.

Was ich suchen würde, wär eine Befehlsübersicht für das Display, z.B. wie man einen einzelnen Pixel setzt und so.
 
Pixel setzen

Hey danke, ich werds gleich mal probieren...

in der bascom Hilfe findest du recht viele Befehle...

einzelne pixel setzt man mit PSET X , Y, value

' draw a line using PSET X,Y, ON/OFF

' PSET on.off param is 0 to clear a pixel and any other value to turn it on

For X = 0 To 140

Pset X , 20 , 255 ' set the pixel

Next


Gruß Mex
 
hm...

Juppi es funktioniert ;)

aber statt "KS108" zeigt mir das Display "lt108" an...

kann es sein das die Font datei fehlerhaft ist?
 
Du keine Ahnung, ich hab grad leider keine Zeit das zu testen weil ich gleich weg geh. Kann dir nur sagen das bei mir bis jetzt alles richtig angezeigt wurde.

Und zu den Befehlen, die sind doch für den t6963 Controller oder? Kannst vlt. kurz testen ob die Befehle auch mit dem KS108 funktionieren? Vor allem der pset.
 
Grafik LCD 128x64

Also in der beispiel Datei für KS108 im Bascom File, ist der PSet befehl enthalten, von daher geh ich mal davon aus, das das funktioniert...

Ich hab noch ein weiteres Problem, die Schaltung funktioniert auf dem Steckbrett aber wenn ich sie Mit Eagle layoute und auf eine Platine bring gehts aufeinmal nicht mehr, ich weiß nicht woran das liegt, hab am Programm und am Schaltplan nix weiter geändert...

Hab mal den Schaltplan und mein Programm angehängt, vielleicht hab ich ja irgendetwas übersehen...

Danke Mex...
 

Anhänge

  • schaltplan.jpg
    schaltplan.jpg
    80,6 KB · Aufrufe: 120
  • programm.jpg
    programm.jpg
    69,4 KB · Aufrufe: 92
Hallo @ all,

auch ich beschäftige mich zur Zeit mit einem GLCD. Leider komme ich auch nicht weiter. Das Display zeigt nur stellenweise Hiroglyphen an.

Da ja einige schon Erfahrungen gemacht haben und Ähnliches angezeigt bekamen, würde ich mich freuen wenn ich ein wenig Feedback bekäme. Den Code von meinem Testprogramm setze ich mal hier ein, ein Foto von den Fusebits hänge ich an.

Gruß Michael

Code:
$regfile = "m8def.dat"                                      ' specify the used micro
$crystal = 8000000                                          ' used crystal frequency

$hwstack = 128                                              ' default use 32 for the hardware stack
$swstack = 128                                              ' default use 10 for the SW stack
$framesize = 128                                            ' default use 40 for the frame space

'some routines to control the display are in the glcdKS108.lib file
$lib "glcdKS108.lbx"

Wait 2

Print "Config"                                              ' printing will still work as only the receiver pin is disabled

'First we define that we use a graphic LCD

Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portb , Ce = 3 , Ce2 = 4 , Cd = 0 , Rd = 5 , Reset = 2 , Enable = 1

'The dataport is the portname that is connected to the data lines of the LCD
'The controlport is the portname which pins are used to control the lcd
'CE =CS1  Chip select
'CE2=CS2  Chip select second chip
'CD=Data/instruction
'RD=Read
'RESET = reset
'ENABLE= Chip Enable

'Dim variables (y not used)
Dim X As Byte , Y As Byte

Print "Cls"
Cls

Wait 1

'specify the font we want to use
Setfont Font8x8

'You can use locate but the columns have a range from 1-128
'When you want to show somthing on the LCD, use the LDAT command
'LCDAT Y , COL, value
Lcdat 1 , 1 , "123"

'lcdat accepts an additional param for inversing the text
Lcdat 2 , 1 , "123" , 1                                     ' will inverse the text

'Now use a different font
Setfont Font8x8
Setfont Font16x16
'since the 16*16 font uses 2 rows, show on row 3
Lcdat 1 , 1 , "2345"
Lcdat 2 , 56 , "2345656"
Wait 1
Line(0 , 0) -(127 , 64) , 1                                 'make line
Wait 2
Line(0 , 0) -(127 , 64) , 0                                 'remove line

For Y = 1 To 20
   Circle(30 , 30) , Y , 1
   Waitms 100
Next

Wait 1
Glcdcmd &H3E , 1 : Glcdcmd &H3E , 2                         ' both displays off
Wait 1
Glcdcmd &H3F , 1 : Glcdcmd &H3F , 2                         'both on
'GLCDCMD accepts an additional param to select the chip
'With multiple, GLCDCMD statements, it is best to specify the chip only the first time

Showpic 0 , 0 , Plaatje                                     'show a compressed picture
End                                                         'end program

'we need to include the font files
'Notice that this is a testfont with only numbers defined !
'$include "font32x32.font"
$include "font8x8.font"
$include "font16x16.font"

Plaatje:
'include the picture data
$bgf "ks108.bgf"
 

Anhänge

  • fusebits1.jpg
    fusebits1.jpg
    77,8 KB · Aufrufe: 49
Hi!

Also ich kann dir nur empfehlen erstmal folgenden Code zu Testen und diesen dann nach und nach zu erweitern:

Code:
$regfile = "m8def.dat"
$crystal = 8000000
$lib "glcdKS108.lbx"

Dim X As Byte , Y As Integer

Config Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portb , Ce = 3 , Ce2 = 2 , Cd = 0 , Rd = 5 , Reset = 4 , Enable = 1

Setfont Font8x8

Cls
Waitms 600

   Lcdat 3 , 34 , "Test" , 0

   Waitms 200


End

$include "font8x8.font"

Würde auch gleich die Anschlussbedingungen beibehalten. Wenn es dann einmal funktioniert kannst du diese immer noch ändern.
 
ledsee 128x64

Hallo
Ich habe auch mit dem lcd experimentiert und musste feststellen, dass max. 8MHz Quarzfrequenz am M128 möglich sind, das große 240- ledsee lcd verträgt dagegen bis 20 MHz und mehr. Mit dem Touch bin ich auch ganz gut klar gekommen, hatte dann aber das Teil vielleicht 3 Monate nicht mehr angefasst. Jetzt will es nicht mehr, es erscheinen nur noch wilde zeichen.

radebeul
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)