Forum: Mikrocontroller und Digitale Elektronik MC 8051 Speicheranschluss


von Michael H. (mic2020)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

ich bin bei Internetrecherchen auf dieses tolle Forum gestoßen und 
möchte gleich mal eine Frage loswerden, wo ich aktuell nicht weiterweiß. 
Ich bin noch absoluter Anfänger auf dem Gebiet der Microcontroller, 
benötige für mein Studium aber Hilfe bei einer Aufgabe.

Es geht darum einen MC 8051 (klassisches Modell) mit externem Speicher 
zu betreiben. Dabei sollen die vollen 64 kB EEPROM und die vollen 64 kB 
SRAM ausgeschöpft werden. Allerdings soll dies mit unterschiedlichen 
Speichertypen geschehen.

Fälle:
1.) jeweils 1x 64 kB Bausteine
2.) jeweils 2x 32 kB Bausteine
3.) jeweils 4x 16 kB Bausteine
4.) jeweils 8x 8 kB Bausteine

Für die Fälle 1.) bis 3.) habe ich mir Schaltungen überlegt, weiß aber 
nicht, ob diese richtig sind. Besonders wie man bei Fall 3.) Chip Select 
(CS) richtig konfiguriert, da bin ich mir unsicher.

Ihr seht meine Entwürfe in den angehängten Bildern.

Fragen, die ich dazu habe:
A.) Kann man vom Port 2 bedenkenlos die letzten Bits für CS verwenden? 
Bei Fall 2.) habe ich Bit P2.7 für CS entnommen, bei Fall 3.) die Bits 
P2.6 und P2.7.
B.) Ist es richtig, dass sich dann auch die höherwertigen Ausgänge der 
Speicherbausteine um je ein Bit reduzieren (also von A15 auf A14 auf 
A13)?
C.) Ist meine Logikschaltung bei Fall 3.) überhaupt realisierbar?
D.) Wenn man Fall 3.) auf Fall 4.) übertragen würde, wäre das eine sehr 
aufwändige Schaltung und man müsste relativ viele Bits von Port 2 für CS 
wegnehmen. Gäbe es auch eine einfachere Lösung für CS?
E.) Habe ich die Adressbereiche der Speicherbausteine richtig angegeben?

Vielen Dank für eure Unterstützung im Voraus!

Grüße,
Michael.

von Stefan F. (Gast)


Lesenswert?

Michael H. schrieb:
> Kann man vom Port 2 bedenkenlos die letzten Bits für CS verwenden?
Ich denke: ja

> Ist es richtig, dass sich dann auch die höherwertigen Ausgänge der
> Speicherbausteine um je ein Bit reduzieren?

Ich verstehe die Frage nicht. Deine Zeichnung und die dort eingetragenen 
Adressbereiche sehen aber plausibel aus. Ich denke, du hast den 
Sachverhalt korrekt erfasst.

> Ist meine Logikschaltung bei Fall 3.) überhaupt realisierbar?
Sie enthält einen kleinen Fehler. Die /CS Eingänge sind Low Aktiv, also 
brauchst du Nand Gatter. Du kannst dir das Leben aber auch einfacher 
machen, indem du einen fertigen "1 aus 4 Dekoder" (74LS139) verwendest.

> Wenn man Fall 3.) auf Fall 4.) übertragen würde, wäre das eine sehr
> aufwändige Schaltung ... Gäbe es auch eine einfachere Lösung für CS?
Ja, und zwar ein "1 aus 8 Dekoder" (74LS138)

>Habe ich die Adressbereiche der Speicherbausteine richtig angegeben?
Sieht gut aus.

von Peter D. (peda)


Lesenswert?

Der LS374 ist kein Latch, sondern ein FF, d.h. übernimmt erst mit der 
Flanke.
Das Timing und die Pinbelegung ist beim Latch 74HCT573 besser.

von hinz (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
>> Wenn man Fall 3.) auf Fall 4.) übertragen würde, wäre das eine sehr
>> aufwändige Schaltung ... Gäbe es auch eine einfachere Lösung für CS?
> Ja, und zwar ein "1 aus 8 Dekoder" (74LS138)

74LS145, der hat o.C. Ausgänge, die kann man nach Bedarf verodern.

von Stefan F. (Gast)


Lesenswert?

Ich bin nicht ganz sicher, ob man ohne weiteres so viele 
Speicherbausteine parallel schalten kann - vor allem für den Fall 4.

Dabei ist es ja nicht nur wichtig, dass der Mikrocontroller sie alle 
antreiben kann, sondern das beim Lesen jeder einzelne Speicherchip durch 
die anderen mit belastet wird.

von Thomas Z. (usbman)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ich bin nicht ganz sicher, ob man ohne weiteres so viele
> Speicherbausteine parallel schalten kann - vor allem für den Fall 4.
>
> Dabei ist es ja nicht nur wichtig, dass der Mikrocontroller sie alle
> antreiben kann, sondern das beim Lesen jeder einzelne Speicherchip durch
> die anderen mit belastet wird.

Natürlich geht das. Es ist ja immer nur genau einer der Speicher aktiv.
Das Latch sollte ein HC373 oder HC573 sein der Decoder ein HC138 bei dem 
nur A14 und A15 angeschlossen ist
(Fall 4)

