PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C/TWI mit 34 Atmels



doodle
30.10.2009, 13:48
Hat jemand von euch schon mal ein I²C/TWI Pollingsystem gebaut, in dem ein Atmega16 als Master und mehr als 30 Atmega16 als Slave eingesetzt sind?
Geht das überhaupt?
Hat jemand von euch sowas schon mal gebaut?

Mir gehts vorab nur um Erfahrungswerte anderer User, da meine Schaltung noch ein paar Macken hat....
(Aktuell: Atmega16->Phillips 82B715 als Bustreiber)

Netzman
30.10.2009, 13:59
I²C erlaubt bis zu 127 Teilnehmern. Man muss nur darauf achten, dass die Buskapazität nicht zu hoch wird, also keine langen Leitungen, niedrige Pullup-Widerstände und/oder Bus-Repeater verwenden.

mfg

Neutro
30.10.2009, 17:25
Ich glaube das das mit I2C wegen der unvermeidbaren großen Leitungslänge ein echtes Problem geben wird. Der I2C Bus ist hauptsächlich als on board Bus konzipiert worden, also alles auf einer Platine mit kurzen Wegen. Für das von dir angestebte System würde ich eher auf RS485 zurückgreifen.
Eine andere Alternative wäre noch der CAN Bus, aber irgendwie habe ich darüber noch nichts wirklich Informatives gefunden wie man das mir Basom hinkriegt.

Ich sehe gerade das du noch gar nichts von Programmiersprache geschrieben hast, dann kannst du meinen letzten Satz vergessen.....

Gruß

Neutro

doodle
02.11.2009, 12:12
-> Programmiersprache: Bascom (Bin Umsteiger von C....)

Ich hab ein I²C/TWI Pollingsystem mit 33 Slaves und 1 Master laufen, 9600/8/N/1 , nur spinnt das sporadisch. Manche Tage läufts normal, an anderen stürzt es immer wieder ab. Die Leitungen sind die üblichen Spezialkabel für 1/2-Draht Technik. Es sind insgesamt 2x2 Drähte, 2 für die Versorgungsspannung/Masse und 2 für den Bus. Die Schirmung ist geerdet und mit Masse verbunden, da auch noch 2 PCs mit RS232 in der Anlage verbaut sind.
Sporadisch fängt sich der Bus was ein und hängt sich auf. Um das zu lösen, hab ich nen "Hardware Watchdog" eingebaut, der alle Chips durch kurzes Abschalten der Betriebsspannung resetet, wenn der Bus zu lange nichts mehr macht. Nun möchte ich mal testweise als Bustreiber den LTC4303 anstelle des 82B715 ausprobieren. (Der hat ne Busüberwachung, die nach 30ms die Busverbindung kurz trennt.)
....Eben hat sich meine I²C-RS232-Schnittstelle ins Nirwana verabschiedet. Jetzt muss ich erst mal noch nen anderen Fehler suchen.

Netzman
02.11.2009, 13:48
In der I²C-Spezifikation ist auch beschrieben wie die Kabelbelegung bei den verschiedensten Kabeln am optimalsten ist. Bei verdrillten Leitungen sollten SDA und SCL jeweils mit GND verdrillt sein, auf keinen Fall miteinander. Der Schirm sollte auch nur an möglichst einem Punkt mit Masse verbunden werden. CAT4/5 wäre hierfür geeignet.
Mit einem Oszilloskop könntest du die Rise-Time messen (von LOW auf HIGH, da hier nur der Pullup "zieht" und das dadurch eine größere Zeitkonstante als aktiv von HIGH nach LOW), die darf lt. Spezifikation 300nS nicht überschreiten.

mfg

doodle
05.11.2009, 15:21
Der Bus läuft eh nur mit 9600. Das Signal selbst sieht sehr gut aus. Ich bin immer noch bei der Fehlersuche..... :(