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...
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!
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?
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...
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
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...
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.
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.
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.
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).
@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.