Hi Ich habe mir das Grafikdisplay von Pollin zugelegt (128x64 Punkte mit T6963 Controller). Ich habe es an einen ATmega128 memory mapped angeschlossen. Um keinen Adresslatch verwenden zu müssen habe ich /CE auf A15 und /CD auf A14 gehängt. Zum Ansteuern wurde der Code von Holger Klabunde auf memory mapped umgeschrieben, jedoch funktioniert es nicht wirklich. Ich kann weder Text noch Grafik auf dem Display ausgeben. Wenn ich einzelne Pixel setzen möchte, dann wird zwar etwas korrekt am Display angezeigt, aber absolut nicht das was ich möchte. Wo könnte der Fehler liegen? Ich habe den Source angehängt. Ich hoffe mir kann jemand helfen und bedanke mich schonmal im vorraus. Falls jemand einen fertigen source dafür hat würde es mich freuen diesen ausprobieren zu dürfen ;)
Hi Warum betreibst du das Display 'memory mapped'. Schliess doch einfach die Datenleitungen an einen Port und die 4 Steuerleitungen an einen anderen. Da hast Du volle Kontrolle über das Timing der Anzeige. Ein Grafikdisplay ist kein DRAM. Mfg HG
... wobei man den DRAM des T6963-LCD locker als RAM-Erweiterung in ungenutzte Bereiche hernehmen kann. Allerdings leider nur mit einer Bandbreite von ca. 100K/s im Auto-Read/Write-Mode. Aber bei ein paar 100 Bytes spielt das weniger eine Rolle. MfG Andi
Das is mir schon klar, jedoch möchte ich nicht nur 1 Display anschließen sondern mehrere. Da brauch ich zu viele Ports die ich nicht frei habe. Einen externen SRAM brauch ich sowieso und da werde ich in ein paar Adressen die Displays einblenden
@Andi K. das möchte ich später eventuell machen wenn der ram ausgehen sollte. Auf dem Display sind ja 8k vorhanden...
Wie viele Displays brauchst Du denn an einem µC? Schalte doch einfach DB0 bis DB7, RD, WR und CD parallel an z. B. 5 Displays und für jedes der 5 Displays dann extra eine CE-Leitung. Macht auch 2 ganze Ports bzw. 16 Port-Pins. MfG Andi
Sicherlich würde das auch funktionieren - aber ich würds gerne gleich memory mapped machen, weil ich 32k externen Ram brauch und die restlichen 32k möchte ich über ein CPLD verwalten lassen.
Braucht man dazu nicht einen Adressdekoder dazwischen welcher je nach Zugriffsadresse CD auf high oder low setzt und je nach Richtung (lesen/schreiben) RD auf low oder WR auf low setzt? Im original PDF von Toshiba sind verschiedene Schaltpläne mit einem Z80 und Adressdekoder. MfG Andi
RD und WR werden vom ATMega geregelt - um das brauch ich mich nicht mehr zu kümmern. Auf jedem memory mapped Gerät werden die angeschlossen. Das Adressdekodieren macht der CPLD. Auf einer Adresse wird Control und auf einer anderen Data aktiviert. Über diese Adressen wird auch das CE Signal gesetzt. Momentan hab ich die beiden Leitungen fix auf die höheren Adresspins gelegt.
Der Code funktioniert übrigends ausgezeichnet wenn man ihn nicht an memory map anpasst sondern nur die Pins konfiguriert in der .h Datei. Es liegt also am memory mapped. Ich habe es auch schon mit den maximalen waitstates ausprobiert - es funktioniert aber nicht. Das das Display zu schnell angesteuert wird glaube ich nicht, da es keine künstlichen Wartezeiten im "unbearbeiteten" code gibt.
Hallo, diese alten Displaycontroller sind teilweise recht langsam. Hast Du vielleicht ein Timing-Problem, dass die Daten nach dem Steigen von WR nicht lange genug anliegen? Das Bus-Interface des ATmega160 ist eigentlich für Datenübernahme auf fallende Flanken optimiert, das Display übernimmt die Daten aber auf der steigenden Flanke und muss diese mind. 40 ns nach der steigenden Flanke noch anliegen haben. Takt verringern hast Du schon ausprobiert? Gruß, Chris
ja - Taktverringern hatte ich schon probiert. Das Display läuft jetzt perfekt im memory mapped mode auf 16mhz. Der Fehler war, dass ich die Adresse für die Daten zu klein gewählt habe und diese somit nicht nach außen gedrungen ist, sondern den internen ram beschrieben hat. ohne wait states läuft es eigentlich gut, aber bei grafiken werden pixel verloren. 1r/w waitstates genügen aber.
Hallo, Churchi, hast Du auch ein komplettes Testprogramm inklusive main.c? Ich habe leider nicht soviel Erfahrung und bei mir funktioniert das leider nicht :( Ich habe das egentlich nach Deiner Beschreibung aufgebaut. Tschüss, Andi
Ich bastel auch geraden an diesem Display rum. Funktioniert auch nicht so richtig. Wenn ich den Mega162 flashe, dann leuchtet kurz eine Linie auf. Ansonsten passiert nichts. Nach Reset bekomme ich nur ein leeres Display.
@Andi Die main.c includiert nur die .h Datei und verwendet die Funktionen in der .c Datei. Soweit ich mich erinnere musste ich wirklich nur die Adresse anpassen. also statt: volatile unsigned char *LCD_DATA=(unsigned char*)0x0; volatile unsigned char *LCD_CTRL=(unsigned char*)0x4000; volatile unsigned char *LCD_DATA=(unsigned char*)0b3FFF; volatile unsigned char *LCD_CTRL=(unsigned char*)0b7FFF;
Also irgendwie klappt das nicht bei mir. Vielleicht nochmal für Doofe zum Mitschreiben: Spannung ist klar, /WR an /WR, /RD an /RD, /CE an A15, C/D an A14, FS an low (8x8) sowie DB0..7 an AD0..7. Dazu dann das externe Interface aktivieren, also SRE auf 1. Waitstates im Prinzip egal, auch bei 16MHz. Stimmt das so?
Ich hab letztes Jahr auch so meine Erfahrungen mit dem T6963 gemacht. Aber er geht memory mapped bei richtiger Verdrahtung sehr gut. Alle, die meinen warum das Ganze, sollten sich mal die Geschwindigkeit anschauen. Im Polling-Modus über irgendwelche Ports ist das Teil ziemlich langsam. Memory mapped ist es aber ziemlich flott. Meine Erfahrung ist, dass das C/D-Signal nicht an den gemultiplexten A0..7 funktioniert (zu langsam oder was auch immer), weshalb ich auch eine Adressleitung aus A8..15 benutze. Ob man übehaupt Kontakt zu dem Chip hergestellt hat, kann man durch auslesen des Statusregisters schnell feststellen. Wenn's dennoch nicht geht: Sind die Reset und Kontrastanschlüsse richtig verarztet?
OK, mein Fehler, die /RD Leitung hatte auf meinem Aufbau keine Verbindung, war schlecht verlötet. Nun klappt alles wunderbar memory mapped mit 16MHz. Danke für die Hilfe!
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.