Forum: Mikrocontroller und Digitale Elektronik 80C51 - External Access und Bus


von Franz R. (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich bastel derzeit an einen SBC mit dem 80C51 aus den 80ern,
wie man sieht hab ich soweit alles verbunden bis auf paar Kleinigkeiten.
Das ganze ist nur ein Hobby/Lernprojekt.
Auf den uC soll später erstmal Paulmon laufen.

Ich hab einige Fragen bezüglich der Herrausleitung des Busses.
Ich möchte den BUS Gerne auf einen Connector legen.
Dieser soll gebuffert sein.
Wenn ich nun den 74HC245 als Bus Treiber benutze was mach ich dann mit 
Output Enable ? Schliesslich soll das ganze ja Bidirektional 
funktionieren.
Output Enable ist LowActive, das heisst bei Write auf VCC.
Also mit auf WR legen ? bzw PSEN? und wohin mit DIR ?

Chipselect/WR usw gibt es ja nur einmal, wie führe ich diese am besten 
auf den BUS ? Ich nehme mal an überhaupt nicht.
Man nimmt da weitere I/O Pins ?

Möchte später noch eine weitere Karte mit 8255 und weiteren Geräten/ICs 
anschliessen.


Danke

Matthias

von Tom A. (toma)


Lesenswert?

Hallo Matthias,

mit dem 74xx244 wird es als Datenbustreiber nicht funktionieren, den der 
ist nur unidirektional und somit nur für den Adressbus brauchbar.

Für den Datenbus ist der 74xx245 oder Ähnliches geeignet, denn der kann 
die Richtung umschalten. Als Umschaltsignal kannst du, abhängig von der 
Verdrahtung, das /RD oder /WR Signal verwenden.

Gruß. Tom

von Assembler Nichtkenner (Gast)


Lesenswert?

Matthias W. schrieb:
> Schliesslich soll das ganze ja Bidirektional
> funktionieren.

Und wie soll das mit einem 74hc244 funktionieren?

von Tom A. (toma)


Lesenswert?

Zur eigentlichen Frage, den /OE kannst du permanent aktivieren.

von Franz R. (Gast)


Lesenswert?

Es war natürlich 74245 gemeint, Sorry :)
Habs oben angepasst.

von Georg G. (df2au)


Lesenswert?

Tom Amann schrieb:
> Zur eigentlichen Frage, den /OE kannst du permanent aktivieren.

Und was passiert dann mit dem Bus an der CPU bei einem Lesezugriff auf 
das interne RAM? Der Stärkere gewinnt?

OE des Bustreibers darf nur aktiv sein, wenn auch externe Gerätschaften 
angesprochen werden.

Soll auch Code von außen ausgeführt werden können? Nur dann muss PSEN in 
die Logik mit einbezogen werden.

Bei 32k internem RAM bietet es sich an, über A15 den Zugriff nach außen 
zu steuern.

von Ralf (Gast)


Lesenswert?

Ich glaube nicht dass deine Schaltung so brauchbar ist.

Ein kurzes(!) Drüberschauen lässt mich zumindest bei fest auf GND 
gelegten CE-Signalen schaudern - im Prinzip heisst das nämlich, dass 
sowohl RAM als auch ROM permanent scharf sind. Da du den ROM über PSEN 
lesend ansprichst mag das vom RD-Signal entkoppelt sein, aber spätestens 
ein WR wird beide Chips die Daten übernehmen lassen - was dein ROM draus 
macht weiß ich nicht, aber ich glaub nicht dass das Absicht ist, oder?

Mach die Differenzierung lieber zusätzlich über die Addressleitungen. 
Vorher macht nämlich das herausführen des Busses überhaupt keinen Sinn, 
denn wie willst du dafür sorgen, dass das RAM nicht reagiert?
Was du hier brauchst ist eine ordentliche(!) Addressdekodierung. 
Beispielsweise folgende MemoryMap:

0kB...32kB:       1.RAM 32kB
32kB...64kB-256B: 2. RAM 32kB
64kB-256B...64kB: 256 Bytes IO-Bereich, z.B. aufteilbar in 8 Pages à 32 
Byte oder 16 Pages à 16 Bytes.
So hab ich das auf meinem System damals gemacht.

Braucht ein paar ICs mehr, ist aber ordentlich(tm).
Stichwörter:
8-fach NAND, 2-fach NAND, 3-8-Dekoder bzw. 4-16-Dekoder...

Ralf

von Peter D. (peda)


Lesenswert?

Matthias W. schrieb:
> Möchte später noch eine weitere Karte mit 8255 und weiteren Geräten/ICs
> anschliessen.

Möchtest Du wirklich mit einer Neuentwicklung soweit in die 
Vergangenheit zurück reisen?

Heutzutage gibt es 8051 mit Flash und UART-Bootloader intern. Quarz und 
MAX202 dran, fertig ist die Laube.
ADC, PWM, Capture, I2C, SPI, CAN, USB haben die oft auch intern.
Und IO-Erweiterung macht man deutlich bequemer mit 74HC595/165 am SPI, 
falls die gewonnenen 18 IOs nicht schon ausreichen.

