T6963 memory mapped an ATMega128

Gast #207062
Lesenswert?

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 ;)
Angehängte Dateien:
Gast #207063
Lesenswert?

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
Gast #207064
Lesenswert?

... 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
Gast #207065
Lesenswert?

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
Gast #207067
Lesenswert?

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
Gast #207069
Lesenswert?

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
Gast #207070
Lesenswert?

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.
Gast #207071
Lesenswert?

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.
Gast #207072
Lesenswert?

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
Gast #207073
Lesenswert?

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.
Gast #207074
Lesenswert?

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
Gast #207075
Lesenswert?

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.
Gast #207076
Lesenswert?

@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;
Gast #207077
Lesenswert?

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?
Gast #207078
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren