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.
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.
:
Bearbeitet durch User
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.
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.
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.
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)
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.
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.
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
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.
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
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.
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.
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.
> 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?
> 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
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.
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.
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.
> 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
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
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.
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.
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?
:
Bearbeitet durch User
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
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.
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
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.
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.
:
Bearbeitet durch User
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.
> 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. ;-)
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.
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. ,-)
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.
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.
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
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.
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.
Peter D. schrieb: > Der 80C51 hat jedenfalls seinen Resetvector an 0x0000. Hi, ohne das NOP auf Adresse 00 läuft's nicht. ciao gustav
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.
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.
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.
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.
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.
> P2.6 und P2.7 sind A14 und A15 bei externem Zugriff. Da ist kein extra > Port im Spiel. ... wie meinst du das?
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. 😊
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
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.
> 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?
> 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.
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 |
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.
:
Bearbeitet durch User
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.
MUX-Outs, auch vom '138, sind nrm L-active, geht meist auf \CS vom RAM-ICs.
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.
>> 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.
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.
'138 '139 ist m.E. mehr effizient, weil die mehrere \G-Anschlüsse haben (ups, sind wir in den 70ern?)
Ü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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.