von Michael H. (mic2020)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

vielen Dank für eure Hilfreichen Antworten. Ihr wart echt schnell. Bin 
beeindruckt.

@Stephan:
Bzgl. meiner Frage zum Reduzieren der Bitbereiche. Vielleicht habe ich 
mich ungünstig ausgedrückt. Du siehst in meinen Skizzen, dass die 
Speicherbausteine jeweils Daten über D0 bis D7 und A0 bis A7 und A8 bis 
A15 übertragen. Da A8 bis A15 am Port 2 des 8051 hängten, musste ich 
diese um so viele „Stellen“ reduzieren, wie viele Adressleitungen ich 
für CS entnommen habe, d.h.:

- Fall 1: A8 bis A15, weil P2.0 bis 2.7 genutzt werden kann.
- Fall 2: A8 bis A14, weil nur P2.0 bis P2.6 genutzt werden kann (P2.7 
ist jetzt CS).
- Fall 3: A8 bis A13, weil nur P2.0 bis P2.5 genutzt werden kann (P2.6 
und P2.7 sind jetzt CS).

Folglich wäre es im Fall 4 meiner Meinung nach so:
- A8 bis A11, weil nur P2.0 bis P2.3 genutzt werden kann (P2.4, P2.5, 
P2.6, P2.7 wären dann CS).

Ist diese Überlegung so korrekt? Damit schränke ich die Datenübertragung 
auf Port 2 ziemlich stark ein.

Den Fehler mit NAND statt AND habe ich korrigiert und lade die neue 
Skizze Fall 3 gleich mit hoch.

@Peter:
Danke für den Hinweis. Du hast recht. Der LS374 kann wohl aber als 
„einfacher Latch“ genutzt werden. Er ist Vorgabe der Aufgabenstellung.

@Heinz und @Thomas:
Wie würde man denn einen 74LS145 oder (HC373/HC573 mit HC138) in meine 
Schaltung (mit Hinblick auf den komplizierten Fall 4) einbinden? Müsste 
man dann auch vier Pins vom Port 2 des 8051 „abzweigen“, um CS zu 
realisieren?

Bei einem bin ich mir nicht ganz sicher: Welche Leitungen in der Skizze 
bezeichnet mal als Adressleitungen? Sind das die Leitungen, die zu /CS 
der Speicherbausteine führen?

Ist folgendes Richtig:
- Fall 1: keine Adressleitung nötig
- Fall 2: eine Adressleitung nötig
- Fall 3: zwei Adressleitungen nötig
- Fall 4: vier Adressleitungen nötig

Ich denke, das Beispiel ist allgemein sehr akademisch. Die Fälle 3 oder 
4 würde ich in der Praxis nicht in Betracht ziehen… aber so ist eben die 
Aufgabenstellung.

Noch einmal vielen Dank!

Grüße,
Michael.

von Peter D. (peda)


Lesenswert?

Michael H. schrieb:
> Der LS374 kann wohl aber als
> „einfacher Latch“ genutzt werden.

Nun, man verschenkt sich damit Zugriffszeit, d.h. man benötigt 
schnellere EPROM/SRAM. Und auch das Routing der Platine wird damit 
anfälliger.
Den LS374 habe ich daher noch nie auf professionellen 8051-PLatinen 
gesehen.

Schnelle 8051-Typen erfordern sogar den 74F573, damit die Zugriffe 
rechtzeitig erfolgen.

von Stefan F. (Gast)


Lesenswert?

Michael H. schrieb:
> Ist diese Überlegung so korrekt?

ja

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Thomas Z. schrieb:
> HC373 oder HC573

Yep.
Im Bastelbausatz von ELV ist der auch drin. (Egal, ist im Bild 80C31, 
aber prinzipiell ähnlich zu 8051)
Leider nur Foto, kein Schaltplan im Moment hier.

ciao
gustav

von Michael H. (mic2020)


Lesenswert?

Hallo Karl,

hübscher Bastelbausatz. Was ist auf der Platine neben dem 80C31 (links 
unten) und dem HC373 (ich vermute direkt darüber) noch alles drauf und 
was kann man damit alles machen?

Um z.B. einen HC373 auch über mehrere Pins des Port 2 an den 8051 
anbinden müssen oder würde da ein Pin reichen? Oder bindet man ihn ganz 
anders an?

Falls du eine Skizze eines Schaltplans hättest, würde ich nicht nein 
sagen. ;-)

Danke und Grüße,
Michael.

von Thomas Z. (usbman)


Lesenswert?

Michael H. schrieb:
> Ich denke, das Beispiel ist allgemein sehr akademisch

So ist es, ich kenne z.b keine 16k SRams üblich sind 8k und 32k. Es 
scheint einfach eine Übung zu Adress Dekodern zu sein.

zum HC138:
P2.6 und P2.7 gehen auf A0 und A1 des 138 Q0 .. Q3 sind die Chipselect 
Signale für die Speicher. Jeweils ein Eprom und ein Ram teilen sich 
einen Chipselect. Das funktioniert deshalb weil Rom mit PSEN selektiert 
wird, davs Ram aber RD WR. Fall3
Im Fall 4 werde einfach alle Ausgänge des 138  verwendet und 
3Addressbits benutzt nicht 4 wie du oben geschrieben hast.

