PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RAM - Wechsler



CowZ
13.09.2007, 17:35
Hi,

Ich benötige bei meinem nächsten Projekt zwei RAMs. Dabei soll eines Bilddaten ausgeben, das andere soll beschrieben werden. Soweit kein Problem.

Aber: Ich muss im Betrieb hin und her wechseln, also:
1.) ramA: Bilddaten, ramB: wird beschrieben
danache:
2.) ramA: wird beschrieben, ramB: Bilddaten

Ich muss also die Adresseingänge und die Datenausgänge hin und her wechseln. Mir fielen dazu nur umständliche Schaltungen mit UNDs und ODERs ein, geht das ganze vielleicht auch wesentlich einfacher?

Gruß, CowZ

uwegw
13.09.2007, 18:20
Was für ein µC ist dafür zuständig? Ist es nur einer, oder sind es zwei unabhängige?

CowZ
13.09.2007, 18:23
Steuern soll das ganze ein (einer also ;)) Mikrocontroller.

Dabei soll die Adresse vom Bildram von einer externen Quelle (Zähler und Clock oder so) kommen. Diese externe Quelle wird aber auch von dem einen Mikrocontroller gesteuert.

edit:
Hier nochmal verdeutlicht, was ich machen möchte: Flussdiagramm (http://www.cowz.de/forenbilder/graka1.png)

Ich habe zwei RAMs, RAM A und RAM B.

Ich habe quasi zwei Betriebszustände:
Zustand A:
RAM A bekommt seine Adresse direkt vom Mikrocontroller. Dabei werden die "Speicherdaten" in das RAM geschrieben.
RAM B bekommt seine Adresse von einem Zählbaustein. Es liefert seine Daten an einen DAC.

Zustand B:
Wie Zustand A, nur sind die beiden RAMs vertauscht.

Nun ist meine Frage, wie ich die "Switch"s am besten realisiere.

Ich brauche folgende Switches:

Einen der: Zwei Signale (µC, Zähler => RAM A, RAM B) von zwei Quellen auf zwei Ausgänge schaltet.

Und einen der: Ein Signal (RAM -> ADC) von zwei Quellen auf einen Ausgang schaltet.

Und einen der: Ein Signal (µC -> RAM) von einer Quelle von zwei Ausgänge schaltet.

Dabei muss gewechselt werden können und die letzten beiden müssen kombinierbar sein (dürfen also keinen Kurzschluss etc. bilden)

Gruß, CowZ

Yossarian
13.09.2007, 19:33
Hallo
Für so was gibt es Multiplexer.
Z.B 74257, 74604 oder auch 'selbst gemacht' mittels GAL oder CPLD.

Mit freundlichen Grüßen
Benno

uwegw
13.09.2007, 20:03
Du bräuchtest eigentlich ein Dualport-RAM, dass du dann in zwei Hälften teilst, die deinen beiden RAMs entsprechen würden. Dann musst du beim "RAM-Wechsel" nur an beiden Ports die höchste Adressleitung umschalten, damit greifen µc und DAC dann jeweils auf die andere Hälfte zu.

CowZ
14.09.2007, 11:51
Hi,
danke für die Antworten.

@uwegw: Dualport-RAMs scheinen zwar wirklich genau das zu sein, was ich brauche, aber ich finde keines bei Reichelt. Und die Conradsuche spuckt bei den Suchbegriffen "Dualport RAM" ne USB- und ne PS/2-Buchse aus... Habe ich da was übersehen, und es gibt sie doch bei Reichelt/Conrad? (mindestens 2x 16kiB)

@Yossarian:
Der 257 ist schonmal der eine Teil, den ich suche :)
Den 604 finde ich nicht. Ich bräuchte ja quasi einen 2 zu 1 Demultiplexer, oder?
Ein selbermachen mit GAL oder CPLD kommt für mich momentan nicht in Frage. Würde das gerne mit Standardbauteilen machen.

Gruß, CowZ

PICture
14.09.2007, 12:39
Hallo CowZ!

Die Dualport-RAMs sind manchmal bei eBay zu kaufen, muss man aber Glück haben oder lange warten. Beim Reichelt und Conrad gibt´s sie nicht.

Die Adressleitungen kann man tatsächlich mit entsprechender Anzahl von Multiplexer z.B. 74XXX157 umschalten.

