www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Microcontroller als parallel Slave


Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.)

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Carsten St. (carsten)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm ein bidirektionales Latch (74HC646).


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.