Noch was zumHC374/574
Wenn der verwendet wird muss das ALE Signal invertiert werden

: Bearbeitet durch User
von G. O. (aminox86)


Lesenswert?

Michael H. schrieb:
> Fälle:

> 2.) jeweils 2x 32 kB Bausteine

Michael H. schrieb:
> - Fall 2: eine Adressleitung nötig

Speziell für die Version mit den 32k-Bausteinen gibt es noch eine andere 
Ansprechmöglichkeit der Speicher: Einfach alle CS-Eingänge parallel 
schalten und mit der Adresse A0, die das Latch ja generiert, verbinden. 
Spart jegliche Adressierlogik.

von D00fi (Gast)


Lesenswert?

Wenn man schon mit eigentlich obsoleten 8051 herumspielen will,
sollte man dann auch einen genauso obsoleten aber besseren 51er nehmen.
Von ST gab es da den UPSD3234.
Mit bis zu 288 kB Flash, 8 kB SRAM und einem (3000 Gate-)CPLD mit dem
man auch die externe Adressierung von weiterem Speicher ohne
weitere Bauteile auf die Pins mappen kann.
JTAG mit dem Keil-C51-Compiler/Debugger und einem ULink2 geht
natuerlich auch.

von Tim T. (tim_taylor) Benutzerseite


Lesenswert?

D00fi schrieb:
> Wenn man schon mit eigentlich obsoleten 8051 herumspielen will,
> sollte man dann auch einen genauso obsoleten aber besseren 51er nehmen.
> Von ST gab es da den UPSD3234.
> Mit bis zu 288 kB Flash, 8 kB SRAM und einem (3000 Gate-)CPLD mit dem
> man auch die externe Adressierung von weiterem Speicher *ohne*
> weitere Bauteile auf die Pins mappen kann.
> JTAG mit dem Keil-C51-Compiler/Debugger und einem ULink2 geht
> natuerlich auch.

Das bekommst du aber in der Uni nicht in die Birne vom Prof. Dann müsste 
man ja neue Skripte und Übungsunterlagen bauen und im Zweifelsfall 
selber mal was Neues lernen, viele wollen das nicht. Also wird der tote 
Gaul weiter geritten.

von D00fi (Gast)


Lesenswert?

> Das bekommst du aber in der Uni nicht in die Birne vom Prof.

An der Uni an der ich studiert habe, wurde man immer mit
und an dem "heissen Sche1ss" ausgebildet.
Da es schon eine Weile her ist: Z8/Z80/Z8000 und 8086.
Dazu zaehlten dann auch die Derivate von UNIX, RIO,
CP/M, MS-DOS usw.

Der tote Gaul 8008 wurde zwar noch detailliert
auseinandergenommen, aber praktisch wollte den keiner
auch nur mit der Kneifzange anfassen.

Ist dein Prof vllt einfach nur faul?

Oder ist das in eurem Studium nur ein Nebenfach?

von Olaf (Gast)


Lesenswert?

> Natürlich geht das. Es ist ja immer nur genau einer der Speicher aktiv.

Dieser Hinweiss ist erschreckend kenntnislos. Jeder Baustein stellt eine 
Last am Bus da. Und in der Praxis muesste man natuerlich mal Fanout und 
Fanin vergleichen. Gefuehlt haette ich bei der Konfiguration auch 
leichte Bedenken. Allerdings ist das ganze ja wohl nur als leichte 
Fingeruebung fuer studentische Gehirne anzusehen und nicht als etwas das 
in der Praxis umgesetzt wird. Daher ist das dann doch wieder piepegal.

Olaf

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Die dritte Version ist ja rein akademisch, denn wie usbman bereits 
sagte, gibt es keine 16kB RAMs, Flash oder EPROMs.
Damit beschränkt sich die Buslast auf maximal 4 Eingänge per 
Adressleitung.
Und niemand wird heute auf den Gedanken kommen, mit 8kByte Bausteinen zu 
konstruieren, sonst müsste man evtl. über einen zweiten Bustreiber 
nachdenken.

von Stefan F. (Gast)


Lesenswert?

Thomas Z. schrieb:
> Es ist ja immer nur genau einer der Speicher aktiv.

Das bedeutet nicht, dass die inaktiven Speicher den Bus nicht belasten. 
Jede Leitung und jeder Chip Eingang haben eine gewisse Kapazität. Bei 
aktuellen Bauteilen bewegen wir uns im Bereich von 50-10pF. Bei den 
alten Chips weiß ich es nicht auswendig. Es ist nicht einmal gesagt, 
dass er alles in CMOS aufbaut.

von Michael H. (mic2020)


Lesenswert?

Hallo zusammen,

vielen Dank für eure Hinweise und Anmerkungen. Ich habe nebenbei gleich 
noch eine ganze Menge erfahren. Danke dafür.

Ich picke mal nur ein paar eurer Antworten heraus und antworte darauf:

