Forum: Mikrocontroller und Digitale Elektronik 64k SRAM


von Daniel Blum (Gast)


Lesenswert?

Hallo!
Ich möchte gerne an meinem 80C51 eínen externen 64kByte SRAM Speicher
anschliesen, nur möchte ich auch wiederrum meine internen 4kByte
ebenfalls nutzen.
Nun stelle ich mir die Frage, wie bekomme ich das Sauber
[Hardware/Softwaremäßig] hin, dass wenn ich eigentlich die unteren
4kByte anspreche, er nicht das externe Ram anspricht?
Oder den umgekehrten Fall?
Ich muss ja meine EA [External Access] vorher richtig definieren!
Danke für Eure Mithilfen !!

von SIGINT (Gast)


Lesenswert?

Hallo Daniel,
  ich kenn mich mit MCS-51 Controllern mit internem XRAM nicht wirklich
aus, aber ich vermute, daß es ähnlich funktioniert wie mit dem
Programmspeicher: Wenn ein Bit gesetzt ist, dann wird der interne RAM
verwendet, ansonsten das externe RAM. Für den Programmspeicher gibts ja
extra einen Gehäuseanschluss... beim RAM wird das wahrscheinlich nur ein
Bit in einem SFR sein. Extern kannst du den 8051 also so beschalten, als
hätte der keinen internen RAM. Ich bin mir, wie gesagt, nicht sicher....
aber das ist die wahrscheinlichste Möglichkeit.

Gruss,
  SIGINT

von Daniel Blum (Gast)


Lesenswert?

Hallo,
irgendwo habe ich gelesen, dass es so eine Umsetzung zwischen den
interen und externen Ram gibt.
Es muss doch möglich sein, dass man den internen 4K und den externen
64k Adressraum ansprechen kann,oder?
Vielleicht hat jemand anders noch ne Lösung...

von Benedikt (Gast)


Lesenswert?

a) Ein 8051 hat nur 128 Bytes RAM, also sag erstmal was für einen uC du
wirklich hast...
b) schau ins Datenblatt von diesem.

von Daniel Blum (Gast)


Lesenswert?

80c552 µC,
ok und ich gebe Dir recht die haben nur die lower 128kByte

als vergleich können wir auch einen atmega128 nehmen,
der hat 256kbyte bzw. 4kbyte Sram:

Mir kommt es auch mehr auf die Adressierung an,
wäre nett für eine Hilfestellung..

Danke schon mal

von Carsten (Gast)


Lesenswert?

Die Unterscheidung wird im Befehl gemacht.
für externes RAM nimmt man movx (und indirekte Adressierung), für
internes RAM nur mov.

von Michael F. (fury)


Lesenswert?

Der 80c552 von Philips hat keinen XRAM (externer RAM für die CPU aber
gleiches IC), da kann man dann vermutlich auch nichts ein/ausschalten.

Ich weiß das der Atmel AT89C51RD2 1792KByte XRAM hat, zum umschalten
gibt es ein Register: AUXR - Auxilary Register
Darin gibt es eine Bit (EXTRAM) um das XRAM ein/Auszuschalten und man
kann man auch die eingeschaltete Größe ändern (256/512/768/1024/...)

dazu kommt dann noch der interne RAM (256 BYte), der mit einem anderen
Befehl benutzt wird (MOVX und @DPTR)

Es hilft also nur in das Datenblatt des µP zu schauen.

Gruß
Michael

von Daniel Blum (Gast)


Lesenswert?

Ok dann lass uns das ganze Mal auf einen ATmega 128 beziehen!
Da gibt es 4kByte internes RAM,
jezt möchte ich gerne ein externes RAM mit 64kByte anschliessen.
Und den gesamten Adressraum von 64K extern und 4k intern nutzen.
Gibt es dafür ne konkrete Lösung ?

von Jadeclaw D. (jadeclaw)


Lesenswert?

Nein. Schau mal im Datenblatt auf Seite 27.
Die unteren 4351 Bytes (4kB + I/O-Space) werden Grundsätzlich intern
adressiert. Darüber kommen dann noch ca. 60kB extern. Brauchst du mehr,
dann bleiben Bankswitching(Speicherumschaltung per Portpin), serieller
Speicher (z. B. Atmel Dataflash) oder reine Portanbindung über
Adressregister (74HCT573 gehen dafür gut).

Gruss
Jadeclaw.

von Ralf A. (warpnine)


Lesenswert?

Ich mische mich jetzt einfach mal dazu:

Ohne mich mit AVRs auszukennen, verrät mir ein Blick ins Datenblatt auf
Seite 19, dass man bei Verwendung vom externen RAM diese RAM nur ab der
Adresse benutzen kann, die größer als die letzte Adresse des internen
RAMs ist. Das heisst, selbst wenn du 64kB externes RAM anschliest,
kannst du davon nur 60kB benutzen.

