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

dj4pz

Neues Mitglied
6 Apr 2011
3
0
1
68
24797 Breiholz
Sprachen
BascomAVR, ANSI C
Hallo,

seit einigen Wochen beschäftige ich mich mit einem Projekt für Steuerungszwecke. Hierfür setze ich das Modul Atmega128USB und das Display XV-GDM128x64-RGB.
Programmiert habe ich das gesammte Projekt in BASCOM mit zwei zusätzlichen kleineren ASM-Routinen. Im Prinzip wäre das komplette Projekt abgeschlossen, wenn wie immer nicht zum guten Schluß eine Problem auftritt mit dem ich nicht gerechnet hatte.
Dieses Problem ist rel. schnell beschrieben. Um die Daten auf dem Display auszugeben via SPI , werden diese natürlich positioniert. Diese Positionierung funktioniert in den Zeilen gut, nur bei den Spalten tritt ein Problem auf. Es ist nicht möglich die X-Position 0 anzusprechen, die Ausgabe erfolgt immer 4 Pixel nach rechts verschoben. Dies ist mir erst aufgefallen bei der Darstellung der Grafik. Ebenso werden die "Pixel-Spalten" 0 - 4 nicht gelöscht, sondern bleiben vollkommen unberührt.
Weiterhin habe ich die Libraries "XV-GDM128X64.lib" und "glcdEADOGM128x6.lib" untersucht, was mir jedoch nicht weitergeholfen hat. Wie bereits beschrieben, funktioniert die Anzeige ansonsten ohne Probleme, nur halt diese Verschiebung nach Rechts.

Ich hoffe, das meine Beschreibung das Problem deutlich machen konnte.

Danke und Gruß,
Hans, DJ4PZ
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hallo Hans,

die Bascom Library basiert auf der Library für das EA Display EA DOGM128-6, die beiden Displays sind sehr ähnlich (nur dass das XV-GDM128X64-RGB in der Darstellung besser ist, mit 3,3V und 5,0V läuft und ein RGB-LED Backlight hat ... viele "unds" ;)).

Es gibt einen kleinen Unterschied in der Initialisierung, dies wurde leider nicht in der Bascom Lib für das Display angepasst.

Das ist aber kein Problem, dies kannst du leicht selber anpassen.


Editiere die Lib und suche das label _lcd_init_data. Entferne die Zeile danach (unten siehst du dir originale Zeile auskommentiert) und füge die geänderte Initialisierungszeile (untere Zeile) hinzu.

Die Adressierung müsste dann richtig sein.

Code:
_lcd_init_data:
'.db &HE2, &H40, &HA1, &HC0, &HA6, &HA2, &H2F, &HF8, &H00, &H27, &H81, &H16, &HAC, &H00, &HAF

'Initialisierung für das XV-GDM128X64-RGB und XV-GDM128X64:
.db &HE2, &H40, &HA0, &HC8, &HA6, &HA2, &H2F, &HF8, &H00, &H24, &H81, &H1F, &HAC, &H00, &HAF

Falls du eine neuere Lib für das EA Display findest, die mehr Funktionalität hat, könntest du diese wahrscheinlich auch wie oben beschrieben anpassen und nutzen.

Dirk :ciao:



OT: Für alle die das Display mit AVR GCC einsetzen möchten, ich habe eine Library erstellt, die ihr in meinem Blog findet ...

Atmel Studio C-Library für Displaymodule XV-GDM128X64 und XV-GDM128X64-RGB
 

dj4pz

Neues Mitglied
6 Apr 2011
3
0
1
68
24797 Breiholz
Sprachen
BascomAVR, ANSI C
Guten Morgen Dirk.

Vielen Dank für deinen Hinweis und deiner schnellen Unterstützung.

Die von Dir beschriebene Anpassung der Library hatte ich bereits durchgeführt, leider hatte sich dabei ein Bug eingeschlichen.
Nun ist die letzte Hürde genommen und ich kann mit den Testläufen aller Funktionen beginnen. Wenn diese abgeschlossen und dokumentiert sind, werde ich das Projekt hier im Forum vorstellen. Dazu benötige ich halt noch ein wenig Zeit, das Ganze soll ja Hobby bleiben und nicht in Stress ausarten.

Danke und Gruß,
Hans - DJ4PZ
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hallo Hans,

... Nun ist die letzte Hürde genommen und ich kann mit den Testläufen aller Funktionen beginnen. Wenn diese abgeschlossen und dokumentiert sind, werde ich das Projekt hier im Forum vorstellen. Dazu benötige ich halt noch ein wenig Zeit, das Ganze soll ja Hobby bleiben und nicht in Stress ausarten.
ja das würde mich schon freuen, wenn du dein Projekt hier vorstellst :)

Dann wünsche ich dir noch viel Spaß bei der Entwicklung!

Dirk :ciao:
 

IngoP

Mitglied
4 Jan 2012
72
2
8
46
Sprachen
BascomAVR, Pascal
Hallo Hans,

die Bascom Library basiert auf der Library für das EA Display EA DOGM128-6, die beiden Displays sind sehr ähnlich (nur dass das XV-GDM128X64-RGB in der Darstellung besser ist, mit 3,3V und 5,0V läuft und ein RGB-LED Backlight hat ... viele "unds" ;)).

Es gibt einen kleinen Unterschied in der Initialisierung, dies wurde leider nicht in der Bascom Lib für das Display angepasst.

Das ist aber kein Problem, dies kannst du leicht selber anpassen.


Editiere die Lib und suche das label _lcd_init_data. Entferne die Zeile danach (unten siehst du dir originale Zeile auskommentiert) und füge die geänderte Initialisierungszeile (untere Zeile) hinzu.

Die Adressierung müsste dann richtig sein.

Code:
_lcd_init_data:
'.db &HE2, &H40, &HA1, &HC0, &HA6, &HA2, &H2F, &HF8, &H00, &H27, &H81, &H16, &HAC, &H00, &HAF

'Initialisierung für das XV-GDM128X64-RGB und XV-GDM128X64:
.db &HE2, &H40, &HA0, &HC8, &HA6, &HA2, &H2F, &HF8, &H00, &H24, &H81, &H1F, &HAC, &H00, &HAF

Falls du eine neuere Lib für das EA Display findest, die mehr Funktionalität hat, könntest du diese wahrscheinlich auch wie oben beschrieben anpassen und nutzen.

Dirk :ciao:



OT: Für alle die das Display mit AVR GCC einsetzen möchten, ich habe eine Library erstellt, die ihr in meinem Blog findet ...

Atmel Studio C-Library für Displaymodule XV-GDM128X64 und XV-GDM128X64-RGB
Moin,
da ergebn sich direkt bei mir 2 Fragen:
- gibt es eine passende Library auch für BASCOM, oder kann ich die C Library in BASCOM einbinden ?
- stelle ich die Frabe des RGB Backlight über Spannungsteiler des jeweiligen Farbkanals ein ?

hab das gerade gefunden: RGB-LED-Backlight kann von der Library gesteuert werden. Signale können invertiert werden (alles einstellbar in Config.h, PWM habe ich nicht realisiert) somit ist die Frage bereits teils beantwortet ;-)
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.401
62
48
Marwitz
Sprachen
BascomAVR, Assembler
Hi,

Dirk hat doch bereits geschrieben, daß das Display weitgehend kompatibel zum EADOGM... ist, und eigentlich dessen lib verwendet werden könnte. Allerdings muß das init etwas korrigiert werden.
Dazu könntest Du die lib mit einem neuenn Namen kopieren, und dort wie beschrieben das Init austauschen (und dann die Kopie verwenden), alternativ müßte es auch mit der alten gehen, wenn Du das init (mit den Bytes aus Dirks post) selbst übernimmst. Aber der erste Weg wäre sauberer.

