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
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
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
>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.
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
>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
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
>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.
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
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
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
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.