www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie mehrere uCs vernetzen


Autor: Philipp (Gast)
Datum:

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

Autor: Marko (Gast)
Datum:

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

Autor: A.K. (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Autor: macke_a (Gast)
Datum:

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

Autor: Marko (Gast)
Datum:

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

Autor: Philipp (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Philipp (Gast)
Datum:

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

Müssen sie auch nicht.

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Philipp (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Manos (Gast)
Datum:

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

Autor: Lupin (Gast)
Datum:

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

Autor: Wolfram (Gast)
Datum:

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

Autor: Marko (Gast)
Datum:

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

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.