-
Hi!
Ich hab auch so meine Probleme mit dem SRF02, ich hab ihn per I2C an einen modifizierten Asuro gehängt. Und ich arbeite wie bad_american mit dem I2C Lib von Peter Fleury. Doch bei mir will er auch nicht richtig.
Ich schaffe es, die Messung zu starten (leuchtet kurz rot), doch er bockt beim abfragen der Werte herum.
Ich hab die Anschlüße jetzt nicht von dem "bösen" Flussmittel befreit, da ich mir beim besten Willen nicht vorstellen kann, dass das Flussmittel die übertragung stört.
Ich vermute eher, dass es an der Software, aber ich finde den Fehler nicht:
Code:
#define I2C_ADDRESS_SONAR 0xE0
unsigned int get_distance(void)
{
unsigned int cdistance = 0;
if(!start_i2c(I2C_ADDRESS_SONAR+I2C_WRITE))
{
i2c_write(0); //Set register
i2c_write(0x51); //Execute ranging command (in cm)
i2c_stop(); // set stop conditon = release bus
Msleep(70); //Wait for ranging to be completed
start_i2c(I2C_ADDRESS_SONAR+I2C_WRITE);
i2c_write(2); //Set register to high ranging byte
i2c_stop();
start_i2c(I2C_ADDRESS_SONAR+I2C_READ);
cdistance += i2c_readAck();
cdistance <<= 8;
i2c_stop();
start_i2c(I2C_ADDRESS_SONAR+I2C_WRITE);
i2c_write(3); //Set register to high ranging byte
i2c_stop();
start_i2c(I2C_ADDRESS_SONAR+I2C_READ);
cdistance += i2c_readAck();
i2c_stop();
}
return cdistance;
}
unsigned char start_i2c(unsigned char addr)
{
unsigned char ret = i2c_start(addr);
if ( ret )
{
i2c_stop();
errorMessage(2, "I2C Device not found", 15);
}
return ret;
}
Wäre schön wenn ihr mir helfen könntet.
MFG
BWA
-
Meine Tests haben klar gezeigt, dass Flussmittel zu dem Effekt führen kann.
Ich arbeite mit Bascom und kann Dir deshalb nicht groß helfen, empfehle Dir aber, mal das mit dem Sensor mitgelieferte Bascom-Beispiel zu verwenden. Das funktioniert auf Anhieb.
radebeul
-
Kann ich leider nicht, da ich keine die Standard i2c pins schon belegt habe, und deshalb hab nur die möglichkeit, das ganze per software, in dem Fall die i2c lib von Peter Fleury, machen kann.
MFG
BWA
-
Hi berniwa,
von HardwarePins hat ja keiner was gesagt,
und wenn man Bascom nix anderes sagt, macht es I2C auch per Software.
Da das Beispiel mit Bascom läuft, könnte man so den Fehler eingrenzen.
-
SCL und SDA sind bei den avr nicht an die Standardpins gebunden, in Bascom erfolgt die Zuweisung z. B. mittels <config scl=portx.y> .
Falls Dir niemand helfen kann, dann sage mir Deine Pins für SCL und SDA, damit ich Dir das modifizierte Programm als hex-File schicken kann.
radebeul
-
Hi!
Also ich hab heute mal das Modul selbst an einem PIC getestet und es funktioniert wie eine 1 außerdem hab ich den I2C mit einem PCF8574 getestet, was auf ohne muken funktioniert hat.
Das problem an Bascom ist, dass ich meinen kompleten Code bereits in C habe, und das ist nicht wenig.
MFG
BWA
-
Hi!
Ich habs jetzt geschafft.
Der SRF02 war schlichtweg zu langsam um micht zu verstehen bzw. mein Taktsignal hat ihm bei 100kHz nicht gefallen.
Nach sicher 50h Arbeit bin ich draufgekommen, dass der SRF02 meinen Atmega8 bei 50kHz (dem I2C ist die Frequenz ja grundsätzlich egal, so lange sie nicht zu hoch ist) ohne Probleme versteht.
MFG
BWA
-
Echt spannend, und eine Erleichteung, dass das Ding funktioniert.
Wirklich toll (danke), dass immer auch die Auflösung noch mitgeteilt wird,
es scheint als hätten wir damit wieder eine der Grenzen erkannt.
Hoffentlich kann ein späterer Anwender bei Problemen darauf zurückgreifen.
Der Titel des Threads spricht ja dafür.
Manfred
-
:-k
könnte da noch was andres reinfunken,
denn ich hab den mit 400kHz angesprochen, und nie ein Problem gehabt :-k
Hab den mit dem RN-Control (Mega32 mit 16MHz), + GLCD für die Anzeige, angeschlossen, und bin so im Garten rumgelaufen. Im Halbsekundentakt hab ich die Anzeige aktualisieren lassen.