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
eigentlich hat der ATmega128 einen gemultiplexten 16Bit Adress-/8Bit Datenbus
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..
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
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...
Hast Du Dir schonmal das Datenblatt des Displays angesehen? Das hat keine Adressleitungen ...
Hi, die Ansteuerung wird sicherlich auch nur mit LVDS Treibern moeglich sein :) Gruß, Dirk
Richtig ! Das Diplay hat keine Adressleitungen, dafür der Grafikcontroller S1D13706 von Epson.....!
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
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
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 ..!
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
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.
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!
>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.
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..
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.
* 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 ?
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.
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 ?
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
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!
ATMEGA mit 3,3V betreiben?
>aber das konntest Du jetzt auch nicht wissen!
Stimmt ohne Schaltplan wirklich nicht?
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..!
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?
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 ?
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.