www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega128 - Adressbus ansteuern


Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich steh gerade wie der Ochs vorm Berg ;-)
Also ich möchte an einem ATMega128 ein externes RAM anschließen, aber
nun stellt sich mir die Frage, wie ich den internen Adressbus
ansteuere.
Das nächste Problem, das ganze eben nur mit BASCOM, da ich andere
Programmiersprachen nicht beherrsche.

Das RAM ist in einem Display eingebaut, welches dann die anzuzeigenden
Daten enthält. (D0-D7; A0-A15)

Ich würde mich über eine Lösung freuen, auch in anderen
Programmiersprachen, vielleicht lässt sich daraus ja etwas umschreiben.
Hardwareseitig ist das ganze ja über ein Latch zu schalten, da ja A0-A7
auch gleichzeitig D0-D7 sind, oder???

Grüße
Addy

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe an meinem Controller ein externes RAM angeschlossen. Die
Initialisierung in C sieht dabei wie folgt aus:

  //Initialization of the external RAM area
  XMCRA = 0x00;
  XMCRB = 0x00;
  MCUCR = 0x80;     //Aktivierung des ext. Businterfaces

(Initialisierung ohne Waitstates).

Die Schaltung ist auf vielen MP3-Projektseiten zu finden (z.B. Yampp
und auch auf meiner).

Viele Grüße,

Ralf

www.ralf-hochhausen.de

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

danke für deine Hilfe, auf deiner Site ist das sehr gut erklärt ;-)
Aber gibt es da eine Möglichkeit mit BASCOM direkt den Adressbus
anzusteuern, ich habe selbst noch nichts herrausgefunden.
Sonst müsste man dass ja per Software noch einprogrammieren, und per C
oder ASM hat man's dann schon drinn???
So langsam glaub ich echt, dass ich mal C lernen sollte ;-)

Danke schon mal für eure Hilfe
Grüße
Addy

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

leider kenne ich mich nicht mit Bascom aus. Aber sobald man den
externen Adressbus aktiviert hat, stellt sich ein Zugriff auf den
externen Speicher aus Sicht der Software wie einer auf den internen
Speicher dar. Das hat also nix mit C oder ASM zu tun. Ich gestalte
meinen Zugriff auf den externen Speicher im Moment über Zeiger. Es
sollte jedoch auch möglich sein direkt Variablen in diesem
Speicherbereich anzulegen. Damit habe ich allerdings noch keine
Erfahrung gemacht. Zeiger gibt es glaube ich in Bascom nicht, oder?

Viele Grüße,

Ralf

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

nein soweit mir bekannt ist, und ich es nicht übersehen haben sollte
gibt es dort so etwas wie Zeiger in C nicht.
Es geht nur darum Daten in das Display-RAM zu schieben, da brauche ich
keine direkten Variablen, da muss dann für jedes neue Bild, das RAM
einmal komplett aufgefrischt werden.
So wie es aussieht muss ich wohl das ganze Softwareseitig lösen, genung
Ports hat der Atmega128 ja, da brauch man dann auch bei ner
Softwarelösung kein Latch.
Bin aber über weitere Info's dankbar, bevor ich mich daran wage ;-)

Grüße
Addy

Autor: Axel Rühl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehme FastAVR. da siehts dann so aus:

$Device= mega128, Xram, 0, 64k
Dim a As Xram Byte

'z.b.
a = &h20

gruß
Axel

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm...

so geht das mit BASCOM auch, aber der Platz der Variablen werden vom
Mikrocontroller selbst festgelegt.
Also man kann nicht auf bestimmte Speicherzellen zugreifen darauf
zugreifen.

Danke trotzdem für deine Hilfe

Grüße
Addy

Autor: Axel Rühl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja nee doch! Geht...

Dim VarName As [Xram|Flash] type [At &h1000]
also
Dim a as Xram Byte at &h1000
mit dem "At" lässt sich genau sagen, wo die Variable hin soll.
Sonst -ist doch Basic- nimm "peek" oder "poke" (hu ist mir
schlecht), aber ist halt Basic, da kann man das so machen. ich weiss
leider nicht, ob BASCOM das unterstützt, aber wird wohl. FastAVR kanns
ja auch.
Ich nehm auch gerne den Zeiger, den FastAVR zur Verügung stellt. Da
lässt sich dann auch mit Offset arbeiten.
Gruß
Axel

Autor: Addy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

dank dir, du hast mcih da auf eine Idee gebracht ;-)
Also das (Dim VarName As [Xram|Flash] type [At &h1000]) gibt es bei
BASCOM so direkt nicht.
Aber weil du PEEK & POKE angesprochen hast bin ich auf die Befehle INP
& OUT gestossen, die können an eine interne oder externe Adresse Daten
speichern.

Puhh, da hätt ich auch gleich drauf kommen können ;-)

Danke nochmals für die antworten
Grüße
Addy

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.