Forum: Mikrocontroller und Digitale Elektronik ALE /RD /WR => atmega128


von tom (Gast)


Lesenswert?

hi ! ich möchte gerne beim atmega128 die oberen Signale, um einen
externes sram zu aktivieren.
allerdings bekomme ich keinen zugriff auf diese pins.
ich programmiere mit dem code v avr.

kann mir jemand helfen, damit mein compiler diese signale generiert??
danke schon mal

von Rahul (Gast)


Lesenswert?

>ich möchte gerne beim atmega128 die oberen Signale, um einen
>externes sram zu aktivieren.

Was möchtest du?

>code v avr.

Codevision?

Bildlich gesprochen: Versuch mal die Zähne auseinander zu kriegen!
In der Regel muß man, um das Interface für externen Speicher, dem
Compiler dort einen bestimmten Speicherbereich zuweisen.
Sowas ist IMHO im Handbuch beschrieben.

von tom (Gast)


Lesenswert?

oh....man welch ein deutsch.....!
sorry....!
also bitte noch einmal von vorne!

wie kann ich denn das ALE signal aktivieren ?
IMHO Handbuch habe ich noch nie gehört ?

von Wolfram (Gast)


Lesenswert?

>wie kann ich denn das ALE signal aktivieren?
Du greifst auf eine Adresse im Datenbereich zu für die sich das externe
Speicherinterface zuständig fühlt.

von Hagen R. (hagen)


Lesenswert?

Das ExtMEM Interface ist eine Hardware und kann demzufolge nicht durch
den Compiler autom. erzeugt werden.

Schau ins Datenblatt unter ExtMEM und du wirst einige Register finden
die du korrekt einstellen musst.

Dem Compiler selber musst du nun sagen das ein externer SRAM vorhanden
ist. Meistens wird das im Makefile oder Linkerscript eingestellt. Ich
kenne mich nur mit WinAVR-gcc aus.

Gruß Hagen

von Rahul (Gast)


Lesenswert?

>IMHO Handbuch

IMHO oder Handbuch?

(Beides mal bei google, wikipedia oder etwas anderem zum nachschlagen
eingeben).

von johnny.m (Gast)


Lesenswert?

Verwende einfach den Code Generation Wizard und sage dem Compiler, wie
viel externen Speicher Du verwenden willst. In der Library mem.h stehen
vier Funktionen zum Zugriff auf eben diesen Speicher (pokeb, pokew,
peekb und peekw).

von tom (Gast)


Lesenswert?

jou danke erstmal für eure beiträge..!
dann versuche ich mal mein glück...!

@johnny.m
wie kann ich die signale ale /rd /wr ansprechen?
bitadressierbar ist der PORTG ja nicht!

kannst du mir da noch weiterhelfen

von Hagen R. (hagen)


Lesenswert?

Nochmal, DU sprichst diese Signale immer nur indirekt an. Bei einem
Speicherzugriff auf eine Addresse im externen SRAM wird die MCU in
Hardware autom. und selbständig diese Pins ansprechen, vollkommen
transparent für dich und nichts manuell.

Gruß Hagen

von tom (Gast)


Lesenswert?

Ach jetzt klickert es...
Dann muss ich ja nur noch die Adressierung, auf dem Port A und Port C
vornehmen.
Wie erkennt denn das Daten Signal ob ich die Daten lesen oder schreiben
will? Dafür gibt es das RD und WR Signale..muss ich diese im Adressbus
mit integrieren ?
Danke schon mal für Eure Hilfen!

von Stefan S. (phunky)


Lesenswert?

>Dann muss ich ja nur noch die Adressierung, auf dem Port A und Port C
>vornehmen.

Nein, du musst überhaupt nichts "vornehmen", bis auf das Aktivieren
des externen Speichers. Wenn selbiger aktiviert ist greift du z.B. mit

unsigned char *ptr = 0x1015;
*ptr = 100;

auf den externen Speicher zu. Der AVR macht dabei folgendes SELBER:
- Adresse 0x1015 auf AD0-7 und A8-15 anlegen
- ALE setzten (dein externes Latch muss sich hier die Adresse
zwischenspeichern)
- ALE zurücksetzten
- Daten (100) auf AD0-7 anleden
- WR setzten
- WR zurücksetzten

Obigen Code sollte man aber besser so nicht verwenden, es ist besser
wenn sich der Compiler selbst um den Speicherzugriff kümmert.

Wenn du die Linkerparameter so einstellst dass statische Variablen im
externen Speicher liegen wird mit

unsigned char c;
c = 100;

automatisch der externe Speicher verwendet.
Falls du nur den Heap ins externe SRAM legst, wird der externe SRAM nur
für mit malloc alloziierten Speicher benutzt.

Bitte im Forum und vor allem in der AVR_LIBC-Doku suchen, da ist der
Speicheraufbau recht gut beschrieben.

Stefan

von tom (Gast)


Lesenswert?

Danke Stefan, sehr hilfreiche Info´s für mich !
So langsam  bekomme ich eine Übersicht von dem Thema.

Falls ich Daten aus einem SRAM lesen möchte,
wie gehe ich da vor ?
WR ist ja schreiben der Daten an eine Speicherstelle

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Na, so:

  unsigned char *ptr = 0x1015;
  unsigned char a;

  a = *ptr;

von Hagen R. (hagen)


Lesenswert?

und statt WR steuert die AVR nun das RD Signal entsprechend, die MCU
weis ja ob die schreibend oder lesend auf eine Speicherzelle zugreifen
möchtest.

Gruß Hagen

von tom (Gast)


Lesenswert?

ahhh,
die anweisung spielt die wichtige rolle ??
habe ich doch richtig verstanden ?

*ptr = 100;   lesen

100 = *ptr;     schreiben

von johnny.m (Gast)


Lesenswert?

> WR ist ja schreiben der Daten an eine Speicherstelle
WR ist ein SIGNAL, das Dein µC benutzt, um auf den Speicher
zuzugreifen. Du als Programmierer hast mit diesem Signal nichts zu tun!
Stefan schreibt in seinem Beispiel etwas in eine Variable. Es dürfte
dann ja wohl kein großes Problem darstellen, etwas aus einer Variable
zu lesen, oder?

Mit dem ersten Beispiel:
unsigned char *ptr = 0x1015;
unsigned char x;
*ptr = 100;   // Das ist ein Schreibzugriff...
x = *ptr;     // ...und das ein Lesezugriff...

von johnny.m (Gast)


Lesenswert?

> 100 = *ptr;     schreiben
Das ist natürlich völliger Unsinn. Du kannst der '100' doch keinen
Wert zuweisen!

von tom (Gast)


Lesenswert?

Oh man,
ich habe es verstanden.

@ all
Wirklich besten Dank für Eure Mithilfe !!!!

von Stefan S. (phunky)


Lesenswert?

Und den Latch-Baustein nicht vergessen. SRAM direkt an den AVR geht
nicht, oder gibt es SRAMs mit integriertem Address-latch ? Wäre mir
neu...

Stefan

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.