Forum: Mikrocontroller und Digitale Elektronik Schnelle kommunikation zwischen mehr als AVRs ?


von Michael (Gast)


Lesenswert?

Hallo,

fuer einen Versuch moechte ich 3 AVRs ueber einen Bus miteinander 
kommunizieren lassen, jeder soll aber jedem Nachrichten schicken 
koennen. Mit I2C habe ich schon ein wenig Erfahrung, aber das laeuft ja 
maximal mit 400 kHz (richtig? also, 400kHz-overhead(?) /8 bits -> n 
byte/sec), andereseits kann ich die Zeit gut im uC selbst nutzen, da das 
versenden der bits ja in HW erledigt wird. Hat jemand schon Erfahungen 
mit Multimaster I2C Netzen (mehr als 2 Master)?
Oder gibt es eine bessere Methode? Den USART moechte ich eigentlich 
nicht dafuer verwenden, den nutze ich zzt fuers Debugging.
Ein eigenes Protokoll waere natuerlich auch moeglich, aber dann 
verzichte ich auf jegliche HW-Unterstuetzung und muss alles in SW 
machen, ob ich dann noch schneller bin als I2C? Hat jemand schon soetwas 
gemacht, unter welchem Begriff kann ich solche und aehnliche Themen 
finden?

Gruss,
Michael

von TravelRec. (Gast)


Lesenswert?

RS485? AVR mit 2 UARTs nehmen. Oder Debugging anderweitig herausführen.

von Marc989 (Gast)


Lesenswert?

Hi,

habe eine Kommunikation zwischen 5 Fujitsu-Mikrocontrollern und 2 
externen I2C Bauteilen mal aufgebaut. Letztendlich nur mit einem Master 
und 6 Slaves. Aber Mit Multimaster klappt das natürlich auch.
400k ist aber normalerweise schon recht viel. Was hast du denn für eine 
Übertragung vor (Daten/Zeit)?

Marc989

von Michael (Gast)


Lesenswert?

Hallo Marc989,

sind die 400k bei I2C nicht die maximale Clockfrequenz? da kaem ich so 
auf 24 byte/sec. Da jeder einzelne AVR nicht viel mit den Daten arbeitet 
(jeder nur einen Teilschritt) wird viel uebrtragen und (relativ) wenig 
gerechnet.
Bekommt der AVR im I2C slave Modus fuer jede Zieladdresse einen 
Interrupt, oder nur wenn er explizit angesprochen wird?

Gruss,
Michael

von TravelRec. (Gast)


Lesenswert?

Die Durchsatzrate bei USART und RS485 dürfte allemal höher als bei I2C 
sein, da so gut wie nur Rohdaten übertragen werden, ohne die ganze 
Steuer- und Bestätigungskinematik.

von Michael (Gast)


Lesenswert?

Hi TravelRec,

bei der Kommunikation ueber RS485 muss ich mich dann aber selbst um die 
Adressierung kuemmern, also jeder Controller muss alle Daten empfangen 
und dann selbst entscheiden, ob sie fuer ihn bestimmt waren. Wenn sich 
an einem Bus also zwei Controller unterhalten, wird der Dritte immer 
wieder gestoert. Ist das so Richtig?
Bei I2C macht das doch (hoffentlich) die HW? Ich hab allerdings noch nie 
einen AVR als I2C Slave betrieben, weiss also nicht ob das so stimmt 
(ich such mal im Datenblatt)

Gruss,
Lothar

von TravelRec. (Gast)


Lesenswert?

Beim USART kann man das 9te Bit für Mulitprozessorkommunikation 
benutzen. Das ist genau für diesen Fall entwickelt worden. Die 
Prozessoren, bei denen die Adresse bei gesetztem 9ten Bit nicht paßt, 
machen in Ruhe weiter ihre Arbeit und ignorieren den folgenden 
Datenstrom, bis wieder mal das 9te Bit gesetzt ist. Der jeweils 
angesprochende Prozessor empfängt dann die Daten. Die genaue Verwendung 
des 9ten Bits ist super im Datenblatt beschrieben.

von Michael (Gast)


Lesenswert?

Hi TravelRec,

Vielen Dank fuer den Hinweis! Das ist mir neu, ich werde mir das 
Datenblatt genauer ansehen.

Gruss,
Michael

von TravelRec. (Gast)


Lesenswert?

Ja dann - viel Spaß und schönes Wochenende.

von Michael (Gast)


Lesenswert?

> da kaem ich so auf 24 byte/sec.

Rechenfehler, Schreibfehler oder Systemfehler ?
Selbst wenn es 'nur' 24kB/s sind, viel schneller können die AVRs die 
Daten auch nicht bearbeiten, mal von trivialen Manipulationen abgesehen. 
Aber dafür bräuchte man nicht mehrere AVRs. (Systemfehler ?)

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.