PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : externes EEPROM+ROBI+Beschleunigungssenor



TJ_99
30.11.2010, 22:07
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


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



//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);


}