PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ramansteuerung mit Latch und direkt - Richtig?



CowZ
12.02.2007, 11:54
Hi,

ich möchte ein 32kB-SRAM (Reichelt, Best-Nr: 62256-80) ansteuern.

Dafür brauche ich 8 I/O-Leitungen für die Daten (schreiben und lesen, also bidirektional) und 14 Adress-Leitungen (nur zum Ram).

Ich möchte zur Ansteuerung nur 8-Daten-Leitungen + Steuerleitungen benutzen. Die Idee: Das Ram wird per Latch (74x573) addressiert, die IO/Datenleitungen liegen auf dem selben Port.

Meine Frage nun:
Wenn ich eine Adresse einstellen möchte, das Ram gleichzeitig Datenausgibt, kann es ja zu einem Kurzschluss kommen. Wie verhindere ich dies? Sollte man dafür Schutzwiderstände einbauen, oder per Steuerpins (OutputEnable?) dies vermeiden (oder beides? ;))

Hier noch der Schaltplan der Ramansteuerung A0-7 sind die Pins am µC (AVR, 5V).
http://www.cowz.de/forenbilder/ram1.gif

Gruß, CowZ

PICture
12.02.2007, 12:50
Hallo CowZ!

Dein Schaltplan ist noch nicht vollständig.
Normaleweise sind die Signale an Pins von Latchen und RAM wie folgt:

/OC und /CS permanent L
/WE und /OE H

Ich würde es so realiesieren:

1. Portpins auf Ausgänge setzen.
2. Hbyte von Adresse in den unteren Latch mit steigender Flanke an C schreiben.
3. LByte von Adresse genauso in den oberen Latch schreiben.
4. Port auf Eingänge setzen und /OE (Output Enable) vom RAM auf L setzen.
5. Byte von adressierter Speicherstelle des RAMs einlesen.

Beim RAM Beschreiben geht es genauso, (1-3) nur die Portpins bleiben als Ausgänge und /WR anstatt /OE wird auf L gesetzt.

Insgesamt brauchst Du also folgende Pins vom uC:

8 für RAM Adress/Data ausgeben b.z.w. einlesen
2 für Latchen zu beschreiben (C)
1 für RAM zu lesen (/OE)
1 für RAM zu schreiben (/WR)

Solange /OE von RAM H ist, sind die RAM Ausgänge in hochohmigen Zustand und es kommt zum keinem Konflikt bei beschreiben den Latchen.

Alles klar ? :)

MfG

CowZ
12.02.2007, 12:59
Hi,

genau so hatte ich das vor :)

(Das mit dem Schaltplan wusste ich und ist mittlerweile auch schon weiter entwickelt :))

Ok, also rein softwaretechnisch schützen :) Gibt's eine Möglichkeit sich da weiter zu schützen? Was passiert zb. wenn das "Port auf Eingang setzen" von meiner Software vergessen wird?

Gruß, CowZ

PICture
12.02.2007, 13:28
Dann kannst Du einfach die adressierte Speicherstelle nicht einlesen.

Es kann nur von Dir während Schreiben des Programms vergessen werden. :)

Keine Angst, da wenn man sich vor allen möglichen software Fehler schützen wollte, würde die eigentliche Hardware in der Schutzhardware nicht mehr zu finden sein. :)

Im Ernsten : mir ist noch nicht passiert, dass wegen software Fehler die Hardware beschädigt wurde. Das kann nur bei Leistungssachen passieren.

Übrigens das höchste Adressbit vom RAM (A15) kannst Du auch mit dem Latch verbinden und zum Umschalten den Helften nutzen.

MfG

shaun
12.02.2007, 13:35
Der letzte Satz geht wohl falscher nicht mehr. Ich habe schon diverse TTL-Gräber als wortwörtliche solche vorgefunden, gerade weil die Entwickler an einer entscheidenden Stelle eine Verriegelung vergessen haben oder einen Demultiplexer sparen wollten. Dann noch eine ungeplante Aktion der Software oder ganz schlicht EPROM-Alzheimer dazu und dann geht die Sucherei los. In einem Effektgerät habe ich vor zehn Jahren schon um die 20 TTLs herausschmeissen müssen, weil durch geröstete Ausgänge von Bsutreibern unklare Zustände auf den Datenleitungen herrschten.

Zur Sache: in herkömmlichen Prozessorsystemen gibt es für sowas Read- und Write-Leitungen. Diese teilen der Peripherie mit, was der Prozessor nun tut und der Hardwareentwickler tut gut daran, die Adressdekoderschaltungen in der Form mit diesen Signalen zu verknüpfen, dass gleichzeitige Schreibzugriffe auf den Bus verhindert werden. Wo das nicht möglich ist, zB bei Einsatz eines Controllers, der nicht mit dediziertem Daten-, Adress- und Steuerbus betrieben wird, würde ich tatsächlich Widerstände in Reihe zu den RAM-Ausgängen vorschlagen. Diese aber wirklich NUR zum Schutz, die Steuerung des OE-Eingangs bleibt trotzdem Pflicht.

