Forum: Mikrocontroller und Digitale Elektronik TWI (I²C) Verbinden meherer µC


von Max Mustermann (Gast)


Lesenswert?

Sehe ich das Richtig wenn ich den TWI vom Atmel (voraussgesetzt er hat 
einen) Benutzen möchte verbinde ich einfach die SDA vom µC1 mit der SDA 
von µC2 und µC3 usw... mit der SDL mache ich dies dann auch.

Als Master habe ich einen Atmega32... als Slaves einige Atmega8 
Controller. Diese sitzen alle in einer Unterverteilung und Steuern dort 
IO's, LCD`s usw... Aktuell sind es AT90S2333 verbaut welche noch nicht 
mit ihren Nachbarn komunizieren können. Dies muss sich bald ändern. Wie 
schaut das aus wenn die µC's von verschiedenen Netzteilen versorgt 
werden?

Ich habe ein 12V Netzteil 10A in der UV sitzen. Dies wird über einen 
MC34063 auf die Passenden 5V runtergetacktet. dieser schaft etwa 600mA 
wobei ich inzwischen 2 dieser Schaltnetzteile eingebaut habe, da ich 
sonst über die 600mA komme im Extremfall.

Es muss nicht unbedingt der TWI Bus für meine Anwendung sein aber nach 
möglichkeit sollte es ohne weitere Hardware gehen. Der Atmega32 steuert 
noch einen ENC28J60 um mit der Aussenweitl zu Komunizieren. Er soll die 
Daten dann einfach an die ganzen Mega8 Verteilen.

Andere Möglichkeiten die ich bisher in betracht gezogen habe waren 
Schieberegister, welche mir zu unsicher und zu langsam erscheinen. 
Selbes gilt für eine RX/TX Crosover lösung (µC1 sendet daten an µC2, µC2 
schatu ob daten für ihn sind wenn nein sendet er weiter an µC3 usw... 
aber das muss doch einfacher gehen. Ich könnte auch einen kompletten 
Port der µC's opfern und ein eigenens Protokoll aufsetzten aber das mir 
zu viel Aufwand.

Für Ideen bin ich dankbar...

von opacer (Gast)


Lesenswert?

Ja das Funktioniert so, du musst nur auf den richtigen Busabschluß 
achten!

Wenn du Geschwindigkeit brauchst, kannst du die µCs auch über SPI 
miteinander verbinden. Das ist teilweise erheblich schneller, jedoch 
brauchst du mehr Leitungen (3+Anzahl µCs).

Mehrere Netzteile sind kein Problem. Massen verbinden!

von Jörg B. (manos)


Lesenswert?

Max Mustermann wrote:
> aber nach möglichkeit sollte es ohne weitere Hardware gehen.
Oh, das wird schwer... Ich fürchte, Du wirst bei der TWI-Variante 
zusätzliche Hardware benötigen - allerdings nur 2 Widerstände gegen VCC 
:)

Oder geht das auch mit den internen Pull-UPs?

von Max Mustermann (Gast)


Lesenswert?

2 Wiederstände oder 1 IC bekomme ich noch unter das nicht das Problem. 
Aber ich möchte nicht für jeden Busteilnehmer noch einen Controller 
benutzen, der dann alles Managt so wie es bei RS-485, Can, Ethernet usw 
gemacht wird. Da ich noch max 4 Adern zur freien verfügung habe im Bus 
werde ich vermutlich den I²C bzw TWI (ist ja das selbe) benutzen. Das 
ganze soll für ein Hausbus benutzt werden, jedoch nur um einzelne Module 
inerhalb einer Verteilung zu verbinden. Die Komunikation zu den anderen 
Verteilungen wir über Ethernet realisiert. Der Bus sollte aber vorneweg 
50 Teilnehmer verkraften, ich hoffe das gibt mit I²C kein Problem, aber 
in den Datenblättern die ich bisher darüber gefunden habe steht drin mit 
7Bit 128 und mit 10Bit 1023 Teilnehmer...

Ich werde mal etwas Schaltpläne zeichnen und dann zur sicherheit noch 
mal hier reinstellen...

von opacer (Gast)


Lesenswert?

Die µCs über I2C sind aber schon auf der gleichen Platine oder zumindest 
über Steckverbinder mit einander verbunden? Bei längeren Kabel musst du 
noch einen Repeater IC einsetzten bzw. einen auf jeder Seite

von Max Mustermann (Gast)


Lesenswert?

Es sitzen 3 bis 5 auf einer Platine (über 90° gewinkelte stecker) die 
nächsten sind dann entweder direckt daneben oder eine Hutschine weiter 
oben / unten...

