Adress- / Datenbus

Gast #340668
Lesenswert?

hallo!
ich suche informationen wie ich mit dem adress-/datenbus umgehen muss.
ich versuche einen 17 bit Adress- und einen 16 bit datenbus in betrieb
zunehmen. die programmiersprache ist in c, der verwendete µC ist ein
atmega128.
vielleicht gibt es ein skript, eine gute webseite oder irgendwas
anderes..was mir diese thematik etwas besser erleutert.

wäre für jeden beitrag dankbar!
mfg macke_a
Gast #340671
Lesenswert?

ein Grafikdisplay [240*320 pixel]..dafür brauche ich 17
Adressleitungen..
es geht mir um die register...und wie ich damit generell vorgehen
muss,damit die kommunikation auch ordentlich abläuft!
wie ich z.b. einfach die adresse xy mit den richtigen daten
beschreibe..
Gast #340672
Lesenswert?

Mal ne ganz blöde Frage: Was ist das für ein Display?!?!
Ich hab zwar noch nicht mit grafischen Displays gespielt... aber ich
halte es für relativ unwahrscheinlich, daß die 17 Adressleitungen dazu
gedacht sind das Display an einen Controller anzuschließen. Ich vermute
eher, daß dort ein externer Speicher drankommt und das Display als
Bus-Master arbeitet... mit dem AtMEGA würde das dann u.U. knallen.

Gruß,
  SIGINT
Gast #340677
Lesenswert?

Goil,
  das Display hat ja einen eingebauten Framebuffer der als SRAM
angesprochen wird. Sowas wuerde mir auch gefallen. Ein Problem gibts
allerdings : (Zitat) "8-bit processor support with “glue logic”."
Es sieht so aus, als musst du externe Hardware einsetzen um den 16bit
Datenbus des Displays an den 8bit Datenbus des AtMEGAS anzupassen. Das
sollte mit einem Register als Zwischenspeicher funktionieren. Das ist
leider nicht so einfach, dass man das Display nur mit dem AtMEGA
verbinden muss und alles laeuft.Oder du realisierst den Daten und
Adressbus per Software... das benoetigt aber viele Ports oder externe
Register.

Gruss,
  SIGINT
Gast #340679
Lesenswert?

Mmh...danke für Eure Beiträge!
Da ich die Programmierung in C schreibe, versuche ich gerade die
Register richtig zu programmieren.
Gibt es irgendwo "info´s" wo ich soetwas korrekt nachlesen kann?
Ich muss PORT A,C und D verwenden um den Adressbus korrekt zu
verwenden. Geht dies mit einer einfach Bitmaskierung ?
Oder wie würdet Ihr den Adressbus programmieren?
Danke für Eure Mithilfe ..!
Gast #340680
Lesenswert?

Hi macke_a,
bei einem normalen Mikroprozessorsystem muss man den Adressbus nicht
"programmieren", da der Prozessor normalerweise selbstständig den
Zugriff auf den Bus steuert. In deinem Fall musst du einen Adressbus
und den Datenbus simulieren, da das Display:
1.) Mehr Speicher belegt als dein Controller adressieren kann.
2.) Ein 16Bit breiter Datenbus benötigt wird.

Um nicht alles Ports zu belegen musst du also extern mehrere Register
(D-Latch) verwenden um die Busse zu simulieren. Das Problem dabei ist,
daß die Methode relativ langsam ist. Ein anderer Weg fällt mir in
diesem Fall nicht ein.

Gruß,
  SIGINT
Gast #340681
Lesenswert?

Du könntest ein Banking machen, du hängst das Display an den
Adress/Datenbus so dass das Display von 32K bis 64K liegt also 32K
Die restlichen oberen Adressleitungen hängst du an Portpins und kannst
damit entscheiden welche der 4x32K Bänke du ansprechen willst.
Gast #340682
Lesenswert?

Hi !
Banking?
Mmmh, so ungefähr kann ich mir das schon vorstellen.
Da ich die unteren 4Kbyte des SRAM nicht nutzen kann,
bleiben mir ja der Adressbus ab 0FFF.
Also Du meinst dann ab 32KByte bis 64KByte.
Warum nehme ich nicht die Adressen ab 4Kbyte..bis 64kbyte ?
Die Port - Pins werden doch ausschließlich bitmaskiert,oder wie
realisiere ich den Adressbus?
Oder gibt es dafür noch spezielle Register?
Zur Zeit habe ich am µC Register A, C und D.
A und C bilden normalerweise den A/D-Bus.
Von Reg. D habe ich noch weitere 4 Leitungen belegt.
Alle Leitungen gehen über eine CPLD-Baustein, Latch etc. simuliere ich
da mit.
Danke vorab für Deine Mithilfe!
Gast #340683
Lesenswert?

>Warum nehme ich nicht die Adressen ab 4Kbyte..bis 64kbyte ?
ich würde es vorziehen eine 2^n grossen Bereich an einer 2^n Adresse zu
haben da vieles einfacher wird. Wenn du aber sowieso einen cpld nimmst
und nicht konkrete gatter 74hc573,138 dann bist du da natürlich sehr
flexibel.
Beim Rest deines Postings ahne ich nur was du meinst bitte werde da
konkret (Schaltplan oder so) mit dem was du schon hast.
Gast #340684
Lesenswert?

