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
Matthias W. schrieb: > Schliesslich soll das ganze ja Bidirektional > funktionieren. Und wie soll das mit einem 74hc244 funktionieren?
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.
/WE des EPROM darf nicht permanent auf GND liegen. Wenn du in der Schaltung nicht programmieren willst (kannst), leg es auf VCC.
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).
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.