Forum: Mikrocontroller und Digitale Elektronik T6963 memory mapped an ATMega128


von churchi (Gast)


Angehängte Dateien:

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

von Hartmut Gröger (Gast)


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

von Andi K. (Gast)


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

von churchi (Gast)


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

von churchi (Gast)


Lesenswert?

@Andi K.
das möchte ich später eventuell machen wenn der ram ausgehen sollte.
Auf dem Display sind ja 8k vorhanden...

von Andi K. (Gast)


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

von churchi (Gast)


Lesenswert?

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.

von Andi K. (Gast)


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

von churchi (Gast)


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.

von churchi (Gast)


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.

von Christian Hartz (Gast)


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

von churchi (Gast)


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.

von Andi (Gast)


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

von Stefan (Gast)


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.

von churchi (Gast)


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;

von Andi (Gast)


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?

von Birger* (Gast)


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?

von Andi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.