@Thomas: Adressbits sind Adressleitungen, richtig? Dass man nur drei 
braucht, darüber hatte ich auch schon nachgedacht. Würde das auch 
gelten, wenn man Fall 4 mit einfachen Logikbausteinen (wie mein Fall 3) 
aufbauen würde?

@Tim / D00fi: Ja, es ist nur ein Grundlagenfach mit einer Hand voll 
Vorlesungen und der 8051 nur ein Thema darin. Ich denke, daher war es 
gut, dass dieses betagte Modell vorgestellt zu haben und nicht einen 
moderneren (und damit komplexeren µC). Du siehst ja, selbst zum 8051 
habe ich offene Fragen. ;-)

@Olaf: Ja, alles akademisch. Über die Auswirkungen der Verwendung von 
mehreren Speicherbausteinen hatten wir gar nicht gesprochen.

Noch einmal vielen Dank!

Grüße,
Michael.

von Olaf (Gast)


Lesenswert?

> gut, dass dieses betagte Modell vorgestellt zu haben und nicht einen
> moderneren (und damit komplexeren µC). Du siehst ja, selbst zum 8051

Die moderne Praxis ist im uebrigen das du heute 128k bis 2MByte internen 
Speicher im Controller hast und man in 95% der Faelle aussen nichts mehr 
anschliessen muss. Da wo man das dann aber doch muss hast du dann 
Sorgenfalten wegen den hohen Taktgeschwindigkeiten, Layout, EMV.

Ausserdem ist die Wahrheit das dein Prof nur zu faul ist sein Script zu 
aktualisieren. Mit aehnlichen Begruendungen hat mir im Studium auch ein 
Prof die Roehren nahegebracht obwohl die da auch schon lange Geschichte 
waren. :)

Olaf

von Georg (Gast)


Lesenswert?

Michael H. schrieb:
> Würde das auch
> gelten, wenn man Fall 4 mit einfachen Logikbausteinen (wie mein Fall 3)
> aufbauen würde?

Da liegt ein Missverständnis vor: wieviele Adressbits an die Speicher 
angelegt werden und wieviele für den Zugriff auf die einzelnen Chips 
dekodiert werden müssen, ist ein rein logisches Problem. Es ist also 
völlig egal, ob das mit einem Dekoder wie 74xx138/9 erfolgt oder mit 
einer programmierbaren Logik oder mit einzelnen Gattern oder mit Dioden 
- es muss nur schnell genug geschehen und für jeden Chip ein CS 
erzeugen.

Vereinfachen lässt sich das nur, wenn man den Adressbereich nicht 
ausnutzt: wenn man z.B. nur 16 kB RAM braucht, kann man bei der 
Dekodierung die beiden höchstwertigen Adressbits unbeachtet lassen, dann 
taucht der Speicher halt im 64k-Adressbereich 4mal nacheinander auf, 
aber das stört normalerweise nicht. Kommt in der Praxis oft vor.

Aber:
Michael H. schrieb:
> Dabei sollen die vollen 64 kB EEPROM und die vollen 64 kB
> SRAM ausgeschöpft werden

Das ist also die Aufgabe, bring deinen Prof nicht mit solchen Feinheiten 
durcheinander, er hat es so schon schwer genug. Ich habe das mit der 
teilweisen Dekodierung nur erwähnt weil es sehr oft vorkommt.

Olaf schrieb:
> Mit aehnlichen Begruendungen hat mir im Studium auch ein
> Prof die Roehren nahegebracht obwohl die da auch schon lange Geschichte
> waren. :)

So ging mir das auch, von 16 Versuchen im Praktikum waren 15 mit Röhren, 
in einem einzigen wurde ein Transistor verwendet, sozusagen als Alibi. 
Im Beruf habe ich niemals Röhren verbaut.

Georg

von Michael H. (mic2020)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe mir heute einmal die Mühe gemacht, den Fall 4 in Form eines 
"Logik-Krabs" aufzuzeichnen. Ihr hattet recht, man kommt mit drei 
Adressleitungen (P2.5, P2.6 und P2.7) aus.

Ihr findet das Ergebnis als Bild im Anhang. Wer Zeit und Lust hat, kann 
gern einmal drüber schauen, ob das so in Ordnung ist.

Vielen Dank noch einmal für eure Hilfe und Tipps.

Grüße,
Michael.

von Michael H. (mic2020)


Angehängte Dateien:

Lesenswert?

Hallo,

noch eine Nachfrage: Ich hatte im Netz gelesen, dass man im Fall 1 (je 
nur ein Speicherbaustein) die Pins /CS der Speicherbausteine einfach 
direkt auf Masse legen kann (siehe Skizze im Bild-Anhang). Ist das 
richtig?

Grüße,
Michael.

von Stefan F. (Gast)


Lesenswert?

Ja das ist richtig, weil du oben die drei getrennten Steuersignale hast.

Das müsste dir aber eigentlich logisch vollkommen klar sein. Ich frage 
mich gerade, warum du zweifelst. Hast du den Sinn der /CS Leitung 
eventuell nicht verstanden?

von Karl B. (gustav)


Lesenswert?

