Roulis okay

This commit is contained in:
leo 2025-11-26 19:00:26 +01:00
parent af2ac44314
commit 624aa536d5
4 changed files with 20 additions and 15 deletions

View file

@ -4,19 +4,19 @@
#include <ADC.h> #include <ADC.h>
#include <USART.h> #include <USART.h>
int a; int d;
void MyBatterie_Init(void){ void MyBatterie_Init(void){
MyGPIO_Init(GPIOC,4,In_Floating); // Init PORT pour recevoir tension MyGPIO_Init(GPIOC,4,In_Floating); // Init PORT pour recevoir tension
MyADC_Init(ADC1,14); // Init ADC pour convertir valeur MyADC_Init(ADC1,14); // Init ADC channel 14 pour convertir valeur
My_USART_Init(USART2); // Init USART pour envoyer batterie My_USART_Init(USART2); // Init USART pour envoyer batterie
MyGPIO_Init(GPIOA,2,AltOut_Ppull); // Init PORT pour envoyer pourcentage batterie MyGPIO_Init(GPIOA,2,AltOut_Ppull); // Init PORT pour envoyer pourcentage batterie
MyADC_ActiveIT(ADC1,15,&handler_ADC); // Init interruption quand conversion finie MyADC_ActiveIT(ADC1,15,&handler_ADC); // Init interruption quand conversion finie
} }
void handler_ADC (void){ void handler_ADC (void){
a = ADC1->DR &~ (0xF << 12); // Retourne valeur numérique d = ADC1->DR &~ (0xF << 12); // Retourne valeur numérique
send_USART(USART2,a*13*100/12); // Envoie la valeur numérique*13 send_USART(USART2,d*13*100/12); // Envoie la valeur numérique*13
send_USART(USART2,'%'); send_USART(USART2,'%');
start_conversion(ADC1); // Recommence la conversion pour le prochain start_conversion(ADC1); // Recommence la conversion pour le prochain
} }

View file

@ -6,23 +6,26 @@
//char x1,x2 //char x1,x2
char y1,y2,z1,z2; char y1,y2,z1,z2;
short y,z;
float a,b;
float alpha;
void MyRoulis_Init(void){ void MyRoulis_Init(void){
MySPI_Init(SPI1); MySPI_Init(SPI1);
// Initialisation des registres externes // Initialisation des registres externes
MySPI_Clear_NSS(); // Déput transmission MySPI_Clear_NSS(); // Déput transmission
MySPI_Send((0x2D|(1<<7))); // On veut écrire à l'adresse de POWER_CTL : 0x2D MySPI_Send((0x2D|(0<<7))); // On veut écrire à l'adresse de POWER_CTL : 0x2D
MySPI_Send(1<<3); // On veut mettre le bit "measure" à 1; MySPI_Send(1<<3); // On veut mettre le bit "measure" à 1;
MySPI_Set_NSS(); // Fin transmission MySPI_Set_NSS(); // Fin transmission
MySPI_Clear_NSS(); MySPI_Clear_NSS();
MySPI_Send((0x2C)|(1<<7)); // On veut écrire à l'adresse de BW_RATE MySPI_Send((0x2C)|(0<<7)); // On veut écrire à l'adresse de BW_RATE
MySPI_Send(0x0A); MySPI_Send(0x0A);
MySPI_Set_NSS(); MySPI_Set_NSS();
MySPI_Clear_NSS(); MySPI_Clear_NSS();
MySPI_Send((0x31)|(1<<7)); // On veut écrire à l'adresse de DATA_FORMAT MySPI_Send((0x31)|(0<<7)); // On veut écrire à l'adresse de DATA_FORMAT
MySPI_Send(0x03); MySPI_Send(0x03);
MySPI_Set_NSS(); MySPI_Set_NSS();
@ -41,23 +44,25 @@ void MyRoulis_Data(void){
// MySPI_Set_NSS(); // Fin transmission X // MySPI_Set_NSS(); // Fin transmission X
MySPI_Clear_NSS(); // Début transmission Y MySPI_Clear_NSS(); // Début transmission Y
MySPI_Send((0x34)|(0<<7)|(1<<6)); // On veut lire les 2 bytes DATAY MySPI_Send((0x34)|(1<<7)|(1<<6)); // On veut lire les 2 bytes DATAY
y1 = MySPI_Read(); // premier byte y1 = MySPI_Read(); // premier byte
y2 = MySPI_Read(); // deuxième byte y2 = MySPI_Read(); // deuxième byte
MySPI_Set_NSS(); // Fin transmission Y MySPI_Set_NSS(); // Fin transmission Y
MySPI_Clear_NSS(); // Début transmission Z MySPI_Clear_NSS(); // Début transmission Z
MySPI_Send((0x36)|(0<<7)|(1<<6)); // On veut lire les 2 bytes DATAZ MySPI_Send((0x36)|(1<<7)|(1<<6)); // On veut lire les 2 bytes DATAZ
z1 = MySPI_Read(); // premier byte z1 = MySPI_Read(); // premier byte
z2 = MySPI_Read(); // deuxième byte z2 = MySPI_Read(); // deuxième byte
MySPI_Set_NSS(); // Fin transmission Z MySPI_Set_NSS(); // Fin transmission Z
} }
int MyRoulis_Angle(){ float MyRoulis_Angle(){
//Calcul de l'angle alpha //Calcul de l'angle alpha
//int x = x1 + (x2 << 8); //int x = x1 + (x2 << 8);
int y = y1 + (y2 << 8); y = y1 + (y2 << 8);
int z = z1 + (z2 << 8); z = z1 + (z2 << 8);
int alpha = atan(y / z); //sqrtf(x*x + y*y) a = (float)z*32.0/(float)(1<<10);
b = (float)y*32.0/(float)(1<<10);
alpha = atan((float)y/(float)z);
return alpha; return alpha;
} }

View file

@ -9,6 +9,6 @@ Ou sinon sur interruption d'un timer a 100HZ
void MyRoulis_Init(void); void MyRoulis_Init(void);
void MyRoulis_Data(void); void MyRoulis_Data(void);
int MyRoulis_Angle(); float MyRoulis_Angle();
#endif #endif

View file

@ -9,7 +9,7 @@ void MySPI_Init(SPI_TypeDef * SPI){
// Initialisationdes PORTS IOs // Initialisationdes PORTS IOs
MyGPIO_Init(GPIOA,4,Out_Ppull); MyGPIO_Init(GPIOA,4,Out_Ppull);
MyGPIO_Init(GPIOA,5,AltOut_Ppull); MyGPIO_Init(GPIOA,5,AltOut_Ppull);
MyGPIO_Init(GPIOA,6,In_Floating); MyGPIO_Init(GPIOA,6,In_PullDown);
MyGPIO_Init(GPIOA,7,AltOut_Ppull); MyGPIO_Init(GPIOA,7,AltOut_Ppull);
} }
else if (SPI == SPI2) { else if (SPI == SPI2) {