Ext Memory AtMega128

22. Okt. 2007
319
0
16
38
Bayern
Sprachen
  1. ANSI C
  2. Assembler
  3. Pascal
Hi,

erst mal sag ich freundlich hallo hier :)

ich bin gerade über euer Forum bei Google gestolpert.

Nun zu meiner Frage:

Ich habe ein kleineres Problem ich möchte ein Display

PS12864WRF-001 der Fa. Powertip

und möchte es am Externen Raminterface (D0 bis D7) des AtMega128s verwenden. Leider habe ich mit diesem Interface noch keinerlei Erfahrungen. Ich beschäftige mich zwar viel mit Atmels und lese auch gerne Datenblätter ;)
jedoch hoffe ich ob mir ev. einer von euch vorab etwas dazu Sagen / mir Weiterhelfen kann.

Bezüglich der Initialisierung , der Adressierung, der weitergabe der Daten ...

Würde mich freuen,

danke,

Manuel K.
 
Hallo Manuel,

willkommen im Forum. Leider kann ich keine genaueren Daten zu dem Display finden. Laut Powertip ist das Display nicht in Massenproduktion, sondern noch in der Entwicklung, bzw. erst als
Engineering sample verfügbar.

PS12864WRF (S steht als Sample, http://www.powertip.com.tw/products1.php)

Hast du für das Display ein Datenblatt oder eine Internetseite, das würde schon mal weiterhelfen.

Gruss
Dirk

 
Hallo Dirk,

danke für deine Schnelle Antwort & Sorry das ich mich erst jetzt melde, leider war ich Gesundheitlich arg "eingeschrenkt"


Bin gerade auf der Arbeit habe leider das Datenblatt nicht hier das Display hat den Treiber "ST7565S" ich werde heute Abend die beiden Datenblätter hochladen.
 
hmm Schade, kaum 2 Monate später und keine Antwort,

hat den einer irgendwie beispiele über das externe ram interface ?

Hab die letzten wochen das andere gemacht

(ihr wisst ja das schlechteste Provesorium hält am Längsten)

nun möchte ich mich aber doch an das Ram Interface "Trauen" nur irgendwie heute wieder versucht einzulesen und wenig sinvolles gefunden.
 
Hallo Manuel.

Bei dem ATmega128 kann optional externes SRAM verwendet werden.
Die ersten 4352 Bytes des Datenspeichers adressieren
  • das Register File
  • das I/O Memory
  • das extended I/O Memory
  • und das SRAM
Im ATmega103-Kompatibilitätsmodus verhält sich das etwas anders, du kannst ja mal in das Datenblatt sehen, wenn du den Mikrocontroller in diesem Modus nutzt. Achtung: Ich glaube der Mikrocontroller wird in diesem Modus ausgeliefert, du musst die FuseBits entsprechend setzen, wenn du den normalen Modus verwenden möchtest.

Verwendest du nun ein externes SRAM, wird dies in den Adressen 4353 bis 64K eingeblendet. Das heißt, wenn du eine Adresse größer 4352d ansprichst, wird auf das externe SRAM zugegriffen.

Wenn du externes SRAM, bzw. das ExternalSRAMInterface verwenden möchtest, musst du das Bit SRE im Register MCUCR setzen. Wenn dieses Bit gesetzt ist, kannst du mit den selben Instructions, die Du für das interne SRAM verwendest, auf das externe SRAM (oder das Display, welches am ExternalSRAMInterface angeschlossen ist) zugreifen (LD, ST, LDS, STS, LDD, STD, PUSH, POP). Bei Adressen größer 4352d werden die Signale RD\ und WR\ gesteuert.

avr_praxis_1.png


Folgende Signale (Pins) benötigst du für das ExternalSRAMInterface:
  • RD\ (PG1)
  • WR\ (PG0)
  • ALE (PG2) Address Latch Enable
  • AD0 bis AD7 (PA0 bis PA7) Address Low Byte + Data Byte
  • A8 bis A15 (PC0 bis PC7) Address High Byte
Du benötigst ein Adresslatch, da das niederwertige Adressbyte und das Datenbyte nacheinander am Port A anliegen, das Adresslatch wird über das Signal ALE gesteuert, es puffert das niederwertige Adressbyte. (Nutzt du keine weitere Peripherie am ExternalSRAMInterface und/oder insgesamt einen kleineren Adressbereich der mit 8Bit adressierbar ist, könntest du das Adresslatch auch weglassen und nur mit A8-A15 adressieren. Du hast hier allerdings Speicherlücken, so dass eventuell softwaretechnisch die Adressierung nicht so schön realisiert werden kann. Aber ich will dich hier nicht durcheinander bringen!)

Die folgenden Signale benötigt das Display:

avr_praxis_2.png


A0 (Register Select) und CS1\ (Chip Select) erhältst du über Adressbits (CS1\ in Kombination mit RD\ und WR\).

Meine Meinung: Wenn du keine weitere Peripherie am ExternalSRAMInterface angeschlossen hast, würde ich das Display manuell ansteuern. Du sparst dir das Adresslatch und Portpins, wahrscheinlich wird auch das Layout einfacher. DB0-DB7 an einen Port des Mikrocontrollers und die Signale RD\, WR\, CS1\, A0 (und ggf. RESET\) an freie PortPins anschließen. Interessant wäre bei dem Display auch das serielle Interface, du könntest hier eventuell das SPI (Serial Peripheral Interface) des AVR verwenden.

Ich hoffe, ich konnte dir ein bisschen weiterhelfen.

Gruß
Dirk
 
Ah,

ja wie gesagt arbeite schon viel mit den Atmegas auch Beruflich, nur mit diesem XMem interface bin ich nicht so klar gekommen gewesen,

Hat mir schon mal viel geholfen ja super :) danke dafür schon mal,

