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
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
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.
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
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.
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.
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!
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
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
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.
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.
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
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.
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).