Das Backlight besteht eigentlich aus 3 LEDs (bzw LED-Clustern) die Common Anode verdrahtet sind - wenn Du an den Kathoden also mit den Widerständen spielst, oder diese mit PWM schaltest, kannst Du die Farbe mischen. Die haben also nichts mit dem SPI zum Display zu tun (ok, man könnte an denselben Bus auch einen SPI-LED-PWM-Baustein oder sowas klemmen (mit 'ner anderen !CS-Leitung, aber prinzipiell haben die LEDs nichts mit dem Display zu tun, die sind halt nur dahinter)
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hallo Ingo,

es gibt für Bascom eine Lib für das Modul, diese wird auch direkt von Bascom angeboten. In dieser Lib ist dem Bascom Team leider ein Fehler unterlaufen. Die Initalisierungszeile muss wie im oberen Beitrag beschrieben ersetzt werden (die Lib ist nicht von mir, ursprünglich basiert diese auf einer Lib für ein EA DOGM128x-6 Display)

Wie bei den EA DOGM128x-6 Displays wird bei dem XV-GDM128X62-RGB Display der LCD-Controller ST7565R verwendet. Die Displays sind also ziemlich kompatibel, lediglich bei der Initialisierung gibt es einen kleinen Unterschied. Du solltest also eigentlich auch eine Lib für EA DOGM128x-6 verwenden können, wenn du diese Änderung in der Lib vornimmst (eventuell gibts auch inzwischen Libs mit mehr Features)

Ich denke nicht, dass man eine C-Lib in Bascom einbinden kann. Ich kenne mich aber in Bascom auch garnicht aus. :-/

Bei 5V Betriebsspannung kannst du für die einzelnen Backlight-LEDs Vorwiderstände verwenden. Möchtest du zusätzlich noch jeweils eine Intensität einstellen, kannst du dies zum Beispiel über PWM machen.

Dirk :ciao:


Moin,
da ergebn sich direkt bei mir 2 Fragen:
- gibt es eine passende Library auch für BASCOM, oder kann ich die C Library in BASCOM einbinden ?
- stelle ich die Frabe des RGB Backlight über Spannungsteiler des jeweiligen Farbkanals ein ?

EDIT:
hab das gerade gefunden: RGB-LED-Backlight kann von der Library gesteuert werden. Signale können invertiert werden (alles einstellbar in Config.h, PWM habe ich nicht realisiert) somit ist die Frage bereits teils beantwortet ;-)
Dies bezieht sich auf meine C-Library. Es werden drei IO-Pins des Mikrocontrollers verwendet, in Config.h kann ich diese Pins festlegen und direkt über eine Routine mehrere Farben einstellen (Kombinationen der drei LEDs):

[CCODE]
void Display_SetBacklight_By_Color(uint8_t color);
// Parameter color: blOFF, blRED, blGREEN, blYELLOW, blBLUE, blPURPLE, blCYAN, blWHITE
// Available if backlight controlled by lib (DISPLAY_BACKLIGHT_CONTROL = true), see Config.h.[/CCODE]
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3.401
62
48
Marwitz
Sprachen
BascomAVR, Assembler
Hi Dirk,
auf der verlinkten Seite mit Deiner C-Bibliothek schreibst Du einerseits, daß eine RRegelung der Farbe möglich ist (mit" void Display_SetBacklight_By_Color(uint8_t color);" wenn auch ohne PWM), und andererseits, daß nur 5 Leitungen benötigt werden (eben MOSI, SCK, CS, A0 und Reset).
Wie erfolgt die Ansteuerung der LEDs da konkret (oder werden dann 3 weitere(!) Leitungen benötigt, eben die Kathodenansteuerung)?[HR][/HR]
Edit: im Edit eben bereits beantwortet
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hi LotadaC,

ja ich habe mich da nur auf SPI bezogen. Der Hersteller von EA DOG gibt SPI 4-Draht an, da fehlt ja RESET und eine Backlight LED, wenn man dies verwendet. :-O ;-)

Das GDM128X62 gibt es übrigens auch noch ohne Backlight.

Dirk :ciao:
 

IngoP

