Séparation des fonctions du gyroscope
This commit is contained in:
		
							parent
							
								
									8433c1b6c7
								
							
						
					
					
						commit
						f1221027cc
					
				| @ -6,6 +6,7 @@ set(CMAKE_CXX_STANDARD 17) | ||||
| pico_sdk_init() | ||||
| add_executable(test | ||||
| test.c | ||||
| gyro.c | ||||
| ) | ||||
| pico_enable_stdio_usb(test 1) | ||||
| pico_enable_stdio_uart(test 1) | ||||
|  | ||||
							
								
								
									
										97
									
								
								gyro.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								gyro.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,97 @@ | ||||
| #include <stdio.h> | ||||
| #include "pico/stdlib.h" | ||||
| #include "hardware/gpio.h" | ||||
| #include "hardware/spi.h" | ||||
| 
 | ||||
| const uint PIN_CS = 1; | ||||
| 
 | ||||
| static inline void cs_select(); | ||||
| static inline void cs_deselect(); | ||||
| int gyro_init_check(); | ||||
| int gyro_read_register_blocking(uint8_t registrer, uint8_t *tampon, uint8_t nb_a_lire); | ||||
| 
 | ||||
| 
 | ||||
| void Gyro_Init(void){ | ||||
|     // 
 | ||||
|     gpio_set_function(16, GPIO_FUNC_SPI); // SDI
 | ||||
|     gpio_set_function(18, GPIO_FUNC_SPI); // SCK
 | ||||
|     gpio_set_function(19, GPIO_FUNC_SPI); // SDO
 | ||||
|     gpio_set_function(PIN_CS, GPIO_OUT); // CSn
 | ||||
| 
 | ||||
|     gpio_init(PIN_CS); | ||||
|     gpio_set_dir(PIN_CS, GPIO_OUT); | ||||
|     cs_deselect(); | ||||
| 
 | ||||
|     spi_init(spi0, 100 * 1000); // SPI init @ 100 kHZ
 | ||||
| 
 | ||||
|     //Ça doit être les valeurs par défaut, mais ça marche !
 | ||||
|     spi_set_format(spi0, 8, SPI_CPHA_1, SPI_CPOL_1, SPI_MSB_FIRST); | ||||
| 
 | ||||
|     // Test de la présence du gyroscope :
 | ||||
|     if(gyro_init_check()){ | ||||
|         puts("Gyroscope non trouve"); | ||||
|     }else{ | ||||
|         puts("Gyroscope trouve"); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| int gyro_init_check(){ | ||||
|     // Renvoi 0 si l'initialisation s'est bien passée
 | ||||
|     // Renvoi 1 si le gyroscope n'a pas répondu
 | ||||
|     uint8_t tampon[2]=""; | ||||
|     gyro_read_register_blocking(0x0F, tampon, 1); | ||||
|     if(tampon[0] == 0xd7){ | ||||
|         return 0; | ||||
|     } | ||||
|     return 1; | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int gyro_read_register_blocking(uint8_t registrer, uint8_t *tampon, uint8_t nb_a_lire){ | ||||
|     uint8_t reg = registrer | 0xC0 ; | ||||
|     int nb_recu; | ||||
|     cs_select(); | ||||
|     spi_write_blocking(spi0, ®, 1); | ||||
|     sleep_ms(10); | ||||
|     nb_recu = spi_read_blocking(spi0, 0, tampon, nb_a_lire); | ||||
|     cs_deselect(); | ||||
|      | ||||
| } | ||||
| 
 | ||||
| void Gyro_Read(void){ | ||||
|     uint8_t tampon[10]=""; | ||||
|     uint8_t reg[2] = {0x0F | 0x80 | 0x40, '\0'}; | ||||
|     int nb_recu; | ||||
|     // Lire l'adresse d'identification
 | ||||
|     // WHO_AM_I : 0x0F
 | ||||
|     cs_select(); | ||||
|     puts("Envoi"); | ||||
| 
 | ||||
|     spi_write_blocking(spi0, reg, 1); | ||||
|     // Doit répondre : 0b1101 0111
 | ||||
|     puts(reg); | ||||
|     puts("Lecture"); | ||||
|     sleep_ms(10); | ||||
| 
 | ||||
|     nb_recu = spi_read_blocking(spi0, 0x55, tampon, 1); | ||||
|     tampon[nb_recu]='\0';  | ||||
|     puts(tampon); | ||||
|     cs_deselect(); | ||||
|      | ||||
|      | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| static inline void cs_select() { | ||||
|     asm volatile("nop \n nop \n nop"); | ||||
|     gpio_put(PIN_CS, 0);  // Active low
 | ||||
|     asm volatile("nop \n nop \n nop"); | ||||
| } | ||||
| 
 | ||||
| static inline void cs_deselect() { | ||||
|     asm volatile("nop \n nop \n nop"); | ||||
|     gpio_put(PIN_CS, 1); | ||||
|     asm volatile("nop \n nop \n nop"); | ||||
| } | ||||
							
								
								
									
										96
									
								
								test.c
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								test.c
									
									
									
									
									
								
							| @ -1,31 +1,13 @@ | ||||
| #include <stdio.h> | ||||
| #include "pico/stdlib.h" | ||||
| #include "hardware/gpio.h" | ||||
| #include "hardware/spi.h" | ||||
| #include "hardware/i2c.h" | ||||
| #include "pico/binary_info.h" | ||||
| 
 | ||||
| #include "gyro.h" | ||||
| 
 | ||||
| const uint PIN_CS = 1; | ||||
| const uint LED_PIN = 25; | ||||
| 
 | ||||
| void init_gyro(void); | ||||
| void read_gyro(void); | ||||
| void read_gyro_i2c(); | ||||
| void init_gyro_i2c(); | ||||
| 
 | ||||
| static inline void cs_select() { | ||||
|     asm volatile("nop \n nop \n nop"); | ||||
|     gpio_put(PIN_CS, 0);  // Active low
 | ||||
|     asm volatile("nop \n nop \n nop"); | ||||
| } | ||||
| 
 | ||||
| static inline void cs_deselect() { | ||||
|     asm volatile("nop \n nop \n nop"); | ||||
|     gpio_put(PIN_CS, 1); | ||||
|     asm volatile("nop \n nop \n nop"); | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     bi_decl(bi_program_description("This is a test binary.")); | ||||
|     bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED")); | ||||
| @ -36,7 +18,8 @@ int main() { | ||||
|     gpio_set_dir(LED_PIN, GPIO_OUT); | ||||
|     gpio_put(LED_PIN, 1); | ||||
| 
 | ||||
|     init_gyro(); | ||||
| 
 | ||||
|     Gyro_Init(); | ||||
| 
 | ||||
|     while (1) {  | ||||
|         /*gpio_put(LED_PIN, 0);
 | ||||
| @ -45,77 +28,6 @@ int main() { | ||||
|         puts("Bonjour"); | ||||
|         sleep_ms(1000);*/ | ||||
|         sleep_ms(1000); | ||||
|         read_gyro(); | ||||
|         Gyro_Read(); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void init_gyro_i2c(){ | ||||
|     gpio_set_function(0, GPIO_FUNC_I2C); // SDA
 | ||||
|     gpio_set_function(1, GPIO_FUNC_I2C); // SCL
 | ||||
|     i2c_init(i2c0, 40 * 1000); | ||||
| } | ||||
| 
 | ||||
| void read_gyro_i2c(){ | ||||
|     uint8_t tampon[10]=""; | ||||
|     uint8_t reg = 0x0F; | ||||
|     int rep; | ||||
|     uint8_t adresse_7bits = 0b1101011; | ||||
| 
 | ||||
|     // Envoi adresse registre à lire
 | ||||
|     rep = i2c_write_blocking(i2c0, adresse_7bits, ®, 1, true ); | ||||
|     if(rep == PICO_ERROR_GENERIC){ | ||||
|         puts("Erreur I2C"); | ||||
|     }else{ | ||||
|         puts("envoi OK"); | ||||
|     } | ||||
| 
 | ||||
|     // Lecture identification 
 | ||||
|     rep = i2c_read_blocking(i2c0, adresse_7bits, tampon, 1, false ); | ||||
|     if(rep == PICO_ERROR_GENERIC){ | ||||
|         puts("Erreur I2C"); | ||||
|     }else{ | ||||
|         puts("Reception OK"); | ||||
|         puts(tampon); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void init_gyro(void){ | ||||
|     // 
 | ||||
|     gpio_set_function(16, GPIO_FUNC_SPI); // SDI
 | ||||
|     gpio_set_function(18, GPIO_FUNC_SPI); // SCK
 | ||||
|     gpio_set_function(19, GPIO_FUNC_SPI); // SDO
 | ||||
|     gpio_set_function(PIN_CS, GPIO_OUT); // CSn
 | ||||
| 
 | ||||
|     gpio_init(PIN_CS); | ||||
|     gpio_set_dir(PIN_CS, GPIO_OUT); | ||||
|     cs_deselect(); | ||||
| 
 | ||||
|     spi_init(spi0, 100 * 1000); // SPI init @ 100 kHZ
 | ||||
| 
 | ||||
|     //Ça doit être les valeurs par défaut, mais ça marche !
 | ||||
|     spi_set_format(spi0, 8, SPI_CPHA_1, SPI_CPOL_1, SPI_MSB_FIRST); | ||||
| } | ||||
| void read_gyro(void){ | ||||
|     uint8_t tampon[10]=""; | ||||
|     uint8_t reg[2] = {0x0F | 0x80 | 0x40, '\0'}; | ||||
|     int nb_recu; | ||||
|     // Lire l'adresse d'identification
 | ||||
|     // WHO_AM_I : 0x0F
 | ||||
|     cs_select(); | ||||
|     puts("Envoi"); | ||||
| 
 | ||||
|     spi_write_blocking(spi0, reg, 1); | ||||
|     // Doit répondre : 0b1101 0111
 | ||||
|     puts(reg); | ||||
|     puts("Lecture"); | ||||
|     sleep_ms(10); | ||||
| 
 | ||||
|     nb_recu = spi_read_blocking(spi0, 0x55, tampon, 1); | ||||
|     tampon[nb_recu]='\0';  | ||||
|     puts(tampon); | ||||
|     cs_deselect(); | ||||
|      | ||||
|      | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user