<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://projets-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rex</id>
	<title>projets-se.plil.fr - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://projets-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rex"/>
	<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Rex"/>
	<updated>2026-08-24T07:40:25Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Groupe2025-4&amp;diff=11103</id>
		<title>SE3Groupe2025-4</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Groupe2025-4&amp;diff=11103"/>
		<updated>2026-06-19T14:35:36Z</updated>

		<summary type="html">&lt;p&gt;Rex : Révocation des modifications de Rex (discussion) vers la dernière version créée par Aboualle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Programmation des systèmes embarqués =&lt;br /&gt;
&lt;br /&gt;
== Carte électronique ==&lt;br /&gt;
&lt;br /&gt;
Carte réalisée en utilisant le logiciel &amp;lt;code&amp;gt;KiCAD&amp;lt;/code&amp;gt; : [[File:2025-PSE-04-systeme.zip|ma carte électronique]]. &lt;br /&gt;
&lt;br /&gt;
Schéma électronique de la carte :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-PROG-schema.pdf|thumb|center|400px|Mon schéma électronique]]&lt;br /&gt;
&lt;br /&gt;
Résultat du routage :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-PROG-PCB.png|thumb|center|400px|Mon routage]]&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-PROG-carte.png|thumb|center|400px|Ma carte]]&lt;br /&gt;
&lt;br /&gt;
Photo de la carte soudée :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vidéo très courte et en basse résolution de la carte en fonctionnement :&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
=== Test de la carte ===&lt;br /&gt;
&lt;br /&gt;
Avant d’aborder la programmation USB avec LUFA, nous avons validé le bon fonctionnement de notre carte électronique avec un programme simple de clignotement des deux LEDs (connectées à PD0 et PD1).&lt;br /&gt;
&lt;br /&gt;
==== Clignotement des LEDs (blink) ====&lt;br /&gt;
&lt;br /&gt;
Ce code alterne l’état des deux LEDs toutes les 500 ms. Il configure également l’horloge externe à 16 MHz (si les fusibles ne sont pas encore programmés).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Passage à l'horloge externe 16 MHz sans diviseur&lt;br /&gt;
static inline void clock_init(void) {&lt;br /&gt;
    CLKSEL0 = 0b00010101;   // sélection horloge externe&lt;br /&gt;
    CLKSEL1 = 0b00001111;   // fréquence mini 8 MHz&lt;br /&gt;
    CLKPR   = (1 &amp;lt;&amp;lt; CLKPCE); // autorise la modification du diviseur&lt;br /&gt;
    CLKPR   = 0;             // diviseur = 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    clock_init();&lt;br /&gt;
&lt;br /&gt;
    // PD0 et PD1 en sortie (LED1 sur PD0, LED2 sur PD1)&lt;br /&gt;
    DDRD |= (1 &amp;lt;&amp;lt; PD0) | (1 &amp;lt;&amp;lt; PD1);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        PORTD |=  (1 &amp;lt;&amp;lt; PD0); // LED1 allumée&lt;br /&gt;
        PORTD &amp;amp;= ~(1 &amp;lt;&amp;lt; PD1); // LED2 éteinte&lt;br /&gt;
        _delay_ms(500);&lt;br /&gt;
&lt;br /&gt;
        PORTD &amp;amp;= ~(1 &amp;lt;&amp;lt; PD0); // LED1 éteinte&lt;br /&gt;
        PORTD |=  (1 &amp;lt;&amp;lt; PD1); // LED2 allumée&lt;br /&gt;
        _delay_ms(500);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Compilation et téléversement ====&lt;br /&gt;
&lt;br /&gt;
Pour compiler, utilisez un Makefile adapté à l’ATmega8U2 (F_CPU=16000000). Le fichier hex généré est flashé via dfu-programmer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make clean&lt;br /&gt;
make&lt;br /&gt;
sudo dfu-programmer atmega8u2 erase --force&lt;br /&gt;
sudo dfu-programmer atmega8u2 flash blink.hex&lt;br /&gt;
sudo dfu-programmer atmega8u2 reset&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après le reset, les deux LEDs doivent clignoter en alternance. Ce test confirme que :&lt;br /&gt;
* Le microcontrôleur est correctement alimenté ;&lt;br /&gt;
* L’horloge externe 16 MHz fonctionne ;&lt;br /&gt;
* Les broches PD0 et PD1 sont accessibles et commandables ;&lt;br /&gt;
* Le chargeur DFU est opérationnel.&lt;br /&gt;
&lt;br /&gt;
=== Gestion personnalisée des endpoints (IN/OUT) ===&lt;br /&gt;
&lt;br /&gt;
L’objectif est de piloter directement les LEDs depuis le PC et de lire l’état des boutons, sans passer par la classe CDC. Pour cela, nous avons défini une interface USB générique (classe 0xFF) avec deux points d’accès de type INTERRUPT.&lt;br /&gt;
&lt;br /&gt;
==== Descripteurs USB ====&lt;br /&gt;
&lt;br /&gt;
Le fichier `Descriptors.h` déclare les adresses et la taille des endpoints :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define LED_OUT_EPADDR  (ENDPOINT_DIR_OUT | 1)   // Endpoint 1 OUT&lt;br /&gt;
#define BTN_IN_EPADDR   (ENDPOINT_DIR_IN  | 2)   // Endpoint 2 IN&lt;br /&gt;
#define EP_SIZE         8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans `Descriptors.c`, la configuration est décrite avec une interface unique (bInterfaceClass = 0xFF) et deux endpoints :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =&lt;br /&gt;
{&lt;br /&gt;
    .Config = { ... },&lt;br /&gt;
    .Interface =&lt;br /&gt;
    {&lt;br /&gt;
        .Header          = { .Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface },&lt;br /&gt;
        .InterfaceNumber = 0,&lt;br /&gt;
        .TotalEndpoints  = 2,&lt;br /&gt;
        .Class           = 0xFF,   // Vendor-specific&lt;br /&gt;
        .SubClass        = 0x00,&lt;br /&gt;
        .Protocol        = 0x00,&lt;br /&gt;
    },&lt;br /&gt;
    .Endpoint_OUT = { ... },&lt;br /&gt;
    .Endpoint_IN  = { ... },&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les chaînes de caractères (fabricant, produit, numéro de série) sont également définies. Le callback `CALLBACK_USB_GetDescriptor` fournit ces descripteurs à l’hôte lors de l’énumération.&lt;br /&gt;
&lt;br /&gt;
==== Code de la carte (CustomHID.c) ====&lt;br /&gt;
&lt;br /&gt;
Le programme principal est simplifié : il initialise le matériel, démarre la pile USB, puis boucle sur les tâches USB et le traitement des endpoints.&lt;br /&gt;
&lt;br /&gt;
**Initialisation matérielle** :  &lt;br /&gt;
- Les LEDs (PD0 et PD1) sont configurées en sortie.  &lt;br /&gt;
- Les boutons (PC4 et PC5) sont en entrée avec pull‑up internes.  &lt;br /&gt;
- Le watchdog est désactivé et l’horloge est mise à 16 MHz (si les fusibles ne sont pas encore programmés).&lt;br /&gt;
&lt;br /&gt;
**Traitement de l’endpoint OUT** (`process_out`) :  &lt;br /&gt;
- Sélectionne l’endpoint OUT.  &lt;br /&gt;
- Si un paquet est reçu, lit un octet et applique ses bits 0 et 1 aux LEDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static void process_out(void)&lt;br /&gt;
{&lt;br /&gt;
    Endpoint_SelectEndpoint(EP_OUT);&lt;br /&gt;
    if (Endpoint_IsOUTReceived() &amp;amp;&amp;amp; Endpoint_IsReadWriteAllowed())&lt;br /&gt;
    {&lt;br /&gt;
        uint8_t cmd = Endpoint_Read_8();&lt;br /&gt;
        LED_PORT = (LED_PORT &amp;amp; ~((1&amp;lt;&amp;lt;LED1_PIN)|(1&amp;lt;&amp;lt;LED2_PIN))) | (cmd &amp;amp; 0x03);&lt;br /&gt;
        Endpoint_ClearOUT();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
**Traitement de l’endpoint IN** (`process_in`) :  &lt;br /&gt;
- Sélectionne l’endpoint IN.  &lt;br /&gt;
- Si l’endpoint est prêt à écrire, lit l’état des deux boutons (bits PC4 et PC5) et les envoie dans un octet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static void process_in(void)&lt;br /&gt;
{&lt;br /&gt;
    Endpoint_SelectEndpoint(EP_IN);&lt;br /&gt;
    if (Endpoint_IsReadWriteAllowed())&lt;br /&gt;
    {&lt;br /&gt;
        uint8_t buttons = PINC &amp;amp; ((1&amp;lt;&amp;lt;BTN1_PIN)|(1&amp;lt;&amp;lt;BTN2_PIN));&lt;br /&gt;
        Endpoint_Write_8(buttons);&lt;br /&gt;
        Endpoint_ClearIN();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
**Événements USB** :  &lt;br /&gt;
- `EVENT_USB_Device_ConfigurationChanged` configure les deux endpoints (taille 8, type INTERRUPT).  &lt;br /&gt;
- `EVENT_USB_Device_ControlRequest` gère les requêtes standard (délégation à LUFA).  &lt;br /&gt;
&lt;br /&gt;
La boucle principale appelle `USB_USBTask()` et les deux fonctions de traitement uniquement lorsque l’adresse USB est attribuée.&lt;br /&gt;
&lt;br /&gt;
==== Programme PC (main_pc.c) ====&lt;br /&gt;
&lt;br /&gt;
Le programme côté PC utilise la bibliothèque `libusb-1.0` pour dialoguer avec la carte.&lt;br /&gt;
&lt;br /&gt;
**Initialisation** :  &lt;br /&gt;
- Ouvre le périphérique par VID/PID (0x03EB / 0x2044).  &lt;br /&gt;
- Détache le pilote noyau si nécessaire.  &lt;br /&gt;
- Réclame l’interface (claim).&lt;br /&gt;
&lt;br /&gt;
**Contrôle des LEDs (OUT)** :  &lt;br /&gt;
- Les touches `1`, `2`, `3` basculent respectivement les bits 5, 6, 7 (mais ici seuls les bits 0 et 1 sont utilisés).  &lt;br /&gt;
- La touche `0` éteint tout.  &lt;br /&gt;
- L’envoi se fait via `libusb_interrupt_transfer` sur l’endpoint OUT (adresse 0x01).&lt;br /&gt;
&lt;br /&gt;
**Lecture des boutons (IN)** :  &lt;br /&gt;
- Une requête `libusb_interrupt_transfer` est effectuée périodiquement sur l’endpoint IN (0x82).  &lt;br /&gt;
- L’octet reçu est affiché, et un message indique quel bouton est pressé (SW3 sur PC4, SW4 sur PC5).&lt;br /&gt;
&lt;br /&gt;
Le programme utilise `select` sur `stdin` pour ne pas bloquer, ce qui permet une interaction fluide.&lt;br /&gt;
&lt;br /&gt;
**Résultat attendu** :  &lt;br /&gt;
- Le programme affiche l’état des boutons en temps réel.  &lt;br /&gt;
- En appuyant sur `1`, `2`, `3` ou `0`, les LEDs (PD0 et PD1) s’allument/s’éteignent selon les commandes envoyées.  &lt;br /&gt;
&lt;br /&gt;
Cette validation est indispensable avant d’implémenter le protocole ISP, car nous allons réutiliser exactement ce même canal pour échanger des commandes SPI avec la cible.&lt;br /&gt;
&lt;br /&gt;
Malheureusement après avoir flashé ce code, la carte arretait d'accepter la commande dfu-programmer atmega16u2 erase. Donc on ne peut pas avancer.&lt;br /&gt;
&lt;br /&gt;
Voici une capture de la reconnaissance de la carte en LUFA.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki-capture-lsusb.png|thumb|center|400px|lsusb]]&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki-photo-prog.jpeg|thumb|center|400px|photo du programmeur 2 minutes après que je l'ai cramé]]&lt;br /&gt;
&lt;br /&gt;
== Bilan ==&lt;br /&gt;
&lt;br /&gt;
=== 10/03/2026:===&lt;br /&gt;
&lt;br /&gt;
Recherche de composants. Les composants trouvés sont :&lt;br /&gt;
&lt;br /&gt;
- 74HC4067 : Démultiplexeur&lt;br /&gt;
&lt;br /&gt;
-  WL-SFTW SMT Full-color TOP LED : Led RGB&lt;br /&gt;
&lt;br /&gt;
- Gestion des leds : TLC5947&lt;br /&gt;
&lt;br /&gt;
Réflexion routage :&lt;br /&gt;
&lt;br /&gt;
Vérification de possibilité du routage sur 2 couches uniquement. Une couche pour les leds, une couche pour les boutons.&lt;br /&gt;
&lt;br /&gt;
=== 17/03/2026: ===&lt;br /&gt;
&lt;br /&gt;
Lecture des différentes datasheets pour savoir pour valider les choix trouvés.&lt;br /&gt;
&lt;br /&gt;
Choix final de se limiter à deux drivers TLC et d'abandonner la piste du demultiplexeur&lt;br /&gt;
&lt;br /&gt;
=== 23/03/2026 ===&lt;br /&gt;
&lt;br /&gt;
Rectification du problème KiCad 10, remise du projet KiCad à la 9ᵉ version. Création de la liste finale des pièces à commander (cf. Composants à acheter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 24/03/2026: ===&lt;br /&gt;
&lt;br /&gt;
Discussion sur les contraintes d'alimentation et le nombre des RGB à utiliser sur la carte.&lt;br /&gt;
&lt;br /&gt;
Fin schema, choix des derniers composants pour communication entre les deux cartes.&lt;br /&gt;
&lt;br /&gt;
=== 31/03/2026: ===&lt;br /&gt;
&lt;br /&gt;
Routage.&lt;br /&gt;
&lt;br /&gt;
=== 12/05/2026: ===&lt;br /&gt;
&lt;br /&gt;
Récuperation de la carte.&lt;br /&gt;
&lt;br /&gt;
=== 18/05/2026: ===&lt;br /&gt;
&lt;br /&gt;
Récupération des composants et début de la soudure&lt;br /&gt;
&lt;br /&gt;
=== 20/05/2026: ===&lt;br /&gt;
&lt;br /&gt;
Soudure des composants. Nous avons cramé le uP en augmentant l'intensité des LEDs. donc on va chercher a le remplacer.&lt;br /&gt;
&lt;br /&gt;
=== 26/05/2026: ===&lt;br /&gt;
&lt;br /&gt;
fin présumée de la soudure de la soudure et début du code. ce qui nous menait a détruire notre microprocesseur à cause d'une demande trop élevée de courant par les LEDs. Eventuellement la solution était de désouder la résistance de courant de la TLC et la remplacer par une résistance d'une valeur plus élevée (3,3k)&lt;br /&gt;
&lt;br /&gt;
02/06/2026:&lt;br /&gt;
&lt;br /&gt;
Séance bonus offerte par Mr. Boé, qui nous avait dit de faire un dernier flash en ISP. Ce dernier ne marchait pas donc nous avons désoudé le microprocesseur. Le nouveau microprocesseur étant finalement soudé, on a confirmé nos suspicions: L'ancien microprocesseur ne marchait vraiment pas. On peut désormais flasher le fichier hex dans la carte. il n'y a plus de composants qui se chauffent, on peut finalement attaquer la partie code.&lt;br /&gt;
&lt;br /&gt;
= Premier système embarqué =&lt;br /&gt;
&lt;br /&gt;
== Archive GIT; ==&lt;br /&gt;
&lt;br /&gt;
Mon archive GIT pour le projet KiCAD et pour les programmes : [https://gitea.plil.fr/aboualle/2025_PSE_04_aboualle_tregaud].&lt;br /&gt;
&lt;br /&gt;
Archive privée. Binôme comme administrateur. Boé et Redon comme administrateur. - FAIT&lt;br /&gt;
&lt;br /&gt;
Ajouter un &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; pour KiCAD et langage C. - FAIT&lt;br /&gt;
&lt;br /&gt;
Structure avec matériel (y compris production - gerber, bill of materials) / logiciel / documentation (e.g. documentation technique).&lt;br /&gt;
&lt;br /&gt;
== Description du système embarqué ==&lt;br /&gt;
&lt;br /&gt;
Nous prévoyons de faire un clavier, séparé en deux parties. Nous sommes en collaboration avec le groupe 16[https://projets-se.plil.fr/mediawiki/index.php/SE3Groupe2025-16].&lt;br /&gt;
Le clavier sera capable de :&lt;br /&gt;
* récupérer les touches pressées par l'autre partie du clavier.&lt;br /&gt;
* Communiquer avec l'ordinateur pour envoyer les informations&lt;br /&gt;
Les communications seront réalisées en UART&lt;br /&gt;
&lt;br /&gt;
Il s'agit d'un '''clavier ergonomique RGB''' au format '''matrice 5 × 6 (30 touches)'''.  &lt;br /&gt;
La carte embarque un '''ATMega32U4''' (quartz 16 MHz), une gestion complète de l’alimentation sur batterie Li‑ion (chargeur MAX1811 + boost MCP1640 vers 5 V), un rétroéclairage '''RGB individuel''' pour 16 touches (deux drivers PWM TLC5947 en cascade), et une prise '''jack 3,5 mm''' permettant la communication UART avec une seconde moitié de clavier (clavier ergonomique séparé).  &lt;br /&gt;
&lt;br /&gt;
La saisie est assurée par liaison USB en mode clavier HID (LUFA). La programmation se faisait à priori en ISP, mais eventuellement par USB (bootloader DFU).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:clavier_ergo_top.jpg|center|vignette|500px|Vue de la carte clavier finalisée]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Matériel (Hardware) ==&lt;br /&gt;
&lt;br /&gt;
=== Switches et sockets ===&lt;br /&gt;
&lt;br /&gt;
Les switches mécaniques utilisés sont des modèles de la marque **KAILH**, disponibles au laboratoire.  &lt;br /&gt;
Nous avons également récupéré des **sockets hot‑swap** adaptées à ces switches. L’intérêt de ces modules est de pouvoir insérer ou retirer les boutons à volonté, sans qu’ils soient soudés directement au PCB (seules les sockets sont soudées). Cela facilite la réutilisation des boutons d’un projet à l’autre et améliore la réparabilité du clavier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Matériel (Hardware) ==&lt;br /&gt;
&lt;br /&gt;
=== Switches et sockets ===&lt;br /&gt;
&lt;br /&gt;
Les switches mécaniques utilisés sont des modèles de la marque ''KAILH'', disponibles au laboratoire. Nous avons également récupéré des sockets hot‑swap adaptées. Seules les sockets sont soudées sur le PCB, ce qui permet de changer les switches sans dessouder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
&lt;br /&gt;
La carte peut être alimentée soit par le port USB (5 V), soit par une batterie Li‑ion (3,7 V nominal) connectée sur le connecteur J3. Un circuit de gestion de batterie et un convertisseur élévateur (boost) génèrent une tension stable de 5 V pour toute la logique (MCU, LEDs, drivers).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Chargeur Li-ion MAX1811&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le composant ''U1 (MAX1811)'' est un chargeur linéaire dédié aux batteries Li‑ion, alimenté directement par le 5 V USB. Ses broches de configuration permettent de choisir la tension de fin de charge et le courant de charge :&lt;br /&gt;
&lt;br /&gt;
- ''SELV'' (pin 1) : sélectionne la tension de charge (4,1 V ou 4,2 V). Une résistance de tirage (R11 = 10 kΩ) fixe le niveau haut → tension de charge = 4,2 V.&lt;br /&gt;
- ''SELI'' (pin 2) : choisit le courant de charge (100 mA ou 500 mA). La broche est pilotée par le MCU (PB0) pour moduler le courant en fonction de la source USB.&lt;br /&gt;
- ''EN'' (pin 7) : maintenue à VUSB (5 V) via la résistance R4 (150 Ω) pour activer le chargeur en permanence.&lt;br /&gt;
- ''/CHG'' (pin 8) : sortie à drain ouvert qui passe à l’état bas lorsque la batterie est en cours de charge. Une LED rouge D31 (anode sur VUSB, cathode sur /CHG) permet un affichage visuel de la charge.&lt;br /&gt;
&lt;br /&gt;
Le condensateur C4 (4,7 µF) filtre l’entrée VUSB ; C5 (2,2 µF) et C6 (4,7 µF) sont placés sur la sortie BATT pour stabiliser la tension batterie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Convertisseur Boost MCP1640&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le régulateur élévateur ''U3 (MCP1640)'' élève la tension de la batterie (typiquement 3,7 V, mais pouvant descendre jusqu’à 0,8 V en décharge profonde) à une sortie régulée de 5 V. La broche **EN** est connectée directement à la batterie (via J3) afin de démarrer le convertisseur dès qu’une batterie est présente.&lt;br /&gt;
&lt;br /&gt;
La tension de sortie est fixée par un pont diviseur externe connecté sur la broche ''V_FB'' (pin 4) :&lt;br /&gt;
&lt;br /&gt;
- R5 = 976 kΩ, R6 = 309 kΩ&lt;br /&gt;
&lt;br /&gt;
La tension de référence interne est V_FB = 1,21 V. La tension de sortie se calcule par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V_{OUT} = V_{FB} \times \left(1 + \frac{R5}{R6}\right) = 1,21 \times \left(1 + \frac{976}{309}\right) \approx 1,21 \times 4,158 \approx 5,03\,V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La valeur est bien proche de 5 V.&lt;br /&gt;
&lt;br /&gt;
''Choix de l’inductance L1 (4,7 µH)''  &lt;br /&gt;
&lt;br /&gt;
La consommation estimée du système (MCU + 16 LEDs RGB à faible courant + drivers) est d’environ 300 mA sous 5 V. En tenant compte d’un rendement η ≈ 85 % (valeur typique pour ce convertisseur à charge moyenne), le courant moyen tiré de la batterie (3,7 V) est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{BAT} = \frac{V_{OUT} \times I_{OUT}}{V_{IN} \times \eta} = \frac{5 \times 0,3}{3,7 \times 0,85} \approx 0,477\,A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L’ondulation du courant dans l’inductance est donnée par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Delta I_L = \frac{V_{IN} \times D}{L \times f_{SW}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec un rapport cyclique typique &amp;lt;math&amp;gt;D = 1 - \frac{V_{IN}}{V_{OUT}} = 1 - \frac{3,7}{5} = 0,26&amp;lt;/math&amp;gt;, une fréquence de découpage &amp;lt;math&amp;gt;f_{SW} = 500\,kHz&amp;lt;/math&amp;gt; (d’après la datasheet du MCP1640), et L = 4,7 µH.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Delta I_L = \frac{3,7 \times 0,26}{4,7 \times 10^{-6} \times 500 \times 10^{3}} \approx \frac{0,962}{2,35} \approx 0,409\,A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le courant de crête dans l’inductance vaut donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Lpeak} = I_{BAT} + \frac{\Delta I_L}{2} \approx 0,477 + 0,2045 \approx 0,682\,A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L’inductance choisie (référence XGL4020-471MEC ou équivalent) présente un courant de saturation supérieur à 1,5 A, ce qui garantit une marge confortable.&lt;br /&gt;
&lt;br /&gt;
''Filtrage d’entrée et de sortie''  &lt;br /&gt;
&lt;br /&gt;
- Condensateur d’entrée C7 = 10 µF (faible ESR) pour minimiser l’impédance côté batterie.  &lt;br /&gt;
- Condensateurs de sortie C8 = 4,7 µF et C9 = 4,7 µF (en parallèle) pour réduire l’ondulation résiduelle et répondre aux appels de courant du MCU et des LEDs.&lt;br /&gt;
&lt;br /&gt;
La sortie VCC (5 V) alimente l’ensemble du système : MCU (via ses broches VCC, AVCC, UVCC), les drivers TLC5947, et l’anode commune des LEDs RGB.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki_schema_alimentation.png|center|vignette|400px|La section alimentation du circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Microcontrôleur ATMega32U4 ===&lt;br /&gt;
&lt;br /&gt;
Le cœur du système est un **ATMega32U4** (référence U2) cadencé à 16 MHz par un quartz externe (Y1). Ce microcontrôleur intègre un contrôleur USB matériel, ce qui permet de l’utiliser en périphérique HID sans composant additionnel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Horloge et découplage&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un quartz ''Y1'' (référence Crystal_GND24) au boîtier 3225 (3,2 × 2,5 mm) génère la fréquence de base de 16 MHz. Les capacités de charge ''C1'' et ''C2'' (22 pF chacune) sont connectées respectivement aux broches XTAL1 et XTAL2, l’autre borne étant reliée à la masse. Ces valeurs sont conformes à la préconisation de la datasheet pour un quartz à 16 MHz.&lt;br /&gt;
&lt;br /&gt;
La formule approchée de la capacité de charge vue par le quartz est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_L = \frac{C_1 \cdot C_2}{C_1 + C_2} + C_{parasite}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec C1 = C2 = 22 pF et une capacité parasite de l’ordre de 5 pF, on obtient C_L ≈ 16 pF, ce qui correspond aux spécifications des quartz courants.&lt;br /&gt;
&lt;br /&gt;
L’alimentation du MCU est filtrée par plusieurs condensateurs de découplage placés au plus près des broches d’alimentation :&lt;br /&gt;
&lt;br /&gt;
- ''C3'' = 1 µF entre UCAP (pin 6) et GND – nécessaire à la stabilité du régulateur interne USB.&lt;br /&gt;
- ''C10, C11, C12'' = 0,1 µF chacun – découplage classique pour les broches VCC (pin 14), AVCC (pin 24) et UVCC (pin 2).&lt;br /&gt;
- Les plans de masse sont interconnectés via les broches GND (pins 5, 15, 23, 35, 43, voir datasheet...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gestion de l’USB&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le port USB de type A (J1) est directement relié au MCU :&lt;br /&gt;
- ''VBUS'' (pin 1 du connecteur) est envoyé sur la broche VBUS (pin 7) de l’ATmega32U4 pour détecter la présence du câble.&lt;br /&gt;
- ''D+'' (pin 3 du connecteur) et ''D-'' (pin 2) sont connectés respectivement aux broches D+ (pin 4) et D- (pin 3), eventuellement on découvre que c'est une erreur et que nous devrons mettre des résistances 22 Ω.&lt;br /&gt;
- Le shield du connecteur (pin 5) est relié à la masse.&lt;br /&gt;
&lt;br /&gt;
La programmation du bootloader DFU se fait par USB ; une fois le code chargé, le clavier est reconnu comme périphérique HID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Connecteur ISP&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un connecteur ''AVR-ISP-6'' (J4) au pas 2,54 mm permet la programmation par un programmateur externe (par exemple AVR ISP mkII). Le brochage est standard :&lt;br /&gt;
- Pin 1 : MISO (PB3)&lt;br /&gt;
- Pin 2 : VCC (5 V)&lt;br /&gt;
- Pin 3 : SCK (PB1)&lt;br /&gt;
- Pin 4 : MOSI (PB2)&lt;br /&gt;
- Pin 5 : RESET (actif à l’état bas)&lt;br /&gt;
- Pin 6 : GND&lt;br /&gt;
&lt;br /&gt;
Des résistances de pull‑up de 10 kΩ (R7 et R8) sont placées respectivement sur les lignes HWB et RESET pour éviter les flottements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Boutons RST et HWB&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux boutons poussoirs (SW1 et SW2) sont disponibles :&lt;br /&gt;
- ''SW2'' connecté sur la broche RESET (pin 13) : un appui provoque une réinitialisation matérielle du microcontrôleur.&lt;br /&gt;
- ''SW1'' connecté sur la broche HWB (pin 33) : pendant le démarrage, maintenir ce bouton force le bootloader à attendre une programmation USB (mode DFU). En fonctionnement normal, cette broche peut être réutilisée comme entrée/sortie (PE2).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki_schema_mcu.png|center|vignette|400px|Schéma microcontrôleur du circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Matrice de touches 5×6 ===&lt;br /&gt;
&lt;br /&gt;
Le clavier comporte '''30 touches''' organisées en une matrice de '''5 lignes et 6 colonnes'''. Cette architecture minimise le nombre de broches nécessaires sur le microcontrôleur (5 + 6 = 11 broches au lieu de 30).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Routage des colonnes et lignes&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les broches du microcontrôleur sont réparties sur plusieurs ports pour faciliter le routage du PCB :&lt;br /&gt;
&lt;br /&gt;
'''Colonnes (6 broches) :'''&lt;br /&gt;
* COL0 → PF7 (pin 36)&lt;br /&gt;
* COL1 → PF6 (pin 37)&lt;br /&gt;
* COL2 → PF5 (pin 38)&lt;br /&gt;
* COL3 → PF4 (pin 39)&lt;br /&gt;
* COL4 → PF1 (pin 40)&lt;br /&gt;
* COL5 → PF0 (pin 41)&lt;br /&gt;
&lt;br /&gt;
'''Lignes (5 broches) :'''&lt;br /&gt;
* ROW0 → PC7 (pin 32)&lt;br /&gt;
* ROW1 → PC6 (pin 31)&lt;br /&gt;
* ROW2 → PB6 (pin 30)&lt;br /&gt;
* ROW3 → PB4 (pin 28)&lt;br /&gt;
* ROW4 → PD7 (pin 27)&lt;br /&gt;
&lt;br /&gt;
Les colonnes sont configurées en '''entrées avec pull-up interne''' (activées par logiciel). Les lignes sont configurées en '''sorties''', et sont normalement à l’état haut (désactivées). Pour détecter une pression sur une touche située à l’intersection d’une ligne L et d’une colonne C, la ligne est passée à l’état bas (LOW), puis on lit l’état de la colonne. Si la colonne est à 0 (LOW), la touche est enfoncée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Diodes anti-ghosting&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin d’éviter les phénomènes de ''ghosting'' (détection de fausses touches lorsque plusieurs boutons sont pressés simultanément), une diode est placée en série avec chaque commutateur. Les références '''D1 à D30''' (30 diodes au total, boîtier 0603) sont connectées avec leur anode sur la colonne et leur cathode sur la ligne (ou l’inverse selon le sens de balayage). Le schéma ci-dessous illustre une cellule typique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki_matrice_diode.png|center|vignette|400px|Principe d’une cellule de la matrice : le switch MX_SW_HS en série avec une diode]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rétroéclairage RGB ===&lt;br /&gt;
&lt;br /&gt;
Le clavier est équipé de '''16 LEDs RGB''' (référence '''APFA3010'''), chacune étant une LED à anode commune (trois cathodes : rouge, verte, bleue). Elles sont disposées sous les touches principales pour offrir un éclairage personnalisable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Caractéristiques des LEDs APFA3010&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Chaque LED APFA3010 se présente dans un boîtier SMD 3,0 × 1,5 mm au format horizontal. Ses quatre broches sont :&lt;br /&gt;
&lt;br /&gt;
* Broche 1 : '''R''' (cathode rouge)&lt;br /&gt;
* Broche 2 : '''A''' (anode commune → reliée au VCC 5 V)&lt;br /&gt;
* Broche 3 : '''G''' (cathode verte)&lt;br /&gt;
* Broche 4 : '''B''' (cathode bleue)&lt;br /&gt;
&lt;br /&gt;
La luminosité de chaque couleur est contrôlée individuellement par modulation de largeur d’impulsion (PWM).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Drivers PWM TLC5947&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pilotage des 16 × 3 = 48 canaux PWM est assuré par '''deux circuits TLC5947''' (U4 et U5). Ce sont des drivers à 24 canaux chacun, 12 bits de résolution, communiquant via une interface SPI. Le montage en '''cascade''' permet d’envoyer les données à U4, qui les transmet à U5 par sa sortie SOUT.&lt;br /&gt;
&lt;br /&gt;
'''Caractéristiques principales du TLC5947 :'''&lt;br /&gt;
* 24 sorties à courant constant (réglable par une résistance externe)&lt;br /&gt;
* Résolution PWM : 4096 niveaux (12 bits)&lt;br /&gt;
* Fréquence interne de PWM fixe (≈ 30 kHz)&lt;br /&gt;
* Broches de commande : SCLK (horloge), SIN (entrée série), SOUT (sortie série), XLAT (verrouillage), BLANK (sorties actives / désactivées)&lt;br /&gt;
* Alimentation : 3,0 V à 5,5 V – ici reliée au VCC 5 V&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Répartition des LEDs entre les deux drivers&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les 16 LEDs sont réparties de manière équilibrée :&lt;br /&gt;
&lt;br /&gt;
* '''U4''' pilote les 8 premières LEDs (canaux OUT0 à OUT23). Chaque LED utilise trois canaux consécutifs (R, G, B).&lt;br /&gt;
* '''U5''' pilote les 8 LEDs suivantes (même principe).&lt;br /&gt;
&lt;br /&gt;
La connexion en cascade est réalisée ainsi :&lt;br /&gt;
* SIN de U4 relié à la broche PB5 (MOSI) du MCU.&lt;br /&gt;
* SOUT de U4 relié à SIN de U5.&lt;br /&gt;
* SCLK, XLAT et BLANK sont communs aux deux drivers (broches PD0, PD6 et PD4 respectivement).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki_tlc5947_cascade.png|center|vignette|600px|Cascade de deux TLC5947 pour 16 LEDs RGB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Résistance de référence IREF&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Chaque driver TLC5947 nécessite une résistance '''R(IREF)''' pour fixer le courant de sortie sur chaque canal. La formule est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{out} (mA) = \frac{39,06}{R_{IREF} (k\Omega)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour un courant typique de 5 mA par couleur (luminosité suffisante pour une utilisation en intérieur), on calcule :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_{IREF} = \frac{39,06}{5} \approx 7,81\,k\Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les valeurs standard les plus proches sont 7,5 kΩ ou 8,2 kΩ. Dans le schéma, on trouve '''R9 = 1 968 Ω''' et '''R10 = 1 968 Ω''' (soit environ 1,97 kΩ), ce qui donnerait un courant de presque 20 mA – probablement adapté à des LEDs plus puissantes ou à un usage extérieur. En pratique, cette valeur peut être ajustée par remplacement de la résistance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Problème de surintensité et correction&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lors des premiers tests, le microcontrôleur a été endommagé à cause d’une demande de courant trop élevée par les LEDs. La solution a été de '''remplacer les résistances de référence IREF''' (R9 et R10) initiales de 1,97 kΩ par des résistances de '''3,3 kΩ'''. Avec cette nouvelle valeur, le courant par canal tombe à environ &amp;lt;math&amp;gt;39,06 / 3,3 \approx 11,8\,mA&amp;lt;/math&amp;gt;, ce qui est plus sûr tout en restant lumineux. Le code compense ensuite les différences de sensibilité des couleurs (voir section logicielle).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Alimentation des LEDs&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L’anode commune (broche 2) de chaque APFA3010 est reliée directement au '''VCC 5 V''' du boost. La consommation totale dépend du nombre de LEDs allumées et du courant par canal. Avec 16 LEDs × 3 couleurs × 5 mA = 240 mA maximal, ce qui reste dans les capacités du MCP1640.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gestion matérielle de la PWM&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La génération des niveaux PWM est entièrement assurée par les TLC5947. Le microcontrôleur envoie simplement, via SPI, une trame de 48 × 12 bits = 576 bits (soit 72 octets) pour définir les rapports cycliques de chaque canal. Une fois les données transmises, une impulsion sur XLAT verrouille les nouvelles valeurs, et BLANK (normalement à l’état bas) peut être utilisée pour éteindre temporairement toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Cette architecture décharge complètement le MCU de la gestion du PWM, ce qui laisse toute sa puissance pour le balayage de la matrice et la communication USB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logiciel (Software) ==&lt;br /&gt;
&lt;br /&gt;
La partie logicielle du clavier est décomposée en plusieurs modules : lecture de la matrice de touches, pilotage des LEDs RGB, communication USB (périphérique clavier HID), et communication UART avec la seconde moitié du clavier ergonomique.&lt;br /&gt;
&lt;br /&gt;
=== Gestion de la matrice de touches ===&lt;br /&gt;
&lt;br /&gt;
Le fichier '''matrix.c''' implémente le balayage d’une matrice 5 lignes × 6 colonnes. Les broches sont configurées comme suit :&lt;br /&gt;
&lt;br /&gt;
* '''Lignes (sorties)''' : PC7, PC6, PB6, PB4, PD7 – mises à 1 (HIGH) au repos.&lt;br /&gt;
* '''Colonnes (entrées avec pull‑up)''' : PF7, PF6, PF5, PF4, PF1, PF0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Initialisation&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction &amp;lt;code&amp;gt;matrix_init()&amp;lt;/code&amp;gt; configure les directions des broches et active les résistances de pull‑up sur les colonnes. Elle désactive également le débogueur JTAG (broches PF4‑PF7) pour libérer ces ports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Balayage et anti‑rebond&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le balayage est effectué par la fonction &amp;lt;code&amp;gt;matrix_scan()&amp;lt;/code&amp;gt;. Pour chaque ligne, on abaisse la broche correspondante (select_row), on attend 2 µs (nécessaire à cause de la capacité parasite des lignes), puis on lit l’état des six colonnes (read_col). Un registre à décalage de 8 bits par touche (&amp;lt;code&amp;gt;debounce_state&amp;lt;/code&amp;gt;) stocke l’historique des lectures. Une touche est considérée comme '''enfoncée''' après 8 échantillons consécutifs à 1, et comme '''relâchée''' après 8 échantillons à 0. Le résultat final est stocké dans le tableau &amp;lt;code&amp;gt;matrix_state[5][6]&amp;lt;/code&amp;gt; (booléen).&lt;br /&gt;
&lt;br /&gt;
L’extrait suivant montre la boucle de balayage :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (uint8_t r = 0; r &amp;lt; MATRIX_ROWS; r++) {&lt;br /&gt;
    select_row(r);&lt;br /&gt;
    _delay_us(2);&lt;br /&gt;
    for (uint8_t c = 0; c &amp;lt; MATRIX_COLS; c++) {&lt;br /&gt;
        bool raw = read_col(c);&lt;br /&gt;
        debounce_state[r][c] = (debounce_state[r][c] &amp;lt;&amp;lt; 1) | raw;&lt;br /&gt;
        if (debounce_state[r][c] == 0xFF &amp;amp;&amp;amp; !matrix_state[r][c])&lt;br /&gt;
            matrix_state[r][c] = true;&lt;br /&gt;
        else if (debounce_state[r][c] == 0x00 &amp;amp;&amp;amp; matrix_state[r][c])&lt;br /&gt;
            matrix_state[r][c] = false;&lt;br /&gt;
    }&lt;br /&gt;
    unselect_row(r);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau &amp;lt;code&amp;gt;matrix_state&amp;lt;/code&amp;gt; est accessible depuis les autres modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pilotage des LEDs RGB (TLC5947) ===&lt;br /&gt;
&lt;br /&gt;
Les 16 LEDs RGB sont contrôlées par deux circuits '''TLC5947''' (U4 et U5) montés en cascade. Chaque TLC5947 est un driver à 24 canaux PWM (12 bits de résolution) piloté par une liaison série en bit‑banging (SPI logiciel).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Brochage et connexions&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''SIN''' (entrée série) : PB5 – données des PWM (48 canaux × 12 bits = 576 bits)&lt;br /&gt;
* '''SCLK''' (horloge) : PD0 – chaque front montant valide un bit&lt;br /&gt;
* '''XLAT''' (verrouillage) : PD6 – après transmission, un front basculant transfère les données vers les registres PWM&lt;br /&gt;
* '''BLANK''' (sorties actives) : PD5 – à 0 pour activer les sorties (les LEDs s’allument)&lt;br /&gt;
* '''SOUT''' (sortie série de U4) → reliée à SIN de U5 (cascade)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Trame de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le TLC5947 attend les données '''canal par canal, en commençant par le dernier canal du dernier circuit intégré'''. L’ordre est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Canal 23 (U5) → Canal 22 (U5) → … → Canal 0 (U5) → Canal 23 (U4) → … → Canal 0 (U4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour chaque canal, on envoie 12 bits, le '''bit de poids fort (MSB) en premier'''. La fonction &amp;lt;code&amp;gt;tlc_update()&amp;lt;/code&amp;gt; réalise cette transmission.&lt;br /&gt;
&lt;br /&gt;
Le buffer &amp;lt;code&amp;gt;pwm_buffer&amp;lt;/code&amp;gt; contient les valeurs 12‑bits (0 à 4095) pour chacun des 48 canaux. L’ordre des canaux par LED est défini dans &amp;lt;code&amp;gt;tlc_set_led()&amp;lt;/code&amp;gt; : pour chaque LED, les trois canaux consécutifs sont assignés respectivement au rouge, bleu, vert (selon le brochage de la LED APFA3010).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Animation : dégradé de couleurs mouvant (rainbow)&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L’animation utilise le modèle de couleur '''HSV''' (teinte, saturation, valeur). La teinte (&amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;) varie de 0 à 360°, la saturation et la valeur sont fixées à 1. La conversion &amp;lt;math&amp;gt;HSV \to RGB&amp;lt;/math&amp;gt; est réalisée par la fonction &amp;lt;code&amp;gt;hsv_to_rgb()&amp;lt;/code&amp;gt;. La formule classique est utilisée, avec &amp;lt;math&amp;gt;C = 4095&amp;lt;/math&amp;gt; (pleine échelle 12 bits).&lt;br /&gt;
&lt;br /&gt;
Pour créer un dégradé spatial, on associe à chaque LED une teinte de base qui dépend de sa '''position physique''' sur le PCB (coordonnées extraites du fichier de placement KiCad). La teinte de la LED &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; à l’instant &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_i(t) = H_{global}(t) + \alpha \cdot (x_i - x_{ref}) + \beta \cdot (y_i - y_{ref})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\alpha = 0,5&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\beta = 0,3&amp;lt;/math&amp;gt;, et &amp;lt;math&amp;gt;(x_{ref}, y_{ref}) = (139,0\,; -136,0)&amp;lt;/math&amp;gt; mm (centre approximatif du clavier).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Compensation des couleurs&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les LEDs APFA3010 ont des efficacités lumineuses différentes : le rouge est beaucoup moins intense que le vert et le bleu à courant égal. Pour équilibrer visuellement les couleurs, le code applique un facteur d’atténuation différent par canal :&lt;br /&gt;
&lt;br /&gt;
* Rouge → &amp;lt;code&amp;gt;r &amp;gt;&amp;gt; 1&amp;lt;/code&amp;gt; (division par 2)&lt;br /&gt;
* Vert → &amp;lt;code&amp;gt;g &amp;gt;&amp;gt; 4&amp;lt;/code&amp;gt; (division par 16)&lt;br /&gt;
* Bleu → &amp;lt;code&amp;gt;b &amp;gt;&amp;gt; 4&amp;lt;/code&amp;gt; (division par 16)&lt;br /&gt;
&lt;br /&gt;
Ces coefficients ont été ajustés empiriquement pour obtenir un blanc équilibré et des dégradés harmonieux. La luminosité globale est ainsi réduite, ce qui évite également l’éblouissement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Communication USB (LUFA) ===&lt;br /&gt;
&lt;br /&gt;
La bibliothèque '''LUFA''' gère le périphérique USB en mode HID (clavier). Le bootloader '''DFU''' (présent en usine sur l’ATmega32U4) permet de programmer la carte directement par USB, sans programmateur externe. Il suffit d’appuyer sur le bouton HWB (SW1) au moment de la mise sous tension, puis d’utiliser l’outil &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Configuration LUFA&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;LUFAConfig.h&amp;lt;/code&amp;gt; définit :&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_FLASH_DESCRIPTORS&amp;lt;/code&amp;gt; (descripteurs en mémoire Flash)&lt;br /&gt;
* &amp;lt;code&amp;gt;FIXED_CONTROL_ENDPOINT_SIZE = 8&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;FIXED_NUM_CONFIGURATIONS = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;USB_DEVICE_ONLY&amp;lt;/code&amp;gt; (pas de mode hôte)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Descripteurs USB&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;Descriptors.c&amp;lt;/code&amp;gt; suit le format standard d’un clavier HID bootable (rapport de 8 modificateurs + 6 codes de touches). Le Vendor ID est 0x03EB (Atmel) et le Product ID 0x2042.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Implémentation de la classe HID&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;usb_keyboard.c&amp;lt;/code&amp;gt; contient les callbacks. Le tableau &amp;lt;code&amp;gt;test_keymap&amp;lt;/code&amp;gt; associe chaque position de la matrice à un code HID. '''Important :''' ce tableau est inversé (miroir) car les switches ont été soudés sur la face opposée à celle prévue initialement. L’ordre des lignes et colonnes a donc dû être retourné en logiciel pour que les touches correspondent aux caractères attendus.&lt;br /&gt;
&lt;br /&gt;
Exemple de keymap (extrait) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const uint8_t test_keymap[MATRIX_ROWS][MATRIX_COLS] = {&lt;br /&gt;
    {HID_KEYBOARD_SC_5_AND_PERCENTAGE, HID_KEYBOARD_SC_4_AND_DOLLAR, ..., HID_KEYBOARD_SC_ESCAPE},&lt;br /&gt;
    {HID_KEYBOARD_SC_T, HID_KEYBOARD_SC_R, ..., HID_KEYBOARD_SC_TAB},&lt;br /&gt;
    // ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction &amp;lt;code&amp;gt;CALLBACK_HID_Device_CreateHIDReport()&amp;lt;/code&amp;gt; parcourt &amp;lt;code&amp;gt;matrix_state&amp;lt;/code&amp;gt; et construit le rapport USB. Un code spécial (&amp;lt;code&amp;gt;MY_CUSTOM_CTRL&amp;lt;/code&amp;gt;) permet d’injecter le modificateur Ctrl gauche (pour les raccourcis copier/coller, par exemple).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programme principal et animation RGB ===&lt;br /&gt;
&lt;br /&gt;
Le fichier '''main.c''' orchestre l’ensemble. La boucle principale :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;matrix_scan()&amp;lt;/code&amp;gt; met à jour l’état des touches.&lt;br /&gt;
* &amp;lt;code&amp;gt;usb_keyboard_task()&amp;lt;/code&amp;gt; maintient la communication USB.&lt;br /&gt;
* &amp;lt;code&amp;gt;keyboard_link_task()&amp;lt;/code&amp;gt; gère la réception des données de l’autre moitié du clavier (UART).&lt;br /&gt;
* Toutes les 50 boucles, il envoie sa propre matrice via &amp;lt;code&amp;gt;keyboard_send_matrix()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Toutes les 30 boucles (≈ 30 ms), la teinte globale &amp;lt;math&amp;gt;H_{global}&amp;lt;/math&amp;gt; est incrémentée de 4° et les LEDs sont mises à jour avec &amp;lt;code&amp;gt;update_leds_rainbow()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La fonction &amp;lt;code&amp;gt;update_leds_rainbow()&amp;lt;/code&amp;gt; applique le calcul de teinte spatiale et la compensation des couleurs décrites plus haut.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Communication UART entre les deux moitiés du clavier ===&lt;br /&gt;
&lt;br /&gt;
Les deux parties du clavier ergonomique communiquent via la prise jack 3,5 mm (USART1 de l’ATmega32U4, broches PD2 (RX) et PD3 (TX)). Le protocole est le suivant :&lt;br /&gt;
&lt;br /&gt;
* '''Start byte''' : 0xAA&lt;br /&gt;
* '''Commande''' : 0x01 pour l’état de la matrice&lt;br /&gt;
* '''Longueur''' : 4 octets (30 bits → 4 octets, 2 bits inutilisés)&lt;br /&gt;
* '''Données''' : 4 octets contenant les 30 bits compressés (bit n = ligne*6 + colonne)&lt;br /&gt;
* '''Checksum''' : somme modulo 256 des 4 octets de données&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Envoi&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;keyboard_send_matrix()&amp;lt;/code&amp;gt; compresse la matrice locale dans 4 octets et appelle &amp;lt;code&amp;gt;send_packet()&amp;lt;/code&amp;gt; qui envoie les 7 octets du paquet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Réception&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;keyboard_link_task()&amp;lt;/code&amp;gt; est appelée dans la boucle principale. Elle lit les octets reçus, vérifie le start byte, la commande, la longueur et le checksum. En cas de paquet valide, les données sont stockées dans un buffer et un flag &amp;lt;code&amp;gt;remote_matrix_valid&amp;lt;/code&amp;gt; est positionné. La fonction &amp;lt;code&amp;gt;keyboard_get_remote_matrix()&amp;lt;/code&amp;gt; permet ensuite de récupérer la matrice distante.&lt;br /&gt;
&lt;br /&gt;
Les deux claviers s’envoient ainsi mutuellement leur état de manière périodique. Les touches de l’autre moitié sont fusionnées avec les touches locales (à faire dans &amp;lt;code&amp;gt;main.c&amp;lt;/code&amp;gt; via la variable &amp;lt;code&amp;gt;remote_matrix&amp;lt;/code&amp;gt;) avant de générer le rapport USB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Composants à acheter ==&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/analog-devices/max1811esa-t/chargeur-batterie-li-ion-500ma/dp/3916608 | lien farnell Chargeur_Batterie]&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/same-sky/sj-3523-smt-tr/conn-audio-t-l-fem-90-stereo-4p/dp/4814364 | lien (farnell) Connecteur jack femelle 3.5mm]&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/microchip/mcp1640bt-i-chy/conv-dc-dc-sync-boost-500khz-85/dp/1800207RL | lien farnell DC-DC_step-up mcp1640bt]&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/wurth-elektronik/150141m173100/led-1411-rgb-270mcd-950mcd-230mcd/dp/2322115 | LED_RGB led 150141]&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/texas-instruments/tlc5947dap/ic-led-driver-linear-32-tssop/dp/3119196 | lien led driver tlc5947]&lt;br /&gt;
&lt;br /&gt;
'''Voir avec M.Redon ?'''&lt;br /&gt;
&lt;br /&gt;
[https://www.aliexpress.us/item/3256805961019213.html?spm=a2g0o.productlist.main.1.66eclXL5lXL5cf&amp;amp;algo_pvid=ca5aafba-3d33-48dd-8cc9-1bb366397f0b&amp;amp;algo_exp_id=ca5aafba-3d33-48dd-8cc9-1bb366397f0b-0&amp;amp;pdp_ext_f=%7B%22order%22%3A%2218%22%2C%22eval%22%3A%221%22%2C%22fromPage%22%3A%22search%22%7D&amp;amp;pdp_npi=6%40dis%21USD%2114.95%2110.45%21%21%2114.95%2110.45%21%40210384cc17730991634577851e3de4%2112000035974925908%21sea%21US%210%21ABX%211%210%21n_tag%3A-29910%3Bd%3Aaf0128d0%3Bm03_new_user%3A-29895%3BpisId%3A5000000197827636&amp;amp;curPageLogUid=b1itGq4vumse&amp;amp;utparam-url=scene%3Asearch%7Cquery_from%3A%7Cx_object_id%3A1005006147333965%7C_p_origin_prod%3A|Switch Aliexpress ( 14.95 euro pour 50 pièces)]&lt;br /&gt;
&lt;br /&gt;
2x [https://www.amazon.fr/dp/B0GRWRB35R?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;crid=1A6WWK5JXXYDI&amp;amp;dib=eyJ2IjoiMSJ9.knTjQV522IT_x46yYmNW2g.yIdEmWsx71pRbn6RsO1Dsoph1vyoIyzvcLufmAX48M0&amp;amp;dib_tag=se&amp;amp;keywords=Kailh+Hotswap+Socket+CPG135001S30&amp;amp;qid=1773098978&amp;amp;s=computers&amp;amp;sprefix=kailh+hotswap+socket+cpg135001s30%2Ccomputers%2C439&amp;amp;sr=1-1|Hot-Swap_Kailh Amazon (6.38euro pour 20 pièces)]&lt;br /&gt;
&lt;br /&gt;
== Carte électronique ==&lt;br /&gt;
&lt;br /&gt;
Carte réalisée en utilisant le logiciel &amp;lt;code&amp;gt;KiCAD&amp;lt;/code&amp;gt; : [[File:2025-PSE-04-systeme.zip|ma carte électronique]]. &lt;br /&gt;
&lt;br /&gt;
Schéma électronique de la carte :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-systeme-schema.pdf|thumb|center|400px|Mon schéma électronique]]&lt;br /&gt;
&lt;br /&gt;
Résultat du routage :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-systeme-PCB.pdf|thumb|center|400px|Mon routage]]&lt;br /&gt;
&lt;br /&gt;
Photo de la carte soudée :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-systeme-carte.jpg|thumb|center|400px|Ma carte]]&lt;br /&gt;
&lt;br /&gt;
Vidéo très courte et en basse résolution de la carte en fonctionnement :&lt;br /&gt;
&lt;br /&gt;
[[Média:2025-PSE-04-systeme-video.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vidéo des LEDs RGB :&lt;br /&gt;
&lt;br /&gt;
[[Média:Wiki-video-rgb.mp4]]&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=SE3Groupe2025-4&amp;diff=11102</id>
		<title>SE3Groupe2025-4</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=SE3Groupe2025-4&amp;diff=11102"/>
		<updated>2026-06-19T14:33:56Z</updated>

		<summary type="html">&lt;p&gt;Rex : /* Code de la carte (CustomHID.c) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Programmation des systèmes embarqués =&lt;br /&gt;
&lt;br /&gt;
== Carte électronique ==&lt;br /&gt;
&lt;br /&gt;
Carte réalisée en utilisant le logiciel &amp;lt;code&amp;gt;KiCAD&amp;lt;/code&amp;gt; : [[File:2025-PSE-04-systeme.zip|ma carte électronique]]. &lt;br /&gt;
&lt;br /&gt;
Schéma électronique de la carte :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-PROG-schema.pdf|thumb|center|400px|Mon schéma électronique]]&lt;br /&gt;
&lt;br /&gt;
Résultat du routage :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-PROG-PCB.png|thumb|center|400px|Mon routage]]&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-PROG-carte.png|thumb|center|400px|Ma carte]]&lt;br /&gt;
&lt;br /&gt;
Photo de la carte soudée :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vidéo très courte et en basse résolution de la carte en fonctionnement :&lt;br /&gt;
&lt;br /&gt;
== Programmation ==&lt;br /&gt;
&lt;br /&gt;
=== Test de la carte ===&lt;br /&gt;
&lt;br /&gt;
Avant d’aborder la programmation USB avec LUFA, nous avons validé le bon fonctionnement de notre carte électronique avec un programme simple de clignotement des deux LEDs (connectées à PD0 et PD1).&lt;br /&gt;
&lt;br /&gt;
==== Clignotement des LEDs (blink) ====&lt;br /&gt;
&lt;br /&gt;
Ce code alterne l’état des deux LEDs toutes les 500 ms. Il configure également l’horloge externe à 16 MHz (si les fusibles ne sont pas encore programmés).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;util/delay.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Passage à l'horloge externe 16 MHz sans diviseur&lt;br /&gt;
static inline void clock_init(void) {&lt;br /&gt;
    CLKSEL0 = 0b00010101;   // sélection horloge externe&lt;br /&gt;
    CLKSEL1 = 0b00001111;   // fréquence mini 8 MHz&lt;br /&gt;
    CLKPR   = (1 &amp;lt;&amp;lt; CLKPCE); // autorise la modification du diviseur&lt;br /&gt;
    CLKPR   = 0;             // diviseur = 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    clock_init();&lt;br /&gt;
&lt;br /&gt;
    // PD0 et PD1 en sortie (LED1 sur PD0, LED2 sur PD1)&lt;br /&gt;
    DDRD |= (1 &amp;lt;&amp;lt; PD0) | (1 &amp;lt;&amp;lt; PD1);&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
        PORTD |=  (1 &amp;lt;&amp;lt; PD0); // LED1 allumée&lt;br /&gt;
        PORTD &amp;amp;= ~(1 &amp;lt;&amp;lt; PD1); // LED2 éteinte&lt;br /&gt;
        _delay_ms(500);&lt;br /&gt;
&lt;br /&gt;
        PORTD &amp;amp;= ~(1 &amp;lt;&amp;lt; PD0); // LED1 éteinte&lt;br /&gt;
        PORTD |=  (1 &amp;lt;&amp;lt; PD1); // LED2 allumée&lt;br /&gt;
        _delay_ms(500);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Compilation et téléversement ====&lt;br /&gt;
&lt;br /&gt;
Pour compiler, utilisez un Makefile adapté à l’ATmega8U2 (F_CPU=16000000). Le fichier hex généré est flashé via dfu-programmer :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
make clean&lt;br /&gt;
make&lt;br /&gt;
sudo dfu-programmer atmega8u2 erase --force&lt;br /&gt;
sudo dfu-programmer atmega8u2 flash blink.hex&lt;br /&gt;
sudo dfu-programmer atmega8u2 reset&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après le reset, les deux LEDs doivent clignoter en alternance. Ce test confirme que :&lt;br /&gt;
* Le microcontrôleur est correctement alimenté ;&lt;br /&gt;
* L’horloge externe 16 MHz fonctionne ;&lt;br /&gt;
* Les broches PD0 et PD1 sont accessibles et commandables ;&lt;br /&gt;
* Le chargeur DFU est opérationnel.&lt;br /&gt;
&lt;br /&gt;
=== Gestion personnalisée des endpoints (IN/OUT) ===&lt;br /&gt;
&lt;br /&gt;
L’objectif est de piloter directement les LEDs depuis le PC et de lire l’état des boutons, sans passer par la classe CDC. Pour cela, nous avons défini une interface USB générique (classe 0xFF) avec deux points d’accès de type INTERRUPT.&lt;br /&gt;
&lt;br /&gt;
==== Descripteurs USB ====&lt;br /&gt;
&lt;br /&gt;
Le fichier `Descriptors.h` déclare les adresses et la taille des endpoints :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define LED_OUT_EPADDR  (ENDPOINT_DIR_OUT | 1)   // Endpoint 1 OUT&lt;br /&gt;
#define BTN_IN_EPADDR   (ENDPOINT_DIR_IN  | 2)   // Endpoint 2 IN&lt;br /&gt;
#define EP_SIZE         8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans `Descriptors.c`, la configuration est décrite avec une interface unique (bInterfaceClass = 0xFF) et deux endpoints :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =&lt;br /&gt;
{&lt;br /&gt;
    .Config = { ... },&lt;br /&gt;
    .Interface =&lt;br /&gt;
    {&lt;br /&gt;
        .Header          = { .Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface },&lt;br /&gt;
        .InterfaceNumber = 0,&lt;br /&gt;
        .TotalEndpoints  = 2,&lt;br /&gt;
        .Class           = 0xFF,   // Vendor-specific&lt;br /&gt;
        .SubClass        = 0x00,&lt;br /&gt;
        .Protocol        = 0x00,&lt;br /&gt;
    },&lt;br /&gt;
    .Endpoint_OUT = { ... },&lt;br /&gt;
    .Endpoint_IN  = { ... },&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les chaînes de caractères (fabricant, produit, numéro de série) sont également définies. Le callback `CALLBACK_USB_GetDescriptor` fournit ces descripteurs à l’hôte lors de l’énumération.&lt;br /&gt;
&lt;br /&gt;
==== Code de la carte (CustomHID.c) ====&lt;br /&gt;
&lt;br /&gt;
Le programme principal est simplifié : il initialise le matériel, démarre la pile USB, puis boucle sur les tâches USB et le traitement des endpoints.&lt;br /&gt;
&lt;br /&gt;
'''Initialisation matérielle''' :  &lt;br /&gt;
* Les LEDs (PD0 et PD1) sont configurées en sortie.  &lt;br /&gt;
* Les boutons (PC4 et PC5) sont en entrée avec pull‑up internes.  &lt;br /&gt;
* Le watchdog est désactivé et l’horloge est mise à 16 MHz (si les fusibles ne sont pas encore programmés).&lt;br /&gt;
&lt;br /&gt;
'''Traitement de l’endpoint OUT''' (`process_out`) :  &lt;br /&gt;
* Sélectionne l’endpoint OUT.  &lt;br /&gt;
* Si un paquet est reçu, lit un octet et applique ses bits 0 et 1 aux LEDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static void process_out(void)&lt;br /&gt;
{&lt;br /&gt;
    Endpoint_SelectEndpoint(EP_OUT);&lt;br /&gt;
    if (Endpoint_IsOUTReceived() &amp;amp;&amp;amp; Endpoint_IsReadWriteAllowed())&lt;br /&gt;
    {&lt;br /&gt;
        uint8_t cmd = Endpoint_Read_8();&lt;br /&gt;
        LED_PORT = (LED_PORT &amp;amp; ~((1&amp;lt;&amp;lt;LED1_PIN)|(1&amp;lt;&amp;lt;LED2_PIN))) | (cmd &amp;amp; 0x03);&lt;br /&gt;
        Endpoint_ClearOUT();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
**Traitement de l’endpoint IN** (`process_in`) :  &lt;br /&gt;
- Sélectionne l’endpoint IN.  &lt;br /&gt;
- Si l’endpoint est prêt à écrire, lit l’état des deux boutons (bits PC4 et PC5) et les envoie dans un octet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
static void process_in(void)&lt;br /&gt;
{&lt;br /&gt;
    Endpoint_SelectEndpoint(EP_IN);&lt;br /&gt;
    if (Endpoint_IsReadWriteAllowed())&lt;br /&gt;
    {&lt;br /&gt;
        uint8_t buttons = PINC &amp;amp; ((1&amp;lt;&amp;lt;BTN1_PIN)|(1&amp;lt;&amp;lt;BTN2_PIN));&lt;br /&gt;
        Endpoint_Write_8(buttons);&lt;br /&gt;
        Endpoint_ClearIN();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
**Événements USB** :  &lt;br /&gt;
- `EVENT_USB_Device_ConfigurationChanged` configure les deux endpoints (taille 8, type INTERRUPT).  &lt;br /&gt;
- `EVENT_USB_Device_ControlRequest` gère les requêtes standard (délégation à LUFA).  &lt;br /&gt;
&lt;br /&gt;
La boucle principale appelle `USB_USBTask()` et les deux fonctions de traitement uniquement lorsque l’adresse USB est attribuée.&lt;br /&gt;
&lt;br /&gt;
==== Programme PC (main_pc.c) ====&lt;br /&gt;
&lt;br /&gt;
Le programme côté PC utilise la bibliothèque `libusb-1.0` pour dialoguer avec la carte.&lt;br /&gt;
&lt;br /&gt;
**Initialisation** :  &lt;br /&gt;
- Ouvre le périphérique par VID/PID (0x03EB / 0x2044).  &lt;br /&gt;
- Détache le pilote noyau si nécessaire.  &lt;br /&gt;
- Réclame l’interface (claim).&lt;br /&gt;
&lt;br /&gt;
**Contrôle des LEDs (OUT)** :  &lt;br /&gt;
- Les touches `1`, `2`, `3` basculent respectivement les bits 5, 6, 7 (mais ici seuls les bits 0 et 1 sont utilisés).  &lt;br /&gt;
- La touche `0` éteint tout.  &lt;br /&gt;
- L’envoi se fait via `libusb_interrupt_transfer` sur l’endpoint OUT (adresse 0x01).&lt;br /&gt;
&lt;br /&gt;
**Lecture des boutons (IN)** :  &lt;br /&gt;
- Une requête `libusb_interrupt_transfer` est effectuée périodiquement sur l’endpoint IN (0x82).  &lt;br /&gt;
- L’octet reçu est affiché, et un message indique quel bouton est pressé (SW3 sur PC4, SW4 sur PC5).&lt;br /&gt;
&lt;br /&gt;
Le programme utilise `select` sur `stdin` pour ne pas bloquer, ce qui permet une interaction fluide.&lt;br /&gt;
&lt;br /&gt;
**Résultat attendu** :  &lt;br /&gt;
- Le programme affiche l’état des boutons en temps réel.  &lt;br /&gt;
- En appuyant sur `1`, `2`, `3` ou `0`, les LEDs (PD0 et PD1) s’allument/s’éteignent selon les commandes envoyées.  &lt;br /&gt;
&lt;br /&gt;
Cette validation est indispensable avant d’implémenter le protocole ISP, car nous allons réutiliser exactement ce même canal pour échanger des commandes SPI avec la cible.&lt;br /&gt;
&lt;br /&gt;
Malheureusement après avoir flashé ce code, la carte arretait d'accepter la commande dfu-programmer atmega16u2 erase. Donc on ne peut pas avancer.&lt;br /&gt;
&lt;br /&gt;
Voici une capture de la reconnaissance de la carte en LUFA.&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki-capture-lsusb.png|thumb|center|400px|lsusb]]&lt;br /&gt;
&lt;br /&gt;
[[File:Wiki-photo-prog.jpeg|thumb|center|400px|photo du programmeur 2 minutes après que je l'ai cramé]]&lt;br /&gt;
&lt;br /&gt;
== Bilan ==&lt;br /&gt;
&lt;br /&gt;
=== 10/03/2026:===&lt;br /&gt;
&lt;br /&gt;
Recherche de composants. Les composants trouvés sont :&lt;br /&gt;
&lt;br /&gt;
- 74HC4067 : Démultiplexeur&lt;br /&gt;
&lt;br /&gt;
-  WL-SFTW SMT Full-color TOP LED : Led RGB&lt;br /&gt;
&lt;br /&gt;
- Gestion des leds : TLC5947&lt;br /&gt;
&lt;br /&gt;
Réflexion routage :&lt;br /&gt;
&lt;br /&gt;
Vérification de possibilité du routage sur 2 couches uniquement. Une couche pour les leds, une couche pour les boutons.&lt;br /&gt;
&lt;br /&gt;
=== 17/03/2026: ===&lt;br /&gt;
&lt;br /&gt;
Lecture des différentes datasheets pour savoir pour valider les choix trouvés.&lt;br /&gt;
&lt;br /&gt;
Choix final de se limiter à deux drivers TLC et d'abandonner la piste du demultiplexeur&lt;br /&gt;
&lt;br /&gt;
=== 23/03/2026 ===&lt;br /&gt;
&lt;br /&gt;
Rectification du problème KiCad 10, remise du projet KiCad à la 9ᵉ version. Création de la liste finale des pièces à commander (cf. Composants à acheter).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 24/03/2026: ===&lt;br /&gt;
&lt;br /&gt;
Discussion sur les contraintes d'alimentation et le nombre des RGB à utiliser sur la carte.&lt;br /&gt;
&lt;br /&gt;
Fin schema, choix des derniers composants pour communication entre les deux cartes.&lt;br /&gt;
&lt;br /&gt;
=== 31/03/2026: ===&lt;br /&gt;
&lt;br /&gt;
Routage.&lt;br /&gt;
&lt;br /&gt;
=== 12/05/2026: ===&lt;br /&gt;
&lt;br /&gt;
Récuperation de la carte.&lt;br /&gt;
&lt;br /&gt;
=== 18/05/2026: ===&lt;br /&gt;
&lt;br /&gt;
Récupération des composants et début de la soudure&lt;br /&gt;
&lt;br /&gt;
=== 20/05/2026: ===&lt;br /&gt;
&lt;br /&gt;
Soudure des composants. Nous avons cramé le uP en augmentant l'intensité des LEDs. donc on va chercher a le remplacer.&lt;br /&gt;
&lt;br /&gt;
=== 26/05/2026: ===&lt;br /&gt;
&lt;br /&gt;
fin présumée de la soudure de la soudure et début du code. ce qui nous menait a détruire notre microprocesseur à cause d'une demande trop élevée de courant par les LEDs. Eventuellement la solution était de désouder la résistance de courant de la TLC et la remplacer par une résistance d'une valeur plus élevée (3,3k)&lt;br /&gt;
&lt;br /&gt;
02/06/2026:&lt;br /&gt;
&lt;br /&gt;
Séance bonus offerte par Mr. Boé, qui nous avait dit de faire un dernier flash en ISP. Ce dernier ne marchait pas donc nous avons désoudé le microprocesseur. Le nouveau microprocesseur étant finalement soudé, on a confirmé nos suspicions: L'ancien microprocesseur ne marchait vraiment pas. On peut désormais flasher le fichier hex dans la carte. il n'y a plus de composants qui se chauffent, on peut finalement attaquer la partie code.&lt;br /&gt;
&lt;br /&gt;
= Premier système embarqué =&lt;br /&gt;
&lt;br /&gt;
== Archive GIT; ==&lt;br /&gt;
&lt;br /&gt;
Mon archive GIT pour le projet KiCAD et pour les programmes : [https://gitea.plil.fr/aboualle/2025_PSE_04_aboualle_tregaud].&lt;br /&gt;
&lt;br /&gt;
Archive privée. Binôme comme administrateur. Boé et Redon comme administrateur. - FAIT&lt;br /&gt;
&lt;br /&gt;
Ajouter un &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; pour KiCAD et langage C. - FAIT&lt;br /&gt;
&lt;br /&gt;
Structure avec matériel (y compris production - gerber, bill of materials) / logiciel / documentation (e.g. documentation technique).&lt;br /&gt;
&lt;br /&gt;
== Description du système embarqué ==&lt;br /&gt;
&lt;br /&gt;
Nous prévoyons de faire un clavier, séparé en deux parties. Nous sommes en collaboration avec le groupe 16[https://projets-se.plil.fr/mediawiki/index.php/SE3Groupe2025-16].&lt;br /&gt;
Le clavier sera capable de :&lt;br /&gt;
* récupérer les touches pressées par l'autre partie du clavier.&lt;br /&gt;
* Communiquer avec l'ordinateur pour envoyer les informations&lt;br /&gt;
Les communications seront réalisées en UART&lt;br /&gt;
&lt;br /&gt;
Il s'agit d'un '''clavier ergonomique RGB''' au format '''matrice 5 × 6 (30 touches)'''.  &lt;br /&gt;
La carte embarque un '''ATMega32U4''' (quartz 16 MHz), une gestion complète de l’alimentation sur batterie Li‑ion (chargeur MAX1811 + boost MCP1640 vers 5 V), un rétroéclairage '''RGB individuel''' pour 16 touches (deux drivers PWM TLC5947 en cascade), et une prise '''jack 3,5 mm''' permettant la communication UART avec une seconde moitié de clavier (clavier ergonomique séparé).  &lt;br /&gt;
&lt;br /&gt;
La saisie est assurée par liaison USB en mode clavier HID (LUFA). La programmation se faisait à priori en ISP, mais eventuellement par USB (bootloader DFU).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:clavier_ergo_top.jpg|center|vignette|500px|Vue de la carte clavier finalisée]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Matériel (Hardware) ==&lt;br /&gt;
&lt;br /&gt;
=== Switches et sockets ===&lt;br /&gt;
&lt;br /&gt;
Les switches mécaniques utilisés sont des modèles de la marque **KAILH**, disponibles au laboratoire.  &lt;br /&gt;
Nous avons également récupéré des **sockets hot‑swap** adaptées à ces switches. L’intérêt de ces modules est de pouvoir insérer ou retirer les boutons à volonté, sans qu’ils soient soudés directement au PCB (seules les sockets sont soudées). Cela facilite la réutilisation des boutons d’un projet à l’autre et améliore la réparabilité du clavier.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Matériel (Hardware) ==&lt;br /&gt;
&lt;br /&gt;
=== Switches et sockets ===&lt;br /&gt;
&lt;br /&gt;
Les switches mécaniques utilisés sont des modèles de la marque ''KAILH'', disponibles au laboratoire. Nous avons également récupéré des sockets hot‑swap adaptées. Seules les sockets sont soudées sur le PCB, ce qui permet de changer les switches sans dessouder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alimentation ===&lt;br /&gt;
&lt;br /&gt;
La carte peut être alimentée soit par le port USB (5 V), soit par une batterie Li‑ion (3,7 V nominal) connectée sur le connecteur J3. Un circuit de gestion de batterie et un convertisseur élévateur (boost) génèrent une tension stable de 5 V pour toute la logique (MCU, LEDs, drivers).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Chargeur Li-ion MAX1811&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le composant ''U1 (MAX1811)'' est un chargeur linéaire dédié aux batteries Li‑ion, alimenté directement par le 5 V USB. Ses broches de configuration permettent de choisir la tension de fin de charge et le courant de charge :&lt;br /&gt;
&lt;br /&gt;
- ''SELV'' (pin 1) : sélectionne la tension de charge (4,1 V ou 4,2 V). Une résistance de tirage (R11 = 10 kΩ) fixe le niveau haut → tension de charge = 4,2 V.&lt;br /&gt;
- ''SELI'' (pin 2) : choisit le courant de charge (100 mA ou 500 mA). La broche est pilotée par le MCU (PB0) pour moduler le courant en fonction de la source USB.&lt;br /&gt;
- ''EN'' (pin 7) : maintenue à VUSB (5 V) via la résistance R4 (150 Ω) pour activer le chargeur en permanence.&lt;br /&gt;
- ''/CHG'' (pin 8) : sortie à drain ouvert qui passe à l’état bas lorsque la batterie est en cours de charge. Une LED rouge D31 (anode sur VUSB, cathode sur /CHG) permet un affichage visuel de la charge.&lt;br /&gt;
&lt;br /&gt;
Le condensateur C4 (4,7 µF) filtre l’entrée VUSB ; C5 (2,2 µF) et C6 (4,7 µF) sont placés sur la sortie BATT pour stabiliser la tension batterie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Convertisseur Boost MCP1640&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le régulateur élévateur ''U3 (MCP1640)'' élève la tension de la batterie (typiquement 3,7 V, mais pouvant descendre jusqu’à 0,8 V en décharge profonde) à une sortie régulée de 5 V. La broche **EN** est connectée directement à la batterie (via J3) afin de démarrer le convertisseur dès qu’une batterie est présente.&lt;br /&gt;
&lt;br /&gt;
La tension de sortie est fixée par un pont diviseur externe connecté sur la broche ''V_FB'' (pin 4) :&lt;br /&gt;
&lt;br /&gt;
- R5 = 976 kΩ, R6 = 309 kΩ&lt;br /&gt;
&lt;br /&gt;
La tension de référence interne est V_FB = 1,21 V. La tension de sortie se calcule par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V_{OUT} = V_{FB} \times \left(1 + \frac{R5}{R6}\right) = 1,21 \times \left(1 + \frac{976}{309}\right) \approx 1,21 \times 4,158 \approx 5,03\,V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La valeur est bien proche de 5 V.&lt;br /&gt;
&lt;br /&gt;
''Choix de l’inductance L1 (4,7 µH)''  &lt;br /&gt;
&lt;br /&gt;
La consommation estimée du système (MCU + 16 LEDs RGB à faible courant + drivers) est d’environ 300 mA sous 5 V. En tenant compte d’un rendement η ≈ 85 % (valeur typique pour ce convertisseur à charge moyenne), le courant moyen tiré de la batterie (3,7 V) est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{BAT} = \frac{V_{OUT} \times I_{OUT}}{V_{IN} \times \eta} = \frac{5 \times 0,3}{3,7 \times 0,85} \approx 0,477\,A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L’ondulation du courant dans l’inductance est donnée par :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Delta I_L = \frac{V_{IN} \times D}{L \times f_{SW}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec un rapport cyclique typique &amp;lt;math&amp;gt;D = 1 - \frac{V_{IN}}{V_{OUT}} = 1 - \frac{3,7}{5} = 0,26&amp;lt;/math&amp;gt;, une fréquence de découpage &amp;lt;math&amp;gt;f_{SW} = 500\,kHz&amp;lt;/math&amp;gt; (d’après la datasheet du MCP1640), et L = 4,7 µH.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\Delta I_L = \frac{3,7 \times 0,26}{4,7 \times 10^{-6} \times 500 \times 10^{3}} \approx \frac{0,962}{2,35} \approx 0,409\,A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le courant de crête dans l’inductance vaut donc :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{Lpeak} = I_{BAT} + \frac{\Delta I_L}{2} \approx 0,477 + 0,2045 \approx 0,682\,A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L’inductance choisie (référence XGL4020-471MEC ou équivalent) présente un courant de saturation supérieur à 1,5 A, ce qui garantit une marge confortable.&lt;br /&gt;
&lt;br /&gt;
''Filtrage d’entrée et de sortie''  &lt;br /&gt;
&lt;br /&gt;
- Condensateur d’entrée C7 = 10 µF (faible ESR) pour minimiser l’impédance côté batterie.  &lt;br /&gt;
- Condensateurs de sortie C8 = 4,7 µF et C9 = 4,7 µF (en parallèle) pour réduire l’ondulation résiduelle et répondre aux appels de courant du MCU et des LEDs.&lt;br /&gt;
&lt;br /&gt;
La sortie VCC (5 V) alimente l’ensemble du système : MCU (via ses broches VCC, AVCC, UVCC), les drivers TLC5947, et l’anode commune des LEDs RGB.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki_schema_alimentation.png|center|vignette|400px|La section alimentation du circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Microcontrôleur ATMega32U4 ===&lt;br /&gt;
&lt;br /&gt;
Le cœur du système est un **ATMega32U4** (référence U2) cadencé à 16 MHz par un quartz externe (Y1). Ce microcontrôleur intègre un contrôleur USB matériel, ce qui permet de l’utiliser en périphérique HID sans composant additionnel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Horloge et découplage&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un quartz ''Y1'' (référence Crystal_GND24) au boîtier 3225 (3,2 × 2,5 mm) génère la fréquence de base de 16 MHz. Les capacités de charge ''C1'' et ''C2'' (22 pF chacune) sont connectées respectivement aux broches XTAL1 et XTAL2, l’autre borne étant reliée à la masse. Ces valeurs sont conformes à la préconisation de la datasheet pour un quartz à 16 MHz.&lt;br /&gt;
&lt;br /&gt;
La formule approchée de la capacité de charge vue par le quartz est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C_L = \frac{C_1 \cdot C_2}{C_1 + C_2} + C_{parasite}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec C1 = C2 = 22 pF et une capacité parasite de l’ordre de 5 pF, on obtient C_L ≈ 16 pF, ce qui correspond aux spécifications des quartz courants.&lt;br /&gt;
&lt;br /&gt;
L’alimentation du MCU est filtrée par plusieurs condensateurs de découplage placés au plus près des broches d’alimentation :&lt;br /&gt;
&lt;br /&gt;
- ''C3'' = 1 µF entre UCAP (pin 6) et GND – nécessaire à la stabilité du régulateur interne USB.&lt;br /&gt;
- ''C10, C11, C12'' = 0,1 µF chacun – découplage classique pour les broches VCC (pin 14), AVCC (pin 24) et UVCC (pin 2).&lt;br /&gt;
- Les plans de masse sont interconnectés via les broches GND (pins 5, 15, 23, 35, 43, voir datasheet...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gestion de l’USB&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le port USB de type A (J1) est directement relié au MCU :&lt;br /&gt;
- ''VBUS'' (pin 1 du connecteur) est envoyé sur la broche VBUS (pin 7) de l’ATmega32U4 pour détecter la présence du câble.&lt;br /&gt;
- ''D+'' (pin 3 du connecteur) et ''D-'' (pin 2) sont connectés respectivement aux broches D+ (pin 4) et D- (pin 3), eventuellement on découvre que c'est une erreur et que nous devrons mettre des résistances 22 Ω.&lt;br /&gt;
- Le shield du connecteur (pin 5) est relié à la masse.&lt;br /&gt;
&lt;br /&gt;
La programmation du bootloader DFU se fait par USB ; une fois le code chargé, le clavier est reconnu comme périphérique HID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Connecteur ISP&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un connecteur ''AVR-ISP-6'' (J4) au pas 2,54 mm permet la programmation par un programmateur externe (par exemple AVR ISP mkII). Le brochage est standard :&lt;br /&gt;
- Pin 1 : MISO (PB3)&lt;br /&gt;
- Pin 2 : VCC (5 V)&lt;br /&gt;
- Pin 3 : SCK (PB1)&lt;br /&gt;
- Pin 4 : MOSI (PB2)&lt;br /&gt;
- Pin 5 : RESET (actif à l’état bas)&lt;br /&gt;
- Pin 6 : GND&lt;br /&gt;
&lt;br /&gt;
Des résistances de pull‑up de 10 kΩ (R7 et R8) sont placées respectivement sur les lignes HWB et RESET pour éviter les flottements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Boutons RST et HWB&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deux boutons poussoirs (SW1 et SW2) sont disponibles :&lt;br /&gt;
- ''SW2'' connecté sur la broche RESET (pin 13) : un appui provoque une réinitialisation matérielle du microcontrôleur.&lt;br /&gt;
- ''SW1'' connecté sur la broche HWB (pin 33) : pendant le démarrage, maintenir ce bouton force le bootloader à attendre une programmation USB (mode DFU). En fonctionnement normal, cette broche peut être réutilisée comme entrée/sortie (PE2).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki_schema_mcu.png|center|vignette|400px|Schéma microcontrôleur du circuit]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Matrice de touches 5×6 ===&lt;br /&gt;
&lt;br /&gt;
Le clavier comporte '''30 touches''' organisées en une matrice de '''5 lignes et 6 colonnes'''. Cette architecture minimise le nombre de broches nécessaires sur le microcontrôleur (5 + 6 = 11 broches au lieu de 30).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Routage des colonnes et lignes&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les broches du microcontrôleur sont réparties sur plusieurs ports pour faciliter le routage du PCB :&lt;br /&gt;
&lt;br /&gt;
'''Colonnes (6 broches) :'''&lt;br /&gt;
* COL0 → PF7 (pin 36)&lt;br /&gt;
* COL1 → PF6 (pin 37)&lt;br /&gt;
* COL2 → PF5 (pin 38)&lt;br /&gt;
* COL3 → PF4 (pin 39)&lt;br /&gt;
* COL4 → PF1 (pin 40)&lt;br /&gt;
* COL5 → PF0 (pin 41)&lt;br /&gt;
&lt;br /&gt;
'''Lignes (5 broches) :'''&lt;br /&gt;
* ROW0 → PC7 (pin 32)&lt;br /&gt;
* ROW1 → PC6 (pin 31)&lt;br /&gt;
* ROW2 → PB6 (pin 30)&lt;br /&gt;
* ROW3 → PB4 (pin 28)&lt;br /&gt;
* ROW4 → PD7 (pin 27)&lt;br /&gt;
&lt;br /&gt;
Les colonnes sont configurées en '''entrées avec pull-up interne''' (activées par logiciel). Les lignes sont configurées en '''sorties''', et sont normalement à l’état haut (désactivées). Pour détecter une pression sur une touche située à l’intersection d’une ligne L et d’une colonne C, la ligne est passée à l’état bas (LOW), puis on lit l’état de la colonne. Si la colonne est à 0 (LOW), la touche est enfoncée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Diodes anti-ghosting&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin d’éviter les phénomènes de ''ghosting'' (détection de fausses touches lorsque plusieurs boutons sont pressés simultanément), une diode est placée en série avec chaque commutateur. Les références '''D1 à D30''' (30 diodes au total, boîtier 0603) sont connectées avec leur anode sur la colonne et leur cathode sur la ligne (ou l’inverse selon le sens de balayage). Le schéma ci-dessous illustre une cellule typique.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki_matrice_diode.png|center|vignette|400px|Principe d’une cellule de la matrice : le switch MX_SW_HS en série avec une diode]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rétroéclairage RGB ===&lt;br /&gt;
&lt;br /&gt;
Le clavier est équipé de '''16 LEDs RGB''' (référence '''APFA3010'''), chacune étant une LED à anode commune (trois cathodes : rouge, verte, bleue). Elles sont disposées sous les touches principales pour offrir un éclairage personnalisable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Caractéristiques des LEDs APFA3010&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Chaque LED APFA3010 se présente dans un boîtier SMD 3,0 × 1,5 mm au format horizontal. Ses quatre broches sont :&lt;br /&gt;
&lt;br /&gt;
* Broche 1 : '''R''' (cathode rouge)&lt;br /&gt;
* Broche 2 : '''A''' (anode commune → reliée au VCC 5 V)&lt;br /&gt;
* Broche 3 : '''G''' (cathode verte)&lt;br /&gt;
* Broche 4 : '''B''' (cathode bleue)&lt;br /&gt;
&lt;br /&gt;
La luminosité de chaque couleur est contrôlée individuellement par modulation de largeur d’impulsion (PWM).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Drivers PWM TLC5947&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pilotage des 16 × 3 = 48 canaux PWM est assuré par '''deux circuits TLC5947''' (U4 et U5). Ce sont des drivers à 24 canaux chacun, 12 bits de résolution, communiquant via une interface SPI. Le montage en '''cascade''' permet d’envoyer les données à U4, qui les transmet à U5 par sa sortie SOUT.&lt;br /&gt;
&lt;br /&gt;
'''Caractéristiques principales du TLC5947 :'''&lt;br /&gt;
* 24 sorties à courant constant (réglable par une résistance externe)&lt;br /&gt;
* Résolution PWM : 4096 niveaux (12 bits)&lt;br /&gt;
* Fréquence interne de PWM fixe (≈ 30 kHz)&lt;br /&gt;
* Broches de commande : SCLK (horloge), SIN (entrée série), SOUT (sortie série), XLAT (verrouillage), BLANK (sorties actives / désactivées)&lt;br /&gt;
* Alimentation : 3,0 V à 5,5 V – ici reliée au VCC 5 V&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Répartition des LEDs entre les deux drivers&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les 16 LEDs sont réparties de manière équilibrée :&lt;br /&gt;
&lt;br /&gt;
* '''U4''' pilote les 8 premières LEDs (canaux OUT0 à OUT23). Chaque LED utilise trois canaux consécutifs (R, G, B).&lt;br /&gt;
* '''U5''' pilote les 8 LEDs suivantes (même principe).&lt;br /&gt;
&lt;br /&gt;
La connexion en cascade est réalisée ainsi :&lt;br /&gt;
* SIN de U4 relié à la broche PB5 (MOSI) du MCU.&lt;br /&gt;
* SOUT de U4 relié à SIN de U5.&lt;br /&gt;
* SCLK, XLAT et BLANK sont communs aux deux drivers (broches PD0, PD6 et PD4 respectivement).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:wiki_tlc5947_cascade.png|center|vignette|600px|Cascade de deux TLC5947 pour 16 LEDs RGB]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Résistance de référence IREF&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Chaque driver TLC5947 nécessite une résistance '''R(IREF)''' pour fixer le courant de sortie sur chaque canal. La formule est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;I_{out} (mA) = \frac{39,06}{R_{IREF} (k\Omega)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour un courant typique de 5 mA par couleur (luminosité suffisante pour une utilisation en intérieur), on calcule :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_{IREF} = \frac{39,06}{5} \approx 7,81\,k\Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les valeurs standard les plus proches sont 7,5 kΩ ou 8,2 kΩ. Dans le schéma, on trouve '''R9 = 1 968 Ω''' et '''R10 = 1 968 Ω''' (soit environ 1,97 kΩ), ce qui donnerait un courant de presque 20 mA – probablement adapté à des LEDs plus puissantes ou à un usage extérieur. En pratique, cette valeur peut être ajustée par remplacement de la résistance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Problème de surintensité et correction&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lors des premiers tests, le microcontrôleur a été endommagé à cause d’une demande de courant trop élevée par les LEDs. La solution a été de '''remplacer les résistances de référence IREF''' (R9 et R10) initiales de 1,97 kΩ par des résistances de '''3,3 kΩ'''. Avec cette nouvelle valeur, le courant par canal tombe à environ &amp;lt;math&amp;gt;39,06 / 3,3 \approx 11,8\,mA&amp;lt;/math&amp;gt;, ce qui est plus sûr tout en restant lumineux. Le code compense ensuite les différences de sensibilité des couleurs (voir section logicielle).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Alimentation des LEDs&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L’anode commune (broche 2) de chaque APFA3010 est reliée directement au '''VCC 5 V''' du boost. La consommation totale dépend du nombre de LEDs allumées et du courant par canal. Avec 16 LEDs × 3 couleurs × 5 mA = 240 mA maximal, ce qui reste dans les capacités du MCP1640.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Gestion matérielle de la PWM&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La génération des niveaux PWM est entièrement assurée par les TLC5947. Le microcontrôleur envoie simplement, via SPI, une trame de 48 × 12 bits = 576 bits (soit 72 octets) pour définir les rapports cycliques de chaque canal. Une fois les données transmises, une impulsion sur XLAT verrouille les nouvelles valeurs, et BLANK (normalement à l’état bas) peut être utilisée pour éteindre temporairement toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Cette architecture décharge complètement le MCU de la gestion du PWM, ce qui laisse toute sa puissance pour le balayage de la matrice et la communication USB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Logiciel (Software) ==&lt;br /&gt;
&lt;br /&gt;
La partie logicielle du clavier est décomposée en plusieurs modules : lecture de la matrice de touches, pilotage des LEDs RGB, communication USB (périphérique clavier HID), et communication UART avec la seconde moitié du clavier ergonomique.&lt;br /&gt;
&lt;br /&gt;
=== Gestion de la matrice de touches ===&lt;br /&gt;
&lt;br /&gt;
Le fichier '''matrix.c''' implémente le balayage d’une matrice 5 lignes × 6 colonnes. Les broches sont configurées comme suit :&lt;br /&gt;
&lt;br /&gt;
* '''Lignes (sorties)''' : PC7, PC6, PB6, PB4, PD7 – mises à 1 (HIGH) au repos.&lt;br /&gt;
* '''Colonnes (entrées avec pull‑up)''' : PF7, PF6, PF5, PF4, PF1, PF0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Initialisation&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction &amp;lt;code&amp;gt;matrix_init()&amp;lt;/code&amp;gt; configure les directions des broches et active les résistances de pull‑up sur les colonnes. Elle désactive également le débogueur JTAG (broches PF4‑PF7) pour libérer ces ports.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Balayage et anti‑rebond&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le balayage est effectué par la fonction &amp;lt;code&amp;gt;matrix_scan()&amp;lt;/code&amp;gt;. Pour chaque ligne, on abaisse la broche correspondante (select_row), on attend 2 µs (nécessaire à cause de la capacité parasite des lignes), puis on lit l’état des six colonnes (read_col). Un registre à décalage de 8 bits par touche (&amp;lt;code&amp;gt;debounce_state&amp;lt;/code&amp;gt;) stocke l’historique des lectures. Une touche est considérée comme '''enfoncée''' après 8 échantillons consécutifs à 1, et comme '''relâchée''' après 8 échantillons à 0. Le résultat final est stocké dans le tableau &amp;lt;code&amp;gt;matrix_state[5][6]&amp;lt;/code&amp;gt; (booléen).&lt;br /&gt;
&lt;br /&gt;
L’extrait suivant montre la boucle de balayage :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (uint8_t r = 0; r &amp;lt; MATRIX_ROWS; r++) {&lt;br /&gt;
    select_row(r);&lt;br /&gt;
    _delay_us(2);&lt;br /&gt;
    for (uint8_t c = 0; c &amp;lt; MATRIX_COLS; c++) {&lt;br /&gt;
        bool raw = read_col(c);&lt;br /&gt;
        debounce_state[r][c] = (debounce_state[r][c] &amp;lt;&amp;lt; 1) | raw;&lt;br /&gt;
        if (debounce_state[r][c] == 0xFF &amp;amp;&amp;amp; !matrix_state[r][c])&lt;br /&gt;
            matrix_state[r][c] = true;&lt;br /&gt;
        else if (debounce_state[r][c] == 0x00 &amp;amp;&amp;amp; matrix_state[r][c])&lt;br /&gt;
            matrix_state[r][c] = false;&lt;br /&gt;
    }&lt;br /&gt;
    unselect_row(r);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le tableau &amp;lt;code&amp;gt;matrix_state&amp;lt;/code&amp;gt; est accessible depuis les autres modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pilotage des LEDs RGB (TLC5947) ===&lt;br /&gt;
&lt;br /&gt;
Les 16 LEDs RGB sont contrôlées par deux circuits '''TLC5947''' (U4 et U5) montés en cascade. Chaque TLC5947 est un driver à 24 canaux PWM (12 bits de résolution) piloté par une liaison série en bit‑banging (SPI logiciel).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Brochage et connexions&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''SIN''' (entrée série) : PB5 – données des PWM (48 canaux × 12 bits = 576 bits)&lt;br /&gt;
* '''SCLK''' (horloge) : PD0 – chaque front montant valide un bit&lt;br /&gt;
* '''XLAT''' (verrouillage) : PD6 – après transmission, un front basculant transfère les données vers les registres PWM&lt;br /&gt;
* '''BLANK''' (sorties actives) : PD5 – à 0 pour activer les sorties (les LEDs s’allument)&lt;br /&gt;
* '''SOUT''' (sortie série de U4) → reliée à SIN de U5 (cascade)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Trame de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le TLC5947 attend les données '''canal par canal, en commençant par le dernier canal du dernier circuit intégré'''. L’ordre est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Canal 23 (U5) → Canal 22 (U5) → … → Canal 0 (U5) → Canal 23 (U4) → … → Canal 0 (U4)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour chaque canal, on envoie 12 bits, le '''bit de poids fort (MSB) en premier'''. La fonction &amp;lt;code&amp;gt;tlc_update()&amp;lt;/code&amp;gt; réalise cette transmission.&lt;br /&gt;
&lt;br /&gt;
Le buffer &amp;lt;code&amp;gt;pwm_buffer&amp;lt;/code&amp;gt; contient les valeurs 12‑bits (0 à 4095) pour chacun des 48 canaux. L’ordre des canaux par LED est défini dans &amp;lt;code&amp;gt;tlc_set_led()&amp;lt;/code&amp;gt; : pour chaque LED, les trois canaux consécutifs sont assignés respectivement au rouge, bleu, vert (selon le brochage de la LED APFA3010).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Animation : dégradé de couleurs mouvant (rainbow)&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L’animation utilise le modèle de couleur '''HSV''' (teinte, saturation, valeur). La teinte (&amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;) varie de 0 à 360°, la saturation et la valeur sont fixées à 1. La conversion &amp;lt;math&amp;gt;HSV \to RGB&amp;lt;/math&amp;gt; est réalisée par la fonction &amp;lt;code&amp;gt;hsv_to_rgb()&amp;lt;/code&amp;gt;. La formule classique est utilisée, avec &amp;lt;math&amp;gt;C = 4095&amp;lt;/math&amp;gt; (pleine échelle 12 bits).&lt;br /&gt;
&lt;br /&gt;
Pour créer un dégradé spatial, on associe à chaque LED une teinte de base qui dépend de sa '''position physique''' sur le PCB (coordonnées extraites du fichier de placement KiCad). La teinte de la LED &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; à l’instant &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; est :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_i(t) = H_{global}(t) + \alpha \cdot (x_i - x_{ref}) + \beta \cdot (y_i - y_{ref})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\alpha = 0,5&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\beta = 0,3&amp;lt;/math&amp;gt;, et &amp;lt;math&amp;gt;(x_{ref}, y_{ref}) = (139,0\,; -136,0)&amp;lt;/math&amp;gt; mm (centre approximatif du clavier).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Compensation des couleurs&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les LEDs APFA3010 ont des efficacités lumineuses différentes : le rouge est beaucoup moins intense que le vert et le bleu à courant égal. Pour équilibrer visuellement les couleurs, le code applique un facteur d’atténuation différent par canal :&lt;br /&gt;
&lt;br /&gt;
* Rouge → &amp;lt;code&amp;gt;r &amp;gt;&amp;gt; 1&amp;lt;/code&amp;gt; (division par 2)&lt;br /&gt;
* Vert → &amp;lt;code&amp;gt;g &amp;gt;&amp;gt; 4&amp;lt;/code&amp;gt; (division par 16)&lt;br /&gt;
* Bleu → &amp;lt;code&amp;gt;b &amp;gt;&amp;gt; 4&amp;lt;/code&amp;gt; (division par 16)&lt;br /&gt;
&lt;br /&gt;
Ces coefficients ont été ajustés empiriquement pour obtenir un blanc équilibré et des dégradés harmonieux. La luminosité globale est ainsi réduite, ce qui évite également l’éblouissement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Communication USB (LUFA) ===&lt;br /&gt;
&lt;br /&gt;
La bibliothèque '''LUFA''' gère le périphérique USB en mode HID (clavier). Le bootloader '''DFU''' (présent en usine sur l’ATmega32U4) permet de programmer la carte directement par USB, sans programmateur externe. Il suffit d’appuyer sur le bouton HWB (SW1) au moment de la mise sous tension, puis d’utiliser l’outil &amp;lt;code&amp;gt;dfu-programmer&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Configuration LUFA&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;LUFAConfig.h&amp;lt;/code&amp;gt; définit :&lt;br /&gt;
* &amp;lt;code&amp;gt;USE_FLASH_DESCRIPTORS&amp;lt;/code&amp;gt; (descripteurs en mémoire Flash)&lt;br /&gt;
* &amp;lt;code&amp;gt;FIXED_CONTROL_ENDPOINT_SIZE = 8&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;FIXED_NUM_CONFIGURATIONS = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;USB_DEVICE_ONLY&amp;lt;/code&amp;gt; (pas de mode hôte)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Descripteurs USB&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;Descriptors.c&amp;lt;/code&amp;gt; suit le format standard d’un clavier HID bootable (rapport de 8 modificateurs + 6 codes de touches). Le Vendor ID est 0x03EB (Atmel) et le Product ID 0x2042.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Implémentation de la classe HID&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;usb_keyboard.c&amp;lt;/code&amp;gt; contient les callbacks. Le tableau &amp;lt;code&amp;gt;test_keymap&amp;lt;/code&amp;gt; associe chaque position de la matrice à un code HID. '''Important :''' ce tableau est inversé (miroir) car les switches ont été soudés sur la face opposée à celle prévue initialement. L’ordre des lignes et colonnes a donc dû être retourné en logiciel pour que les touches correspondent aux caractères attendus.&lt;br /&gt;
&lt;br /&gt;
Exemple de keymap (extrait) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const uint8_t test_keymap[MATRIX_ROWS][MATRIX_COLS] = {&lt;br /&gt;
    {HID_KEYBOARD_SC_5_AND_PERCENTAGE, HID_KEYBOARD_SC_4_AND_DOLLAR, ..., HID_KEYBOARD_SC_ESCAPE},&lt;br /&gt;
    {HID_KEYBOARD_SC_T, HID_KEYBOARD_SC_R, ..., HID_KEYBOARD_SC_TAB},&lt;br /&gt;
    // ...&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction &amp;lt;code&amp;gt;CALLBACK_HID_Device_CreateHIDReport()&amp;lt;/code&amp;gt; parcourt &amp;lt;code&amp;gt;matrix_state&amp;lt;/code&amp;gt; et construit le rapport USB. Un code spécial (&amp;lt;code&amp;gt;MY_CUSTOM_CTRL&amp;lt;/code&amp;gt;) permet d’injecter le modificateur Ctrl gauche (pour les raccourcis copier/coller, par exemple).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Programme principal et animation RGB ===&lt;br /&gt;
&lt;br /&gt;
Le fichier '''main.c''' orchestre l’ensemble. La boucle principale :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;matrix_scan()&amp;lt;/code&amp;gt; met à jour l’état des touches.&lt;br /&gt;
* &amp;lt;code&amp;gt;usb_keyboard_task()&amp;lt;/code&amp;gt; maintient la communication USB.&lt;br /&gt;
* &amp;lt;code&amp;gt;keyboard_link_task()&amp;lt;/code&amp;gt; gère la réception des données de l’autre moitié du clavier (UART).&lt;br /&gt;
* Toutes les 50 boucles, il envoie sa propre matrice via &amp;lt;code&amp;gt;keyboard_send_matrix()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Toutes les 30 boucles (≈ 30 ms), la teinte globale &amp;lt;math&amp;gt;H_{global}&amp;lt;/math&amp;gt; est incrémentée de 4° et les LEDs sont mises à jour avec &amp;lt;code&amp;gt;update_leds_rainbow()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La fonction &amp;lt;code&amp;gt;update_leds_rainbow()&amp;lt;/code&amp;gt; applique le calcul de teinte spatiale et la compensation des couleurs décrites plus haut.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Communication UART entre les deux moitiés du clavier ===&lt;br /&gt;
&lt;br /&gt;
Les deux parties du clavier ergonomique communiquent via la prise jack 3,5 mm (USART1 de l’ATmega32U4, broches PD2 (RX) et PD3 (TX)). Le protocole est le suivant :&lt;br /&gt;
&lt;br /&gt;
* '''Start byte''' : 0xAA&lt;br /&gt;
* '''Commande''' : 0x01 pour l’état de la matrice&lt;br /&gt;
* '''Longueur''' : 4 octets (30 bits → 4 octets, 2 bits inutilisés)&lt;br /&gt;
* '''Données''' : 4 octets contenant les 30 bits compressés (bit n = ligne*6 + colonne)&lt;br /&gt;
* '''Checksum''' : somme modulo 256 des 4 octets de données&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Envoi&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;keyboard_send_matrix()&amp;lt;/code&amp;gt; compresse la matrice locale dans 4 octets et appelle &amp;lt;code&amp;gt;send_packet()&amp;lt;/code&amp;gt; qui envoie les 7 octets du paquet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Réception&amp;lt;/h4&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;keyboard_link_task()&amp;lt;/code&amp;gt; est appelée dans la boucle principale. Elle lit les octets reçus, vérifie le start byte, la commande, la longueur et le checksum. En cas de paquet valide, les données sont stockées dans un buffer et un flag &amp;lt;code&amp;gt;remote_matrix_valid&amp;lt;/code&amp;gt; est positionné. La fonction &amp;lt;code&amp;gt;keyboard_get_remote_matrix()&amp;lt;/code&amp;gt; permet ensuite de récupérer la matrice distante.&lt;br /&gt;
&lt;br /&gt;
Les deux claviers s’envoient ainsi mutuellement leur état de manière périodique. Les touches de l’autre moitié sont fusionnées avec les touches locales (à faire dans &amp;lt;code&amp;gt;main.c&amp;lt;/code&amp;gt; via la variable &amp;lt;code&amp;gt;remote_matrix&amp;lt;/code&amp;gt;) avant de générer le rapport USB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Composants à acheter ==&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/analog-devices/max1811esa-t/chargeur-batterie-li-ion-500ma/dp/3916608 | lien farnell Chargeur_Batterie]&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/same-sky/sj-3523-smt-tr/conn-audio-t-l-fem-90-stereo-4p/dp/4814364 | lien (farnell) Connecteur jack femelle 3.5mm]&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/microchip/mcp1640bt-i-chy/conv-dc-dc-sync-boost-500khz-85/dp/1800207RL | lien farnell DC-DC_step-up mcp1640bt]&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/wurth-elektronik/150141m173100/led-1411-rgb-270mcd-950mcd-230mcd/dp/2322115 | LED_RGB led 150141]&lt;br /&gt;
&lt;br /&gt;
[https://fr.farnell.com/texas-instruments/tlc5947dap/ic-led-driver-linear-32-tssop/dp/3119196 | lien led driver tlc5947]&lt;br /&gt;
&lt;br /&gt;
'''Voir avec M.Redon ?'''&lt;br /&gt;
&lt;br /&gt;
[https://www.aliexpress.us/item/3256805961019213.html?spm=a2g0o.productlist.main.1.66eclXL5lXL5cf&amp;amp;algo_pvid=ca5aafba-3d33-48dd-8cc9-1bb366397f0b&amp;amp;algo_exp_id=ca5aafba-3d33-48dd-8cc9-1bb366397f0b-0&amp;amp;pdp_ext_f=%7B%22order%22%3A%2218%22%2C%22eval%22%3A%221%22%2C%22fromPage%22%3A%22search%22%7D&amp;amp;pdp_npi=6%40dis%21USD%2114.95%2110.45%21%21%2114.95%2110.45%21%40210384cc17730991634577851e3de4%2112000035974925908%21sea%21US%210%21ABX%211%210%21n_tag%3A-29910%3Bd%3Aaf0128d0%3Bm03_new_user%3A-29895%3BpisId%3A5000000197827636&amp;amp;curPageLogUid=b1itGq4vumse&amp;amp;utparam-url=scene%3Asearch%7Cquery_from%3A%7Cx_object_id%3A1005006147333965%7C_p_origin_prod%3A|Switch Aliexpress ( 14.95 euro pour 50 pièces)]&lt;br /&gt;
&lt;br /&gt;
2x [https://www.amazon.fr/dp/B0GRWRB35R?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;amp;crid=1A6WWK5JXXYDI&amp;amp;dib=eyJ2IjoiMSJ9.knTjQV522IT_x46yYmNW2g.yIdEmWsx71pRbn6RsO1Dsoph1vyoIyzvcLufmAX48M0&amp;amp;dib_tag=se&amp;amp;keywords=Kailh+Hotswap+Socket+CPG135001S30&amp;amp;qid=1773098978&amp;amp;s=computers&amp;amp;sprefix=kailh+hotswap+socket+cpg135001s30%2Ccomputers%2C439&amp;amp;sr=1-1|Hot-Swap_Kailh Amazon (6.38euro pour 20 pièces)]&lt;br /&gt;
&lt;br /&gt;
== Carte électronique ==&lt;br /&gt;
&lt;br /&gt;
Carte réalisée en utilisant le logiciel &amp;lt;code&amp;gt;KiCAD&amp;lt;/code&amp;gt; : [[File:2025-PSE-04-systeme.zip|ma carte électronique]]. &lt;br /&gt;
&lt;br /&gt;
Schéma électronique de la carte :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-systeme-schema.pdf|thumb|center|400px|Mon schéma électronique]]&lt;br /&gt;
&lt;br /&gt;
Résultat du routage :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-systeme-PCB.pdf|thumb|center|400px|Mon routage]]&lt;br /&gt;
&lt;br /&gt;
Photo de la carte soudée :&lt;br /&gt;
&lt;br /&gt;
[[File:2025_PSE-04-systeme-carte.jpg|thumb|center|400px|Ma carte]]&lt;br /&gt;
&lt;br /&gt;
Vidéo très courte et en basse résolution de la carte en fonctionnement :&lt;br /&gt;
&lt;br /&gt;
[[Média:2025-PSE-04-systeme-video.mp4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vidéo des LEDs RGB :&lt;br /&gt;
&lt;br /&gt;
[[Média:Wiki-video-rgb.mp4]]&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-21&amp;diff=11069</id>
		<title>Discussion:SE3Groupe2025-21</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-21&amp;diff=11069"/>
		<updated>2026-06-18T10:55:44Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 21/02/2026 : ok pour l'idée&lt;br /&gt;
* 24/03/2026 : schématique toujours pas terminée, un routage deconnecté du schéma ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 1OO %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 75 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 11/20&lt;br /&gt;
** PGM AVR : C : 66% , R : 90% , P : 25%, W : 50%&lt;br /&gt;
** Commentaire : programme de test LED compilé pour un ATmega328p ...&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-20&amp;diff=11068</id>
		<title>Discussion:SE3Groupe2025-20</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-20&amp;diff=11068"/>
		<updated>2026-06-18T10:54:27Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas d'idée clairement détaillée&lt;br /&gt;
* 24/03/2026 : corrections demandées non exécutées&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 50 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 8/20&lt;br /&gt;
** PGM AVR : C : 85%, R : 66%, P : 0%, W : 33%.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-19&amp;diff=11067</id>
		<title>Discussion:SE3Groupe2025-19</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-19&amp;diff=11067"/>
		<updated>2026-06-18T10:53:51Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 24/03/2026 : corrections schématiques non faites ? Un début de routage qui semble mal organisé&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 90 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 75 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 13/20&lt;br /&gt;
** PGM AVR : C : 85% , R : 85% , P : 40% , W : 75%&lt;br /&gt;
** Commentaire : programmes OK pour LED et boutons, vidéos attenantes, rien sur la programmation AVR&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-19&amp;diff=11066</id>
		<title>Discussion:SE3Groupe2025-19</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-19&amp;diff=11066"/>
		<updated>2026-06-18T10:53:17Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 24/03/2026 : corrections schématiques non faites ? Un début de routage qui semble mal organisé&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 90 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 75 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR :&lt;br /&gt;
** PGM AVR : C : 85% , R : 85% , P : 40% , W : 75%&lt;br /&gt;
** Commentaire : programmes OK pour LED et boutons, vidéos attenantes, rien sur la programmation AVR&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-18&amp;diff=11065</id>
		<title>Discussion:SE3Groupe2025-18</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-18&amp;diff=11065"/>
		<updated>2026-06-18T10:52:45Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 24/03/2026 : encore des corrections à effectuer&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 90 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 100 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 75 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 6/20&lt;br /&gt;
** PGM AVR : C : 60%, R : 33% , P : 10% , W : 25%&lt;br /&gt;
** Commentaire : peine à la conception, carte non fonctionnelle, pas de schéma, un programme de test LED/boutons avec des broches pour les LED qui ne correspondent pas à la carte.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-17&amp;diff=11064</id>
		<title>Discussion:SE3Groupe2025-17</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-17&amp;diff=11064"/>
		<updated>2026-06-18T10:51:50Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 21/02/2026 : ok idée, pas du tout dans la bonne partie du wiki&lt;br /&gt;
* 24/03/2026 : git vide&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 90 %&lt;br /&gt;
** assemblage : 100 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 75 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 25 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 6/20&lt;br /&gt;
** PGM AVR : C : 66%, R : 33%, P : 0%, W : 33%&lt;br /&gt;
** Commentaire : conception tardive, pas de photo de la carte réalisée, a priori non fonctionnelle, aucun programme trouvé sur le Wiki ou le GIT&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-16&amp;diff=11063</id>
		<title>Discussion:SE3Groupe2025-16</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-16&amp;diff=11063"/>
		<updated>2026-06-18T10:50:50Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : ok pour idée, à étoffer un peu&lt;br /&gt;
* 24/03/2026 : encore des modifications schématique à faire&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 0 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 0 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 4/20&lt;br /&gt;
** PGM AVR : C : 90%, R : 0%, P : 0%, W : 10%&lt;br /&gt;
** Commentaire : aucune photo de la carte soudée, pas de vidéos, plus généralement le Wiki ne contient rien sur le programmeur&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-15&amp;diff=11062</id>
		<title>Discussion:SE3Groupe2025-15</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-15&amp;diff=11062"/>
		<updated>2026-06-18T10:49:41Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 24/03/2026 : les corrections demandées ne sont pas faite, un PCB sans rapport ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 50 %&lt;br /&gt;
** assemblage : 50 %&lt;br /&gt;
** code C : 25 %&lt;br /&gt;
** tests / mise au point : 50 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 11/20&lt;br /&gt;
** PGM AVR : C : 85%, R : 66%, P : 33%, W : 50%&lt;br /&gt;
** Commentaire : aucune vidéo de démonstration des programmes de test, pour le projet LUFA, utiliser PC1 comme reset de la cible va marcher moyen, le programme libusb n'affiche rien&lt;br /&gt;
** Commentaire : courriel envoyé pour demander au binôme de s'expliquer sur l'absence de preuve de fonctionnement.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-14&amp;diff=11061</id>
		<title>Discussion:SE3Groupe2025-14</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-14&amp;diff=11061"/>
		<updated>2026-06-18T10:48:14Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[file:2025-PSE-GXX-PCB.png]]&lt;br /&gt;
&lt;br /&gt;
* 17/02/2026 : ok, si utilisation de ressources externes, ne pas hésiter à sourcer&lt;br /&gt;
* 34/03/2026 : schématique OK&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 25 %&lt;br /&gt;
** assemblage : 50 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 100 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 5/20&lt;br /&gt;
** PGM AVR : C : 60%, R : 50%, P : 0%, W : 10%&lt;br /&gt;
** Commentaire : conception bien tardive, aide massive pour la réalisation,  a priori aucun programme&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-13&amp;diff=11060</id>
		<title>Discussion:SE3Groupe2025-13</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-13&amp;diff=11060"/>
		<updated>2026-06-18T10:46:58Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : Pas de description du système embarqué&lt;br /&gt;
* 17/02/2026 : une description trop sommaire pour juger&lt;br /&gt;
* 23/03/2026 : des correction schématique, PCB routé mais de nombreuses corrections à effectuer&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 50 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage :  75 %&lt;br /&gt;
** code C : 0 %&lt;br /&gt;
** tests / mise au point : 0 %&lt;br /&gt;
** wiki : 10 %&lt;br /&gt;
** gestion projet (avancée régulière) :  100 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 6/20&lt;br /&gt;
** PGM AVR : C : 100%, R : 33%, P : 0%, W : 10%&lt;br /&gt;
** Commentaire : photo d'une carte incomplétement soudée, aucune vidéo de démonstration&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-12&amp;diff=11059</id>
		<title>Discussion:SE3Groupe2025-12</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-12&amp;diff=11059"/>
		<updated>2026-06-18T10:45:46Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 24/03/2026 : le git est dans un état déplorable, de nombreuses corrections sur le shématique dans /hardware&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 10 %&lt;br /&gt;
** routage : 10 %&lt;br /&gt;
** assemblage : 0 %&lt;br /&gt;
** code C : 0 %&lt;br /&gt;
** tests / mise au point : 0 %&lt;br /&gt;
** wiki : 0 %&lt;br /&gt;
** gestion projet (avancée régulière) : 0 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 2/20&lt;br /&gt;
** PGM AVR : C : 33%, R : 0%, P : 0%, W : 10%.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-11&amp;diff=11058</id>
		<title>Discussion:SE3Groupe2025-11</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-11&amp;diff=11058"/>
		<updated>2026-06-18T10:45:01Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[FIle:2025-PSE-11-PROG.zip]]&lt;br /&gt;
&lt;br /&gt;
* 17/02/2026 : Pas de description du système embarqué&lt;br /&gt;
* 21/02/2026 : ok idée, il va falloir limiter le nombre de chose à réaliser, là c'est trop vous courrez à l'échec&lt;br /&gt;
* 24/03/2026 : schématique carte principale OK, une correction à faire sur récepteur&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 100 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 100 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 6/20&lt;br /&gt;
** PGM AVR : C : 66%, R : 50%, P : 0%, W : 25%.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-10&amp;diff=11057</id>
		<title>Discussion:SE3Groupe2025-10</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-10&amp;diff=11057"/>
		<updated>2026-06-18T10:44:07Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : Pas de descritpion du système embarqué -  en fait si, mais à un autre endroit&lt;br /&gt;
* 25/02/2026 : première version schématique, quelques erreur à corriger&lt;br /&gt;
* 24/03/2026 : correction schématique à effectuer, deux projets qui semblent identiques ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 90 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 90 %&lt;br /&gt;
** wiki : 75 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 15/20&lt;br /&gt;
** PGM AVR : C : 90%, R : 90%, P : 66%, W : 66%&lt;br /&gt;
** Commentaire : pas de vidéo de démonstration sur la partie programmation AVR mais un brave projet LUFA plutôt bien parti, le programme libusb est dans les limbes&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-9&amp;diff=11056</id>
		<title>Discussion:SE3Groupe2025-9</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-9&amp;diff=11056"/>
		<updated>2026-06-18T10:43:08Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : idée ok&lt;br /&gt;
* 24/03/2026 : git semble vide ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 50 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 25 %&lt;br /&gt;
** tests / mise au point : 50 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 7/20&lt;br /&gt;
** PGM AVR : C : 75%, R : 85%, P : 0%, W : 15%.&lt;br /&gt;
** Commentaire : amusant pour le programmateur AVR les vidéos ne correspondent pas à la carte du binôme mais les noms apparents sont bien forcés à B9.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-8&amp;diff=11055</id>
		<title>Discussion:SE3Groupe2025-8</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-8&amp;diff=11055"/>
		<updated>2026-06-18T10:41:46Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du projet&lt;br /&gt;
* 24/03/2026 : problème de git ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 25 %&lt;br /&gt;
** routage : 25 %&lt;br /&gt;
** assemblage : 25 %&lt;br /&gt;
** code C : 25 %&lt;br /&gt;
** tests / mise au point : 50 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 25 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 7/20&lt;br /&gt;
** PGM AVR : C : 85%, R : 66%, P : 0%, W : 25%&lt;br /&gt;
** Commentaire : Le Wiki n'a pas été utilisé comme demandé. Toutes les modifications datent du 14 juin. Concernant le programmateur AVR, des programmes apparaissent le 14 juin :&lt;br /&gt;
*** les programmes ne correspondent pas au schéma (LED sur d'autres broches, idem pour la commande du reset) ;&lt;br /&gt;
*** aucune vidéo de démonstration.&lt;br /&gt;
** Commentaire : Dans ces conditions ces programmes ne peuvent pas être pris en compte.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-7&amp;diff=11054</id>
		<title>Discussion:SE3Groupe2025-7</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-7&amp;diff=11054"/>
		<updated>2026-06-18T10:40:03Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : idée ok&lt;br /&gt;
* 24/03/2026 : schématiques miniclavier et récepteur ok&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 25 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 25 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 5/20&lt;br /&gt;
** PGM AVR : C : 75%, R : 25%, P : 0%, W : 25%&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-2&amp;diff=11053</id>
		<title>Discussion:SE3Groupe2025-2</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-2&amp;diff=11053"/>
		<updated>2026-06-18T10:39:36Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : vue l'application pourquoi un écran ? Deux / trois servos qui bougent des yeux et une bouche ?&lt;br /&gt;
* 24/03/2026 : schématique non corrigée ? PCB en cours ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 90 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 100 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75%&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 19/20&lt;br /&gt;
** PGM AVR : C : 85%, R : 75%, P : 100%, W : 100%&lt;br /&gt;
** Commentaire : exceptionnel !!&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-6&amp;diff=11052</id>
		<title>Discussion:SE3Groupe2025-6</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-6&amp;diff=11052"/>
		<updated>2026-06-18T10:39:24Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : prévoir possibilité de sauvegarder les données par USB&lt;br /&gt;
* 25/02/2026 : première version schématique, quelques erreur à corriger&lt;br /&gt;
* 24/03/2026 : PCB routé, quelques corrections à effectuer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 100 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 90 %&lt;br /&gt;
** gestion projet (avancée régulière) : 100 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 18/20&lt;br /&gt;
** PGM AVR : C : 90% , R : 100% , P : 90% , W : 66%&lt;br /&gt;
** Commentaire : excellent mais manque la démonstration de la signature et le Wiki est trop léger par rapport au travail&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-4&amp;diff=11051</id>
		<title>Discussion:SE3Groupe2025-4</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-4&amp;diff=11051"/>
		<updated>2026-06-18T10:39:00Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : ok idée&lt;br /&gt;
* 24/03/2026 : Kicad trop récent, pas possible de regarder&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 100 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 6/20 (note temporaire)&lt;br /&gt;
** PGM AVR : C : 85% , R : ? , P : 0%, W : 10%&lt;br /&gt;
** Commentaire : courriel pour demander au binôme l'état de la réalisation&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-2&amp;diff=11050</id>
		<title>Discussion:SE3Groupe2025-2</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-2&amp;diff=11050"/>
		<updated>2026-06-18T10:38:40Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : vue l'application pourquoi un écran ? Deux / trois servos qui bougent des yeux et une bouche ?&lt;br /&gt;
* 24/03/2026 : schématique non corrigée ? PCB en cours ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 90 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 100 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75%&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 19/20&lt;br /&gt;
** PGM AVR : C : 85%, R : 75%, P : 100%, W : 100%&lt;br /&gt;
** Commentaire : Exceptionnel !!&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-6&amp;diff=11049</id>
		<title>Discussion:SE3Groupe2025-6</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-6&amp;diff=11049"/>
		<updated>2026-06-18T10:37:52Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : prévoir possibilité de sauvegarder les données par USB&lt;br /&gt;
* 25/02/2026 : première version schématique, quelques erreur à corriger&lt;br /&gt;
* 24/03/2026 : PCB routé, quelques corrections à effectuer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 100 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 90 %&lt;br /&gt;
** gestion projet (avancée régulière) : 100 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 18/20&lt;br /&gt;
** PGM AVR : C : 90% , R : 100% , P : 90% , W : 66% / Excellent mais manque la démonstration de la signature et le Wiki est trop léger par rapport au travail&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-4&amp;diff=11048</id>
		<title>Discussion:SE3Groupe2025-4</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-4&amp;diff=11048"/>
		<updated>2026-06-18T10:36:46Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : ok idée&lt;br /&gt;
* 24/03/2026 : Kicad trop récent, pas possible de regarder&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 100 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 6/20 (note temporaire)&lt;br /&gt;
** PGM AVR : C : 85% , R : ? , P : 0%, W : 10% / courriel pour demander au binôme l'état de la réalisation&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-3&amp;diff=11047</id>
		<title>Discussion:SE3Groupe2025-3</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-3&amp;diff=11047"/>
		<updated>2026-06-18T10:35:26Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : ok idée&lt;br /&gt;
* 24/03/2026 : corrections schématiques demandées non effectuées&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 25 %&lt;br /&gt;
** routage : 25 %&lt;br /&gt;
** assemblage : 25 %&lt;br /&gt;
** code C : 10%&lt;br /&gt;
** tests / mise au point : 10 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 25 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 1/20&lt;br /&gt;
** PGM AVR : C : 10%, R : 0%, P : 0%, W : 0%&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-2&amp;diff=11046</id>
		<title>Discussion:SE3Groupe2025-2</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-2&amp;diff=11046"/>
		<updated>2026-06-18T10:34:31Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : vue l'application pourquoi un écran ? Deux / trois servos qui bougent des yeux et une bouche ?&lt;br /&gt;
* 24/03/2026 : schématique non corrigée ? PCB en cours ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 90 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 100 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75%&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 19/20&lt;br /&gt;
** PGM AVR : C : 85%, R : 75%, P : 100%, W : 100% / Exceptionnel !!&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-1&amp;diff=11045</id>
		<title>Discussion:SE3Groupe2025-1</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-1&amp;diff=11045"/>
		<updated>2026-06-18T10:33:25Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : ajouter des Leds façon vu-mètre pour donnerune indication ?&lt;br /&gt;
* 03/03/2026 : wiki non rempli, schématique pas commencée&lt;br /&gt;
* 24/03/2026 : beaucoup de corrections sur schématique&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 75 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 50 %&lt;br /&gt;
** code C : 0 %&lt;br /&gt;
** tests / mise au point : 10 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
* Note PGM AVR : 7/20&lt;br /&gt;
** PGM AVR -&amp;gt; C : 75% , R : 66%, P : 0%, W : 25%&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-15&amp;diff=11044</id>
		<title>Discussion:SE3Groupe2025-15</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-15&amp;diff=11044"/>
		<updated>2026-06-18T10:22:53Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 24/03/2026 : les corrections demandées ne sont pas faite, un PCB sans rapport ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 50 %&lt;br /&gt;
** assemblage : 50 %&lt;br /&gt;
** code C : 25 %&lt;br /&gt;
** tests / mise au point : 50 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 85%, R : 66%, P : 33%, W : 50% / Aucune vidéo de démonstration des programmes de test, pour le projet LUFA, utiliser PC1 comme reset de la cible va marcher moyen, le programme libusb n'affiche rien&lt;br /&gt;
&lt;br /&gt;
Courriel envoyé pour demander au binôme de s'expliquer sur l'absence de preuve de fonctionnement.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-14&amp;diff=11043</id>
		<title>Discussion:SE3Groupe2025-14</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-14&amp;diff=11043"/>
		<updated>2026-06-18T09:58:40Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[file:2025-PSE-GXX-PCB.png]]&lt;br /&gt;
&lt;br /&gt;
* 17/02/2026 : ok, si utilisation de ressources externes, ne pas hésiter à sourcer&lt;br /&gt;
* 34/03/2026 : schématique OK&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 25 %&lt;br /&gt;
** assemblage : 50 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 100 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 60%, R : 50%, P : 0%, W : 10% / Conception bien tardive, aide massive pour la réalisation,  a priori aucun programme&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-13&amp;diff=11042</id>
		<title>Discussion:SE3Groupe2025-13</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-13&amp;diff=11042"/>
		<updated>2026-06-18T09:55:18Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : Pas de description du système embarqué&lt;br /&gt;
* 17/02/2026 : une description trop sommaire pour juger&lt;br /&gt;
* 23/03/2026 : des correction schméatique, PCB routé mais de nombreuses corrections à effectuer&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 50 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage :  75 %&lt;br /&gt;
** code C : 0 %&lt;br /&gt;
** tests / mise au point : 0 %&lt;br /&gt;
** wiki : 10 %&lt;br /&gt;
** gestion projet (avancée régulière) :  100 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 100%, R : 33%, P : 0%, W : 10% / Photo d'une carte incomplétement soudée, aucune vidéo de démonstration&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-16&amp;diff=11040</id>
		<title>Discussion:SE3Groupe2025-16</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-16&amp;diff=11040"/>
		<updated>2026-06-18T09:51:24Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : ok pour idée, à étoffer un peu&lt;br /&gt;
* 24/03/2026 : encore des modifications schématique à faire&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 0 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 0 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 90%, R : 0%, P : 0%, W : 10% / Aucune photo de la carte soudée, pas de vidéos, plus généralement le Wiki ne contient rien sur le programmeur&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-17&amp;diff=11039</id>
		<title>Discussion:SE3Groupe2025-17</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-17&amp;diff=11039"/>
		<updated>2026-06-18T09:46:27Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 21/02/2026 : ok idée, pas du tout dans la bonne partie du wiki&lt;br /&gt;
* 24/03/2026 : git vide&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 90 %&lt;br /&gt;
** assemblage : 100 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 75 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 25 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 66%, R : 33%, P : 0%, W : 33% / Conception tardive, pas de photo de la carte réalisée, a priori non fonctionnelle, aucun programme trouvé sur le Wiki ou le GIT&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-18&amp;diff=11037</id>
		<title>Discussion:SE3Groupe2025-18</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-18&amp;diff=11037"/>
		<updated>2026-06-18T09:40:19Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 24/03/2026 : encore des corrections à effectuer&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 90 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 100 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 75 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 60%, R : 33% , P : 10% , W : 25% / Peine à la conception, carte non fonctionnelle, pas de schéma, un programme de test LED/boutons avec des broches pour les LED qui ne correspondent pas à la carte.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-19&amp;diff=11035</id>
		<title>Discussion:SE3Groupe2025-19</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-19&amp;diff=11035"/>
		<updated>2026-06-18T09:31:37Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 24/03/2026 : corrections schématiques non faites ? Un début de routage qui semble mal organisé&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : %&lt;br /&gt;
** routage : %&lt;br /&gt;
** assemblage : %&lt;br /&gt;
** code C : %&lt;br /&gt;
** tests / mise au point : %&lt;br /&gt;
** wiki : %&lt;br /&gt;
** gestion projet (avancée régulière) : %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 85% , R : 85% , P : 40% , W : 75% / Programmes OK pour LED et boutons, vidéos attenantes, rien sur la programmation AVR&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-12&amp;diff=11028</id>
		<title>Discussion:SE3Groupe2025-12</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-12&amp;diff=11028"/>
		<updated>2026-06-18T08:37:19Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 24/03/2026 : le git est dans un état déplorable, de nombreuses corrections sur le shématique dans /hardware&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 10 %&lt;br /&gt;
** routage : 10 %&lt;br /&gt;
** assemblage : 0 %&lt;br /&gt;
** code C : 0 %&lt;br /&gt;
** tests / mise au point : 0 %&lt;br /&gt;
** wiki : 0 %&lt;br /&gt;
** gestion projet (avancée régulière) : 0 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 33%, R : 0%, P : 0%, W : 10%.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-20&amp;diff=11026</id>
		<title>Discussion:SE3Groupe2025-20</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-20&amp;diff=11026"/>
		<updated>2026-06-18T08:35:27Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas d'idée clairement détaillée&lt;br /&gt;
* 24/03/2026 : corrections demandées non exécutées&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : %&lt;br /&gt;
** routage : %&lt;br /&gt;
** assemblage : %&lt;br /&gt;
** code C : %&lt;br /&gt;
** tests / mise au point : %&lt;br /&gt;
** wiki : %&lt;br /&gt;
** gestion projet (avancée régulière) : %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 85%, R : 66%, P : 0%, W : 33%.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-21&amp;diff=11025</id>
		<title>Discussion:SE3Groupe2025-21</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-21&amp;diff=11025"/>
		<updated>2026-06-18T08:33:33Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du système embarqué&lt;br /&gt;
* 21/02/2026 : ok pour l'idée&lt;br /&gt;
* 24/03/2026 : schématique toujours pas terminée, un routage deconnecté du schéma ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : %&lt;br /&gt;
** routage : %&lt;br /&gt;
** assemblage : %&lt;br /&gt;
** code C : %&lt;br /&gt;
** tests / mise au point : %&lt;br /&gt;
** wiki : %&lt;br /&gt;
** gestion projet (avancée régulière) : %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 66% , R : 90% , P : 25%, W : 50% / Programme de test LED compilé pour un ATmega328p ...&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-10&amp;diff=11022</id>
		<title>Discussion:SE3Groupe2025-10</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-10&amp;diff=11022"/>
		<updated>2026-06-18T08:19:53Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : Pas de descritpion du système embarqué -  en fait si, mais à un autre endroit&lt;br /&gt;
* 25/02/2026 : première version schématique, quelques erreur à corriger&lt;br /&gt;
* 24/03/2026 : correction schématique à effectuer, deux projets qui semblent identiques ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 90 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 90 %&lt;br /&gt;
** wiki : 75 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 90%, R : 90%, P : 66%, W : 66% / Pas de vidéo de démonstration sur la partie programmation AVR mais un brave projet LUFA plutôt bien parti, le programme libusb est dans les limbes&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-9&amp;diff=11021</id>
		<title>Discussion:SE3Groupe2025-9</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-9&amp;diff=11021"/>
		<updated>2026-06-18T08:19:33Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : idée ok&lt;br /&gt;
* 24/03/2026 : git semble vide ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 50 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 25 %&lt;br /&gt;
** tests / mise au point : 50 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 75%, R : 85%, P : 0%, W : 15%.&lt;br /&gt;
&lt;br /&gt;
Amusant pour le programmateur AVR les vidéos ne correspondent pas à la carte du binômes mais les noms apparents sont bien forcés à B9.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-7&amp;diff=11020</id>
		<title>Discussion:SE3Groupe2025-7</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-7&amp;diff=11020"/>
		<updated>2026-06-18T08:19:08Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : idée ok&lt;br /&gt;
* 24/03/2026 : schématiques miniclavier et récepteur ok&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 25 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 25 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 75%, R : 25%, P : 0%, W : 25%&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-4&amp;diff=11019</id>
		<title>Discussion:SE3Groupe2025-4</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-4&amp;diff=11019"/>
		<updated>2026-06-18T08:18:52Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : ok idée&lt;br /&gt;
* 24/03/2026 : Kicad trop récent, pas possible de regarder&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 100 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 85% , R : , P : 0%, W : 10% / courriel pour demander au binôme l'état de la réalisation&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-1&amp;diff=11018</id>
		<title>Discussion:SE3Groupe2025-1</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-1&amp;diff=11018"/>
		<updated>2026-06-18T08:18:36Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : ajouter des Leds façon vu-mètre pour donnerune indication ?&lt;br /&gt;
* 03/03/2026 : wiki non rempli, schématique pas commencée&lt;br /&gt;
* 24/03/2026 : beaucoup de corrections sur schématique&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 75 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 50 %&lt;br /&gt;
** code C : 0 %&lt;br /&gt;
** tests / mise au point : 10 %&lt;br /&gt;
** wiki : 25 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
* PGM AVR -&amp;gt; C : 75% , R : 66%, P : 0%, W : 25%&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-11&amp;diff=11017</id>
		<title>Discussion:SE3Groupe2025-11</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-11&amp;diff=11017"/>
		<updated>2026-06-18T08:17:17Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[FIle:2025-PSE-11-PROG.zip]]&lt;br /&gt;
&lt;br /&gt;
* 17/02/2026 : Pas de description du système embarqué&lt;br /&gt;
* 21/02/2026 : ok idée, il va falloir limiter le nombre de chose à réaliser, là c'est trop vous courrez à l'échec&lt;br /&gt;
* 24/03/2026 : schématique carte principale OK, une correction à faire sur récepteur&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : %&lt;br /&gt;
** routage : %&lt;br /&gt;
** assemblage : %&lt;br /&gt;
** code C : %&lt;br /&gt;
** tests / mise au point : %&lt;br /&gt;
** wiki : %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 66%, R : 50%, P : 0%, W : 25%.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-10&amp;diff=11016</id>
		<title>Discussion:SE3Groupe2025-10</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-10&amp;diff=11016"/>
		<updated>2026-06-18T08:11:56Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : Pas de descritpion du système embarqué -  en fait si, mais à un autre endroit&lt;br /&gt;
* 25/02/2026 : première version schématique, quelques erreur à corriger&lt;br /&gt;
* 24/03/2026 : correction schématique à effectuer, deux projets qui semblent identiques ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 90 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 90 %&lt;br /&gt;
** wiki : 75 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 90%, R : 90%, P : 66%, W : 75% / Pas de vidéo de démonstration sur la partie programmation AVR mais un brave projet LUFA plutôt bien parti, le programme libusb est dans les limbes&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-10&amp;diff=11015</id>
		<title>Discussion:SE3Groupe2025-10</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-10&amp;diff=11015"/>
		<updated>2026-06-18T08:11:22Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : Pas de descritpion du système embarqué -  en fait si, mais à un autre endroit&lt;br /&gt;
* 25/02/2026 : première version schématique, quelques erreur à corriger&lt;br /&gt;
* 24/03/2026 : correction schématique à effectuer, deux projets qui semblent identiques ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 90 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 90 %&lt;br /&gt;
** wiki : 75 %&lt;br /&gt;
** gestion projet (avancée régulière) : 75 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 90%, R : 90%, P : 66%, W : 75% / Pas de vidéo de démonstration sur la partie programmation AVR mais un projet LUFA plutôt bien parti, le programme libusb est dans les limbes&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-9&amp;diff=11014</id>
		<title>Discussion:SE3Groupe2025-9</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-9&amp;diff=11014"/>
		<updated>2026-06-18T08:05:29Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : idée ok&lt;br /&gt;
* 24/03/2026 : git semble vide ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 50 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 25 %&lt;br /&gt;
** tests / mise au point : 50 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 75%, R : 85%, P : 0%, W : 25%.&lt;br /&gt;
&lt;br /&gt;
Amusant pour le programmateur AVR les vidéos ne correspondent pas à la carte du binômes mais les noms apparents sont bien forcés à B9.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-8&amp;diff=11013</id>
		<title>Discussion:SE3Groupe2025-8</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-8&amp;diff=11013"/>
		<updated>2026-06-18T08:00:52Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : pas de description du projet&lt;br /&gt;
* 24/03/2026 : problème de git ?&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 25 %&lt;br /&gt;
** routage : 25 %&lt;br /&gt;
** assemblage : 25 %&lt;br /&gt;
** code C : 25 %&lt;br /&gt;
** tests / mise au point : 50 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 25 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 85%, R : 66%, P : 0%, W : 25%&lt;br /&gt;
&lt;br /&gt;
Le Wiki n'a pas été utilisé comme demandé. Toutes les modifications datent du 14 juin.&lt;br /&gt;
Concernant le programmateur AVR, des programmes apparaissent le 14 juin :&lt;br /&gt;
* les programmes ne correspondent pas au schéma (LED sur d'autres broches, idem pour la commande du reset) ;&lt;br /&gt;
* aucune vidéo de démonstration.&lt;br /&gt;
Dans ces conditions ces programmes ne peuvent pas être pris en compte.&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-7&amp;diff=11012</id>
		<title>Discussion:SE3Groupe2025-7</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-7&amp;diff=11012"/>
		<updated>2026-06-18T06:59:19Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : idée ok&lt;br /&gt;
* 24/03/2026 : schématiques miniclavier et récepteur ok&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 75 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 50 %&lt;br /&gt;
** tests / mise au point : 25 %&lt;br /&gt;
** wiki : 50 %&lt;br /&gt;
** gestion projet (avancée régulière) : 25 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 75%, R : 25%, P : 0%, W : 50%&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-6&amp;diff=11011</id>
		<title>Discussion:SE3Groupe2025-6</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-6&amp;diff=11011"/>
		<updated>2026-06-18T06:56:22Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : prévoir possibilité de sauvegarder les données par USB&lt;br /&gt;
* 25/02/2026 : première version schématique, quelques erreur à corriger&lt;br /&gt;
* 24/03/2026 : PCB routé, quelques corrections à effectuer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 100 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 90 %&lt;br /&gt;
** gestion projet (avancée régulière) : 100 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 90% , R : 100% , P: 90% : , W : 66% / Excellent mais manque la démonstration de la signature et le Wiki est trop léger par rapport au travail&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
	<entry>
		<id>https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-4&amp;diff=11010</id>
		<title>Discussion:SE3Groupe2025-4</title>
		<link rel="alternate" type="text/html" href="https://projets-se.plil.fr/mediawiki/index.php?title=Discussion:SE3Groupe2025-4&amp;diff=11010"/>
		<updated>2026-06-18T06:50:40Z</updated>

		<summary type="html">&lt;p&gt;Rex : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* 17/02/2026 : ok idée&lt;br /&gt;
* 24/03/2026 : Kicad trop récent, pas possible de regarder&lt;br /&gt;
&lt;br /&gt;
* Note :&lt;br /&gt;
** schématique : 100 %&lt;br /&gt;
** routage : 100 %&lt;br /&gt;
** assemblage : 75 %&lt;br /&gt;
** code C : 100 %&lt;br /&gt;
** tests / mise au point : 100 %&lt;br /&gt;
** wiki : 100 %&lt;br /&gt;
** gestion projet (avancée régulière) : 50 %&lt;br /&gt;
&lt;br /&gt;
PGM AVR : C : 85% , R : , P : 0%, W : 25% / courriel pour demander au binôme l'état de la réalisation&lt;/div&gt;</summary>
		<author><name>Rex</name></author>
	</entry>
</feed>