das SPI Interface ist mir an der Stelle unpassend, Paralell habe ich es aber schon am Laufen, dachte mir nur dass ich eben Zeitlich was rausholen könnte wenn es über das Bus Interface laufen würde. (weil ich so erst /cs /rd /wr /ale setzen muss und noch die Daten anlegen.)

im Bussmode wäre dies ja 1 Zyklus. Das war bei mir der Hintergedanke.

Aber hat mir schon mal weiter geholfen deine Erklärung :)

& ja leider wird der Mega128 imer im 103er Mode ausgeliefert, -> war schon paar mal darüber gestolpert *g*
 
ATmega128 mit externem SRAM

Hallo,

auch ich befasse mich gerade mit dem Anschluß eines SRAM (128k x 8) am ATmega128.

Die Hardware ist fast soweit klar bis auf eine Sache:
Kann ich das /CS vom RAM dauerhaft auf Low legen (keine weitere Komponente am Bus)? Oder muß ich das Signal mit irgendeinem speziellen Controllerpin schalten? Oder mit einem UND-Gatter aus /WR und /RD erzeugen?

So, nun zur Software. Hier gibt es auch diverse Unklarheiten:

* mit dem SRE-Bit im Register MCUCR sage ich dem Controller, daß ein externes RAM dran hängt. Soweit noch kar.

* Nun gibt es ja aber auch die Möglichkeit Wait-states anzugeben. Hier würde ich am Anfang mal 2 Wait-states angeben und später mal mit dem Oszi schauen, wie weit man runter gehen kann.

* mit den Bits XMM2...XMM0 im Register XMCRB wähle ich aus, wie viele Adreßleitungen in benötige (ich brauche alle, daher alle Bits auf Null setzen). Soweit auch noch klar.

* Was ist den das mit dem Bus-keeper (Bit XMBK im Register XMCRB)?

* Das mit den Bits SRL2...SRL0 im Register XMCRB ist mir auch nicht ganz klar.

Und wie spreche ich das externe SRAM mittels C-Code mit dem GNU-Compiler an (ich möchte mehrere lange Strings dort ablegen z.B. "unsigned char ucLangerString[8000]" )?

Was muß ich im Makefile angeben, daß ich ein externes RAM habe?

Vielleicht hat jemand zufällig ein kleines Testprogramm vom Ansprechen eines externen RAM´s.

Gruß
Martin
 
Hi Martin,

ich probier mal, dir weiter zu helfen :) ...

