Hallo an alle,
ich habe an meinen PRO BOT128 von Conrad einen Beschleunigungssensor von BOSCH(BMA150) und ein EEPROM AT24C1014B angeschlossen.
Mein Programm funktoniert so:
Der Robi soll eine gewisse Zeit fahren, dabei sollen die Beschleunigungen gemessen und ins EEPROM gespeichert werden.
Nun funktonieren die beiden Programme Beschleunigungen lesen und speichern nicht zusammen ich erhalte für x,y und z immer den gleichen Wert.(ax=ay=az=0.00)
Speicher ich einen beliebigen Wert in mein EEPROM(ohne BMA) dann erhalte ich die richtigen Werte.
Zum EEPROM meine Device Adresse ist 10100000(=0xA0), anschließen schicke ich mein MSB(0x00) und mein LSB(0x01) und den x-Wert den ich unter 0x01 speichern möchte.
Wo kann mein Fehler liegen?
Ich programmiere in C-Compakt(ähnlich zu c), weil der Robi von Conrad ist. Die Ganze Kommunikation zwischen Sensor; EEPROM und ROBI erfolgt über I2C.
Über hilfreiche Tipps wäre ichEuch sehr dankbar.
Gruß
TJ
Code für die Sensordaten
Code:
void thread1(void)
{
word adresse;
adresse=0x02;
int x_long,y_long,z_long;
unsigned int x_short,y_short,z_short;
PRO_BOT128_INIT();
I2C_Init(I2C_100kHz);
I2C_Start();
I2C_Write(0x70);
I2C_Write(adresse);
I2C_Stop();
I2C_Start();
I2C_Write(0x71);
x_short=I2C_Read_ACK();
x_long=I2C_Read_ACK();
x_long=(((x_long)*4)*+(x_short/64));
y_short=I2C_Read_ACK();
y_long=I2C_Read_ACK();
y_long=(((y_long)*4)+(y_short/64));
z_short=I2C_Read_ACK();
z_long=I2C_Read_NACK();
z_long=(((z_long)*4)+(z_short/64));
I2C_Stop();
}
Code um Werte ins EEPROM zu schreiben und umzuwandeln bsp nur für den x-Wert
Code:
//Die Beschleunigungen in x,y und z Richtung sollen mithilfe des BMA150 und dem PRO BOT128 ausgelesen werden
void main(void)
{
PRO_BOT128_INIT();
I2C_Init(I2C_100kHz);
g_Werte();
DRIVE_INIT();
// Beginn Kommunikation BMA und ROBI
Thread_Start(1,thread1);
Thread_Delay(10);
//EEPROM schreiben
word add_H,add_L;
add_H=0x00;
add_L=0x00;
int x_long,y_long,z_long;
int EEPROM_x_long,EEPROM_y_long,EEPROM_z_long;
I2C_Start();
I2C_Write(0xA0);
I2C_Write(0x00>>8);
I2C_Write(0x01);
I2C_Write(x_long);
I2C_Stop();
AbsDelay(100);
I2C_Start();
I2C_Write(0xA0);
I2C_Write(0x00>>8);
I2C_Write(0x01);
I2C_Start();
I2C_Write(0xA1);
EEPROM_x_long=I2C_Read_ACK();
I2C_Stop();
// Daten bearbeiten
if (EEPROM_x_long > 511)
{
EEPROM_x_long= (EEPROM_x_long - 511);
EEPROM_x_long= (511 - EEPROM_x_long);
EEPROM_x_long= (EEPROM_x_long*(-1));
x= (EEPROM_x_long * 0.00390625);
}
else
{
x= (EEPROM_x_long * 0.00390625);
}
float x;
float str[4];
Str_Printf(str,"%1.2f",x);
Msg_WriteChar(97);
Msg_WriteChar(120);
Msg_WriteChar(61);
Msg_WriteText(str);
Msg_WriteChar(13);
}
Lesezeichen