Mitglied
4 Jan 2012
72
2
8
46
Sprachen
BascomAVR, Pascal
...

...

Dies bezieht sich auf meine C-Library. Es werden drei IO-Pins des Mikrocontrollers verwendet, in Config.h kann ich diese Pins festlegen und direkt über eine Routine mehrere Farben einstellen (Kombinationen der drei LEDs):
...
Und die 3 IO Pins klemme ich dann wie an ? Hast Du vielleicht ein Schaltbild von Deinem layout ?

Die Pins müssten dann doch kleine Transistoren ansteuern um die verschiedenen Kathoden "durchzuschalten"
:confused:
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Und die 3 IO Pins klemme ich dann wie an ? Hast Du vielleicht ein Schaltbild von Deinem layout ?
Die Pins müssten dann doch kleine Transistoren ansteuern um die verschiedenen Kathoden "durchzuschalten"
:confused:
Ein Schaltbild für den Anschluß der drei LEDs des Backlight habe ich nicht erstellt.

Ich gehe davon aus, du verwendest einen AVR Mikrocontroller und hast eine Betriebsspannung von 5V. Dann schließt du an jede Kathode einen Vorwiderstand von 33Ohm an (hier sollen dann um die 1,8V abfallen, ca. 100mW, ULED=3,2V bei ILED=60mA). Die gemeinsame Anode schließt du an +5V an. Die Widerstände ziehst du dann über Kleinsignaltransistoren (zB. NPN BC337-40, N-Kanal MOSFET BS170) oder Transistorarray (ULN...) nach GND.

Hier das Datenblatt, welches du auch auf der Produktseite findest.

BacklightPinAssignment.png
 

IngoP

Mitglied
4 Jan 2012
72
2
8
46
Sprachen
BascomAVR, Pascal
ja, 5V Versorgungsspannung und auch einen AVR :)


So wie Du es beschreibst habe ich mir es auch schon gedacht :)
 

dino03

Aktives Mitglied
27 Okt 2008
6.729
16
38
Sprachen
BascomAVR, Assembler
Hi Ingo,

...
Dies bezieht sich auf meine C-Library. Es werden drei IO-Pins des Mikrocontrollers verwendet, in Config.h kann ich diese Pins festlegen und direkt über eine Routine mehrere Farben einstellen (Kombinationen der drei LEDs):
...
Und die 3 IO Pins klemme ich dann wie an ? Hast Du vielleicht ein Schaltbild von Deinem layout ?
Die Pins müssten dann doch kleine Transistoren ansteuern um die verschiedenen Kathoden "durchzuschalten"
:confused:
- stelle ich die Frabe des RGB Backlight über Spannungsteiler des jeweiligen Farbkanals ein ?

hab das gerade gefunden: RGB-LED-Backlight kann von der Library gesteuert werden. Signale können invertiert werden (alles einstellbar in Config.h, PWM habe ich nicht realisiert) somit ist die Frage bereits teils beantwortet ;-)
ist doch recht einfach. Du nimmst 3 IO-Pins und setzt da jeweils nen Transistor dran (zB BC547 mit LEDs gemeinsam an Vcc, natürlich mit Vorwiderständen ;) ) Dann kannst du das wie Dirk recht schnell selber machen.

IO1---rot
IO2---grün
IO3---blau

schwarz=nix ... rot=IO1 ... grün=IO2 ... gelb=IO1+2 ... blau=IO3 ... violett=IO1+3 ... usw

Du hast also 8 Möglichkeiten wegen den 3 Bit. Die letzte ist weiß (1+2+3). Das kann man mal schnell nebenher ins Programm einbauen ;)

Wenn man dafür PWM-Pins nimmt, dann wird das zwar noch mehrfarbiger aber auch komplizierter. Würde aber auch über Soft-PWM gehen.

Gruß
Dino
 

IngoP

Mitglied
4 Jan 2012
72
2
8
46
Sprachen
BascomAVR, Pascal
anschluss des Displays

Ich nochmal.

