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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.