Hallo, es müsste doch eigentlich möglich sein einen µC als Slave über einen Datenbus anzusteuern. Folgendes hab ich mir gedacht: Mein Hauptcontroller hat ein EMI mit WAIT Leitung. Jetzt hänge ich da einen Slave Controller ran. Adressleitungen an Ports (Slave), /CS an einen IRQ-Eingang vom Slave, 8 Datenleitungen an einen Port. Wait an einen Port, ebenso /OE und /WE. Wenn ich jetzt im Hauptcontroller auf den Speicherbereich zugreife sollte der den /CS von Slave low legen, der erkennt das in dem IRQ. In der IRQ Routine wird die WAIT Leitung auf LOW gelegt (ist Low aktiv). Die Daten zu der Adress an den Datenbus angelegt oder gelesen (abhängig /OE oder /WE). Dann WAIT auf High. Somit könnte ich doch theoretisch die Daten die sonst über SPI kommen in den Speicher des Hauptcontrollers hängen. Es geht nicht um sinn oder unsinn der Angelegenheit sondern ob es möglich ist. Hat sowas vielleicht schonmal jemand gemacht?
Theoretisch geht das, praktisch nicht, denn die Zeit zwischen CS\ aktivieren und Daten schreiben liegt manchmal im 2 stelligen ns Bereich. Der Slave uC müsste also mit einigen 100MIPs laufen, und innerhalb von wenigen Takten auf einen Interrupt reagieren. Praktisch ist das unmöglich. Das kann man aber mit einem FIFO umgehen (notfalls baut man sich ein 1Byte FIFO aus einem HC574 und einem HC74.)
Wird ganz ohne externe Hardware nicht funktionieren, da der Master die Wait-Leitung erst sieht, wenn der Slave im Interrupt ist. Und das dauert zu lang. Alternative: Gate vom Type '125 mit Eingang an Portpin, Ausgang an Wait, Enable an /CS. Der Portpin ist normerweise 0. Wird nun der Slave selektiert, wird Wait automatisch aktiv, solange bis der Slave den Portpin freigibt (und dann gleich wieder auf 0 setzt).
Also würde ich quasi die WAIT Leitung als OpenDrain machen mit einem Pull-Up. Wenn die /CS Leitung gesetzt wird (also Low), könnte ein ein NAND Gatter (Eingang 1 /CS, Eingang 2 Port Slave) einen Transistor schalten, der wiederrum die WAIT Leitung auf Masse zieht. Der Slave Port wäre dann Standartmäßig Low. Wenn das WAIT Aufgelöst werden soll, müsste also der Port vom Slave auf High Pegel gehen (quasi fertig signal). Damit würde das NAND die Zustände 0 (CS) und 1 (SLAVE Fertig) haben, Ausgang auf 0, Transitor löst und die WAIT Leitung ist wieder high. Direkt nach deselektierung muss der Slave dann den Fertig Port auf Low Pegel legen .. Irgendwann probiere ich das mal aus so zum Spaß. Eine anständige Geschwindigkeit bekommt man damit vermutlich nicht hin, oder?
Ein PIC16F877 (und Verwandte) kann als Slave an einem 8-Bit Bus hängen. Stichwort ist Parallel Slave Port. Mein damaliger Prof hat gemeint, das können nur PICs - ob das heute noch stimmt weiß ich nicht.
Carsten Steiner wrote: > Mein damaliger Prof hat gemeint, das können nur PICs - ob das heute noch > stimmt weiß ich nicht. Und wieder mal ein Prof der keine Ahnung hat. Sowas gab es schon vor sehr vielen Jahren: 8042 : Peripheral Slave Controller. Meist als Keyboardcontroller verwendet, und selbst heute noch in irgendeiner Form im Chipsatz integriert (oder zumindest dessen Funktion nachgebildet).
Auch als Z8-UPC. Davon gab es eine Version mit Fassung für 2KB SRAM huckpack, fürs Programm, mit kleinem Bootloader im ROM.
@Carsten: Cool, das kannte ich ja noch garnicht. Das ist echt mal ein wirklicher Vorteil der PICs gegenüber den AVRs. Bei den AVRs ist das leider nur mit externer Hardware möglich. @ich: Ich finde es eigentlich echt praktisch einen µC über ein paralleles Interface anzusprechen. Ich hatte mal überlegt eine einface ISA-Karte mit einem AVR als Slave zu basteln. Der sollte dann die POST-Codes prüfen und bei Fehlern eine Nachricht auf einem LCD anzeigen. Hab das aber leider nie realisiert. Gruß, SIGINT
Nur mal als Basis zum weiter ausbauen : Beide µC an eine Datenbus,Adressbus und Steuerbus mit einem RAM verbinden. Es können also beide µC auf den RAM zugreifen. Du musst dich nur um die gegenseitige verriegelung und syncronisierung kümmern.
@Obelix Dann könnte ich ja auch ein (zugegeben teures) Dual Port RAM nutzen. Dann brauche ich mich nicht darum zu kümmern wann wer lesen/schreiben darf. Wäre auch ne möglichkeit .. das andere wäre aber billiger :) Wenn die Geschwindigkeit nicht ultra-lahm wäre dann fände ich das auch praktisch parallel Slave Devices anzusprechen. Also mit einem NAND-Gatter würde das so gehen wie ich gedacht hätte? EInzige Konvention wäre, das lese/schreibzugriffe auf das Slave eine gewisse zeit auseinander liege weil der Slave ja sein "Fertig-Signal" löschen muss.
Wait ist meist als 0=warten definiert. Ein O.C.NAND taugt dazu nicht, auch kein O.C-AND (NAND plus Transistor), allenfalls O.C.OR. Einfacher: '125.
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.