Les fonction I2C ne semble pas marcher si elle sont appellées trop fréquement. Ajout d'une tempo de 1 ms dans la logique i2c
This commit is contained in:
		
							parent
							
								
									7c9dd0bab3
								
							
						
					
					
						commit
						6857a944ba
					
				
							
								
								
									
										26
									
								
								Test.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								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_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(); | ||||
| } | ||||
|  | ||||
							
								
								
									
										24
									
								
								i2c_annexe.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								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){ | ||||
|     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; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user