diff --git a/implementation/accelerometer.c b/implementation/accelerometer.c index 0bb3f14..2c8cf4e 100644 --- a/implementation/accelerometer.c +++ b/implementation/accelerometer.c @@ -3,28 +3,22 @@ #include "MySPI.h" #include "gpio.h" -void accelerometre() +void Init_accelerometre() { - int dataX ; - float GX ; - int dataY ; - float GY; - int dataZ ; - float GZ; + //char testReg; - char testReg; MySPI_Init(SPI1); MySPI_Clear_NSS(); //CS LOW MySPI_Send(0x2D);//Registre Auto_sleep + Write + measure a 1 MySPI_Send(0x08);// désactive MySPI_Set_NSS();//CS HIGH - + /* MySPI_Clear_NSS(); //CS LOW MySPI_Send(0xAD);// regisstre 0x2D en lecture testReg = MySPI_Read(); // lecture de la valeur du registre MySPI_Set_NSS();//CS HIGH - + */ MySPI_Clear_NSS(); //CS LOW MySPI_Send(0X2C);//Registre power consuption + Write @@ -35,23 +29,43 @@ void accelerometre() MySPI_Send(0x31);//registre Data format + write MySPI_Send(0x17);// MySPI_Set_NSS();//CS HIGH +} + +void Lecture_accelerometre(float* GX, float* GY, float* GZ) +{ + int16_t dataX ; + int16_t dataY ; + int16_t dataZ ; MySPI_Clear_NSS(); //CS LOW - MySPI_Send(0xF2); - dataX = MySPI_Read()<<8; - dataX |= MySPI_Read(); - dataX &= 0xE; - GX = dataX*0.004; + + MySPI_Send(0xF2);//lecture 1er registre accéléromètre + lecture multibytes + dataX = MySPI_Read()<<8; // données sur 13 (12 data + sign) bits passage 8 bit en PF + dataX |= MySPI_Read(); //lecture SPI + dataX &= 0x1FFF; //masquage au dessus du bit 13 + if (dataX > 511) + { + dataX -= 1024; + } + *GX = dataX*0.004;//valeur du registre x pas accelerometre + dataY = MySPI_Read()<<8; dataY |= MySPI_Read(); - dataY &= 0xE; - GY = dataY*0.004; - dataZ = MySPI_Read()<<8; - dataZ |= MySPI_Read(); - dataZ &= 0xE; - GZ = dataZ*0.004; + dataY &= 0x1FFF; + if (dataY > 511) + { + dataY -= 1024; + } + *GY = dataY*0.004;//valeur du registre x pas accelerometre + + dataZ = ((MySPI_Read()<<8)|MySPI_Read()); + dataZ &= 0x1FFF; +/* if (dataZ > 511) + { + dataZ -= 1024; + } +*/ + *GZ = dataZ*0.004;//valeur du registre x pas accelerometre + MySPI_Set_NSS();//CS HIGH - - - } \ No newline at end of file diff --git a/implementation/accelerometer.h b/implementation/accelerometer.h index 1d8a585..f0926cc 100644 --- a/implementation/accelerometer.h +++ b/implementation/accelerometer.h @@ -2,7 +2,7 @@ #define INC_ACCELEROMETER_H_ #include "../driver/MySPI.h" -void accelerometre(); - +void Init_accelerometre(); +void Lecture_accelerometre(float *GX, float* GY, float* GZ); #endif \ No newline at end of file diff --git a/keilproject/Source/Principale.c b/keilproject/Source/Principale.c index 545b510..1310105 100644 --- a/keilproject/Source/Principale.c +++ b/keilproject/Source/Principale.c @@ -4,16 +4,21 @@ #include "motoreducteur.h" #include "rtc.h" #include "remote.h" +#include "accelerometer.h" void initImplementation(void); +float GX, GY, GZ; int main (void) { + //MyGPIO_Struct_TypeDef led = {GPIOA,5,Out_PullUp}; //led - //MyGPIO_Init(&led); //test des leds pour ignorer les contraintes liées aux différents ports + //MyGPIO_Init(&led); //test des leds pour ignorer les contraintes li�es aux diff�rents ports initImplementation(); //MyRTC_GetTime(&sec, &min, &hour, &day, &date, &month, &year); - while(1){}; + while(1){ + Lecture_accelerometre(&GX,&GY,&GZ); + }; } void initImplementation(void) @@ -21,6 +26,7 @@ void initImplementation(void) MyServo_Init(); MyServo_ChangeAngle(179); initRemote(); + Init_accelerometre(); testRemote(); MyMotor_Init(); MyMotor_ChangeSpeed(0);