Kann ich das /CS vom RAM dauerhaft auf Low legen (keine weitere Komponente am Bus)? Oder muß ich das Signal mit irgendeinem speziellen Controllerpin schalten? Oder mit einem UND-Gatter aus /WR und /RD erzeugen?
Wenn es dir auf Geschwindigkeit ankommt würde ich es auf LOW legen (RAM dauernd
aktiv). Manche RAMs werden dann aber warm - also evtl nen kleinen Kühlkörper
spendieren :D. Es bringt dir aber im Timing einige Nanosekunden. Laut Datenblatt
sind das dann bei einem 628512-55 (512kx8) ca. 0,3W Verbrauch! aber 10ns gespart ;)

* Nun gibt es ja aber auch die Möglichkeit Wait-states anzugeben. Hier würde ich am Anfang mal 2 Wait-states angeben und später mal mit dem Oszi schauen, wie weit man runter gehen kann.
Sieh dir die Datenblätter vom ATmega und vom benutzten RAM an, wie die Timings
aussehen. Du kannst mit den Bits Waitstates in der aktiven Phase des RAMs und
Waitstates nach der aktiven Phase einlegen. Sieh dir das Datenblatt vom ATmega
an. Beim Mega128 ab Seite 29.

* Was ist den das mit dem Bus-keeper (Bit XMBK im Register XMCRB)?
Er gewährleistet immer einen definierten Logik-Pegel. Die Leitungen für XMEM gehen
nicht in den Tristate-Mode. Braucht dafür aber etwas mehr Strom :D

* Das mit den Bits SRL2...SRL0 im Register XMCRB ist mir auch nicht ganz klar.
Du kannst im Mega128-Mode zwei verschiedene Waitstate-Konfigs machen. Die
SRL-Bits geben die Trennstelle zwischen den beiden Adressbereichen an (Seite 32)

Und wie spreche ich das externe SRAM mittels C-Code mit dem GNU-Compiler an (ich möchte mehrere lange Strings dort ablegen z.B. "unsigned char ucLangerString[8000]" )?
So wie ich es verstanden habe, wird es genau so wie das interne RAM benutzt. Du
brauchst also nichts zu ändern. Außer bei der Initialisierung am Anfang deines Codes
die entsprechenden Register so zu setzen wie du es brauchst (Waitstates, SRL, ...)
Und natürlich evtl deinen Stack an das Ende deines RAMs verschieben. Durch die
Waitstates könnten Stackzugriffe dann allerdings länger dauern als mit internem RAM.
Ich weiß aber nicht, wie der C-Compiler darauf reagiert, wenn man den Stack auf
dem internen RAM läßt und ihm darüber im höheren RAM-Bereich noch Variablen
unterschiebt. Ich weiß nicht, ob C den Stack an oberster Stelle im RAM erwartet.

Ich hoffe mal, ich hab jetzt keinen vollkommenen Blödsinn geschrieben :D
Ich habs selber noch nicht ausprobiert. Aber nach den Datenblättern und dem was ich
da rausinterpretiert habe müßte es so laufen ;) Wenn nicht, dann korrigiert mich :rolleyes:

Gruß
Dino
 
Hallo Dino,

bezüglich dem CS auf GND legen:
Mir ging es eher darum, einen Pin am Controller für andere Funktionen frei zu haben. So wie es aussieht, muß ich vermutlich einen Portexpander machen, weil es zu wenige Pins für meine Anwendung sind.

Das SRAM für das STK501-Starterkit habe ich heute bekommen und drauf gelötet. Ich habe auch in der Zwischenzeit ein Quellcode für das Testen des SRAM im Netz gefunden, aber so richtig funktionieren tut es nicht:
Bei Bank 0 meint das Programm, daß es OK sei, bei Bank 1 immer nicht OK. Und das, auch wenn ich A16 mal testhalber dauerhaft auf GND oder 5V lege.

Ich werde mal übers Wochenende probieren, das Ding zum Laufen zu bekommen.

Sehe ich eigentlich den Inhalt des externen SRAM im AVR-Studio, wenn ich im Makefile einen entsprechenden Eintrag mache? Das wäre ne riesige Hilfe! Wie muß dieser Eintrag dann aussehen?
 
Hallo Martin,

Sehe ich eigentlich den Inhalt des externen SRAM im AVR-Studio, wenn ich im Makefile einen entsprechenden Eintrag mache? Das wäre ne riesige Hilfe! Wie muß dieser Eintrag dann aussehen?

Da muß dir wohl ein anderer weiterhelfen, ich hab noch nix mit externem
SRAM beim Atmel gemacht :eek:

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)