von Georg G. (df2au)


Lesenswert?

/WE des EPROM darf nicht permanent auf GND liegen. Wenn du in der 
Schaltung nicht programmieren willst (kannst), leg es auf VCC.

von Jürgen D. (poster)


Lesenswert?

Den Steuerbus und ein paar hohe Adressleitung hat man auch gerne über 
ein GAL geführt, da konnte man dann die ganze CS Generierung bequem 
programmieren. Frei Ausgange des GAL kann man dann noch auf den BUS 
Steckerführen um auch dort CS Signale zu haben.

von Matthias (Gast)


Lesenswert?

Also LS138 mit an A13/14/A15 und daraus dann CS generieren.

Danke für die Wertvollen Tipps!

Muss ich CS extra für ROM und RAM erzeugen ?
Da der 80C51 ja getrennte Bereiche für ROM und RAM hat?

Danke!

von Tom A. (toma)


Angehängte Dateien:

Lesenswert?

Hallo Matthias,

hier mal ein Beispiel für externen Speicher am 51er. Das Eprom liegt im 
Adressbereich 0000h-7FFFh, das RAM im Bereich 8000h-FFFFh. Dekodiert 
werden sie über das A15 Signal, 0 = CS-ROM, 1 = CS-RAM.

Das RAM arbeitet nach von Neumann (RD & PSEN), wodurch Programme 
runtergeladen und ausgeführt werden können. Das Signal "PowerG" kommt 
vom Netzteil und sperrt Zugriffe auf das RAM, wenn die Spannung zu klein 
wird. Ohne Batteriepufferung des RAM kann dieses Signal fest auf "1" 
gelegt sein.

Nicht über die beiden Quarze wundern, sie sind im Layout damit einer von 
zwei verschiedenen Quarzen bestückt werden kann.

Die Schaltung funktioniert seit vielen Jahren problemlos. Es handelt 
sich dabei um ein kleines System zum lernen und experimentieren mit 
8051. Die Programme werden am PC erstellt und über die RS232 ins RAM 
übertragen und dort ausgeführt.

Gruß. Tom

von Georg (Gast)


Lesenswert?

Hallo,

wie bei einem klassischen System mit Bus üblich kommst du nicht um einen 
Schaltungsteil zur Erzeugung von CS-Signalen herum, wie das aussieht 
musst du selbst bestimmen. Beim Programm-Eprom kannst du mit PSEN 
auskommen, vorausgesetzt du benutzt im Programmspeicherbereich nichts 
anderes als das eine Eprom. Beim Memory-Bus dagegen musst du CS-Signale 
erzeugen je nachdem wie du deine Peripherie ansprechen willst, z.B. RAM 
0000-7fff und externen Bus für >8000, oder wie immer du das haben 
möchtest. Beim genannten Beispiel dient A15 zur Unterscheidung, der 
Datenbuffer 245 wird Richtung CPU geschaltet für /RD AND A15. Dafür und 
noch für etwas mehr Dekodierung reicht ein 74xx138, GALs braucht man nur 
wenns komplizierter wird.

Georg

von Peter D. (peda)


Lesenswert?

Jürgen D. schrieb:
> Den Steuerbus und ein paar hohe Adressleitung hat man auch gerne über
> ein GAL geführt

Dann braucht man aber ein Programmiergerät.
Und GALs fressen bis zu 90mA, also vermutlich mehr als die restliche 
Schaltung.
GALs stellt nur noch Atmel her (ATF22V10).

Die 74LS würde ich wenigstens durch 74HCT ersetzen.

von Peter D. (peda)


Lesenswert?

Ein externer Datenbus auf einer Backplane ist ein Albtraum, ich hab mich 
mit sowas früher rumärgern müssen.
Selbst mit 48mA-Treibern für jede Leitung auf jeder Platine und mit 
Terminatorwiderständen ist sowas sauempfindlich und bei nur 2-lagigem 
Layout kaum zu beherrschen.

von Georg (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Ein externer Datenbus auf einer Backplane ist ein Albtraum

Es gab Millionen davon, und funktioniert haben sie auch. Und sie wurden 
nicht nur von Idioten wie mir verwendet, sondern z.B. auch von Siemens 
und Kontron. Deine Aussagen sind reine Überheblichkeit.

Georg

von Peter D. (peda)


Lesenswert?

Georg schrieb:
> Es gab Millionen davon, und funktioniert haben sie auch.

Natürlich geht sowas, aber es ist kein Anfängerprojekt, wenn man noch 
wenig Erfahrungen mit Layouten hat.

Überheblich ist, zu suggerieren, es wäre popeleinfach.
Aber jeder darf natürlich soviel Lehrgeld zahlen, wie er will.

von Peter D. (peda)


Lesenswert?

Hier noch ne App-Note zu möglichen Problemen beim externen Zugriff:

http://www.maximintegrated.com/en/app-notes/index.mvp/id/91

Ich hatte dieses Problem schon selbst beobachtet. Grund war ein 
grauenhaftes Layout (externer Dienstleister mit Autorouter).

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.