Forum: Mikrocontroller und Digitale Elektronik Wie mehrere uCs vernetzen


von Philipp (Gast)


Lesenswert?

Hallo Zusammen,

ich hab hier nen 19" Baugruppenträger, in diesen sollen mehere
Platinen eingeschoben werden, jeweils mit nem uC drauf (eventuell
ATmega8). Nun sollen sich diese AVRs aber untereinander unterhalten
können. Das Problem ist, dass ich mit einer Datenrate von ~2 bis 3 MBit
rechne und Multimaster Betrieb brauche. Am liebsten wäre es mir
natürlich wenn ich mich um den Buszugriff nicht kümmern müßte. Ich hab
mir schon überlegt ob sich eventuell ein CAN-Controller dazu überreden
läßt außerhalb der Spec zu tun. Hat sonst noch einer ne Idee ?

Danke an alle....

Gruß
Philipp

von Marko (Gast)


Lesenswert?

2-3 MBit sind n Haufen Holz ...

die UART kann aber bis knapp unter 1MB/s ... das wären
dann irgendwo um die 7MBit nur mit dem Multimaster
geht RX-TX nicht.
RS232 geht nicht ... RS485 könnte das bis zu Leitungslängen
von x-hundert Metern.

von A.K. (Gast)


Lesenswert?

Bei RS485 mögen es der Bus und der Transceiver ja packen, aber die
Controller sind meist nur bis 1Mbps spezifiziert. Allerdings sind im
x8-Mode immerhin theoretisch bis 2Mbps drin. Auch CAN beim AT90CAN128
mag vielleicht bei 2Mbps noch funktionieren, wirst Du aber gründlich
ausprobieren müssen.

Für mehr als 2Mbps und trotzdem Mega8 wirst Du wohl SPI verwenden
müssen - das ist sowieso die einzige Schnittstelle, die nominell mehr
als 1Mbps hergibt.

Überleg es dir nochmal genau, was Du wirklich brauchst. Und wenn
2-3Mbps wirklich nötig sind, such einen Controller mit 10Mbps Ethernet
drauf.

von Alex (Gast)


Lesenswert?

Warum nicht einfach SPI? Verbindung erfolgt über die soundso vorhande
Rückverdrahtung. Die meisten Anwendung haben eh ein
Master-Slave-Konzept. Ich habe so ohne Probleme 5MBit im Einsatz -
allerdings per Checksumme gesichert.

von macke_a (Gast)


Lesenswert?

Hi !
Auch mich würde generell auch mal Eure Meinung interessieren, wie Ihr
die Kommunikation zwischen einem bzw. mehreren µC aufbauen wollt.
Gibt es nen Hardwareplan..., den Ihr mal ins Forum stellen könntet?
Softwaremäßig I²C, CAN oder Serielle Kommunikation?

Danke ebenfalls für Eure Mithilfe!
Mfg macke_a

von Marko (Gast)


Lesenswert?

Die SPI läuft aber nur wenn ein Master und x
slaves, ausserdem brauchste den Chip-Select
vom Master aus an jeden jeweiligen Slave.
Multimaster wird da nicht hinhauen.

von Philipp (Gast)


Lesenswert?

Ja, das mit SPI hatte ich mir auch überlegt, ist halt aber kein
Multimaster. Andere Idee war noch einen parallelen Bus, mit den
entsprechenden Steuerleitungen aber da muss ich um irgendein
Buszugriffsverfahren kümmern. Also mit nem Arbiter.

von Peter D. (peda)


Lesenswert?

"2-3 MBit sind n Haufen Holz ..."


Da sind die AVRs ja voll mit Daten schaufeln ausgelastet und können
nichts anderes mehr machen.

Überleg Dir nochmal reale Angaben.


Peter

von Philipp (Gast)


Lesenswert?

"Da sind die AVRs ja voll mit Daten schaufeln ausgelastet und können
nichts anderes mehr machen."

Müssen sie auch nicht.

von Peter D. (peda)


Lesenswert?

"Müssen sie auch nicht."


???

Wenn sie nichts tun müssen, laß sie doch weg.
Nur Strom verbrauchen kannst Du auch mit einem Widerstand.

Ich nehme MCs nur, wenn sie auch was erledigen sollen.


Peter

von Philipp (Gast)


Lesenswert?

Danke für deine konstruktiven Infos. Wenn du ein paar Widerstände hast
die selektiv "Daten schaufeln" können, dann nur her damit...

von Peter D. (peda)


Lesenswert?

Ich finde nur Daten schaufeln relativ witzlos.

Ein MC muß schon Zeit haben, um erstmal Daten einzulesen, damit er sie
an einen andern übertragen kann.

Und der andere muß wiederum Zeit haben, die Daten auszuwerten und
irgendwas damit anzufangen.

Und dann sollte es auch einen triftigen Grund geben, warum die Daten
erst noch umständlich übertragen werden müssen, d.h. warum das Einlesen
und Auswerten nicht bequemer Weise ein und derselbe MC machen kann.


Peter

von Manos (Gast)


Lesenswert?

Seh ich ähnlich... wenn die Mega8 ausser Datenschaufeln nichts machen
sollen dann vergiß die ganze Sache und nimm einfach einen dickeren
Prozessor (ARM-z.B.).

Es sei denn, "der Weg ist das Ziel" - soll heißen, es geht Dir nur um
die Machbarkeit der Vernetzung (Projekt oder ähnliches) und keine
"sinnvolle" Aufgabe für die MC's.

von Lupin (Gast)


Lesenswert?

zum datenschaufeln nimmt man doch eigentlich CPLDs bzw FPGAs oder? Die
können das wohl am besten :)

von Wolfram (Gast)


Lesenswert?

Also meine Empfangsroutine der UART bekommt auf einem AVR ATMEGA16 bei
1MBit und 8Mhz schon leichte Probleme noch mitzukommen.
500Kbit sind sicher.
(Ringpuffer mit Überlaufprüfung)

ISR(USART_RXC_vect)
//Empfangsinterrupt
{
unsigned char tmp;
tmp=(unsigned char)(Seriell_Empfang.inp+1)%Seriell_EmpfangsbufferSize;
if (tmp==Seriell_Empfang.outp)
  {//keine freien Elemente in Buffer
  Seriell_Empfang.Overflow=TRUE;
  }
Seriell_Empfang.Buffer[tmp]=UDR;
Seriell_Empfang.inp=tmp;
}

Der Assemblercode kommt auf 70 Takte. (Empfangsbuffersize ist 2^n)
Sollte jemand was schnelleres in C haben würde es mich sehr
interessieren.
Auch bei SPI musst du jedes Byte im Interrupt anfassen ,die
Interruptlast dürfte also nicht geringer sein. Solange du nicht etwas
nimmst was gesamte Pakete erst einließt und nur relevante verarbeitet
und zwischenpuffert wirst du es mit einem AVR bei dieser Datenrate
nicht schaffen.
CAN wäre eine Möglichkeit oder I2C im High Speed Modus.

von Marko (Gast)


Lesenswert?

Ich denk da braucht er externe Bauelemente die
die Daten parallel ein- und ausgeben
sonst kommt er kaum auf die transferrate
und der avr kann wirklich nur noch daten schufeln.
seriell bekommter das wohlakaum hin.

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.