Hallo zusammen
Vor vier Wochen haben wir mal wieder eine Messanlage in einer Passiv-Sporthalle fertiggestellt. Die Anlage umfasst neben einer Wetterstation ca. 70 Temperatur- und Feuchtigkeitssensoren, die die Energiegewinne und -verluste durch die Bauphysik, Ventilation, etc. erfassen. Da ich mal was Neues testen und ein paar Grenzen ueberwinden wollte, haben wir uns fuer I2C als Hauptmagistrale bei ueber 150m Kabellaenge entschieden. Damit wollte ich mal den "I2C eignet sich nur fuer 30cm-Leuten" mal ein paar Denkansaetze liefern Nach anfaenglichen Stoerungen durch die Wechselrichter im Ventilationsraum funktioniert das System sogar hervorragend Einziger Knackpunkt ist der, das ab und zu ein Kommunikationsfehler das System aufhaengt. Leider weiss ich nicht, wo genau er sich aufhaengt. Der Fehler macht sich dadurch bemerkbar, dass die SDA auf Null bleibt, SCL ist high (Master wartet auf ACK vom Slave?).
Wie kann man in dem Fall das System wieder stabil bekommen, ohne VCC-Reset? Hab ein I2C-Stop ueber Timer versucht, klappt nicht. Im Moment hilft nur ein kompletter Reset ueber die Netzversorgung, was aber nicht im Sinne des Erfinders ist.
Aufbau des Systems:
- Ein Mastercontroller (Atmega32) + 15 Slave-Stationen (Atmega8) an unterschiedlichen Messpunkten
- Bustreiber P82B96 an jedem uC, Busspannung 12V, 2kHz Geschwindigkeit,
- Ethernetkabel, geschirmt, SCL mit VCC gedrillt, SCA mit GND
- Masterprogramm nutzt die Standard-I2C-Kommandos, Slaves arbeiten direkt mit dem TWI-Statusregister.
Mehrere Oszilloskopmessungen ergaben saubere, klare und steile Flanken, kein nennenswertes Delay zwischen SCL und SDA bei Uebertragung zur entferntesten Slavestation, keine Spikes oder Stoersignale in der Leitung. Bei einer Messung mit dem Logikanalysator hab ich allerdings mehrmals eine "Bitverschiebung" um eine Stelle beobachten koennen, was durchaus die Ursache sein koennte. Hat jemand eine Idee, wie man angemessen auf die Sache reagieren koennte?
Gruesse, Uwe
P.S.: Bitte keine Texte in Form von "Du hast ja nen Schaden, I2C ist fuer 30cm ausgelegt ". So wie alle kanns ja jeder machen, wo liegt den da der Reiz
Vor vier Wochen haben wir mal wieder eine Messanlage in einer Passiv-Sporthalle fertiggestellt. Die Anlage umfasst neben einer Wetterstation ca. 70 Temperatur- und Feuchtigkeitssensoren, die die Energiegewinne und -verluste durch die Bauphysik, Ventilation, etc. erfassen. Da ich mal was Neues testen und ein paar Grenzen ueberwinden wollte, haben wir uns fuer I2C als Hauptmagistrale bei ueber 150m Kabellaenge entschieden. Damit wollte ich mal den "I2C eignet sich nur fuer 30cm-Leuten" mal ein paar Denkansaetze liefern Nach anfaenglichen Stoerungen durch die Wechselrichter im Ventilationsraum funktioniert das System sogar hervorragend Einziger Knackpunkt ist der, das ab und zu ein Kommunikationsfehler das System aufhaengt. Leider weiss ich nicht, wo genau er sich aufhaengt. Der Fehler macht sich dadurch bemerkbar, dass die SDA auf Null bleibt, SCL ist high (Master wartet auf ACK vom Slave?).
Wie kann man in dem Fall das System wieder stabil bekommen, ohne VCC-Reset? Hab ein I2C-Stop ueber Timer versucht, klappt nicht. Im Moment hilft nur ein kompletter Reset ueber die Netzversorgung, was aber nicht im Sinne des Erfinders ist.
Aufbau des Systems:
- Ein Mastercontroller (Atmega32) + 15 Slave-Stationen (Atmega8) an unterschiedlichen Messpunkten
- Bustreiber P82B96 an jedem uC, Busspannung 12V, 2kHz Geschwindigkeit,
- Ethernetkabel, geschirmt, SCL mit VCC gedrillt, SCA mit GND
- Masterprogramm nutzt die Standard-I2C-Kommandos, Slaves arbeiten direkt mit dem TWI-Statusregister.
Mehrere Oszilloskopmessungen ergaben saubere, klare und steile Flanken, kein nennenswertes Delay zwischen SCL und SDA bei Uebertragung zur entferntesten Slavestation, keine Spikes oder Stoersignale in der Leitung. Bei einer Messung mit dem Logikanalysator hab ich allerdings mehrmals eine "Bitverschiebung" um eine Stelle beobachten koennen, was durchaus die Ursache sein koennte. Hat jemand eine Idee, wie man angemessen auf die Sache reagieren koennte?
Gruesse, Uwe
P.S.: Bitte keine Texte in Form von "Du hast ja nen Schaden, I2C ist fuer 30cm ausgelegt ". So wie alle kanns ja jeder machen, wo liegt den da der Reiz