# Atlas LED
## Projet Fisa AE

Projet FISA AE mélangeant nos connaissances en électronique, programmation et un peu de mécanique.
Tout est réalisé à l'aide de logiciels de CAO pour l'électronique ou la modélisation. Pour la programmation tout cela est réalisé avec STM32 CubeMX ainsi que Keil microvision sur le microcontrôleur STM32 F030F4P6TR.

## Role des pins

|Numéro de PIN|Fonction|Rôle|
|:-:|:--|--:|
|PA0|GPIO_Output|Quand un appui est effectué sur le bouton, allume les LEDs|
|PA1|ADC_IN|Récupère le niveau de la batterie, uniquement quand PA2 est enable|
|PA2|GPIO_Output|Permet de récupérer le niveau de batterie, active l'ADC de manière externe|
|~PA4~|~Non utilisé~|x|
|PA6|GPIO_Output|Enable 5V -> Toujours à 0(logique inverse) pour activer l'USB-C|
|PA7|MOSI|SPI permettant le contrôle des LEDS, voir la [doc](https://www.digikey.fr/fr/datasheets/parallaxinc/parallax-inc-28085-ws2812b-rgb-led-datasheet)|
|~PA10~|~Non utilisé~|x|

*Quand ADC -> PA2 à 1 (enable la batterie). PA6 à 0 tout le temps si transistor (enable le cable usb c)*

## Configuration du SPI

Pour respecter le timing des LEDs il est primordial de régler correctement la clock pour que les données envoyées soient de la bonne taille, et à la bonne fréquence. Voici les contraintes :
 - 0.4 microseconde minimum pour l'envoi d'une donnée
 - Pour un bit à 1 : 0.8 à 1, 0.4 à 0
 - Pour un bit à 0 : 0.4 à 1, 0.8 à 1
 - Le reset se fait à partir de 50 microsecondes
 - Il faudra prévoir les données à envoyer dans un tableau pour éviter ce reset.
 
Voici la configuration choisie sur STM32CubeMX :

|DataSize|Prescaler|Clock (HCLK)|Baud Rate|First Bit|
|---|---|---|---|---|
|6|8|48 MHz|5 MBits/s|MSB|

Le but sera donc d'avoir 6 bits, pour différentes données, nous aurons :
 - pour 1 -> 0b111100
 - pour 0 -> 0b110000

Car chaque bit fera donc 0.2 microsecondes, et comme le datasize minimum est 6, nous multiplions par deux le nombre de données envoyées, cela ne sera pas un problème au niveau mémoire car dans la fonction de **transmit** du SPI nous pourrons doubler directement chaque donnée.