Externes RAM am atmega128

Gast #1798795
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.
Gast #1798806
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.
Gast #1798812
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.
#1798830
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
Gast #1798863
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.
Gast #1798893
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.
Gast #1798920
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.
#1798930
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
Gast #1798940
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
Gast #1798950
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.
#1798976
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
#1798990
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
Gast #1799009
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.
Gast #1799044
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 ...
Gast #1836332
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren