Forum: Mikrocontroller und Digitale Elektronik Adress- / Datenbus


von macke_a (Gast)


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

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Was soll denn dran an den Bus, ein Sram oder irgendwelche Peripherie?

von Wolfram (Gast)


Lesenswert?

eigentlich hat der ATmega128 einen gemultiplexten 16Bit Adress-/8Bit
Datenbus

von macke_a (Gast)


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..

von SIGINT (Gast)


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

von macke_a (Gast)


Lesenswert?

Ein QVGA - Farb/Display...
3,5" TFT von Hitachi ...
R,G,B 6Bit Digital ...
240*320 Pixel = 76800 Pixel => 2^17 für die Adressleitungen...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hast Du Dir schonmal das Datenblatt des Displays angesehen? Das hat
keine Adressleitungen ...

von Dirk (Gast)


Lesenswert?

Hi,

die Ansteuerung wird sicherlich auch nur mit LVDS Treibern moeglich
sein :)

Gruß,

Dirk

von macke_a (Gast)


Lesenswert?

Richtig !
Das Diplay hat keine Adressleitungen, dafür der Grafikcontroller
S1D13706 von Epson.....!

von SIGINT (Gast)


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

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

meine Anbindung des S1D13704 an den 8515 hatte ich hier gepostet:
http://www.mikrocontroller.net/forum/read-1-334077.html#new
ab 17 Adressen wirds mit einem 8-Bitter etwas komplizierter, das
überschreitet seinen Adressraum von 64k. Der 704 hat nur 40k Ram

von macke_a (Gast)


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 ..!

von SIGINT (Gast)


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

von Wolfram (Gast)


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.

von macke_a (Gast)


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!

von Wolfram (Gast)


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.

von macke_a (Gast)


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..

von Wolfram (Gast)


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.

von macke_a (Gast)


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 ?

von Wolfram (Gast)


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.

von macke_a (Gast)


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 ?

von Wolfram (Gast)


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

von macke_a (Gast)


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!

von Wolfram (Gast)


Lesenswert?

ATMEGA mit 3,3V betreiben?
>aber das konntest Du jetzt auch nicht wissen!
Stimmt ohne Schaltplan wirklich nicht?

von macke_a (Gast)


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..!

von Wolfram (Gast)


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?

von macke_a (Gast)


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 ?

von Wolfram (Gast)


Lesenswert?

>bekomme ich auf den 4Kbyte meines externen Adressbus keine Ausgaben?
>Richtig ?
ja
jetzt verstehst du vielleicht warum ich sagte, an einer 2^n Adresse
einen 2^n Block als Bank ist leichter.

von macke_a (Gast)


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

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.