Forum: Mikrocontroller und Digitale Elektronik 8-bit Bus: Wie geht das elegant?


von Tristan Tzschichholz (Gast)


Lesenswert?

Hi,

ich habe vor in einem Roboterprojekt mehrere Mikroprozessoren mit einem
8-bit Bus zu verbinden. Für Adress- und Datenbus gehen jeweils 8
Leitungen drauf. Nun meine Frage: Kennt jemand ein IC, das
Adressdecodierung mit Enable Leitung (und evt. noch Bustreiber) in
einem Gehäuse vereinigt?
Mein Problem ist, dass ich zu diesem Zweck momentan einen 8-Bit
Vergleicher, ein AND-Gate und einen Bustreiber brauche. Das ist schon
sehr aufwändig und ich hätte es gerne etwas einfacher. Der I²C-Bus
kommt für mich nicht in Frage, weil er etwas langsam ist.

Danke im Voraus

Tristan

von C. Lechner (Gast)


Lesenswert?

Hallo,

ich würde in dem Fall der Flexibilität wegen auf Programmierbare Logik
(z.B. Xilinx XC9536XL oder XC9572XL) setzen. Da kannst Du nachher noch
beinahe beliebig verändern (nur durch die Chipgröße beschränkt). Die
Software gibt's von Xilinx, die Chips vom Reichelt (kostet sehr wenig)
und einen Adressdekoder kann man in VHDL nach einigen Stunden (wenn Du
bei Null anfängst) hinbekommen.

Das Layout wird auch einfacher und vor allem: Mit dem IC-Grab hast Du
ein riesiges Problem, wenn Du eine Adresse verändern willst.

MfG
- C. Lechner

von Joachim (Gast)


Lesenswert?

Nur so aus Interesse (und weil I2C immerhin bis 3.4Mbit/s geht):

Welche Daten werden denn übertragen?

von Tristan Tzschichholz (Gast)


Lesenswert?

Die Datenrate von I²C würde vermutlich noch reichen, allerdings haben
die Controller die da dran hängen ohnehin schon genug zu tun und ich
weiß nicht, ob die Latenzzeiten dann auffallen. Ich habe I²C bis jetzt
nur an dem Bedienteil im Einsatz, wo ein paar LEDs oder ein Summer
anzusteuern sind. Bluetooth und GPS ist fest vorgesehen, eine einfache
Motorsteuerung und dann noch diverse Extras (daher auch das Bussystem,
damit das Ganze gut erweiterbar ist).
Das Projekt steht gerade noch am Anfang, aber ich weiß wirklich nicht,
ob I²C in diesem Fall die beste Wahl ist (v.a. sind die 3.4MBit/s doch
das absolute Optimum und ich behaupte bei relativ vielen Devices am Bus
dürfte das etwas einbrechen).
Oder ist ein 8-bit Bus hier reichlich überdimensioniert? Ich habe sowas
noch nie vorher gebaut, also lasse ich mich gerne belehren :)

von Rufus T. Firefly (Gast)


Lesenswert?

Du wirst Dir bei Deinem 8-Bit-Bus Gedanken machen müssen um die
Verwaltung - welcher Controller darf den Bus wann belegen?
Solche Verfahren sind gar nicht so trivial, und da hat die Verwendung
eines etablierten Protokolles schon so ihre Vorzüge.
Wie stellst Du Dir denn so Deinen Busbetrieb vor? Soll es einen
Busmaster geben, der die anderen Busteilnehmer pollt oder soll es einen
Multimaster-Betrieb geben (jeder darf wann er will)?

von peter dannegger (Gast)


Lesenswert?

Ehe man irgendeinen Bus zusammenschustert, sollte man sich schon
überlegen, mit welchen Datenraten man es zu tun hat.

Auch sollte man die Aufgaben so aufteilen, daß sich möglichst wenig
Datenaustausch ergibt.

Bzw. man sollte sich erstmal sicher sein, daß überhaupt mehrere CPUs
notwendig sind.

CPUs sind auch nur Menschen. D.h. wenn 3 Personen ein Projekt
bearbeiten sind sie nur etwa doppelt so schnell, wie einer, eine Person
geht voll für die Kommunikation drauf.


Ein 8Bit-Bus ist sehr ungünstig. Es gab früher mal 8051-er, die quasi
wie ein SRAM als Slave angesprochen werden konnten. Ansonsten sind mir
keine µCs bekannt, die sowas können.
Und zu Fuß kostet das ne Menge Softwareaufwand.


Ich würde den CAN-Bus empfehlen.
Irgendeiner stellt einfach 8 Bytes in seinen Sendepuffer und irgendwann
findet der andere die 8 Bytes in seinem Empfangspuffer. Dazwischen sind
exakt 0 Byte Software nötig (macht ja alles die Hardware).


Peter

von Tristan Tzschichholz (Gast)


Lesenswert?

Ich werde mir das mit dem 8-bit Bus nochmal überlegen. Geplant war eine
Master-CPU, die andere pollt. Damit das nicht ständig Traffic erzeugt,
können die gesprächswilligen per Interrupt die Master-CPU
benachrichtigen.

Auf jeden Fall mal vielen Dank für eure Antworten.

von Joachim (Gast)


Lesenswert?

CAN ist natürlich die Königslösung.
Vom parallelen Bus kann ich auch nur abraten. Du musst in einer
gestörten Umgebung wie einem Roboter mit Motoren für Datensicherheit
sorgen. Damit Du die Daten nicht zu oft senden musst, ist da einiges in
Hardware nötig (Parity, Error Correction, etc.).
Ein serieller Bus ist da genau richtig.
Du könntest auch den UART nehmen oder SPI.
Ich kann allerdings Peter nur zustimmen, CAN macht den geringsten Ärger
und kostet auch kaum mehr.

von Michael (Gast)


Lesenswert?

Für solche Aufgaben ist der IEC-Bus (auch IEEE oder HP-IB) dereinst
geschaffen worden. Der Aufwand ist nicht unerheblich, wenn das
komplette Protokoll gefahren werden soll (wechselnde Master). Was
hierbei aber gut ist, und wo Du sonst sicherlich Probleme bekommen
wirst, ist die Ansteuerung des Busses über spezielle Treiber ICs:
75160-75162.

Falls jemand glaubt, es würde klappen, einfach mehrere Teile parallel
zu schalten, darf sich nicht wundern, wenn ab und zu die ganze Sache
stehenbleibt.

von Tristan Tzschichholz (Gast)


Lesenswert?

Hm, ich denke ich werde mir den CAN Bus mal zu Gemüte führen. Der 8-bit
Bus hätte eben den Vorteil, dass die MPUs relativ wenig
Rechenleistung für die Transfers benötigen und dass man recht schnell
übertragen kann. Durch die Interrupt-Geschichte würde zudem ein
gleichzeitiges Auftreten von Schreib-/Leseoperationen vermieden.
Zwecks Fehlerkorrektur habe ich mir zugegebenermaßen noch keine
Gedanken  gemacht - da würde ich mich einfach auf die
Wahrscheinlichkeit für das Auftreten von Fehlern verlassen (ansonsten
wäre - wie schon Joachim richtig bemängelt - der Aufwand immens hoch)
IEC-Bus werde ich mir auch mal ansehen. Hab davon noch nicht mal gehört
(CAN kenne ich wenigstns vom Hörensagen).

Vielen Dank für eure Tipps!

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.