71 lines
1.6 KiB
C
71 lines
1.6 KiB
C
#include "stm32f10x.h"
|
||
#include "accelerometer.h"
|
||
#include "MySPI.h"
|
||
#include "gpio.h"
|
||
|
||
void Init_accelerometre(void)
|
||
{
|
||
//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
|
||
MySPI_Send(0X1A);//Param<61>trage hors low consumption + 100Hz output data rate
|
||
MySPI_Set_NSS();//CS HIGH
|
||
|
||
MySPI_Clear_NSS(); //CS LOW
|
||
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);//lecture 1er registre acc<63>l<EFBFBD>rom<6F>tre + lecture multibytes
|
||
dataX = MySPI_Read()<<8; // donn<6E>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 &= 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
|
||
}
|