I2C mit 10kHz - Statusregister spinnt

Uwe H.

Neues Mitglied
27. Juli 2011
264
0
0
Hinter die Grenze :-)
Sprachen
  1. BascomAVR
  2. ANSI C
  3. Assembler
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
 
Hi Uwe,

Wer ausser mir hat von euch mal versucht die TWI mit 10kHz zu fahren und das Statusregister gelesen?
ich hab zwar schonmal ne niedrigere Frequenz verwendet, weiß aber nicht mehr genau wie tief. Aber 10kHz waren das definitiv nicht.

Kann man bei den 160m nicht eher mit Repeatern den Pegel zwischendurch wieder säubern?

Gruß
Dino
 
Ich hab P82B96er im Einsatz und aktive Pullups, das sollte locker mit 100kHz durchlaufen. :party: Das Herabsetzen der Geschwindigkeit ist Plan B falls Plan A durch irgendwelche nicht kalkulierten Einfluesse baden gehen sollte... :bath: Im uebrigen muss ich korrigieren:

Bei zehn kHz steht im Statusregister nicht 0xF8 sondern irgendein Wert, der laut Datenblatt ueberhaupt nicht definiert und demnach nicht existieren duerfte. Die 0xF8 tauchten bei einem anderen Problem auf, hab da was durcheinander gebracht gestern, sorry :banghead:

Dino, hast Du bei deinem Versuch das Statusregister ausgelesen? Ich steuere in dem Projekt Atmega-Slavecontroller an, die auf den korrekten Wert des Statusregisters angewiesen sind. Sonst kommen meine Select-case-Abfragen wahrscheinlich etwas durcheinander :vollkommenauf:
 
Dino, hast Du bei deinem Versuch das Statusregister ausgelesen?
ich hab das damals mal bei meinen ersten I2C-Versuchen gemacht weil ich Probleme hatte und mit nem Oszi mitlesen wollte. Mehr nicht. Danach hab ich eigentlich nur stumpf die Bascom-Befehle verwendet :rolleyes:

Gruß
Dino
 
Aha :) Ich wuerde auch gern "nur" die Bascombefehle verwenden, aber im Slavemodus muss ich leider manuell fahren. Ich weiss, es gibt ne I2C-Slave.lib, aber die blockiert den Mainloop vollstaendig und ist deshalb nicht die beste Loesung fuer mich...


Eigentlich muss ich heute ein Kreuz im Kalendar machen. Es gibt mal was worauf Dino keine ausfuehrliche Antwort weiss :flute:
 
Hi Uwe,

Eigentlich muss ich heute ein Kreuz im Kalendar machen. Es gibt mal was worauf Dino keine ausfuehrliche Antwort weiss :flute:
in der ganz frühen Anfangsphase hab ich mal versucht mit Assembler nen I2C-Bus und Kommunikation zu einem PCF8583 RTC zum laufen zu bekommen. Irgendwie hat es überhaupt nicht geklappt und darum hab ichs erstmal an die Seite gelegt.

Später hab ich dann mit Bascom, I2C und ner DS1307-RTC und nem PCF8574-IO-Expander weitergemacht. Das lief nach kleinen Anfangsproblemen dann auch. Also warum sollte ich dann weitere Zeit verbrennen und mich mit den einzelnen Bits der Register beschäftigen :rolleyes: Tja ... sollte ich evtl wohl doch mal machen :p

Gruß
Dino
 
Twi?!

Hallo Uwe,

verzeih mir bitte die Frage, aber ist es Sinnvoll bei 160m I2C bzw. TWI einzusetzen?!
Um wieviele Sensoren handelt es sich denn?!
Vielleicht lieber immer einen kleinen Mega und nen CAN Controller und schon macht der Bus keinen Stress...
Ich habe mal in Abu Dhabi fuer mein Labor dort ein CAN und ein RS-485 Bus aufgebaut um alles an Sensoren und Controllern an einen Bus zu haben...
Hat prima funktioniert....
Als CAN hatte ich den MCP2515-I und MCP2551-I verwendet, fuer RS-485 nen SN75176BP.....Beispiele fuers Protokoll gibts zu hauf......
Deutlich stabiler und einfach adaptierbar, wenn Du mal die Auswerte-/Steuereinheit tauschst...Ich hatte damals nen ITX mit Linux als Datensammler..........

Soll nur mal so ein gedanken Anstoss sein...


LG aus Addis


Klaus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)