Das Problem beim Umschalten zwei RAMs gibt es vor allem bei der Dataleitungen, da sie bidirectional sind. Das könnte man machen durch umschalten der "/EN" und "DIR" Eingänge der Bustreiber 74XXX245. Der "/EN" wählt den aktiven Treiber aus und "DIR" legt die Richtung der Daten fest. Um Daten von 2 RAMs in beiden Richtungen umzuschalten werden 4 solche Treiber benötigt.

Wenn die Richtung der Daten von/zu bestimmten dessen Sender/Empfänger sich nicht ändert kann man Bustreiber 74XXX244 anwenden.

MfG

CowZ
14.09.2007, 13:08
Hi,

Dann schließe ich Dualport-RAMs mal aus, soll auch nachbaubar sein. Schade.

Mal schauen, das mit den ganzen Logikbausteinen wird glaub ich zuviel Hardware.

Bei meinem Projekt geht es darum, ein PAL-Signal auszugeben. Die Pixeldaten müssen dabei mit einer Frequenz von mindestens 2,5MHz ausgegeben werden (128Pixel in 52µs). Die AVRs mit ihren maximal 16 (bzw. 20MHz) kommen da imho nicht in Frage, wenn sie gleichzeitig die Bilddaten empfangen müssen, zumal sie ja auch keine 16kiB-SRAM haben.

Fällt euch eine Lösung für dieses Problem ein? Im Internet finde ich nur Beispiele, wo einfache Bilder erzeugt werden, aber keine Bilder mit 8-bit Tiefe, die von außen empfangen werden.

Ich spiele mittlerweile mit dem Gedanken hierfür einen ARM mit 55MHz einzusetzen.

Gruß, CowZ

PICture
14.09.2007, 13:29
Hallo CowZ!

Vielleicht wäre hardwaremässig einfacher anstatt Adressmultiplexer zwei Adresszähler die am Anfang gelöscht werden einzusetzen, da braucht man nur zwei Leitungen (CLR und CLK) zu steuern, was die Hardware vereinfacht und der Prozessor braucht sich mit der ganze Adresse nicht beschäftigen. Deine Daten sind sowieso sequenziell. Hier kann man zwei 74XXX393 pro RAM nehmen, die bis 16-bit Adresse generieren können.

Also ich glaube, dass sich die ganze Hardware des Umschalters in dem Fall mit 8 Bausteinen realisieren lässt.

MfG

Yossarian
14.09.2007, 13:36
Hallo
Schau Dir den CBT3244 mal an.

Mit freundlichen Grüßen
Benno

CowZ
14.09.2007, 16:59
Hi,

klar, zwei Adresszähler... Viel einfacher! Warum komm ich auf solche Ideen nicht? :D

Aber: Der 393 hat kein Carry-Ausgang, müsste also den vierten Ausgang shcon mit dem Clock vom nächsten verbinden. Bekomme keine 16-Bit-Adresse mit zwei 393ern, sondern nur 12bit.

Ich bräuchte idealerweise einen 10bit (oder 9 mit Carry) und einen 8bit Zähler (kann natürlich auch mehr sein und dann obere Bit's abschneiden). Oder auch zusammenstückeln. Finde aber keine passenden Standardbauteile. Kannst du mir helfen?

edit: der 4040 als 12-Bitzähler sieht gut aus!

Gruß, CowZ

PICture
15.09.2007, 06:00
Hallo CowZ!

Um 8 Bit Zähler zu haben, muss Ausgang 1QD mit Eingang 2A bei jedem Zähler 393 verbunden werden. Um 16 Bit Zähler zu machen, werden 2QD vom ersten 8 Bit Zähler mit 1A vom zweiten 8 Bit Zähler verbunden. Um 12 Bit Zähler zu bauen braucht man also 1,5 von 393. So lassen sich Deine 12 und 10 Bit Zähler mit 3 x 393 aufbauen. Wenn man weniger Bits braucht, kann man den höchsten bit von QA, QB, oder QC nehmen.

Falls immer bis F...F gezählt wird, braucht man die Zähler ausser beim ersten mal nicht löschen, da sie von F...F auf 0...0 überlaufen.

Ein 393-er besteht aus zwei 4 Bit Zähler, die so wie oben beschrieben als 8 bit Zähler konfiguriert werden können. Du brauchst die oberen Bits nicht abschneiden, sondern einfach nicht anschliessen. Als Carry, wenn man es braucht, kann man fallende Flanke aus entsprechendem Q Ausgang nutzen.

MfG

CowZ
15.09.2007, 12:24
Ah!

Der zählt auf ner High->Low-Flanke und deswegen geht das, ja ok :)

Danke schön :D

Gruß, CowZ