Forum: Mikrocontroller und Digitale Elektronik Externes RAM am atmega128


von M. Н. (Gast)


Lesenswert?

Hallo Leute. Will mit einem atmega128 daten verarbeiten und im externem 
RAM abspeichern, bis ich sie abhole. Hab da jetzt ne Frage:

Kann mir jemand sagen wie ich das machen soll??
(1. Welcher Baustein
 2. Anschlussbelegung
 3. Ansprechen mit Assembler)
Hab schon viel gegoogelt und co. , hab aber nixx verwertbares gefunden. 
Bräuchte in etwa 4kB

Danke im Voraus

Gruß M.H.

von spess53 (Gast)


Lesenswert?

Hi

Steht doch alles im Datenblatt -> External Memory Interface

MfG Spess

von M. Н. (Gast)


Lesenswert?

ok schau's mir mal an.

Danke.


Falls ich noch fragen hab poste ich sie.

von Henrik (Gast)


Lesenswert?

Aloa,

für externes Ram brauchst du ne Menge Pins. In der Regel mehr als 10 
Addressleitungen, mindesten 4 Datenleitungen. Das betrifft SRAM.
Ein SDRAM kannst du wahrscheinlich ganz vergessen, da du die 
entsprechende Clock wohl nicht mit dem Mega128 hinbekommst.

Reicht nich auch ein EEPROM über SPI? Da sind 4kB nicht unüblich und 
Schreibzyklen hat so ein Teil idR mindestens 1Mio. Und ab dann wird 
nicht mehr garantiert, dass die Daten mindetsne 10Jahre halten. Das Teil 
ist dann aber lange noch nicht kaputt.

von M. Н. (Gast)


Lesenswert?

Hab das ganze leider nicht so verstanden.

da wird die ganze zeit was von Atmega103-kompatibilität geredet.

von M. Н. (Gast)


Lesenswert?

@Henrik

NHein ein EEProm würde nicht funktionieren, weil ich viele Daten pro 
minute habe und ein ram weniger zeit als ein eeprom benötigt.

von Henrik (Gast)


Lesenswert?

Du brauchst halt insgesamt 19 Leitungen plus ein extra IC (Latch). Ob 
sich das lohnt wg. zusätzlichen 4kB?

Da ist doch schon 4kB internes SRAM. Das kannst du doch nehmen?
Und wenn du das ganze in 5 Minuten tatsächlich noch nicht begriffen 
hast, lies es einfach nochmal. Niemand begreift das alles in 5 Minuten.

von M. Н. (Gast)


Lesenswert?

ja die 4kB intern sind schon in gebrauch und das mit den 5min. sttimmt 
auch nicht ganz. Versuche das ja schon länger

von Henrik (Gast)


Lesenswert?

Fehlen nur noch die Fragen, die du posten wolltest... ;) Die ATMega103 
Kompatibilität brauchst du wohl nicht, da du ja nur den Mega128 nutzt.
Ansonsten Seite 4 lesen.

von Dennis (Gast)


Lesenswert?

Muss es denn UNBEDINGT ein AVR sein? Da lohnt sich schon fast der 
Umstieg auf was vernünftigeres, wie etwa stm32...

von Frank K. (fchk)


Lesenswert?

M. H. schrieb:
> Hallo Leute. Will mit einem atmega128 daten verarbeiten und im externem
> RAM abspeichern, bis ich sie abhole. Hab da jetzt ne Frage:
>
> Kann mir jemand sagen wie ich das machen soll??
> (1. Welcher Baustein
>  2. Anschlussbelegung
>  3. Ansprechen mit Assembler)
> Hab schon viel gegoogelt und co. , hab aber nixx verwertbares gefunden.
> Bräuchte in etwa 4kB

1. Irgendein SRAM, gibts in 8k oder 32k, nennt sich 6264 (8k) oder 62256 
(32k)

2. Du brauchst die Ports A (Daten und untere 8 Bit der Adressen), Port C 
(die oberen Adreßleitungen) und Port G (ALE, RD(OE), WR) und ein Latch, 
zB 74HC574. Rest steht im Datenblatt des AVR.

3. Ganz einfache Adreßzugriffe wie aufs interne SRAM auch.

fchk

von avr (Gast)


Lesenswert?

Wenn es über SPI reicht schau mal bei Microchip.

SRAM im 8-Pin Gehäuse mit SPI-Interface bis 20 MHz und 256 Kbit.

z.B.:http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en539045

Zugriff halt nicht direkt, dafür Pinsparend.

avr

von M. Н. (Gast)


Lesenswert?