Hi Wolfram,
danke für Deine Antwort erstmal.
Nun, also mein Problem besteht darin, dass ich
17 Adressleitungen benötige um ein 80k SRAM meines Grafikcontrollers
anzusteuern.
Jetzt brauche ich natürlich auch 3 Registerbänke um diese Adressen
herrüber zu bringen.
Soweit so gut. Ab Adresse 0FFFh, kann ich jede x-beliebige Adresse bis
nach 2^17 schreiben.
Wie realiere ich jetzt die unteren 4kByte?
Einfach eine Registerbank bitmaskieren und damit adressieren?
Wie würdest Du denn davor gehen?
Ich hoffe Du kannst mir folgen..
Gast #340685
Lesenswert?

Kann es sein das du mit Registerbänke Ports meinst?
Hast du schonmal einen SRAM an den ATMEGA128 angeschlossen?
Was hast du schon mit CPLD's gemacht?
Weisst du wie Adressdekodierung geht?
Wenn du ab Adresse 0xFFF im ATMEGA128 zu schreiben beginnst wirst du in
ziemliche Probleme kommen da du damit den oberen Teil des SRAM des
ATMEGA128 erwischst.
Gast #340686
Lesenswert?

* Ja, mit Registerbänke meine ich die Ports!
* Nein, vorher habe ich noch keine SRAM an einen ATMEGA angeschlossen
* CPLD´s kein Thema...!
* Adresscodierung habe ich vorher leider noch nicht gemacht,deswegen
stelle ich meine Fragen! Vielleicht liegt dort mein Verständisproblem.
Ich meine so schwierig kann das doch nicht sein,oder ?
Gast #340687
Lesenswert?

was heisst cpld kein Thema?
Schwierig ist es eigentlich nicht, kommt nur auf das Vorwissen an und
das Versuche ich gerade festzustellen.
Ich würde noch 32K RAM dazunehmen da du den bei deinem Projekt dann
sicher sehr gut brauchen kannst.
zur Anordnung
SRAM Ende bis 32K-1 externer RAM
32K bis 64K LCD

Du benutzt den Adress/DAtenbus des ATMEGA128 + 2 Zusatzliche Leitungen
die du an einen anderen Port anschliesst. An diesen kannst einstellen
welche Bank des LCD du ansprechen willst wenn du in den Bereich von 32K
aufwärts zugreifst.
Gast #340688
Lesenswert?

Hi Wolfram,
mit CPLD´s komme ich klar..programmiertechnisch in VHDL, da kann ich
jede Schaltung realisieren. Ich verwende den 100Piner XC9572XL.

Meine schaltung ist so ausgelegt:
ATMEGA128
Adress / Datenbus 16 Bit [PortA und PortC] + 4 zusätliche Leitungen
[PortD] => die gehen zum CPLD-In => vom CPLD-Out zum SRAM meines
Grafikcontrollers.
Mmh, da habe ich dann schon mal "hardwaremäßig" alles richtig
gemacht, um ein 80Kbyte externes SRAM zu programmieren.
Nun, mein haken besteht in der software programmierung.
Kannst Du mir da auch noch helfen ?
Gast #340689
Lesenswert?

Ziemlich überdimensioniert was du machst, mit einem 100pinner
du brauchst nur 2 zusätzliche Leitungen für das bankswitching
wenn du hardwaremäßig schon alles richtig gemacht hast dann mach mal
einen Schaltplan(PDF/GIF) und gib die innere Beschaltung
(Wahrheitstabelle des CPLD an) dann können wir über Software reden
Gast #340690
Lesenswert?

Hi !
Das Problem ist, dass mein Grafikcontroller[SRAM] ausschließlich 3,3V
verarbietet/benötigt und der ATMEGA 5V Signale ausgibt!
Deswegen der CPLD [Pegelanpassung]...aber das konntest Du jetzt auch
nicht wissen!
Gast #340692
Lesenswert?

Ne andere Frage mal,
allerdings hat mit diesem Thema immer noch zu tun.
Wieso kann man, wenn der Adressraum des Atmega128 64Kbyte beträgt,
die unteren 4Kbyte nicht als Adressraum nutzen??
Irgendwo habe ich damit ein Problem..?
Ich glaube ich sehe mittlerweile den Wald vor lauter Bäume nicht
mehr..!
Gast #340693
Lesenswert?

Im Datenblatt sollte dir der Hinweis auffallen, dass bei einem Zugriff
auf internene Adressen auf dem externen Adressbus nichts ausgegeben
wird.
Warum postest du keinen Schaltplan wenn du die Schaltung schon fertig
hast?
Gast #340694
Lesenswert?

Mach ich morgen früh,
jetzt ist feierabend...! Bin fertig für heute !!!
Danke schon mal für Deine Hilfe !!!
Bis morgen...würde mich freuen..
Also das bedeutet, wenn ich einen internen Zugriff mache,
bekomme ich auf den 4Kbyte meines externen Adressbus keine Ausgaben?
Richtig ?
Gast #340696
Lesenswert?

Hi !
Ich habe mir gestern Abend noch einmal die Datenblätter geschnappt und
das System, mit dem internen/externen Adressierung endgültig
verstanden...!
Jetzt muss ich halt nur noch den Software teil so realisieren,
dass es sinnvoll ist.
Dabei fange ich heute morgen an..
Bis später mal

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren