From 6857a944ba81e8da9ec2e3f84e9e9690253e257d Mon Sep 17 00:00:00 2001 From: Samuel Date: Wed, 29 Mar 2023 21:18:20 +0200 Subject: [PATCH] =?UTF-8?q?Les=20fonction=20I2C=20ne=20semble=20pas=20marc?= =?UTF-8?q?her=20si=20elle=20sont=20appell=C3=A9es=20trop=20fr=C3=A9quemen?= =?UTF-8?q?t.=20Ajout=20d'une=20tempo=20de=201=20ms=20dans=20la=20logique?= =?UTF-8?q?=20i2c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Test.c | 28 ++++++++++++++-------------- i2c_annexe.c | 28 ++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/Test.c b/Test.c index 75c140e..a751a7d 100644 --- a/Test.c +++ b/Test.c @@ -478,6 +478,15 @@ int test_i2c_ecriture_pico_annex_nb(){ return 1; } +void affiche_contacteur(){ + while(1){ + printf(">contacteur_butee_A:%d\n", i2c_annexe_get_contacteur_butee_A()); + printf(">contacteur_butee_C:%d\n", i2c_annexe_get_contacteur_butee_C()); + printf(">contacteur_longer_A:%d\n", i2c_annexe_get_contacteur_longer_A()); + printf(">contacteur_longer_C:%d\n", i2c_annexe_get_contacteur_longer_C()); + } +} + /// @brief Test les fonctions dĂ©finies dans I2C_Annexe /// @return 1 pour continuer le test, 0 pour arrĂȘter le test int test_i2c_ecriture_pico_annex_nb_2(){ @@ -500,8 +509,11 @@ int test_i2c_ecriture_pico_annex_nb_2(){ int continue_test=1; time_i2c[0] = time_us_32(); + time_i2c[1] = time_us_32(); time_i2c[2] = 0; + multicore_launch_core1(affiche_contacteur); + while(continue_test){ lettre = getchar_timeout_us(0); if(lettre != PICO_ERROR_TIMEOUT && lettre != '\0'){ @@ -554,23 +566,11 @@ int test_i2c_ecriture_pico_annex_nb_2(){ } } - - - time_i2c[1] = time_us_32(); // Pour mesurer le temps d'execution - i2c_gestion(i2c0); + i2c_gestion(i2c0); i2c_annexe_gestion(); - printf(">contacteur_butee_A:%d\n", i2c_annexe_get_contacteur_butee_A()); - printf(">contacteur_butee_C:%d\n", i2c_annexe_get_contacteur_butee_C()); - printf(">contacteur_longer_A:%d\n", i2c_annexe_get_contacteur_longer_A()); - printf(">contacteur_longer_C:%d\n", i2c_annexe_get_contacteur_longer_C()); - - time_i2c[2] += time_us_32() - time_i2c[1]; // Pour mesurer le temps d'execution - sleep_us(100); // Attente, ou le reste du code } - time_i2c[3] = time_us_32() - time_i2c[0]; - - printf("Temps lecture : %u microsecondes, temps specifique i2c : %u microsecondes.\n", time_i2c[3], time_i2c[2]); + multicore_reset_core1(); return test_continue_test(); } diff --git a/i2c_annexe.c b/i2c_annexe.c index df7ff94..cd79057 100644 --- a/i2c_annexe.c +++ b/i2c_annexe.c @@ -10,28 +10,41 @@ #define TAILLE_DONNEES_EMISSION 3 #define TAILLE_DONNEES_RECEPTION 13 -uint donnees_a_envoyer=0; + uint8_t donnees_emission[TAILLE_DONNEES_EMISSION]; uint8_t donnees_reception[TAILLE_DONNEES_RECEPTION]; +uint donnees_a_envoyer=0; + void i2c_annexe_gestion(){ static enum { EMISSION_DONNEES, + EMISSION_TEMPO, RECEPTION_DONNEES - } etat_i2c_annexe=EMISSION_DONNEES; + enum i2c_resultat_t retour_i2c; + static uint32_t temps; + const uint32_t tempo = 1000; switch(etat_i2c_annexe){ case EMISSION_DONNEES: if(donnees_a_envoyer){ retour_i2c = i2c_ecrire_registre_nb(ADRESSE_PICO_ANNEXE, ADRESSE_DEBUT_W, donnees_emission, TAILLE_DONNEES_EMISSION); if(retour_i2c == I2C_SUCCES){ - etat_i2c_annexe = RECEPTION_DONNEES; + etat_i2c_annexe = EMISSION_TEMPO; donnees_a_envoyer=0; + temps = time_us_32(); } }else{ + etat_i2c_annexe = EMISSION_TEMPO; + temps = time_us_32(); + } + break; + + case EMISSION_TEMPO: + if(temps + tempo < time_us_32() ){ etat_i2c_annexe = RECEPTION_DONNEES; } break; @@ -40,7 +53,7 @@ void i2c_annexe_gestion(){ retour_i2c = i2c_lire_registre_nb(ADRESSE_PICO_ANNEXE, ADRESSE_DEBUT_R, donnees_reception, TAILLE_DONNEES_RECEPTION); if(retour_i2c == I2C_SUCCES){ etat_i2c_annexe = EMISSION_DONNEES; - + temps = time_us_32(); } break; } @@ -66,8 +79,11 @@ void i2c_annexe_ferme_porte(void){ } void i2c_annexe_active_propulseur(void){ - donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] |= 0x04; - donnees_a_envoyer=1; + if(!(donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] & 0x04)){ + printf("active propulseur\n"); + donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] |= 0x04; + donnees_a_envoyer=1; + } } void i2c_annexe_desactive_propulseur(void){ donnees_emission[ADRESSE_TURBINE_PORTE - ADRESSE_DEBUT_W] &= 0xFB;