Eine Frage zum Latch. Das ist doch ein Baustein, der die Pins von port a 
auf die datenleitungen bzw. auf die Adressleitungen legt. sozusagen ein 
umschalter, oder?

P.S.: Apropos gescheiter controller. Hab auch schon mit dem t89c51cc01 
gearbeitet falls euch das was sagt. Dachte nur der ist vielleicht ein 
wenig zu, nun ja, übertrieben für'n paar messungen.

von M. Н. (Gast)


Lesenswert?

Hab mir mal den 6264angeschaut.

Wofür sind die Anschlüsse CE1 und CE2??

und dass mit dem Column und row decoder schnall ich auch nicht. Ich 
dachte ich kann einen 16 bit wert mit der speicheradresse übergeben.

von Detlev T. (detlevt)


Lesenswert?

Hallo M.H.

du hast nicht geschrieben, warum es unbedingt ein MEGA128 sein muss. Es 
gibt seit einer Weile ja auch einen MEGA1284p. Der hat 16kB internes 
SRAM und genauso viel Flash und EEPROM wie der 128. Vielleicht passt der 
ja.

Gruß, DetlevT

von M. Н. (Gast)


Lesenswert?

Ja den könnte ich nehmen.

Danke. Aber nehmen wir mal an ich will einen externen verwenden. Wie 
mache ich es dann mit dem 6264??

Warum ist das ganze in zeilen und Spalten eingeteilt??

noch dazu so ne bescheuerte anzahl.

Frank K. schrieb:
> Du brauchst die Ports A (Daten und untere 8 Bit der Adressen), Port C
> (die oberen Adreßleitungen) und Port G (ALE, RD(OE), WR) und ein Latch,
> zB 74HC574. Rest steht im Datenblatt des AVR.

Untere 8 bit und obere 8 bit gibts ja auch  nicht, da ich nur 13 
adressleitungen habe.

von Alexander V. (avogra)


Lesenswert?

Statt so nem dicken AtMega würd ich eher nen Xmega nehmen, wenn du bei 
AVR bleiben willst. die gibts mit bis zu 16KB Ram und sind sogar 
billiger. Das meiste funktioniert wie bei den Megas, nur dass du ne 
ganze Latte extra-features bekommst. Zumindest hab ich das so 
aufgefasst. bin selber gerade an nem Projekt, wo ich zum ersten mal 
einen hernehmen werd.

Aber schreib doch mal, was genau du eigentlich machen möchtest. Also das 
gesamte Projekt. Oft gibts noch ganz andere Möglichkeiten, an die man 
selbst erst einmal gar nicht denkt :)

Gruß, Alex

von M. Н. (Gast)


Lesenswert?

Ich nehm einfach nen t89c51cc01. Bei dem weiss ich wie das geht.


Danke für die Hilfe.

Gruß M.H.

von spess53 (Gast)


Lesenswert?

Hi

> Das ist doch ein Baustein, der die Pins von port a
>auf die datenleitungen bzw. auf die Adressleitungen legt.

Nein, das ist ein Speicher für Adressleitungen.

>Warum ist das ganze in zeilen und Spalten eingeteilt??

Was für Zeilen und Spalten? Für dich sind nur die 13 Adressleitungen 
interessant.

>Wofür sind die Anschlüsse CE1 und CE2??

CE-> Chip Enable. Beide CEs müssen auf L liegen damit der Speicher 
ansprechbar ist.

MfG Spess

von AVRuser (Gast)


Lesenswert?

Hallo,

> Eine Frage zum Latch. Das ist doch ein Baustein, der die Pins von port a
> auf die datenleitungen bzw. auf die Adressleitungen legt. sozusagen ein
> umschalter, oder?

Kein Umschalter; ein Latch ist ein "Speicher", der bei inaktivem 
Latch-Signal die zuvor anliegenden Daten speichert. Hier werden mit dem 
ALE-Signal des AVR ie unteren 8Bit der Adresse gespeichert; die gleichen 
Leitungen des AVR dienen auch als Datenleitungen.

> Hab mir mal den 6264angeschaut.
> Wofür sind die Anschlüsse CE1 und CE2??
> und dass mit dem Column und row decoder schnall ich auch nicht. Ich
> dachte ich kann einen 16 bit wert mit der speicheradresse übergeben.

/CE1 und CE2 sind Chipselect-Eingänge. Diese müssen Low und High sein, 
dann ist das RAM selektiert. Hier sollte /CS1 an GND und CS2 an eine 
Adress-Leitung (A13). Ansonsten die Datenleitungen D0-D7 an die 
AVR-Datenleitungen und die Adressleitungen A0-A7 ans Latch und A8-A12 
sowie CS2 an die entsprechenden AVR-Adresspins A8-A13. Dann ist der 
Speicher im AVR-Adressraum von 0x8000 bis 0x9FFF anzusprechen.

