Gruesst euch
Und wieder mal eine Frage an die Experten Wer ausser mir hat von euch mal versucht die TWI mit 10kHz zu fahren und das Statusregister gelesen? Hintergrund zu der Frage ist folgender: Ich war vor zwei Wochen in der Sporthalle, in der ich letztes Jahr einen Haufen Sensoren in Betrieb genommen habe. Testweise habe ich dort mal einen HYT221 mit einem P82B96 aufs Dach gelegt und unten, sprich 60m ungeschirmtes und neben Starkstromleitungen verlegtes Datenkabel versucht, den Sensor auszulesen. Nach zwei Stunden Pullup-Optimierung am Oszilloskop und verschiedenen Spannungsleveltests war die Kommunikation mit 7,5V bei 100kHz gut und stabil. Natuerlich war das Meeresrauschen der Starkstromkabel deutlich erkennbar, aber die Flanken trotz allem akzeptabel. Jetzt wollte ich mal versuchen das Tempo auf 10kHz zu veringern, hab die beiden Prescaler-Bits im Controlregister entsprechend geaendert und die Clock neu berechnet. Fuer den uC hab ich ein kleines Testprogramm geschrieben, welches den Slave mit seiner Adresse anspricht und mir auf dem LCD anschliessend das Statusregister in der ersten Zeile und ein "ACK" oder "NO ACK" in der zweiten Zeile anzeigt.
Bei 100kHz bekam ich ein "ACK", bei 10kHz ein NO ACK. Jetzt der Witz, auf dem Oszi IST EIN ACK. Also Logic16 angeklemmt, Testprogramm gestartet und siehe da: Der Slave antwortet sauber mit ACK, Kommunikation laeuft einwandfrei aber laut Statusregister findet ueberhaupt keine Kommunikation statt:
Status: 0xF8 - No relevant state information available
Erhoehe ich die Clock auf 100kHz laeuft alles so wie vorher und das Statusregister zeigt den korrekten Status an. Wer weiss hier weiter? Ich plane in meinem aktuellen Projekt einen gebufferten I2C-Bus mit 160m Laenge (wieder Sporthalle) und wuerde mir gern die Option offen lassen mit der Geschwindigkeit variieren zu koennen, da es dort auf das Tempo absolut nicht ankommt.
Gruesse an alle
Uwe
Und wieder mal eine Frage an die Experten Wer ausser mir hat von euch mal versucht die TWI mit 10kHz zu fahren und das Statusregister gelesen? Hintergrund zu der Frage ist folgender: Ich war vor zwei Wochen in der Sporthalle, in der ich letztes Jahr einen Haufen Sensoren in Betrieb genommen habe. Testweise habe ich dort mal einen HYT221 mit einem P82B96 aufs Dach gelegt und unten, sprich 60m ungeschirmtes und neben Starkstromleitungen verlegtes Datenkabel versucht, den Sensor auszulesen. Nach zwei Stunden Pullup-Optimierung am Oszilloskop und verschiedenen Spannungsleveltests war die Kommunikation mit 7,5V bei 100kHz gut und stabil. Natuerlich war das Meeresrauschen der Starkstromkabel deutlich erkennbar, aber die Flanken trotz allem akzeptabel. Jetzt wollte ich mal versuchen das Tempo auf 10kHz zu veringern, hab die beiden Prescaler-Bits im Controlregister entsprechend geaendert und die Clock neu berechnet. Fuer den uC hab ich ein kleines Testprogramm geschrieben, welches den Slave mit seiner Adresse anspricht und mir auf dem LCD anschliessend das Statusregister in der ersten Zeile und ein "ACK" oder "NO ACK" in der zweiten Zeile anzeigt.
Bei 100kHz bekam ich ein "ACK", bei 10kHz ein NO ACK. Jetzt der Witz, auf dem Oszi IST EIN ACK. Also Logic16 angeklemmt, Testprogramm gestartet und siehe da: Der Slave antwortet sauber mit ACK, Kommunikation laeuft einwandfrei aber laut Statusregister findet ueberhaupt keine Kommunikation statt:
Status: 0xF8 - No relevant state information available
Erhoehe ich die Clock auf 100kHz laeuft alles so wie vorher und das Statusregister zeigt den korrekten Status an. Wer weiss hier weiter? Ich plane in meinem aktuellen Projekt einen gebufferten I2C-Bus mit 160m Laenge (wieder Sporthalle) und wuerde mir gern die Option offen lassen mit der Geschwindigkeit variieren zu koennen, da es dort auf das Tempo absolut nicht ankommt.
Gruesse an alle
Uwe