Forum: Mikrocontroller und Digitale Elektronik Microcontroller als parallel Slave


von ich (Gast)


Lesenswert?

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?

von Benedikt K. (benedikt)


Lesenswert?

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

von A.K. (Gast)


Lesenswert?

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

von ich (Gast)


Lesenswert?

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?

von Carsten S. (carsten)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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

von A.K. (Gast)


Lesenswert?

Auch als Z8-UPC. Davon gab es eine Version mit Fassung für 2KB SRAM 
huckpack, fürs Programm, mit kleinem Bootloader im ROM.

von Sigint 112 (sigint)


Lesenswert?

@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

von Obelix (Gast)


Lesenswert?

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.

von ich (Gast)


Lesenswert?

@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.

von A.K. (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Nimm ein bidirektionales Latch (74HC646).


Peter

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.