Hi,
Speichernummerierung am Baustein angeben.
Bei einem fehlt oben Verbindung zu OE.
Welcher ist das dann nach Deiner Tabelle?
Wieso arbeitest Du nicht mit folgender (Zweierpotenzen) Tabelle?:
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
usw. usf.
SN7442 liefert 1 aus 10 von BCD-codiert.
Kann also schon ein paar Gatter sparen. Aber evtl. Invertierung nicht 
vergessen.
BTW: Dass der Takt "unsymmetrisch" ist und dass da noch die Ebene 
"Maschinenzyklus" dazwischengeschaltet ist, sollte uns zunächst nicht 
interessieren. Aber im Vergleich zu ATMEL AVRs kannst Du dann nicht 
direkt mit das Timing im Programm so einfach bestimmen, da muss dann 
"mehr" gerechnet werden. Ja, es gibt Einbyte Zweibyte Dreibyte-Befehle 
etc. pp.
und Sprungadressen müssen händisch berechnet werden, denn "Label" in der 
bekannten Art wären mir zu dem Zeitpunkt, wo ich mich damit beschäftigt 
hatte, nicht bekannt.
/BTW

ciao
gustav

: Bearbeitet durch User
von Michael H. (mic2020)


Lesenswert?

Hallo zusammen.

@Stephan F.:
Chip Select (/CS) ist dafür gedacht, auszuwählen, auf welchen 
Speicherbaustein (also Speicherbereich mal zugreifen möchte). Bei je nur 
einem Baustein braucht man das nicht. Ich war mir nur nicht sicher, ob 
man:

a) trotzdem einen CS-Befehl vom 8051 zum EPROM / SRAM senden muss oder
b) die CS-Leitung einfach ganz weglassen muss/kann oder
c) man diese einfach auf Masse (wegen Low Active) verbinden kann, sodass 
die Speicherbausteine immer angewählt sind.

@Karl B.:
Wenn ich deine Tabelle nutzen würde, bräuchte ich ja eine Steuerleitung 
mehr (also 4 Bit statt 3 Bit). Und ich müsste offensichtlich ein anderes 
als in der Aufgabenstellung gegebenes Latch verwenden.

In meiner Tabelle bei Fall 4 ist noch ein Fehler. Richtig wäre:
0 0 0 (für Speicher 0)
0 0 1 (für Speicher 1)
0 1 0 (für Speicher 2)
0 1 1 (für Speicher 3)
1 0 0 (für Speicher 4)
1 0 1 (für Speicher 5)
1 1 0 (für Speicher 6)
1 1 1 (für Speicher 7)

Wie gesagt, einfache (grundlegende) Denkweise.

Grüße,
Michael.

von Karl B. (gustav)


Lesenswert?

Hi,
du nimmst doch meine Tabelle, anstatt Dich für den Denkanstoß zu 
bedanken,
mäkelst Du jetzt dran rum?
Ich hatte doch nur noch das nächsthöhere Bit reingesetzt zur besseren 
Plausibilität.
Da Du nur 7 als Dez brauchst, reicht dreimal die eins.
Michael H. schrieb:
> Wie gesagt, einfache (grundlegende) Denkweise.
So what?
Und OE Verbindung auch schon korrigiert?
War nur so ein Frage am Rande.
Wollte heute eigentlich noch die Unterlagen für den oben beschriebenen 
ELV-Bausatz raussuchen. Da Du ja alles schon besser weißt, kann ich mir 
die Zeit dafür sparen.

ciao
gustav

von Michael H. (mic2020)


Angehängte Dateien:

Lesenswert?

Hallo Karl,

na, na, na... nicht gleich die beleidigte Leberwurst spielen. 
(Kritische) Hinterfragungen müssen erlaubt sein und den Vorteil des 
zusätzlichen 4. Bits sehe ich in der Tat leider nach wie vor nicht.

Den fehlenden /OE-Pin hatte ich nachgetragen. Danke für den scharfen 
Blick. Ich hatte es nur noch nicht als Bild hochgeladen. Jetzt ist es 
aber da.

Also nix für ungut und noch einen besinnlichen und friedvollen 
Adventssonntag. ;-)

Grüße,
Michael.

von Stefan F. (Gast)


Lesenswert?

Michael H. schrieb:
> Chip Select (/CS) ist dafür gedacht, auszuwählen, auf welchen
> Speicherbaustein (also Speicherbereich mal zugreifen möchte).

Jein. Wenn man mehrere Speicherchips parallel geschaltet hat und keine 
separaten /OE, /RD und /WR Signale hat, dann kann man /CS dazu nutzen, 
einen Chip auszuwählen.

Aber wenn du zum Beispiel nur einen RAM und einen ROM hast, dann 
brauchst du mein /CS. Denn dann hast du für das ROM die separate /OE 
Leitung und das RAM /RD und /WR. Es würden sich niemals beide Chips 
gleichzeitig angesprochen fühlen.

Aus Sicht der Speicher-Chips ist Chip-Select eine einfache Logische 
Verknüpfung zur Freigabe der Signale /OE, /RD und /WR.
1
              _______
2
/RW  o-------|       |
3
             | Oder  |-----o Low = Daten speichern
4
        +----|_______|
5
        |     _______
6
/CS  o--+----|       |
7
             | Oder  |-----o Low = Daten ausgeben
8
/RD  o-------|_______|

