-
-
Erfahrener Benutzer
Roboter Experte
Ramansteuerung mit Latch und direkt - Richtig?
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).
Bild hier
Gruß, CowZ
-
Erfahrener Benutzer
Lebende Robotik Legende
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
-
Erfahrener Benutzer
Roboter Experte
-
Erfahrener Benutzer
Lebende Robotik Legende
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
-
Erfahrener Benutzer
Robotik Einstein
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.
-
Erfahrener Benutzer
Roboter Experte
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
-
Erfahrener Benutzer
Lebende Robotik Legende
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
-
Erfahrener Benutzer
Robotik Einstein
@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
-
Erfahrener Benutzer
Robotik Einstein
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.
-
Erfahrener Benutzer
Roboter Experte
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen