Hallo, Ich benutze das Arduino Uno in Verbindung mit einem SRF10 Ultraschall Sensor. Bisher klappte das auslesen des Sensor Problemlos. Aktuell versuche ich zusätzlich ein Motor Shield https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino am I2C zu betreiben. Einzeln funktionieren sowohl Shield als auch der SRF10... sobald jedoch der Sensor und Motorshield angeschlossen sind liefert der Sensor nur noch unsinnige Werte :-/ Hier der Quellcode den ich zum auslesen des SRF10 benutze: #include <Wire.h> void setup() { Wire.begin(); // join i2c bus (address optional for master) Serial.begin(9600); // start serial communication at 9600bps } int reading = 0; void loop() { // step 1: instruct sensor to read echoes Wire.beginTransmission(112); // transmit to device #112 (0x70) // the address specified in the datasheet is 224 (0xE0) // but i2c adressing uses the high 7 bits so it's 112 Wire.write(byte(0x00)); // sets register pointer to the command register (0x00) Wire.write(byte(0x51)); // command sensor to measure in "inches" (0x50) // use 0x51 for centimeters // use 0x52 for ping microseconds Wire.endTransmission(); // stop transmitting // step 2: wait for readings to happen delay(70); // datasheet suggests at least 65 milliseconds // step 3: instruct sensor to return a particular echo reading Wire.beginTransmission(112); // transmit to device #112 Wire.write(byte(0x02)); // sets register pointer to echo #1 register (0x02) Wire.endTransmission(); // stop transmitting // step 4: request reading from sensor Wire.requestFrom(112, 2); // request 2 bytes from slave device #112 // step 5: receive reading from sensor if(2 <= Wire.available()) // if two bytes were received { reading = Wire.read(); // receive high byte (overwrites previous reading) reading = reading << 8; // shift high byte to be high 8 bits reading |= Wire.read(); // receive low byte as lower 8 bits Serial.println(reading); // print the reading } delay(250); // wait a bit since people have to read the output :) } das Motorshield (adresse 0x61) wird lediglich mit Spannung versorgt und hängt wie der SRF10 auch an Analog4&5 wäre super wenn jemand einen tip für mich hätte wo das problem liegen könnte :-) lg markus
Versuch es mit kleineren Pull-Up Widerständen. Messe mal die Signalqualität mit einem Oszilloskop.
hi, leider steht mir gerade kein oszi zur verfügung :-/ habe aber eben mal versucht den sensor alleine am arduino mit 10k pullup (wie auf dem shield verbaut) zu betreiben, funktioniert problemlos... auch mit 20k pullup sind die messwerte des srf 10 noch einwandfrei... steckt jedoch das shield wieder auf dem arduino und der sensor auf dem shield, liefert dieser wie gehabt nur unsinnige werte. die komunikation mit dem shield klappt jedoch komischerweise auch wenn der sensor angesteckt ist
Du sollst die Widerstände verkleinern, nicht vergrößern. Je mehr Chips am Bus hängen, umso größer sind die Last-Kapazitäten, welche die Flanken des Signals verändern. Durch kleinere Widerstände kannst du dem entgegen wirken. Wenn du sie aber zu klein machst, überlastest du die Ausgänge der IC's, dann funktioniert es auch wieder nicht. Ein Oszilloskop hilft, die optimalen Werte zu finden. Ansonsten musst du probieren. Aber probier auf jeden Fall werte unter 10k Ohm!
Stefan Us schrieb: > Je mehr Chips am Bus hängen, umso größer sind die Last-Kapazitäten, > welche die Flanken des Signals verändern. Durch kleinere Widerstände > kannst du dem entgegen wirken. Was richtig ist und auch immer wieder empfohlen wird. Wenn man sich aber an die vielen I2C Threads hier errinnert, lag es fast immer nicht an der Dimensionierung der Widerstände sondern an etwas anderem. Das Popeln an den Widerständen war einfach verschwendete Zeit. > Aber probier auf jeden Fall werte unter 10k Ohm! 10k sind schon ganz in Ordnung, auch für zwei Slaves. Es wird also auch hier wie in dem meißten Fällen an etwas anderem liegen. Ich hab da die Software im Verdacht. Ich kenne zwar das Arduino Zeug nicht, kann aber nicht erkennen, daß sich ums ACK bzw NACK gekümmert wird sowohl beim Senden als auch beim Empfangen. Und ich sehe auch nicht, ob alle Transfers mit einem Stop abgeschlossen werden. Sowas lässt dann schon mal einen Slave den Bus blockieren. MfG Klaus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.