CowZ
12.02.2007, 15:32
Hi,

ok :) Dann bleibt nur noch die Frage nach der Größe der Widerstände. Diese sollte ja ansich ziemlich unkritisch sein. tun's 10k?

Gruß,
CowZ

PICture
12.02.2007, 16:16
Die Frage ist für mich schwer zu beantworten, da ich sowas noch nie benutzt habe.

Das ist von Ausgangs- und Eingangswiderständen der damit verbundenen Bausteinen abhängig. Bei CMOS sind sie wirklich unkritisch und 10k sollte gut sein, aber bei TTL muss man beim standard mit 4k, H und S 2,8k, L 40k, LS 18k internen pull-ups rechnen, die dann für L am Ausgang ein Spannungsteiler mit dem seriellem Widerstand bilden und 10k sicher zu viel ist.

Sie müssen dann entsprechend gewählt werden, dass im schlimsten Fall beim L auf dem Ausgang (max. 0,4V) auf dem Eingang auch L (max. 0,8V) wird.

Weder aus Deiner Beschreibung noch aus dem Schaltplan kann man die Logikfamilien der Bausteine erkennen.

MfG

kalledom
12.02.2007, 16:26
@shaun
Widerstände zum Schutz gegen Bus-Kollisionen höre ich hier das erste mal.
Read- und Write-Ausgang des µC mit einem Pull-Up zu versehen, ist allerdings Pflicht, damit nicht ausgerechnet während Reset der Bus evtl. zusammen bricht. Den 8-Bit-Port nur während dem 'Adresse-latchen' und 'Daten-schreiben' auf Ausgang zu setzen, ist bei mir selbstverständlich.
Wenn ich dann nicht in der Lage sein sollte, das Schreib- und Lese-Signal im Programm zum richtigen Zeitpunkt zu setzen, würde ich auf 'Bäcker' umsteigen und jeden Morgen die schwarzen Brötchen in den Mülleimer werfen :-)

shaun
12.02.2007, 23:30
Ja bei Dir, aber aus der Fragestellung erwuchs bei mir sogleich das Gefühl, dass wir nächste Woche seltsame Spannungen auf den Datenleitungen erklären sollen, wenn dort zwei CMOS-Transistoren um ihr Recht kämpfen. Wenn ich keine saubere Chip-Selektierung realisieren kann, weil ich den uC nicht im Prozessormodus mit dedizierten und nicht durch Software gesteuerten RD/WR-Pins betreiben möchte, würde ich zu einem Schutz mit Widerständen greifen. Kollision ist damit auch nicht gemeint, sondern wirklich der schwarze-Brötchen-Fall, wenn im worst case 8 CMOS-Ausgänge vom RAM gegen derer 8 vom Controller kämpfen, sehe ich durchaus die Gefahr von Kollateralschäden.

Die Widerlinge dürfen natürlich nicht zu groß sein, da ich sie nicht gegen schlechten Stil, sondern nur zum Katastrophenschutz einsetzen würde, würde ich sagen, sie sollten verhindern, dass der maximale Gesamtstrom der Bauteile überschritten wird, also ein paar zehn Ohm oder so.

CowZ
18.02.2007, 11:34
Hi,

ich nochmal :) vielen Dank für die ganzen Beiträge :)

Ja, die Widerstände sollen nur die Rauchzeichen verhindern.
Werd jetzt einfach 470 Ohm (-> 10mA bei 5V) nehmen, oder ist das zuviel?

edit: seh ich das in den Datenblättern richtig, dass ich die Latchausgänge mit jeweils 6mA belasten darf (also insgesamt 48mA)? (Nicht fürs Ram, aber für was anderes wichtig :))

Gruß, CowZ

shaun
18.02.2007, 12:11
Aus welchem Datenblatt hast Du diese Angabe?
Solange Du in der Summe den Package-Strom (bezogen auf die Pins GND und Vcc) nicht überschreitest sollte das kein Problem darstellen.
Nur ist in den Datenblättern idR nur für einen bestimmten Strom und bei einer bestimmten Versorgungsspannung spezifiziert, wie die Ausgangspegel dann liegen. Ziehst Du mehr Strom, musst Du mit einem höheren low- bzw niedrigeren high-Pegel leben.

CowZ
18.02.2007, 12:53
Hi,

bei der Stromstärke geht es mir darum, ob ich LEDs direkt am Latch laufen lassen kann.

Das Datenblatt:
http://datasheet4u.com/download.php?id=374917
"±6-mA Output Drive at 5 V" (Hier meine Frage: gilt das pro Outputpin oder für alle?)

Gruß, CowZ
PS: sind die 470Ohm als Schutz i.O.?