Oder anders gesagt: Ein Chip der immer selektiert ist, ist immer bereit 
gelesen/geschrieben zu werden. Damit hast du die Antwort auf eine 
Fragen:

> a) trotzdem einen CS-Befehl vom 8051 zum EPROM / SRAM senden muss oder
nicht nötig

> b) die CS-Leitung einfach ganz weglassen muss/kann oder
> c) man diese einfach auf Masse (wegen Low Active) verbinden kann
mit GND Verbinden ist machbar. Offen lasen ist nicht zulässig (kein 
gültiger Logikpegel) und mit VCC verbinden würde den Chip komplett still 
legen.

Anders ist es bei Bausteinen mit seriellem SPI Interface. Dort hat das 
Select Signal nicht nur die Aufgabe, einen Chip zu selektieren sondern 
markiert auch den Beginn einer Datenübertragung.

von Dietrich L. (dietrichl)


Lesenswert?

Michael H. schrieb:
> den Vorteil des
> zusätzlichen 4. Bits sehe ich in der Tat leider nach wie vor nicht

Das hat Karl B. auch nur aufgeführt um zu zeigen, wie es weitergehet, 
wenn man mehr als 8 Bausteine verwenden will.

Was ich nicht ganz verstehe: warum schlägst du dich mit den vielen 
Gattern rum, wo die Dekodierung mit dem 74xx138 nur 1 IC benötigt!? 
Georg hatte den Baustein am 18.12.2020 14:13 ja schon erwähnt.

von Michael H. (mic2020)


Lesenswert?

> Was ich nicht ganz verstehe: warum schlägst du dich mit den vielen
> Gattern rum, wo die Dekodierung mit dem 74xx138 nur 1 IC benötigt!?
> Georg hatte den Baustein am 18.12.2020 14:13 ja schon erwähnt.

Weil es einfacher ist, daran zu verstehen, wie ich die Schaltung gedacht 
habe. Sonst müsste ich dem Prof. ja noch die Funktion des 74xx138 
erklären. ;-)

von (prx) A. K. (prx)


Lesenswert?

Michael H. schrieb:
> c) man diese einfach auf Masse (wegen Low Active) verbinden kann, sodass
> die Speicherbausteine immer angewählt sind.

Führt nur zu etwas erhöhtem Stromverbrauch.

von (prx) A. K. (prx)


Lesenswert?

Michael H. schrieb:
> Sonst müsste ich dem Prof. ja noch die Funktion des 74xx138
> erklären. ;-)

Der '138 ist vielleicht älter als der Prof. ,-)

von Stefan F. (Gast)


Lesenswert?

Michael H. schrieb:
> Weil es einfacher ist, daran zu verstehen, wie ich die Schaltung gedacht
> habe. Sonst müsste ich dem Prof. ja noch die Funktion des 74xx138
> erklären. ;-)

Also ich finde es einfacher, den 74138 zu erklären als so eine große 
Menge Logikgatter. Die Logiktabelle im Datenblatt sagt alles aus, was 
man dazu wissen muss.

von Lothar (Gast)


Lesenswert?

Olaf schrieb:
> dein Prof nur zu faul ist sein Script zu aktualisieren

Also bei uns wird auch zuerst ein einfacher aktueller 8051 EFM8BB1 
genutzt und danach erst ein aktueller Cortex-M0 LPC845

Der 8051 wurde mal weggelassen, mit diesem Ergebnis:

Die eine Hälfte nimmt das Eclipse von NXP mit fertigen Makefiles, 
Debugscripts, SDK, Startup-Code, verlinkter UART-Debug-Console und 
Hardfault-Handler, halt so hin, und bastelt neue Projekte mit Copy/Paste

Die andere Hälfte versucht verzweifelt zu verstehen, was da alles 
dranhängt, um ein eigenes neues Projekt fürs LED blinken zu erstellen, 
was dann lange nicht läuft.

Der EFM8BB1 ist aber ohne das alles zum LED blinken zu bringen, und es 
braucht weder Programmer noch Debugger, man lädt einfach das HEX über 
USB/UART-Kabel mit dem Bootloader, den der Hersteller Silabs schon drauf 
gemacht hat.

Ok der LPC845 hat auch einen Bootloader, aber dafür müsste es ja erst 
mal ein laufendes HEX haben.

von Karl B. (gustav)


Lesenswert?

Lothar schrieb:
> aber dafür müsste es ja erst
> mal ein laufendes HEX haben.

Hi,
größte Probleme gab es bei mir, Programme wollten partout nicht laufen.
Weil man beachten muss, ab welcher Adresse die Programme starten. Nicht 
bei Adresse 0 sondern bei Adressse 1 oft.
Der ganze EPROM-Inhalt ist dann um eine Adresse versetzt.
Der Sinn der Sache? Ich rate mal:
Weil es noch kein Brownout etc. und Beginn des Programms nach 
definierter Oszillator-Einschwingphase, gesetzt per Fuses, wie bei AVRs 
gibt.

ciao
gustav

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Karl B. schrieb:
> Der ganze EPROM-Inhalt ist dann um eine Adresse versetzt.

