Wie mehrere uCs vernetzen

Gast #316426
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
Gast #316427
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.
Gast #316428
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.
Gast #316429
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.
Gast #316430
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
Gast #316432
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.
#316437
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
Gast #316438
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.
Gast #316440
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.
Gast #316441
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren