Bascom GELÖST: Anzeigeproblem beim XV-GDM128x64-RGB

Eventuell die Anschlussbelegung noch einmal überprüfen.
Ich nutze Bascom nicht und kann hier nicht so gut helfen, eventuell aber mal das Programm hier hochladen.
Falls die Lib die IO Pins nicht initialisiert, muss das manuell gemacht werden. Hier auch mal nach schauen.

Dirk :ciao:
 
$lib "XV-GDM128X64.lib"

Gruen alias portb.4
Rot alias portb.5
Blau alias portb.6

Config blau = Output
Config gruen = Output
Config rot = Output

Config Graphlcd = 128 * 64eadogm , CS1 = Portb.0 , A0 = PortA.7 , Si = Portb.2 , Sclk = Portb.1 , Rst = PortB.7

Do
Cls

rot = 1
Lcdat 1 , 1 , "1234567890123456"
Lcdat 2 , 1 , "Zeile 2 "
waitms 500
rot = 0
....

Die ninitialisierung manuel? Also dann noch
INITLCD vor meiner LOOP ?
 
Kann es sein, dass du vorher noch eine Initialisierung für den verwendeten Font benötigst?!

Setfont Font8x8tt

und zum Schluss ein

$include "font8x8TT.font"

... oder ähnlich?
 
den FONT, also die Datei habe ich nicht im BASCOM ... wo soll die denn herkommen ?
 
... wo soll die denn herkommen

Ich habe einen Font angehängt. Zu fonts können dir sicher die Bascom-Experten bei uns im Forum mehr Tipps geben.

Probiere es damit mal aus.

Dirk :ciao:
 

Anhänge

  • font8x8TT.zip
    1,9 KB · Aufrufe: 33
Hmm... also ich bin der Meinung, daß ich damals bei meinem DogL (das elektronisch auch nur ein DogM ist) bereits mit dem Beispielcode Erfolg hatte, also ohne weitere Einbindung eines Fonts.
(habe dann lediglich noch die Auswertung des resistiven Touchfeldes und dazugepackt, und "zu Fuß" ein paar Bytes über das SPI gesendet (->Pyramidengrafik))
...
Reicht denn oben das $lib... aus, um config graphlcd das veränderte init machen zu lassen?
 
SPI hat doch mit Text nicht zu tun.

Definiere doch zunächst einmal den Font. Das sind zwei Zeilen Code. Siehe auch unten das Beispiel (Achtung da sind andere Portpins definiert, also nicht die entsprechende Zeile einfach übernehmen)

@LotadaC: Kann es sein, dass durch
Locate 2 , 1 :Lcd"T6963c support"
bereits ein Font eingebunden und verwendet wird, so dass man sich nicht mehr drum kümmern muss?
Im verwendeten Code von Ingo wird "Lcddat" genutzt, das ist denke eine Funktion aus der Lib und diese benötigt sicher die Definition des Fonts.


Diesen Code habe ich bei mir noch gefunden. Bei dem Initlcd bin ich mir nicht ganz sicher, ich vermute das wird bereits durch "Config Graphlcd ..." aufgerufen.



CodeBox BascomAVR
'-----------------------------------------------------------
'  EADOGM128.BAS
'  (c) 1995-2008 MCS Electronics
' micro : mega168
' demo  : SPI graphical display EADOGM128
' IMPORTANT : SPI only allows the WRITE mode. THis mean that setting pixels is not possible.
'  for this reason commands as PSET, LINE and CIRCLE are not supported.
'  best option would be to display pictures
' fonts and images are compatible to KS108
'-----------------------------------------------------------
$regfile = "m128def.dat"  ' ATmega168
$crystal = 16000000
$baud = 19200
$lib "XV-GDM128X64.lib"  ' specify the used lib


'the display was connected with these pins
Config Graphlcd = 128 * 64eadogm , Cs1 = Portd.4 , A0 = Portd.7 , Si = Portb.3 , Sclk = Portb.5 , Rst = Portd.5
'the best option is to control the reset line of the LCD with the micro so you can reset it controlled at startup



Dim B As Byte , J As Byte
Dim K As Byte , X As Word , Y As Word



Print "cls"
Cls

'specify the font we want to use
Setfont Font8x8tt


'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 , "11111111"
Lcdat 2 , 5 , "88888888"
Lcdat 3 , 16 , "MCS Electronics" , 1
Waitms 3000


Do
  'optional touch screen
Loop

End


'include used fonts
$include "font8x8TT.font"

 
@LotadaC: Kann es sein, dass durch
Locate 2 , 1 :Lcd"T6963c support"
bereits ein Font eingebunden und verwendet wird, so dass man sich nicht mehr drum kümmern muss?
Genau das habe ich eben auch vermutet (oder, daß das durch das Config Graphlcd geschieht). Allerdings habe ich das "dat" überlesen
...Im verwendeten Code von Ingo wird "Lcddat" genutzt, das ist denke eine Funktion aus der Lib und diese benötigt sicher die Definition des Fonts.
Aber das XV-GDM128 ist doch ein Display mit SPI Interface
Eben, wie auch das DogM/L. Und da das DogM/L nahezu keine Grafikroutinen unterstützt (über die Bascom-Bibliothek - insbesondere weil nicht gelesen werden kann), habe ich halt mal versucht, direkt irgendwelche Daten zu senden. Also nicht mit LCD blablup, sondern direkt über das Hardware-SPI (an dem das Display bei mir hing). Also erst die Kommandobytes für Page und Column, und dann 126 inkrementierende Datenbytes.
Ob Bascom hier (bei mir) das Hardware-SPI nutzt, oder das in SW umsetzt, weiß ich nicht - das kann Dir sicher auch egal sein.

So wie ich das mit $lib verstanden habe, werden dort angegebene Bibliotheken vor der Bascom-Standard-Bibliothek durchsucht. Dort definierte Routinen ersetzen also die Standard-Routinen gleichen Namens.
Im Config Graphlcd Beispielcode wird nirgends explizit ein Initlcd aufgerufen - geschieht das hier implizit bei Verwendung des LCDs, vorgegeben durch das Config? Und wenn das der Fall ist, was ist dann, wenn jetzt nochmal explizit ein Initlcd dazukommt (meinetwegen über die neue Bibliothek)?
 
OK. ich werde das gleich mal testen.:)

Losgelöst von dem Lösungsansatz verstehe ich die FONT Problematik nicht.
BASCOM hat diese nicht vorliegen, der LCD Hersteller hat diese nicht zum Download.

Wo und wie kommen diese Zustande ?o_O
 
Im Config Graphlcd Beispielcode wird nirgends explizit ein Initlcd aufgerufen

Das hatte ich bei meinem "Testcode" auch nicht. Ich weiß aber nicht, ob es hier auf meinem Rechner der letzte Stand ist, was ich gefunden habe. Deshalb habe ich Initlcd noch einmal sicherheitshalber hinzugefügt. Ich vermute (!) dass grundsätzlich immer diese Routine durch Bascom aufgerufen wird. Es ist sicherlich nicht schlimm, wenn man diese nocheinmal aufruft.

Da es jetzt aber wirklich nur eine ganz minimale Ergänzungen am Code ist, ganze drei Zeilen, würde ich sagen, dass es erst mal so ausprobiert wird. Das geht schneller als hier über alle Eventualitäten zu diskutieren ;)

Also den Font einbinden und sicherheitshalber Initlcd einfügen.
 
Wo und wie kommen diese Zustande ?

Die Font Daten werden als Grafik gesendet, wie bei den DOGM/L Displays mit dem ST7565 Displaycontroller. Fonts sind nicht im LCD Controller enthalten. Dazu ist es notwendig einen Font einzubinden. Es gibt im Netz sicher diverse Fonts, ich denke bei Bascom ist auch ein Fontdesigner enthalten für diejenigen, welche sich selber Fonts erstellen möchten.
 
Initlcd schrieb:
The LCD display is initialized automatic at start up when LCD statements are used by your code.

This is done by a call to _LCD_INIT.

If you include the INITLCD statement in your code, the automatic call is disabled and the _LCD_INIT is called at the place in your code where you put the INITLCD statement. (initlcd is translated into a call to _init_lcd).
wobei eben zuerst in der eingebundenen Lib nach der _init_lcd gesucht wird, und ggf anschliessend in der Standard-Lib

Zum Fonteditor in Bascom: link

