mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik T6963 memory mapped an ATMega128


Autor: churchi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Hartmut Gröger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: churchi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: churchi (Gast)
Datum:

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

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: churchi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: churchi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: churchi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Hartz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: churchi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: churchi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Birger* (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

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.