Das könnte am falschen LS374 FF liegen, daß das Low-Byte versetzt ist.
Der 80C51 hat jedenfalls seinen Resetvector an 0x0000. Es sind auch nur 
3 Bytes Platz bis zum externen Interrupt 0 an 0x0003 für einen 
LJMP-Befehl.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Dietrich L. schrieb:
> wo die Dekodierung mit dem 74xx138 nur 1 IC benötigt!?

Ich werfe auch mal den 74HC156 in den Raum. Kann manchmal jegliche extra 
Logik für ROM und RAM einsparen.

von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Peter D. schrieb:
> Der 80C51 hat jedenfalls seinen Resetvector an 0x0000.

Hi,
ohne das NOP auf Adresse 00 läuft's nicht.

ciao
gustav

von Peter D. (peda)


Lesenswert?

Karl B. schrieb:
> ohne das NOP auf Adresse 00 läuft's nicht.

Dann sollte man besser den Fehler suchen.

Beitrag #6549125 wurde vom Autor gelöscht.
von Michael H. (mic2020)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe mal eben im Fall 3 das "Logikgrab" durch zwei DMUX ersetzt...
siehe Bild im Anhang. Müsste ja so passen, oder?

Grüße,
Michael.

von Peter D. (peda)


Lesenswert?

Michael H. schrieb:
> Müsste ja so passen, oder?

Ne, immer noch nicht.
Der LS374 ist 1. kein Latch und 2. speichert mit der falschen Flanke.

von Andreas B. (myratz)


Lesenswert?

Warum verwendest Du nicht die Addressleitungen A15 bzw A14/A15 zum 
Ansteuern und sparst dir das mit den Ports?

Der 8051 kann 64kb adressieren. Das über die Ports ist nur nötig, wenn 
du mehr als 64kb verwenden willst.

Das mit dem Bankswitching fürs EPROM ist tricky. Besser den hohen 
Bereich über die Adressleitungen adressieren.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Andreas B. schrieb:
> Warum verwendest Du nicht die Addressleitungen A15 bzw A14/A15 zum
> Ansteuern und sparst dir das mit den Ports?

P2.6 und P2.7 sind A14 und A15 bei externem Zugriff. Da ist kein extra 
Port im Spiel.

von Michael H. (mic2020)


Lesenswert?

> P2.6 und P2.7 sind A14 und A15 bei externem Zugriff. Da ist kein extra
> Port im Spiel.
... wie meinst du das?

von Andreas B. (myratz)


Lesenswert?

Matthias S. schrieb:
> Andreas B. schrieb:
> Warum verwendest Du nicht die Addressleitungen A15 bzw A14/A15 zum
> Ansteuern und sparst dir das mit den Ports?
>
> P2.6 und P2.7 sind A14 und A15 bei externem Zugriff. Da ist kein extra
> Port im Spiel.

Danke für den Hinweis. Wer lesen kann ist klar im Vorteil. 😊

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Michael H. schrieb:
> wie meinst du das?

Bild angucken? Lies nochmal den Beitrag über meinem. Bei voller 
Beschaltung mit externem 64k ROM und 64k RAM sind nur noch Port 1 und 
Port 3 verfügbar. Port 3 nur eingeschränkt, weil /WR und /RD da drauf 
sind.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Michael H. schrieb:
> Müsste ja so passen, oder?

Der Fall mit zwei DMUX wird nicht korrekt funktionieren, denn  dort sind 
immer zwei RAM und zwei ROM gleichzeitig selektiert.

Schreibe dir mal eine Wahrheitstabelle mit P2.6 (=A14) und P2.7 (=A15) 
als Input und die selektierten Chips als Output. Dann wirst du es sehen.

von Michael H. (mic2020)


Lesenswert?

> Der Fall mit zwei DMUX wird nicht korrekt funktionieren, denn  dort sind
> immer zwei RAM und zwei ROM gleichzeitig selektiert.
Stimmt, du hast Recht.

> Schreibe dir mal eine Wahrheitstabelle mit P2.6 (=A14) und P2.7 (=A15)
> als Input und die selektierten Chips als Output. Dann wirst du es sehen.
Sorry, hier habe ich gerade ein Brett vor dem Kopf. Was meinst du, was 
das Problem ist?

von Michael H. (mic2020)


Lesenswert?

> Bild angucken? Lies nochmal den Beitrag über meinem. Bei voller
> Beschaltung mit externem 64k ROM und 64k RAM sind nur noch Port 1 und
> Port 3 verfügbar. Port 3 nur eingeschränkt, weil /WR und /RD da drauf
> sind.

Ich muss doch aber auch bei einem DMUX zwei Ports (P2.6 und P2.7) für 
Chip Select (eben jetzt über den DMUX) "wegnehmen" und somit kann ich 
auch in den Speicherbausteinen nicht mehr die volle Breite nutzen und 
muss A14 und A15 "ungenutzt" lassen.

P2.0 --> A08
P2.1 --> A09
P2.2 --> A10
P2.3 --> A11
P2.4 --> A12
P2.5 --> A13
P2.6 --> C0 des DMUX
P2.7 --> C1 des DMUX
und damit:
A14 leer
A15 leer

Grüße.

von Stefan F. (Gast)


Lesenswert?