Bei den Displays gibts keinen eingebauten Zeichensätze, Du kannst nur irgendwelche Pixel an- oder abschalten. Indem Du quasi direkt die entsprechenden Bytes in den "Grafikspeicher" des Displays sendest.
Das DogM/L hat 64 Zeilen (lines), die im Speicher dort in acht Pages mit je acht Pixeln organisiert sind (also von oben nach unten Page0..7, in jeder Page ein Byte, wobei von oben nach unten Bit0..7). Zusammen die 64 Pixel. Jede Page ist 128 Bytes lang - das sind die Columns. In meiner Pyramidengrafik hab ich das halt selbst gemacht (Page auf 4, Column auf 4, und dann die vier als Data hinterher und inkrementiert, das ganze 126mal wiederholt, wobei die Column-Adresse im Display automatisch inkrementiert).
Soll nun ein Zeichen dargestellt werden, müssen die entsprechenden Column-Bytes, aus denen das Zeichen besteht gesendet werden - und dazu müssen die eben irgendwo im Programm existieren.
Den Zugriff auf diese Daten übernehmen dann die Senderoutinen (Lcd, Lcdat usw).
(aber wie gesagt, im Beispielcode zu Config Graphlcd wird kein Font explizit angegeben (hatte ich also damals auch nicht) - scheint also auch irgendwie implizit zu geschehen, zumindest mit Lcd blablup - Lcdat trallala braucht dann vielleicht den explizit eingebundenen Font)
 
...also den FONT Editor habe ich bis jetzt nicht gefunden.
Nur LCD Editor für die 8 selbst zu definierenden Charachter


Habe noch im Netz was gefunden:
Der ST7565 soll eine eigene FONT Table bereits eingebaut haben? wenn ja welche sollten das sein ?
 
Zuletzt bearbeitet:
... also den FONT editor habe ich gefunden ! :party:
Es war ein Haken:dance3: :

PLUG IN MANAGER > fonteditor.bpl
Neustart des BASCOM
Jetzt taucht unter PLUG IN auch der FONEDITOR auf!
 
Du musst ja vielleicht nicht unbedingt einen neuen Font erstellen.

Hast du denn inzwischen einmal probiert, den Font einzubinden. Ein Beispiel hierzu hatte ich bereits hier gepostet.

Auch einen Font hatte ich bereits hier hochgeladen.

Um zu überprüfen, ob die Kommunikation zum Display in Ordnung ist, könntest du auch einfach mal ein "Cls" ausführen.
 
Ja, der Font 8x8 klappt !
Mir ist nur nicht ganz der Befehl klar:
'LCDAT y , x , var
y = Zeile ?
x= Anfangspixel ?
var = Inhalt.
 
Stimmt, aber in der DOKU steht z.B. :Y =The row in Pixels .... das haut aber nicht hin.
Wenn ich Y durchnummeriere bekomme ich jeweils eine eigene Zeile
 
Bei den Displays besteht eine Zeile aus 8 Bits. Die Höhe einer Zeile ist also 8 Pixel, das Display hat eine Höhe von 8 Zeilen (8 Pages). Adressiert wird zeilenweise.

Das ist bei den DOGL und DOGM Displays mit ST7565 Controller, wie auch bei dem GDM128x64 mit ST565R-G Controller so. Warum nun in der Bascom Hilfe "row in pixels" steht, ist mir auch nicht klar. Das Beispiel wird auch wahrscheinlich eine Ausgabe in der ersten und dritten Zeile (Page) machen (mit Zeilenhöhe 8 Pixel).

Man ist also hier an eine Zeilenhöhe von 8 Pixel gebunden. Das muss nun nicht unbedingt ein Nachteil sein, störend ist es, wenn man pixelweise adressieren möchte.

Umgehen kann man diese Einschränkung, wenn man den Grafikspeicherinhalt zunächst im SRAM des Mikrocontrollers vorhält (hier läßt sich beliebig adressieren) und bei Bedarf den Grafikspeicher zum Display kopiert. Das habe ich hier in einem C Projekt so gemacht
C-Library für Grafik-Displaymodul 128x64

Ich habe auch schon mal überlegt, es auch in Bascom so zu lösen, bisher aber noch keine Zeit gefunden.

Dirk :ciao:
 
  • Like
Reaktionen: IngoP

Ü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)