www.mikrocontroller.net

Forum: Compiler & IDEs GLCD Lib von Holger Klabunde, nur 1 Seite OK


Autor: Holger Gerwenat (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen Alle zusammen,

ich habe mir bei Pollin eins von diesen Grafik LCD (128x64, KS0108 
komp., weiße HG Beleuchtung für 19,95) bestellt und möchte es in meiner 
Heizungssteuerung einsetzen. Ich hatte nur ein Testboard mit ATMega16 
zur Hand. Zum Test sollte es gehen. Am Wochenende habe ich das LCD 
angeschlossen und die LIB von Holger Klabunde angepasst (Portzuweisungen 
geändert und ein bischen aufgeräumt). Die Lib hab ich ausgesucht, weil 
sie umgewandelte *.bmp darstellen kann. Nun bin ich 
'Gelegenheitsprogrammierer' - vielleicht hab ich zuviel gelöscht? Ich 
konnte Text ausgeben, Rechtecke zeichnen und den beiliegenden "Paul" 
anzeigen. Leider funktioniert nur der 1.Chip des LCD, d.h. nur die 
linken 64 Pixel werden dargestellt. Wenn ich am LCD CS1 und CS2 
hardwarem. vertausche gehen die rechten 64 Pixel. Ich hab gestern den 
ganzen Tag auf den Code gestarrt und finde den Fehler nicht. Wenn Holger 
Klabunde hier mitliest: wo wird denn eigentlich z.B. beim Zeichnen eines 
Rechteckes der Chip umgeschaltet? Ich habe hier im Forum noch den 
Hinweis auf JTAG und den PORTC gefunden - die anderen Pins gehen doch 
aber oder sollte meine FUSE Programmierung nicht richtig funktionieren?

Schon mal Danke im Voraus.....

Gruß Holger

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
VIelleicht probierst du erst einmal eine "unaufgeräumte" Version der 
lib. Die sollte funktionieren.

Die Chipauswahl findest du im Original in SetChipNumber, das über 
SetPosition aus SetPixel aufgerufen wird. SetPixel wiederum wird von 
allen Zeichenfunktionen benutzt.

Oliver

Autor: Holger Gerwenat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Oliver,

das mit SetPixel schaue ich mir mal an....

"unaufgeräumt" scheitert an dem Prozessor - passt nicht auf mein 
Testboard und  ATMega16 hat keinen PORTF :-((( außerdem passt das 
Original Testprogramm nicht in meinen Flash.

Gruß Holger

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>das mit SetPixel schaue ich mir mal an....

Du solltest mal kontrollieren ob PB1
überhaupt am Display an CS2 angeschlossen ist. Oder
mal mit dem Osci nachsehen ob es auch mal auf High geht.
Vieleicht ist da ja auch ein Kurzschluss drauf.

Autor: Holger Gerwenat (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nocheinmal,

ich habe gestern den ganzen Abend in meiner Bastelstube gesessen um dem 
Problem näher zu kommen. Es gibt schon Ärger mit meiner Frau und das: 
Ist schlimm ;-)))!
OK.
Als erstes habe ich über den Befehl "SetPixel(0,0,1);" in meiner main 
das oberste linke Pixel auf dem Display angemacht. ->funktioniert

Dann habe ich mit "SetPixel(63,0,1);" 1. Zeile, 1.Chip, letztes Pixel 
gesetzt (wir wissen 1.Chip kontrolliert horizontal und vertikal die 
Pixel Nr. 0-63)->funktioniert auch.

"SetPixel(64,0,1);" (2.Chip, erstes Pixel links oben) -> geht nicht.

Im AVR Studio simuliert -> CS1 und CS2 schalten um :-O Ah ha!

In ks0108.c in Funktion "void SetChipNumber(unsigned char num)" im 
"switch(num)" mal die beiden case miteinander vertauscht und wieder 
"SetPixel(0,0,1);" aufgerufen ->erstaunlicherweise wird nun wirklich 
Pixel 0,64 (also erste Zeile, 2.Chip, 1.Pixel links oben) aktiv !?
Die Umschaltung der Chips über CS1/2 funktioniert also.

Alles wieder auf Anfang zurück und Pixel 64,0 gesetzt -> im Studio 
simuliert.
Scheint richtig zu funktionieren. Im richtigen Leben geht's immer noch 
nicht.
Vielleicht braucht das Display nach der Chipauswahl ein kleine Pause? 
Also nach dem Chipselect jede Menge NOP(); eingefügt ->Ohne Erfolg.

Ich bin bald der Meinung, daß irgendwie die Positionsberechnung bei 
Pixel xpos>63 oder deren Übergabe nicht funktioniert.
Wenn ich es richtig verstanden habe, erfolgt das in ks0108.c in der 
Funktion "unsigned char SetRow(unsigned char xpos)" .
In "WriteDisplay(0x40|offs);" wird's gesendet "0x40" müsste der 
eigentliche Befehl sein, verodert mit der Spaltennummer.
Kann es sein, daß aus unerfindlichen Gründen mein Prozessor diese Modulo 
Geschichte in der Zeile davor nicht beherrscht???
Oder gibt es abweichende Behlsreferenzen bei den Displays? Das 
Datenblatt bei Pollin ist nicht sehr ergiebig, enthält leider nur die 
Pinbelegung und ein paar elektrische Werte.

Danke, daß Ihr mal raufguckt!

Gruß Holger

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann es sein, daß aus unerfindlichen Gründen mein Prozessor diese Modulo
>Geschichte in der Zeile davor nicht beherrscht???

Nö.

>Oder gibt es abweichende Behlsreferenzen bei den Displays?

Nochmal zur Erklärung: Ein ks0108 kann nur 64*64 Pixel ansteuern. Für 
128*64 nimmt dann einfach zwei, verbindet alle Daten-und 
Steuerleitungen, bis eben auf die, über die ausgewählt werden soll, 
welcher ks0108 nun angesprochen werden soll. Da gibt es tatsächlich 
mehrere Möglichkeiten.

http://www.lcd-module.de/deu/pdf/grafik/dip128-6.pdf

zeigt das ganz gut für ein LCD eines anderen Herstellers. Welche 
Möglichkeiten davon dein Display bietet, und wie du es angeschlossen 
hast, must du selber rausfinden.

Oliver

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

Ich hab mit das Pollin-Datenblatt mal angesehen. Wenn das TG12864B-03 
dein Display ist, sind da nur CS1 und CS2 rausgeführt, das sollte also 
mit der lib problemlos funktionieren.

Oliver

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich bin bald der Meinung, daß irgendwie die Positionsberechnung bei
>Pixel xpos>63 oder deren Übergabe nicht funktioniert.

DEIN geänderter Code läuft mit meinem TG12864B-03.
Die Positionsberechnung ist völlig in Ordnung.
Die Anzahl NOP ist auf jeden Fall für 8MHz zu klein.
Hab dann wieder die für 11.0592MHz eingesetzt.
Keine Probleme.

Check lieber mal deine Hardware bevor du da weiter
am Code rumfummelst.

Autor: Holger Gerwenat (holli1195)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Oliver!

Genau das ist das Display, zwar die Version TG12864B-13 (grau mit weißer 
HG Beleuchtung) aber natürlich sind die Anschlüsse gleich. Die Auswahl 
mit den 2 Controllern habe ich verstanden. Hardware muss in Ordnung 
sein. Wenn ich wie oben geschrieben in "void SetChipNumber(unsigned char 
num)" die beiden CS Leitungen einfach mal vertausche, kann ich 
Controller2 ja ansprechen...

Ich werde jetzt nochmal versuchen die Werte CS und xpos nicht errechnen 
zu lassen sondern festzulegen.

bis dahin...
Gruß Holger

Autor: Holger Gerwenat (holli1195)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh Holger, Danke!

Ist ja krass! Mein Code läuft bei Dir?! Jetzt guck ich mit Lupe meine 
Hardware an...

Ich werde berichten!

Gruß Holger

Autor: Holger Gerwenat (holli1195)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schönen Guten Morgen!

Problem gelöst!

Erst nocheinmal herzlichen Dank an Oliver und Holger.
@ Holger  - bist Du eventuell sogar der Urheber des Codes?

Die Aussagen von Euch waren ja klar
 -"der Code sollte gehen" und
 -"Dein Code geht bei mir, fummel nicht am Code rum"

(Du musst das ja wirklich zusammengelötet haben Holger. Danke dafür!)

Also hab ich erst mal einen Oszi an die CS Leitungen gehalten. Die haben 
geschaltet. Dann kam irgenwie die Eingebung und ich habe meinen Kollegen 
gebeten: "Wenn Du da oben bei ***** vorbeikommst, bring mir bitte den 
größten AVR mit noch 40 Pins im DIP Gehäuse mit." Hat er auch getan, war 
ein Mega32.
Gestern Abend auf mein Testboard gesteckt - Makefile angepaßt - und?:

Geht !!! *kopfschüttel, schulterzuck und Nix versteh!*

warum weiß ich nicht, der Mega16 ist bestimmt nicht kaputt.

In unserem System auf Arbeit würde jetzt stehen:
"Problem gelöst - kein Eintrag in die Datenbank"....

Dann werd ich jetzt mal mein eigentliches Projekt beginnen.

Gruß Holger

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.