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.
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:
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