mikrocontroller.net

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


Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>IMHO Handbuch

IMHO oder Handbuch?

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Stefan Seegel (phunky)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, so:

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

  a = *ptr;

Autor: Hagen Re (hagen)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ahhh,
die anweisung spielt die wichtige rolle ??
habe ich doch richtig verstanden ?

*ptr = 100;   lesen

100 = *ptr;     schreiben

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: johnny.m (Gast)
Datum:

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

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh man,
ich habe es verstanden.

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

Autor: Stefan Seegel (phunky)
Datum:

Bewertung
0 lesenswert
nicht 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

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.