Forum: Mikrocontroller und Digitale Elektronik unidirektionaler 8 Bit Datenbus?


von Oliver (Gast)


Lesenswert?

Hallo,
kennt jemand von Euch, oder hat schon mal einer einen parallelen 
Datenbus aufgebaut, um z.B. x AVRs miteinander kommunizieren zu lassen.

Iststand bei mir: Jeder Atmel ist über einen Port an den Datenbus 
angekoppelt. Der Busmaster ist ein C167, der zyklisch alle 
Requestleitungen pollt. Will ein Atmel Daten senden, setzt er seine 
Requestleitung und erhält dann "irgendwann" sein Acknowledge über eine 
weitere Leitung.

Das unschöne ist nur, der Bus ist unidirektional und mit jedem weiteren 
Busteilnehmer werden wieder 2 weitere Leitungen (Request+Acknowledge) 
benötigt.

Gibt es fertige Bausteine, die so eine einfache paralelle Busankopplung 
ohne Begrenzung der Busteilnehmer ermöglichen?

Über jeden Hinweis wäre ich sehr dankbar.

Grüße
Oliver

von crazy horse (Gast)


Lesenswert?

Aus welchen Grund willst du es den parallel machen? Soviel traffic? Kaum 
zu glauben.

von Oliver (Gast)


Lesenswert?

Der Datenbus wurde im Glauben so konzipiert. Im nachhinein, denke ich, 
könnte es auch ein serieller sein.
Gibt es denn eine serielle Lösung mit unbegrenzter Anzahl von 
Busteilnehmern? CAN-Bus, Profi-Bus, Inter-Bus erst mal ausschließen.

von Oliver (Gast)


Lesenswert?

Also unbegrenzte Anzahl an Teilnehmern natürlich nicht!!!
So 16. Nur wenn noch einer hinzu kommen sollte, dann wäre es schön, wenn 
das Bussytem nicht ausgewechselt werden muß.

von Nik (Gast)


Lesenswert?

Du kannst ja den RS232 Standard verwenden.
und dann zuerst ein adress byte, damit der gewünschte Controller weiss 
das er gemeint ist,
dann eine absender adresse für eine Antwort(nicht immer nötig)
und dann ein Datenbyte senden.

Son kann jeder Controller an jeden schreiben.

Nik

von Sascha Weitkunat (Gast)


Lesenswert?

Eine Möglichkeit eine riesige Anzahl von Teilnehmern über SPI anzuhängen 
sind die kaskadierbaren IO-Expander von Maxim. Einer von diesen sitzt am 
SPI inklusive CS. Die Ausgänge des Expanders sind mit den CS-Eingängen 
der anderen Teilnehmer verbunden, ein Selektier-Befehl an den Expander 
und CS des entsprechenden Teilnehmers wird aktiviert.

Auf diese weise redet bei mir ein AT91 mit vielen kleinen AT90 Sklaven 
;) Wenn einer von ihnen etwas zu sagen hat geht das auf eine art 
Request-Controller der dem AT91 dann per UART vermittelt wer da etwas 
wollte, dannach kann dieser gezielt abgefragt werden.

Das System hört sich vielleicht etwas umständlich an, aber hat sich bei 
mir sehr bewährt.

von Oliver (Gast)


Lesenswert?

Hallo Nik,
ganz so einfach ist das leider nicht. Wollen mehrere Teilnehmer 
gleichzeitig senden, kommt es zu einer Kollision. Um dies zu verhindern, 
wird eine Busarbitrierung benötigt. Dieser Schiedsrichter sagt den 
Teilnehmern, wann sie senden dürfen und wann nicht.
Die einfachste Version wäre eine Daisy Chain. Aber auch dort kann es zu 
Kollisionen kommen, die irgendwie aufgelöst werden müssen.

Gibt es nicht irgendeinen einfachen Baustein, der so was macht?

Grüße
Oliver

von Nik (Gast)


Lesenswert?

Es wäre auch möglich, ein counter( z.B cmos 4017, Dezimal Counter) in 
mein "system" hinein zu hängen. Jeder ausgang des 4017 wäre
mit je einem eingang eines conrollers verbunden.
Sobald der eingang vom controller 1 high ist, darf dieser senden. Ist 
der eingang von controller 2 high darf dieser senden. Alle anderen sind 
dabei unberechtigt zu senden.
Dabei käme es zu keiner Kollision mehr.

Eine zweite Möglichkeit wäre es an alle uc's die selbe RTC anzuhängen, 
dabei wäre festgelegt wann wer senden dürfte.

Nik

von Oliver (Gast)


Lesenswert?

Hallo Sascha,
ich habe das so verstanden, daß nur über ein Request eines Atmel Sklaven 
kommuniziert werden kann. Kann Dein AT91-Master auch gezielt einen 
Sklaven ansprechen, um ihn z.B. zu konfigurieren?

Grüße
Oliver

von Oliver (Gast)


Lesenswert?

Hallo Nik,

in einem Projekt habe ich das auch schon mal so ähnlich gemacht. 8 
Atmels müssen sich eine TxD-Leitung(UART) teilen. Ein weitererer Atmel 
pollt zyklisch die Request und erteilt dann demjenigen den Zuschlag, bei 
dem er hängen bleibt (Round Robin).
Problem dieser Lösung ist, mit jedem weiteren Teilnehmer muß auch 
komplett der Bus erweitert werden.

Besser wäre es, wenn der Bus so bleiben kann und es kommen nur die 
Leitungen zur Busankopplung hinzu.

Aber ich denke, der Request-und Acknowledge - Vorgang muß durch ein 
Bussystem realisiert werden und die eigentliche Kommunikation kann dann 
über den UART erfolgen. Wenn einer was sendet, lauschen alle anderen an 
der seriellen, ob das Paket für ihn bestimmt ist.

Grüße
Oliver

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.