So, und jetzt bitte zurück zu deinem eigentlichen Controller, dem
80552. Was genau willst du machen bzw. haben? Ich hab es noch nicht
ganz begriffen. Der 80C552 hat kein internes Flash, also musst du ein
externes EPROM bzw. Flash verwenden. Genauso hat er offenbar kein
internes XRAM. Woher kommen also deine oben erwähnten 4kB RAM???

Ralf

von SIGINT (Gast)


Lesenswert?

@Michael: Du hast dich in den Befehlen geirrt... Carsten hat Recht.

@Daniel: Der 8051 hat intern nur 128Byte Speicher der wie Register
verwendet wird... der 8052 hat nochmal 128Byte, die "unter" den SFRs
liegen und auf die nur indirekt zugegriffen werden kann. Jeder andere
RAM ist sog. XRAM, der für den Prozessor wie normaler, externer,
Speicher aussieht und im selben Adressraum liegt. Deshaln musst du
diesen XRAM ausschalten um auf das externe RAM zuzugreifen. Michael hat
ja schon gesagt, wie sowas gehen könnte.

Schau dir mal ein paar Tutorials zum Thema 8051 (auch MCS-51 genannt)
an... die Grundlagen sind bei jedem Mikrocontroller eigentlich extrem
wichtig.

Gruß,
  SIGINT

von Daniel Blum (Gast)


Lesenswert?

Erstmal danke für Eure Beiträge..
Wie erkennt der µC denn, dass ich nicht die 4kByte anspreche?
Im Prinzip nutze ich 2 Port´s a 8 Bit, damit mein Adressraum 64k groß
ist. Da ich die Ports bitweise programmieren muss, verstehe ich leider
nicht den Zusammenhang?

Könnte mir jemand dieses erklären?

von SIGINT (Gast)


Lesenswert?

@Daniel:  Eins vorweg: Es ist total unsinnig den Atmega mit dem MCS-51
zu vergleichen, da diese Prozessoren ganz anders aufgebaut sind.

Dann zum 80C552: Wie ich eben auch gesehen habe hat der 80C552 KEINEN
internen Programmspeicher und KEINEN internen XRAM. Das bedeutet,daß du
sowieso Programmspeicher und XRAM extern anschließen musst und keine
Konflikte mit einem internen Speicher befürchten musst. Die 128Byte(!),
oder 256Byte beim 8052, werden (wie oben schon erwähnt) anders
angesprochen als XRAM und Programmspeicher.

[zitat]
Wie erkennt der µC denn, dass ich nicht die 4kByte anspreche?
Im Prinzip nutze ich 2 Port´s a 8 Bit, damit mein Adressraum 64k groß
ist. Da ich die Ports bitweise programmieren muss, verstehe ich leider
nicht den Zusammenhang?
[/zitat]

Dir scheinen wichtige Grundlagen zu fehlen. Wenn dein Controller
externen Speicher unterstüzt, dann musst du nichts "programmieren"...
der Controller legt dann seinen Adress- und Datenbus auf die Portpins
und greift dann wie ein Mikroprozessor auf den RAM,Programmspeicher und
IO-Komponenten zu. Wie die genaue Realisierung des externen Bus aussieht
hängt von verwendeten Mikrocontroller ab. Beim MCS-51 wird mit den
Befehlen movx und movc auf den externen Bus zugegriffen... wenn der
MCS-51 aber eingebauten XRAM besitzt, dann muss man dem Controller
sagen, ob man auf den internen XRAM oder dem externen XRAM zugreifen
möchte... wie das geht wurde oben ja schon gesagt.
Wie man beim ATmega erreicht, daß der Bus nach aussen verlegt wird kann
ich nicht sagen. Wahrscheinlich gibt es irgendwelche SFRs um das
einzustellen.... das hängt aber alles vom verwendeten Controller ab:
Deshalb lies dir die Datenblätter durch und eigne dir die Grundlagen
an.

von Ralf A. (warpnine)


Lesenswert?

Beim AVR ist es NICHT möglich, externen Programmspeicher
anzuschließen. Das liegt daran, dass der AVR 16-Bit Befehle verwendet.

Einige AVRs unterstützen externen Datenspeicher per Hardware, wie z.B.
der ATmega8515. Andere AVRs können das nicht per Hardware, dann muss
man eben den Zugriff (also das Bedienen der Ports) per Software
nachbilden.

Ralf

von Daniel Blum (Gast)


Lesenswert?

@Sigint
Danke für Deinen Beitrag!
Wie Du schon gemerkt hast, hakt es an den Grundlagen!
Falls ich noch ne Frage habe, melde ich mich noch mal
Mfg Daniel

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.