Der 6264 hat 64kBit; das sind 8kByte Grösse. Da der Speicher intern aus 
Bits aufgebaut und in einer Matrix angeordnet ist, kommt der interne 
Aufbau zustande. Für die Benutzung des RAMs ist das aber egal. Hier 
zählen die Adress- und Datenleitungen sowie CS, /RD und /WR.

von M. Н. (Gast)


Lesenswert?

Kann mir dann mal jemand nen beispielcode und nen schaltplan schicken, 
weil mich das grad alles total verwirrt

von spess53 (Gast)


Lesenswert?

Hi

>Kann mir dann mal jemand nen beispielcode...

Wenn du das Datenblatt gelesen hättest, wäre dir der Beispielcode (sogar 
in Assembler) aufgefallen.

MfG Spess

von Frank K. (fchk)


Lesenswert?

M. H. schrieb:
> Ja den könnte ich nehmen.
>
> Danke. Aber nehmen wir mal an ich will einen externen verwenden. Wie
> mache ich es dann mit dem 6264??
>
> Warum ist das ganze in zeilen und Spalten eingeteilt??

? Diese Frage verstehe ich nicht.

> Frank K. schrieb:
>> Du brauchst die Ports A (Daten und untere 8 Bit der Adressen), Port C
>> (die oberen Adreßleitungen) und Port G (ALE, RD(OE), WR) und ein Latch,
>> zB 74HC574. Rest steht im Datenblatt des AVR.
>
> Untere 8 bit und obere 8 bit gibts ja auch  nicht, da ich nur 13
> adressleitungen habe.

Der AVR hat 16 Adreßbits für 64k, Du brauchst aber nur die unteren 13. 
Den Rest läßt Du offen.

Also:
Port A:
AVR  RAM  HC574
PA0-->D0---D0
...
PA7-->D7---D7

und

      A0---Q0
      ...
      A7---Q7

Port C:
PC0-->A8
PC1-->A9
PC2-->A10
PC3-->A11
PC4-->A13

Port G
PG0-->!WR
PG1-->!OE
PG2--------CP (der Takteingang vom HC574)
           !OE--GND (vom HC574)
      !CE1------GND (vom RAM)
      CE2-------VCC (vom RAM)

Soweit abgepinnt?

Steht aber eigentlich auch alles im Hersteller-Datenblatt des Mega128. 
Abschnitt "External Memory Interface". Den Abschnitt musst Du sowieso 
lesen, weil Du das External Memory Interface vor Gebrauch noch 
anschalten und konfigurieren musst.

fchk

von M. Н. (Gast)


Lesenswert?

OK. Jetzt hab ichs verstanden.


Danke für die Hilfe/Geduld.


Gruß M.H.

Und falls ihr Sommerferien habt, dann schöne Ferien.

von M. Н. (Gast)


Lesenswert?

Ahh sorry noch ne frage. Das latch hat doch die anschlüsse CLK und 
output control. nehm mal an, der clk übernimmt die daten. und output 
control gibt sie am ausgang aus

Gruß M.H.

von avr (Gast)


Lesenswert?


von Frank K. (fchk)


Lesenswert?

M. H. schrieb:
> Ahh sorry noch ne frage. Das latch hat doch die anschlüsse CLK und
> output control. nehm mal an, der clk übernimmt die daten. und output
> control gibt sie am ausgang aus

Genau. Ausgeben soll er die Daten immer - das RAM braucht ja alle 
Adressleitungen, und der Clock kommt vom ALE-Signal des Prozessors, das 
anzeigt, daß auf Port A jetzt eine Adresse aufliegt, die gespeichert 
werden soll. (Pinsparmaßnahme)

fchk

von M. Н. (Gast)


Lesenswert?

1.woher wisst ihr eigentlich, dass das RAM im bereich 0x8000 und 0x9FFF 
ist??

von Spezi (Gast)


Lesenswert?

Hallo,

hast du den Link mit dem Schaltplan nicht angesehen? Dort ist alles 
schön zu sehen. (Nur das RAM ist grösser: 32kByte)

Das von dir genannte Latch ist falsch; du brauchst ein 74xx573 und 
keinen 574er. Siehe oben.