von Frank N. (betafrank)


Lesenswert?

50 Teilnehmer - wow. Die Kapazitive Last auf dem TWI-Bus wird wohl recht 
groß werden. Das bremst die erreichbare Geschwindigkeit.

Ich arbeite an einem ähnlich gelagertes Projekt. Master ist ein 
ATmega32, die Slaves sind ATmega16 (der vielen I/O-Pins wegen). Ein 
Slave stellt mir 24 Ein- bzw. Ausgänge zur Verfügung. So reichen dann 
eine handvoll Busteilnehmer. Verkabelt wird über Patchkabel und 
RJ45-Buchsen. Jeweils Master und Slaves erhalten ein 
10-Ohm-Serienwiderstand in SCL und SDA, um Refexionen zu vermeiden. Die 
Pull-Up-Widerstände sitzen im Master. Mit 4,7kOhm sind sie etwas groß. 
Bei rund 2,5m Testverkabelung ist die steigende Flanke zwar 
verschliffen, aber noch tolerablel. Fallende Flanke ist super. Bustakt 
100kHz. Man könnte es mal mit 3,9kOhm oder 2,7kOhm probieren.

Fazit: TWI funktioniert bei mir zuverlässig. Bei 50 einzeln zu 
addressierenden Teilnehmern steigt allerdings Dein Datenaufkommen und 
die Datenrate muß eventuell nach unten korrigiert werden, wenn die kap. 
Buslast das quasi vorgibt.

von Max Mustermann (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal ein Bild wie in etwa das ganze aufgebaut werden sollte. So ist 
das aktuelle Bord, welches ich natürlich gerne weiter benutzen würde 
aber naja ist nicht so wichtig.

Auf JP1 sitzt das Netzteil, auf JP2 der Master auf JP3, JP4 und JP5 
sitzt der Slave. X1 bis X4 sind die Schnitstellen nach aussen. 
Inzwischen gibt es noch weiter Schnitstellen welche den Bus verlängern 
lassen. Habe den aktuellen Plan auf die schnelle nicht gefunden.

Zur Zeit ist der Master so designd das er mit einem Kabel auf JP3, JP4 
und JP5 geführt wird um die schnitstellen zu nutzen, aber da ich für die 
Eth, USB, LCD und noch einiges weitere mehr Ports vom Master benötige 
ist das in zukunft nicht mehr möglich.

Es gibt 4 Leitungen die noch offen sind zwischen JP1 bis JP5.
Es gibt 2 Leitungen die jeweils von JP1 auf JP2 gehen dann weiter auf 
JP3 usw. Diese können über Jumper an den Slaves gebrückt werden.
Es gibt von JP3 bis JP5 jeweils 10 Leitungen die an X2 bis X4 gehen.
Es gibt 2 Leitungen von JP1 auf X1
Es gibt 4 Leitungen die von JP2 zu JP5 verbunden sind
Es gibt 8 Leitungen zwischen JP1 und JP2 die direckt verbunden sind und 
nicht benutzt werden.
Es gibt am Master eine RX / TX Schnitstelle.

von Benjamin P. (ben21684)


Lesenswert?

Hallo, ich habe in etwa auch sowas vor. Ich will einen ATMega 16 als 
Master benutzen und 2 bis 3 Mega8. Wie das ganza schalttechnisch 
aussehen muss hab ich schon raus. Hat jemand einen einfachen Sourccode 
für Master/Slave anwendungen? Es soll insgesammt 4 Bytes übertragen 
werden, wobei 2 an den eine µC und 2 an den anderen µC geschickt werden 
sollen.

von Xine L. (xine)


Lesenswert?

Hi,

bin eben über die Pull Ups gestolpert. Arbeite gerade auch mit I²C und 
mir wurde gesagt, dass ich lieber 10k Ohm Widerstände nehmen soll 
anstatt 4,7.
Mag es sein, dass das Dummfug war? Ich habe 2 Boards, die aber nur über 
ein kurzes Kabel verbunden sind (max. 20 cm).

von Frank N. (betafrank)


Lesenswert?

@Xine,

Zumindest ein AVR kann je recht viel Strom treiben, so daß der auch mit 
kleineren PullUps umgehen kann. Mit z.B. meinen 3,2kOhm sehen die 
Flanken gut aus.

Wie es mit den diversen klassischen I²C-Bausteinen 
(Treiberinnenwiderstand) aussieht weiß ich nicht, aber darin könnte 
begründet sein, die PullUps nicht zu klein wählen zu können.

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.