Michael H. schrieb:
>> Der Fall mit zwei DMUX wird nicht korrekt funktionieren, denn
> dort sind
>> immer zwei RAM und zwei ROM gleichzeitig selektiert.
> Stimmt, du hast Recht.
>
>> Schreibe dir mal eine Wahrheitstabelle mit P2.6 (=A14) und P2.7 (=A15)
>> als Input und die selektierten Chips als Output. Dann wirst du es sehen.
> Sorry, hier habe ich gerade ein Brett vor dem Kopf. Was meinst du, was
> das Problem ist?
1
 input      output (RAM select)
2
A15  A14      0   1   2   3
3
==================================
4
 0    0       1   0   1   0
5
 0    1       0   1   1   0
6
 1    0       1   0   0   1
7
 1    1       0   1   0   1

Hier sind in jeder Reihe zwei RAM's gleichzeitig selektiert -> 
Kurzschluss auf dem Datenbus. Richtig wäre es wie in deiner rechten 
Schaltung mit einem MUX:
1
 input      output (RAM select)
2
A15  A14     Y0  Y1  Y2  Y3
3
==================================
4
 0    0       1   0   0   0
5
 0    1       0   1   0   0
6
 1    0       0   0   1   0
7
 1    1       0   0   0   1

von Stefan F. (Gast)


Lesenswert?

Michael H. schrieb:
> P2.6 --> C0 des DMUX
> P2.7 --> C1 des DMUX
> und damit:
> A14 leer
> A15 leer

Ja richtig so. Die 16k großen Chips haben deswegen logischerweise auch 
keine A14 und A15 Anschlüsse.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan ⛄ F. schrieb:
> Der Fall mit zwei DMUX wird nicht korrekt funktionieren, denn  dort sind
> immer zwei RAM und zwei ROM gleichzeitig selektiert.

Doch, das klappt. Die Unterscheidung zwischen ROM und RAM erfolgt über 
/PSEN, /RD und /WR.

Michael H. schrieb:
> Ich muss doch aber auch bei einem DMUX zwei Ports (P2.6 und P2.7) für
> Chip Select (eben jetzt über den DMUX) "wegnehmen" und somit kann ich
> auch in den Speicherbausteinen nicht mehr die volle Breite nutzen und
> muss A14 und A15 "ungenutzt" lassen.

Ja, richtig. Es ist lediglich verwirrend für 'nicht MCS-51er' , das du 
da P2.6 und P2.7 schreibst und nicht A14 und A15.

von MCUA (Gast)


Lesenswert?

MUX-Outs, auch vom '138,  sind nrm L-active,
geht meist auf \CS vom RAM-ICs.

von Stefan F. (Gast)


Lesenswert?

Matthias S. schrieb:
> Doch, das klappt. Die Unterscheidung zwischen ROM und RAM erfolgt über
> /PSEN, /RD und /WR.

Nein, das klappt nicht. Wie gesagt sind immer 2 RAM gleichzeitig 
selektiert und auch 2 ROM. Es darf aber nur 1 RAM und 1 ROM sein.

von MCUA (Gast)


Lesenswert?

>> Der Fall mit zwei DMUX wird nicht korrekt funktionieren, denn  dort sind
>> immer zwei RAM und zwei ROM gleichzeitig selektiert.
> Doch, das klappt. Die Unterscheidung zwischen ROM und RAM erfolgt über
> /PSEN, /RD und /WR.
Nein Kurzschluss.
Man kann nicht n MUXs mit je einem A-Pin an n Adress-Leitungen 
anschliessen.
Der MUX muss die ganze zu dekod. Adresse erfassen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan ⛄ F. schrieb:
> Nein, das klappt nicht. Wie gesagt sind immer 2 RAM gleichzeitig
> selektiert und auch 2 ROM. Es darf aber nur 1 RAM und 1 ROM sein.

Ja, stimmt, hast recht. Funktionieren tut Fall 3 mit einem 4-fach DMUX, 
z.B. 1/2 mal 74HC156.

von MCUA (Gast)


Lesenswert?

'138 '139 ist m.E. mehr effizient, weil die mehrere \G-Anschlüsse haben
(ups, sind wir in den 70ern?)

von R. M. (rmax)


Lesenswert?

Übrigens sind in allen Schaltplänen von Fall 4 mit diskreter Logik 
(zuletzt am 20.12.) die Zuordnungen der /CS-Leitungen zu den Chips 
durcheinander bzw. die Adressbeschriftungen auf den Chips falsch. 
Beispielsweise selektiert der oberste NAND-Baustein, der direkt mit den 
drei Adressleitungen verbunden ist, nicht die Adresse 0000H, sondern 
E000H (der Ausgang wird nur dann 0 wenn alle drei Adressbits 1 sind). 
Damit es mit der vorhandenen Verdrahtung und Beschriftung stimmt, 
müssten es OR-Gatter sein.

Außerdem ist die Wertigkeit der Adressbits in der Wahrheitstabelle 
verdreht: P2.7 ist das MSB A15, P2.5 das LSB A13.

Für das RAM ist das im Grunde egal, aber beim EPROM werden dadurch halt 
die erwarteten Inhalte nicht am erwarteten Ort im Speicher auftauchen.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.