Hatte mein kleines howTo zum reassemblieren ja bereits oben verlinkt - wie beschrieben kommt mein betagter Rechner da an seine Grenzen. Wenn Du das Studio installiert hast, kannst Du es auch selbst reassemblieren, und hier (wenn kein geschützter Code enthalten ist (Deiner oder die lib)) als Code-Block einstellen. Ich selbst habe dieses WE wegen Arbeit nicht viel Zeit, wie's nächste Woche aussieht, kann ich nicht sagen. Aber ich schau in den Pausen mit'm Handy hier mal rein...
Frage noch am Rande: Warum verwendest Du (zumindest in der selbst implementierten Slave-Variante (Case-Struktur mit der Abfrage der Register)) nicht den TWI-Interrupt?
Hast Du meinen Vorschlag, Eeprom-ICs und AVR-Slaves mal zusammen zu testen versucht? (Kann man nach einem erfolgten Eeprom-Zugriff auf den AVR wechseln? Und umgekehrt?)
War das Verhalten jetzt eigentlich (sicher) reproduzierbar? Also hängt sich irgendwas genau dann auf, wenn Du versuchst, etwas von einer 2ten Adresse zu lesen? Immer?
Hallo und sorry fuer die spaete Meldung aber ich bin im Moment nur noch auf Achse :-(
Zu deinen Fragen:
1. Den TWI-Interrupt verwende ich nicht, weil er in meinem Fall nicht noetig ist und andere zeitkritische Programmablaeufe (DHT-22 Abfrage ueber Timer und Bitwait) stoeren kann. Da TWI nach dem Senden der Slaveadresse sowieso auf eine Slavereaktion wartet, kann man das bequem ueber Polling steuern und antworten, wenn der Slave wieder im Leerlauf ist.
2. Nein, bin noch nicht dazu gekommen, werd es aber machen.
3. Ja, das Verhalten ist reproduzierbar. Er haengt grundsaetzlich ab dem zweiten Slave, egal in welcher Reihenfolge oder mit welchen Adressen man die Slaves anspricht.
Wir haben jetzt ca. eine Woche lang die neue Software in der Sporthalle am laufen (ohne I2C-Befehle) und bis jetzt kein einziger Haenger. Hab extra im Server eine Mailfunktion integriert, die mir bei jedem Fehler ne Mail schickt. Registriert werden:
- Haenger in der Kommunikation (I2C haengt fest, Watchdog loest aus)
- Statusregister (Master) hat nicht erwarteten Wert
- Uebertragene Daten sind unplausibel (Out of Range)
Innerhalb einer Woche hab ich jetzt taeglich einen Fehler registrieren koennen, der Slave Nr. 3 betraf und als Out of Range registriert wurde. Grund des Fehlers ist die Bustopologie. Das Kabel von Slave Nr.3 geht vom Hauptkabel ab und durch zwei Ventilationsraeume mit extremen Stoereinfluessen. Obwohl meine Kabel sehr gut geschirmt sind, faengt er ab und zu mal einen Spike ein und interpretiert ihn als Clocksignal, was zu einer Bitverschiebung bei Data fuehrt. Ein erneutes Abfragen loest das Problem.
Aber suma sumarum laeuft der Bus fehlerfrei. Vorher hatten wir mehrmals pro Stunde einen Watchdog-Overflow, jetzt keinen einzigen mehr. Der Unterschied ist zu krass um uebersehen zu werden.