PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF08-Probleme mit I2C



merviux
14.10.2004, 15:48
Guten Tag!

Ich habe da ein kleines Problem mit meinen US-Sensoren. Das es soweit gekommen ist, liegt daran, dass ich in diesem Forum einiges gelesen und mich für den Kauf eines RN1.4 mit einem Atmega32 entschieden habe. Von Roboter-Teile kamen dann noch 5 SRF08 dazu. Ich habe vorher noch nichts mit C gemacht und PonyProg sowie WinAVR waren für mich auch keine Begriffe.
Ich bin jetzt soweit, dass ich einen Ultraschall-Sensor über I2C auslösen und auslesen kann. Es ist mir auch möglich, die Adresse zu ändern und die Verstärkung als auch Reichweite zu variieren. Ich habe einen US in Betrieb genommen und über die serielle Schnittstelle die Werte auf ein PC übertragen. Alles wunderbar. Dann habe ich den nächsten Sensor hinzugefügt, was auch sehr gut funktioniert. Es folgte der Dritte ohne Komplikationen. Die Werte rauschten so über den Bildschirm, und ich - ganz Deutsch mit Zollstock - habe die Plausibilität der Werte überprüft.
Beim vierten Modul hingegen, löst immer ein I2C Fehler aus. Es kommt ein Not-Acknowledged, weil der vierte Sensor spinnt. Sobald ich ihn anschließe, blinkt er ununterbrochen. Es ist dabei egal welches der 5 Module ich als viertes anschließe (d.h. diese Geschichte passiert mit jedem Sensor, sobald er als 4. Glied an den I2C kommt).
Ich habe überlegt, ob es daran liegt, dass die Signale bei dieser Anzahl von Sensoren nicht mehr stark genug sind, bin mir aber noch nicht schlüssig. Dazu kommt, dass ich in dieser Materie nicht so bewandert bin.
Hat jemand eine Idee woran es liegen kann? Ich bin schon fast am verzweifeln.
Ich danke jedem, der mir einen Tipp geben könnte!
Gruß!

Joerg
14.10.2004, 17:30
Hallo merviux,

ich vermute, dass die Stromversorgung über dem I2C, sofern die Module an einem Bus "aufgefädelt" sind, zusammenbricht.
Bringe mal spaßeshalber an jedem Modul in die Stromversorgungsleitung einen kleinen Elko 1-5uF (Wert unkritisch). Vielleicht hilft das ja schon.
Das die Adressen korrekt eingestellt sind, hast du ja bestimmt schon überprüft (LED-Blinken mitzählen).

HTH und Viele Grüße
Jörg

merviux
14.10.2004, 21:06
Hallo Joerg!

Danke für den Tipp. Das werde ich morgen mal ausprobieren!

So mal nebenbei, eine Anfängerfrage:
Ich habe das Kabel (I2C-Bus, sozusagen) einfach an das Board angeschlossen (RN 1.4) und die Sensoren per Stecker "draufgekrimmt". Muss ich eigentlich einen Pull-Up- und einen Pull-Down-Widerstand anbringen?
Ich dachte eigentlich, das Board ist "ready-to-go". Aber ich habe erst eben darüber nachsinniert, weil ich ja mit 4 Sensoren messen konnte. Wenn man einen Pull-Up- oder -Down-Widerstand vergisst, dann ist doch schon viel früher Essig mit den Bus-Signalen, oder?:-s

Auf jedenfall werde ich das mit den Kondensatoren ausprobieren!

Herzlichen Dank!

Joerg
15.10.2004, 08:51
Hallo merviux,


Muss ich eigentlich einen Pull-Up- und einen Pull-Down-Widerstand anbringen?
[...]
Wenn man einen Pull-Up- oder -Down-Widerstand vergisst, dann ist doch schon viel früher Essig mit den Bus-Signalen, oder?

Moment, I2C braucht PullUp-Widerstände, weil die Open-Collector-Ausgänge der Busteilnehmer den Bus einfach auf Masse ziehen. PullDown macht keinen Sinn und belastet nur den Bus.

Aber, ich habe gerade mir die Doku vom RN-Board 1.4 mal geladen, da sind 10K PullUps drin. Im Normalfall ist der Wert dieser PullUps unkritisch, je länger jedoch der Bus wird und je mehr Teilnehmer dran sind, desto kleiner müssen die PullUps jedoch sein. Sonst kommt bei den Busteilnehmern am Ende nichts mehr an, was als H-Pegel durchgeht.
Wenn die Sache mit den Elkos nichts bringt, und die Spannung, die an den Modulen ankommt auch nicht wesentlich kleiner als 5V ist, dann einfach mal die Pullup Widerstände gegen 4,7K oder 3,3K tauschen. Das absolute Minimum hängt wieder von den Ausgangstreibern ab (Maximalstrom) und liegt irgendwo bei etwas über 1K.

HTH und Viele Grüße
Jörg

Frank
17.10.2004, 10:49
Hi merviux und joerg,

kann gesagtem auch zustimmen, vermute das die srf eventuell etwas empfindlich auf eine Stromschwankung reagieren. Ein kleines Elko am jeweiligen Stromverbraucher (Busteilnehmer) ist oft die Lösung. Wert ist eigentlich ziemlich unrelevant.

Das die 10K Widerstände bei so vielen I2C Teilnehmern etwas hoch ausfallen können ist auch denkbar. Allerdings würde ich nicht empfehlen die auf dem Board auszutauschen, zumal es auch I2C-Teilnehmer gibt die selbst PullUp Widerstände auf der Platine haben. Da würdest du dann eventuell später Probleme mit zu geringem Widerstand bekommen.
Schalt einfach noch einen Widerstand parallel. Das muß nicht auf dem Controller-Board passieren, das kann irgendwo auf dem Bus erfolgen, auch einfach an einem Sensor oder Stecker. Ist auch einfacher zu bewerkstelligen und wieder rückgängig zu machen.

Gruß Frank

merviux
18.10.2004, 21:20
Hallo Frank, hallo Joerg,

vielen Dank für Eure Hilfe. Ich hatte die Pull-Ups schon vor Franks Post ausgetauscht und die zusätzlichen Elkos verwendet. Jetzt sieht das alles schon viel besser aus. Zur Sicherheit speise ich die 5 V für die Module an beiden Enden des Flachabels (ca. 2 m) ein. Seitdem ist kein Fehler mehr aufgetreten.
Ich werde jetzt mal weiter basteln.
Nochmals Danke und Chapeau vor allen Post in diesem Forum!
Gruß!

Unregistriert
18.03.2016, 11:44
Hallo mervorix, kannst du mir mal deinen C-Code schicken zum Auslesen des SRF08?

ich bin da gerade ebenfalls mit beschäftigt und habe ebenfalls ein ähnliches Problem wie du damals....bei einem dritten Teilnehmer fängt ein anderer Busteilnehmer an zu spinnen:(
Abgesehen davon möchte ich nun erstmal den SRF08 auslesen...
Die Messung starten über i2c mit avr Studio in C kann ich bereits.
Nur das Auslesen in Cm fehlt mir noch.


Grüße
Thomas