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
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
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
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
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
Ich nehme FastAVR. da siehts dann so aus: $Device= mega128, Xram, 0, 64k Dim a As Xram Byte 'z.b. a = &h20 gruß Axel
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.