www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik externes RAM am ATMEGA64


Autor: Philipp Putzer (putzer_philipp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich befasse mich gerade damit, ein externes RAM (64kByte) an einem Atmel 
Atmega64 anzubinden. Dazu hätte ich ein paar Fragen und ich hoffe ihr 
könnt mir ein wenig weiterhelfen!

Also:

1.)
Um den Ram anzubinden brauche ich ja ein Adresslatch. Im Datenblatt des 
64'ers steht, man soll für Taktrequenzen größer als 8MHz eines vom Typ 
74AHCxxx nehmen. (Seite 28 unten). Nur gibs so eines leider nicht bei 
Reichelt zu kaufen, dort gibts nur das 74HCTxxx. Weis jemand, ob ich 
auch das verwenden kann? (Taktfrequenz 16MHz)

2.)
Was für einen RAM könnt ihr mir empfehlen zu verwenden? Ich dachte da an 
einen HY62CT08081E, nur gibt es den (wieder) nicht bei reichelt. Da gibs 
zwar den: 62256-70 M (Statischer RAM, 32x8, 70ns) Geht der auch?

3.)
Wenn ich das Latch 74HCT573 und den RAM von reichelt verwende, passt da 
bei 16MHz ein Wartetakt, oder müssen es mehr sein?

4.)
Wenn ich den RAM nun in meinem Programm verwenden möchte, genügt es, 
dass ich im Makefile das einstelle und mein GCC-Compiler verwendet den 
dann als wäre er intern?
So, dass ich einfach meine Variablen anlege, und diese dann teilweise, 
oder direkt in das externe ram ausgelagert werden? Das wäre halt super!

5.)
Vielen Dank dass ich lästig sein durfte! Und schöne Grüße

Autor: Frank Jonischkies (frajo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende an einem Mega162 den SN74HC573AN als latch und den 32K RAM 
von Reichelt. Geliefert wurde ein U62256ADK von ZMD. Datenblatt ist bei 
ZMD vorhanden. Ein Wartetakt reicht. In den oberen 32K liegt ein LCD mit 
der Ansteuerung nach Peter Fleury mit einem 74HC00. Der Takt ist 16MHz. 
Im Makefile wird der Speicher zugeordnet. Mehrere Varianten sind 
möglich. Bitte in der Beschreibung der avr-libc nachsehen. Bei mir:
EXTMEMOPTS = -Wl,-Tdata=0x800500,--defsym=__heap_end=0x807fff
Im Programm eine frühe Aktivierung des Speicherlayouts vornehmen. Etwa 
so:
 /*
 *  Using this definition, this function will be called by before main()
 */

void init_memory_mapped (void) __attribute__ ((naked)) __attribute__ ((section (".init1")));


/*
 * Setup the External Memory Interface early during device initialization
 */

void init_memory_mapped(void)
{    
#if defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) \

 || defined(__AVR_ATmega64__)  || defined(__AVR_ATmega128__) || defined(__AVR_ATmega103__) 

    /* enable external memory mapped interface with one wait state */

    MCUCR = _BV(SRE) | _BV(SRW);

#elif defined(__AVR_ATmega161__) || defined(__AVR_ATmega162__) || defined(__AVR_ATmega8515__)

    /* enable external memory mapped interface with one wait state for the entire external address space*/

    MCUCR = _BV(SRE) | _BV(SRW10);

#else

    #error "external memory mapped interface not available for this device"

#endif
}

Gruß
Frank.

Autor: Philipp Putzer (putzer_philipp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super!!! Verdammt schnell!

Dann werde ich das wegen dem Makefile in der Beschreibung der avr-libc 
nachschauen, und den Rest so machen wie Du's beschrieben hast!


Nochmal vielen Dank und schöne Grüße

Autor: Frank Jonischkies (frajo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der FAQ der avr-libc 'How to use external RAM?' lesen und dann dort 
dem Link 'discussion' zu 'Using malloc()' folgen. In meiner EXTMEMOPTS 
wird der interne RAM für den Stack verwendet. Variablen und Heap sind im 
externen RAM. Vom externen RAM ist der Bereich welcher vom internen RAM 
belegt wird, nicht nutzbar. In irgendeinem Atmel Dokument ist 
beschrieben, wie man auch 64K externen RAM und den internen RAM komplett 
nutzen kann. War mir aber zu aufwendig.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.