Der Speicher-Adressbereich des AVR geht von 0x0000 bis 0xFFFF (16bit). 
Der untere Bereich ist vom internen RAM belegt; der Rest ist frei.
Wo nun das externe RAM liegt, bestimmt der CS2-Anschluss des RAM. Ist er 
an Adressleitung A15 (nicht A12, wie ich fälschlich sagte) 
angeschlossen, so ist das RAM im genannten Bereich (0x8000 bis 0x9FFF) 
zu finden (es wird noch an einigen anderen Stellen eingeblendet, aber 
das ist hier egal).
Im Adressbereich ab 0x8000 ist Adressleitung A15 auf High; damit ist das 
RAM über CS2 selektiert und kann angesprochen werden.

von M. Н. (Gast)


Lesenswert?

ok aber dass mit der adresse check ich nicht. der chip hat gar keinen 
a15 pin. und cs2 liegt weder an a12 noch an a15

von M. Н. (Gast)


Lesenswert?

M. H. schrieb:
> Frank K. schrieb:
>> Du brauchst die Ports A (Daten und untere 8 Bit der Adressen), Port C
>> (die oberen Adreßleitungen) und Port G (ALE, RD(OE), WR) und ein Latch,
>> zB 74HC574. Rest steht im Datenblatt des AVR.

hier ist ein latch mit 574 am ende.

ist das nicht egal welches ich nehme?

von M. Н. (Gast)


Lesenswert?

ohh hab das ganze verstanden. also verbinde ich einfach den ausgang am 
avr der zu a15 führen würde mit cs2, oder?? a14 bleibt frei.

von Spezi (Gast)


Lesenswert?

Also noch mal ...

Der AVR hat 16 Adress-Leitungen (8 über das Latch und 8 über PortC). Das 
6264-RAM hat 13 Adress-Leitungen (A0-A12). Diese werden an die 
zugehörigen Pins vom Latch und PortC angeschlossen; der Rest am AVR 
bleibt frei. Bis auf den A15-Pin (PC7), dieser kommt an CE2. Die 
Leitungen /RD und /WR werden auch an RAM und AVR angeschlossen. CE1 vom 
RAM kommt auf GND.
Dann ist der gennannte Adressbereich fürs RAM gültig.

Beim Aufbau der Schaltung die Abblock-Kondensatoren beim AVR, dem Latch 
und dem RAM nicht vergessen!

> hier ist ein latch mit 574 am ende. ist das nicht egal welches ich nehme?

Nein, ist es nicht. In allen mir bekannten Schaltungen findet man einen 
573-Chip. Und wenn man sich das Timing des ALE-Signals ansieht, wird 
auch klar, warum das so sein muss ...
Falls nicht: der 573 speichert, wenn LE auf Low ist; der 574 speichert 
auf steigender Flanke des CK-Signals.
Es gibt dazu (glaube ich) auch eine AN von ATMEL für das externe 
Interface. Dort sind alle Komponenten beschrieben. Auch im 
Mega128-Datenblatt ist ein Hinweis zum 74xx573-Chip und dessen 
Timing-Anforderungen.

> ohh hab das ganze verstanden. also verbinde ich einfach den ausgang am
> avr der zu a15 führen würde mit cs2, oder?? a14 bleibt frei.

Ja, so ist es. Habe ich gerade oben beschrieben ...

von M. Н. (Gast)


Lesenswert?

Ok danke, dass ihr's mir mit so viel Mühe beigebracht habt.


Gruß, M.H.

von Juergen H. (harms)


Lesenswert?

Ich bin gerade beim Blättern auf diese Diskussion gestossen: in den 
Daten zum AT90CAN128 steht die Warnung, dass die klassischen 74HC ICs 
den Anforderungen (Anstiegszeit, Verzögerung ...) an den Puffer zwischen 
Prozessor und Speicher nicht genügen, ATMEL sagt dass (zumindest beim 
AT90CAN) 74AHC Bausteine zu verwenden sind.

von Detlev T. (detlevt)


Lesenswert?

Ist jetzt vielleicht etwas spät, aber es gibt von Microchip auch SRAMs 
mit 8 bzw. 32kiB und SPI-Schnittstelle. Ist vielleicht für den einen 
oder anderen eine Alternative zum Pinfressenden SRAM mit 
Parallel-Schnittstelle.

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2698

von AVRuser (Gast)


Lesenswert?

Hallo,

@ Juergen Harms:

Das ist eine Frage der Taktfrequenz, mit der der Controller läuft. Wenn 
der maximal mögliche Takt (16MHz) verwendet wird, passt das Timing der 
"HC" Bausteine nicht mehr, da etwas zu langsam. Dann muss man die 
schnelleren "AHC" oder auch "AC" Bausteine werwenden; also für das Latch 
einen 74A(H)C573.

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.