shaun
18.02.2007, 13:13
Hab ich doch schon geschrieben: pro Pin, und es bezieht sich nur auf die Einhaltung der garantierten Logikpegel (hier: bei 4,5V wird Dir ein low von 0,33V und ein high von 3,84V garantiert, wenn Du nicht mehr als 6mA ziehst). Mehr Strom - höheres low bzw niedrigeres high. Da der Drop bei high deutlich höher ist als bei low empfehle ich Dir, die LEDs zwischen Vcc und Ausgang zu schalten und dann in negativer Logik anzusteuern - so wie man es früher immer gemacht hat (weil TTL nämlich aktiv praktisch keinen Strom treiben, dafür aber sehr gut Strom seken konnte)

Zu den Widerständen: probier es - ich weiss ja nicht, wie kritisch Dein Timing ist. Mit 470 Ohm hast Du pro pF Lastkapazität ein Tau von 0,5ns. Sollte also kein Problem darstellen, könnte aber eins werden, wenn Du die Ansteuerung ungeschickt planst. Dann würde es aber so oder so unzuverlässig werden, und das wollen wir ja nicht.

CowZ
18.02.2007, 13:22
Hi,

ok, danke :)

Ich melde mich wieder, sobald die Bauteile da sind und das Projekt voran geht :)

Gruß, CowZ

kalledom
18.02.2007, 17:03
Mach keine Experimente mit den Ausgangsströmen, denn die werden von Hersteller zu Hersteller unterschiedlich garantiert und der Gesamtstrom des Bausteins hat auch noch ein Maximum (evtl. eine maximal zulässige Leistung); shaun hatte das auch schon beschrieben.
Außerdem können beim Schalten höherer Ströme andere Probleme auftreten, die Du evtl. nicht so einfach in den Griff bekommst.
Lege 2...5 Cent drauf, kauf Dir Low-Current-LEDs mit 2mA und steuer die über 2,2k an, dann liegst Du auf der sicheren Seite.
Sollten die LEDs nur als Anzeige dienen oder wolltest Du damit einen Sportplatz beleuchten ?

CowZ
18.02.2007, 17:36
Die LEDs sollen nur als Anzeige dienen.

mehr als 2mA wollte ich denen auch nicht schenken. Wollte nur allgemein gefragt haben, wie das mit dem Strom ist.

Es gibt also einmal den Max-Strom pro Pin und dann noch den Max-Strom pro Bauteil. Und beide kann man nicht angeben, da die von Hersteller zu Hersteller schwanken? Da muss es doch aber für alle 74HCT573 Mindestgarantien geben, oder?

Gruß, CowZ

kalledom
19.02.2007, 00:50
Es gabe eine Zeit, da wurde für die Ausgänge angegeben, wie viele Eingänge sie maximal treiben können.
Mittlerweile haben viele vergessen, daß es sich bei TTL-ICs nicht um Leistungs-Bausteine, sondern um Logik-Bausteine handelt.
Ausnahme sind bei diesen 74-er und 4000-er Bausteinen solche, die zur Ansteuerung von z.B. LED- oder 7-Segment-Anzeigen und als (Leitungs- / Bus-) Treiber ausgelegt sind. Dann sind aber auch die Ausgangsströme angegeben.
Für µC gilt das Gleiche, es sind in erster Linie Steuer-Bausteine ohne Leistungsausgänge.
2mA würde ich jedem Ausgang abverlangen, über 5mA gibt es bei mir ausnahmslos Treiber-Bausteine. Wenn so ein TTL-Baustein oder µC Ströme mit 10...20mA und mehr schalten soll, dann stößt man sehr schnell auf Schalt-Strom-Spitzen, die alles 'erzittern' lassen, wenn nicht entsprechende Maßnahmen getroffen wurden. So eine Schaltung spielt dann schon mal etwas verrückt.
Also, Steuerteil und Leistungsteil immer schön auseinander halten, besonders, was die Versorgungsleitungen betrifft.

CowZ
19.02.2007, 11:30
Hi,



Ausnahme sind bei diesen 74-er und 4000-er Bausteinen solche, die zur Ansteuerung von z.B. LED- oder 7-Segment-Anzeigen und als (Leitungs- / Bus-) Treiber ausgelegt sind. Dann sind aber auch die Ausgangsströme angegeben.


Es geht hier ja um den 74xx573. Da heißt es im Datenblatt:

Output capability: bus driver

Ausgangsströme kann ich leider keine finden (außer die +-6mA). Aber es hat sich ja ansich erledigt. Ich lasse sie einfach mit 2mA leuchten, die LEDs.

Gruß, CowZ

kalledom
19.02.2007, 12:08
Mit dem "Output capability: bus driver" sind Bausteine gemeint, die an einen gemeinsamen Bus angeschlossen werden können, weil sie Tri-State-Ausgänge haben. Diese Ausgänge bleiben am Bus hochohmig, außer wenn sie 'angesprochen' werden. Ausgangs-Strom müssen sie keinen liefern (können sie auch nicht).
Was ich mit Leitungs- / Bus-Treiber gemeint hatte, waren Bausteine, deren Ausgänge 10...50mA treiben können.