PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF02 an RP6 Slave-ID ändern



bugmenot
25.12.2010, 17:09
Ich will die Slave-ID des SRF02 von 0xE0 auf 0xE2 ändern. Dafür habe ich folgenden Code:


// Uncommented Version of RP6Base_I2C_Master_01.c
// written by Dominik S. Herwald
// ------------------------------------------------------------------------------------------

#include "RP6RobotBaseLib.h"
#include "RP6I2CmasterTWI.h"

#define PCF8574_8LEDS_ADR 0x70

void I2C_requestedDataReady(uint8_t dataRequestID)
{
}

void I2C_transmissionError(uint8_t errorState)
{
writeString_P("\nI2C ERROR - TWI STATE: 0x");
writeInteger(errorState, HEX);
writeChar('\n');
}


int main(void)
{
initRobotBase();
writeString_P("Hello!\n");
mSleep(3000);

I2CTWI_initMaster(100);
I2CTWI_setRequestedDataReadyHandler(I2C_requestedD ataReady);
I2CTWI_setTransmissionErrorHandler(I2C_transmissio nError);

powerON();

writeString_P("Starting to change Slave-ID\n");
task_I2CTWI();
I2CTWI_transmitByte(0xE0, 0xA0);
mSleep(50);
I2CTWI_transmitByte(0xE0, 0xAA);
mSleep(50);
I2CTWI_transmitByte(0xE0, 0xA5);
mSleep(50);
I2CTWI_transmitByte(0xE0, 0xE2);
mSleep(50);
writeString_P("Done\n");
return 0;
}

Dieser läuft auch schön bis zum Ende durch(Am Ende wird "Done" ausgegeben). Wenn ich jetzt allerdings den Sensor abfragen will funktioniert das immernoch mit 0XE0, nicht mit 0XE2.

ScummVM
25.12.2010, 17:39
Wie viele SRF02 hast du angeschlossen? Beim ändern der ID darf nur einer angeschlossen sein.

bugmenot
25.12.2010, 17:45
Wie viele SRF02 hast du angeschlossen?

Einen

ScummVM
25.12.2010, 18:03
Guck dir mal das RP6Base_I2C_Master_03 an - da wird von einem SRF08 die ID geändert. Das Beispiel sollte auch fürn SRF02 funktionieren.

bugmenot
25.12.2010, 20:50
Guck dir mal das RP6Base_I2C_Master_03 an - da wird von einem SRF08 die ID geändert. Das Beispiel sollte auch fürn SRF02 funktionieren.

Hat funktioniert :)

Für alle, die auf den Thread stoßen, weil sie dasselbe Problem haben:


I2CTWI_transmitByte(0xE0, 0xA0);
mSleep(50);
I2CTWI_transmitByte(0xE0, 0xAA);
mSleep(50);
I2CTWI_transmitByte(0xE0, 0xA5);
mSleep(50);


muss durch das hier ersetzt werden:


I2CTWI_transmit2Bytes(0xE0, 0, 0xA0);
mSleep(50);
I2CTWI_transmit2Bytes(0xE0, 0, 0xAA);
mSleep(50);
I2CTWI_transmit2Bytes(0xE0, 0, 0xA5);
mSleep(50);