MC 8051 Speicheranschluss

#6514869
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.
Angehängte Dateien:
Gast #6514909
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.
Gast #6514928
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.
#6514962
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)
#6515008
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.
Angehängte Dateien:
#6515039
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.
#6515288
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.
#6515641
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
Gast #6515715
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.
Gast #6515751
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.
Gast #6515773
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?
Gast #6515779
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
(Firma: matzetronics) #6515904
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.
Gast #6516073
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.
#6516198
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.
Gast #6516210
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
Gast #6516329
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
#6517467
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.
Angehängte Dateien:
Gast #6517487
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?
#6517497
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
#6518680
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.
#6518853
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
#6518873
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.
Angehängte Dateien:
Gast #6518888
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.
#6519171
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.
#6519308
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. ;-)
Gast #6519351
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.
Gast #6519416
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.
#6519941
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
Beitrag #6549125 wurde von einem Moderator gelöscht.
#6549166
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.
Gast #6549213
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.
#6549242
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?
#6549246
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.
Gast #6549247
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
(Firma: matzetronics) #6549256
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.
Gast #6549321
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.
#6549384
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren