Forum: Mikrocontroller und Digitale Elektronik ATMega128 - Adressbus ansteuern


von Addy (Gast)


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

von Ralf (Gast)


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

von Addy (Gast)


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

von Ralf (Gast)


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

von Addy (Gast)


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

von Axel Rühl (Gast)


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

von Addy (Gast)


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

von Axel Rühl (Gast)


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

von Addy (Gast)


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

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.