Ich versuche gerade die ersten Testpgrogramme für meine Steuerung zu coden, um einen Modultest zu fahren.

Dabei stolperte ich gerade bei den BASCOM Optionen über die Einstellungen zum Display.

Muss ich diese auf SPI 8bit bus umstellen ? und welchen LCD Type nehme ich für das XV ? oder sind diese einstellungen irrelevant, da diese durch die library überschrieben werden ?

angeschlossen ist das Display via SPI:
AVR <> XV-Display
SCK <> CLK
MOSI <> DI
PORTA.7 <> A0
PORTB.7 <> RES
SS/ <> CS
+5V <> VCC
GND <> GND/GND
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Mit Bascom kenne ich mich leider nicht so aus. Ob hier Bascom-Optionen oder Einstellungen in der Lib berücksichtigt werden, kann ich nicht sagen, ich vermute aber eher mal nicht.

Der Anschluß sieht in Ordnung aus. Die Lib muss natürlich die richtigen GPIO Pins verwenden.

Vielleicht kann hier der Themenersteller Hans (dj4pz) weiterhelfen.

Ansonsten schauen, wie man das Display EA DOGM128-6 ansteuert, welches den selben LCD Controller hat.

Dirk :ciao:
 

IngoP

Mitglied
4 Jan 2012
72
2
8
46
Sprachen
BascomAVR, Pascal
So, nach nunmehr 1 Jahr Stillstand geht es weiter ... :)

Ich bin Im Dezember hier stehen geblieben:

config PINB.4=output ' GRÜN
config PINB.5=output ' ROT
config PINB.6=output ' Blau

Ich würde nun für die Farbwahl dann jeweils das BIT auf HIGH oder LOW setzen ? Oder habe ich da ein Verständnisproblem ?

also PINB.4 = &B1 ???

Die Pins sind wie beschrieben dann über einen Transistor mit Widerstand an der LED angeklemmt ...
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Hallo Ingo,
So, nach nunmehr 1 Jahr Stillstand geht es weiter ... :)
upps, sooo lange her. Da muss ich mich nun erst mal wieder "reindenken" :)

Ich würde nun für die Farbwahl dann jeweils das BIT auf HIGH oder LOW setzen ? Oder habe ich da ein Verständnisproblem ?

also PINB.4 = &B1 ???

Die Pins sind wie beschrieben dann über einen Transistor mit Widerstand an der LED angeklemmt ...
Die drei LEDs haben eine gemeinsame Anode (diese an VCC). Wenn du Transistoren in Emitterschaltung einsetzt, musst du den Portpin auf logisch high setzen, damit der Transistor schaltet (NPN Transistor mit Vorwiderstand an Basis oder N-Kanal MOSFET mit dem Gate direkt am Pin). An jede Kathode ein Vorwiderstand nicht vergessen.

Mit Bascom kann ich dir leider nicht so viel helfen.

Dirk :ciao:
 

IngoP

Mitglied
4 Jan 2012
72
2
8
46
Sprachen
BascomAVR, Pascal
Also elektrisch habe ich das Ganze so angeschlossen:

Ist ein Ausdruck
 

Anhänge

Dirk

Administrator
Teammitglied
28 Jan 2007
4.299
146
63
Mittelhessen, Giessen
Sprachen
ANSI C, C++, C#, Java, Kotlin, Pascal, Assembler, PHP
Es müsste so funktionieren. Ich würde die Werte der Basisvorwiderstände noch etwas verringern, dann schalten die Transistoren besser durch.

Dirk :ciao:
 

IngoP

Mitglied
4 Jan 2012
72
2
8
46
Sprachen
BascomAVR, Pascal
So, mein Display läuft. Zumindest die Farben des RGB Backlight. Wermutstropfen ist, das ich nur Pixel auf dem Display sehe. Kein einziges Zeichen. Als ob das Display die Daten nicht richtig umsetzen kann ?!

Die LIB Datei habe ich natürlich im BASCOM angepaßt. jemand eine Idee ?
 

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