From 30b6ef8c92d604d81a80dd8fb7583931b5e81984 Mon Sep 17 00:00:00 2001 From: leo Date: Sun, 30 Nov 2025 12:39:05 +0100 Subject: [PATCH] Changement batterie et transmission --- Services/Batterie.c | 27 +++++++++++++++++++-------- Services/Batterie.h | 2 ++ Services/Transmission.c | 16 ++++++++++++++++ Services/Transmission.h | 1 + Services/roulis.c | 10 ++-------- drivers/ADC.c | 8 +++++--- readme.txt | 21 ++++++++++++++++++--- 7 files changed, 63 insertions(+), 22 deletions(-) diff --git a/Services/Batterie.c b/Services/Batterie.c index 7451410..5352a41 100644 --- a/Services/Batterie.c +++ b/Services/Batterie.c @@ -14,22 +14,33 @@ void MyBatterie_Init(void){ MyADC_Init(ADC1,14); // Init ADC channel 14 pour convertir valeur MyADC_ActiveIT(ADC1,15,&handler_ADC); // Init interruption quand conversion finie - My_USART_Init(USART1); // Init USART pour envoyer batterie + //My_USART_Init(USART1); // Init USART pour envoyer batterie start_conversion(ADC1); // Premiere conversion } void handler_ADC (void){ //last2++; - if (tickms - last2 >= 2000) { - last2 = tickms; + //if (tickms - last2 >= 2000) { + //last2 = tickms; d = ADC1->DR &~ (0xF << 12); // Retourne valeur numérique d = d*3.3/4096; d = d*13*100/12; - send_USART_String(USART1,"Batterie : "); - send_USART(USART1,((int)d/10) + '0'); // Envoie le chiffre des dizaines - send_USART(USART1,((int)d%10) + '0'); // Envoie le chiffre des unités - send_USART_String(USART1,"%\n"); + //send_USART_String(USART1,"Batterie : "); + //send_USART(USART1,((int)d/10) + '0'); // Envoie le chiffre des dizaines + //send_USART(USART1,((int)d%10) + '0'); // Envoie le chiffre des unités + //send_USART_String(USART1,"%\n"); + //} + //start_conversion(ADC1); // Recommence la conversion pour le prochain +} + +void Gestion_Conversion_ADC(void){ + if (tickms - last2 >= 1000) { + last2 = tickms; + start_conversion(ADC1); } - start_conversion(ADC1); // Recommence la conversion pour le prochain +} + +int MyBatterie_val(){ + return (int)d; } \ No newline at end of file diff --git a/Services/Batterie.h b/Services/Batterie.h index 4feb0d5..7a9c35b 100644 --- a/Services/Batterie.h +++ b/Services/Batterie.h @@ -5,5 +5,7 @@ void MyBatterie_Init(void); void handler_ADC(void); +void Gestion_Conversion_ADC(void); +int MyBatterie_val(); #endif \ No newline at end of file diff --git a/Services/Transmission.c b/Services/Transmission.c index 5c64c7c..11bb6c2 100644 --- a/Services/Transmission.c +++ b/Services/Transmission.c @@ -4,6 +4,7 @@ extern uint32_t tickms; uint32_t last1 = 0; +uint32_t last3 = 0; void Transmission_Init(void){ My_USART_Init(USART1); @@ -20,4 +21,19 @@ void Transmission_allure(int angle_voiles){ else if (angle_voiles <= 90) send_USART_String(USART1,"Le bateau navigue vent arriere. \n"); else send_USART_String(USART1,"ERREUR DANS L'ANGLE!! \n"); } +} + +void Transmission_batterie(int batterie){ + if (tickms-last3 >= 5000){ + last3 = tickms; + if(batterie > 50){ + send_USART_String(USART1,"Batterie : "); + } + else{ + send_USART_String(USART1, "ATTENTION LA BATTERIE EST SOUS LES 50% : "); + } + send_USART(USART1,(batterie/10) + '0'); // Envoie le chiffre des dizaines + send_USART(USART1,(batterie%10) + '0'); // Envoie le chiffre des unités + send_USART_String(USART1,"%\n"); + } } \ No newline at end of file diff --git a/Services/Transmission.h b/Services/Transmission.h index 430bd63..85aa06a 100644 --- a/Services/Transmission.h +++ b/Services/Transmission.h @@ -3,5 +3,6 @@ void Transmission_Init(void); void Transmission_allure(int angle_voiles); +void Transmission_batterie(int batterie); #endif \ No newline at end of file diff --git a/Services/roulis.c b/Services/roulis.c index e891c3e..9361718 100644 --- a/Services/roulis.c +++ b/Services/roulis.c @@ -37,11 +37,6 @@ void MyRoulis_Init(void){ void MyRoulis_Data(void){ // Récupération des registred DATAX0..DATAZ1 (6 registres) -// MySPI_Clear_NSS(); // Début transmission X -// MySPI_Send((0x32)|(0<<7)|(1<<6)); // On veut lire les 2 bytes DATAX -// x1 = MySPI_Read(); // premier byte -// x2 = MySPI_Read(); // deuxième byte -// MySPI_Set_NSS(); // Fin transmission X MySPI_Clear_NSS(); // Début transmission Y MySPI_Send((0x34)|(1<<7)|(1<<6)); // On veut lire les 2 bytes DATAY @@ -58,11 +53,10 @@ void MyRoulis_Data(void){ float MyRoulis_Angle(){ //Calcul de l'angle alpha - //int x = x1 + (x2 << 8); y = y1 + (y2 << 8); z = z1 + (z2 << 8); - a = (float)z*32.0/(float)(1<<10); - b = (float)y*32.0/(float)(1<<10); + a = (float)z*32.0/(float)(1<<10); // Doit être compris entre -1 et 1 + b = (float)y*32.0/(float)(1<<10); // Egalement : Pour vérifier que l'on récupère des valeurs cogérentes alpha = atan((float)y/(float)z); return alpha; } \ No newline at end of file diff --git a/drivers/ADC.c b/drivers/ADC.c index 1426e3d..c8bbc38 100644 --- a/drivers/ADC.c +++ b/drivers/ADC.c @@ -8,13 +8,15 @@ void MyADC_Init(ADC_TypeDef *ADC, char channel){ else if (ADC == ADC2) RCC->APB2ENR |= RCC_APB2ENR_ADC2EN; RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6; // Passage de l'horloge a 12MHz ADC->CR2 |= ADC_CR2_ADON; // Démarrage ADC - ADC->SQR1 &= ADC_SQR1_L; // Fixe nb de conversion à faire : 1 + ADC->SQR1 &=~ ADC_SQR1_L; // Fixe nb de conversion à faire : 1 ADC->SQR3 = channel; // Fixe la voie à convertir + ADC->CR2 |= ADC_CR2_EXTTRIG; + ADC->CR2 |= ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_2; } void start_conversion(ADC_TypeDef *ADC){ - ADC->CR2 |= ADC_CR2_EXTSEL; - ADC->CR2 |= ADC_CR2_EXTTRIG; // Permettre le démarage externe + //ADC->CR2 |= ADC_CR2_EXTSEL; + //ADC->CR2 |= ADC_CR2_EXTTRIG; // Permettre le démarage externe ADC->CR2 |= ADC_CR2_SWSTART; // demander une conversion externe //Si on veut faire par scrutation et non par intéruption, laisser les lignes suivantes //while(!(ADC->SR & ADC_SR_EOC)); // attendre la fin (EOC = 1) diff --git a/readme.txt b/readme.txt index 6c94b46..b0f4751 100644 --- a/readme.txt +++ b/readme.txt @@ -21,8 +21,23 @@ prio interruption timer2 : 0 Batterie : ?PC4 : Floating input (ADC12 CHANNEL14) -!PA9 : Alternate output push pull (UART1 TX) prio interruption ADC : 15 -Fonctionnement de la batterie okay, il faut voir quand est-ce qu'on recommence la conversion ou quand est-ce qu'on envoie la batterie. -Il faudrait vérifier le driver SPI qui ne fonctionne pas. \ No newline at end of file + +Transmission : + +!PA9 : Alternate output push pull (UART1 TX) +Transmet allure du bateau et batterie à UART + + +Systick : + +Créer un timer qui compte par ms avec systick du systeme + + +Le service plateau envoie la PWM et le bit de sens en permanence +Le service roulis renvoie l'angle de roulis +Le service batterie permet maintenant de renvoyer la batterie, nouvelle conversion toutes les Xms +Le service transmission utilise la valeur de la batterie et la valeur de l'angle des voiles pour envoyer à UART toutes les Xms + +Le SPI ne marche toujours pas \ No newline at end of file