mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Adress- / Datenbus


Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll denn dran an den Bus, ein Sram oder irgendwelche Peripherie?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eigentlich hat der ATmega128 einen gemultiplexten 16Bit Adress-/8Bit
Datenbus

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: SIGINT (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du Dir schonmal das Datenblatt des Displays angesehen? Das hat
keine Adressleitungen ...

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Gruß,

Dirk

Autor: macke_a (Gast)
Datum:

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

Autor: SIGINT (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ..!

Autor: SIGINT (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Wolfram (Gast)
Datum:

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

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..!

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: macke_a (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.