SE3Groupe2025-15
Programmation des systèmes embarqués
Cette page est un exemple. N'oubliez pas de remplacer BB par votre numéro de binôme dans tous les noms de documents. Cliquez simplement sur le lien rouge pour téléverser un document.
Carte électronique
Carte réalisée en utilisant le logiciel KiCAD : Fichier:2025-pse-b15-prog.zip.
Schéma électronique de la carte :
Résultat du routage :
Vue 3D de la carte :
Photo de la carte soudée :
Vidéo très courte et en basse résolution de la carte en fonctionnement :
Programmation
1. led.c
Programme de test des LED.
Les broches PC5 et PC6 sont configurées en sortie et les LED clignotent afin de vérifier le bon fonctionnement de la carte.
Compilation
avr-gcc -mmcu=atmega16u2 -DF_CPU=16000000UL -Os led.c -o led.elf
avr-objcopy -O ihex led.elf led.hex
2. bouton_led.c
Programme de test des boutons et des LED.
PD1 → bouton B1 → LED1 (PC5)
PD0 → bouton B2 → LED2 (PC6)
Compilation
avr-gcc -mmcu=atmega16u2 -DF_CPU=16000000UL -Os bouton_led.c -o bouton_led.elf
avr-objcopy -O ihex bouton_led.elf bouton_led.hex
3. pc_libusb.c
Programme exécuté sur le PC utilisant libusb pour communiquer avec le périphérique USB.
4. usb_programmer
Structure du projet
usb_programmer/
│
├── GenericHID.c
├── GenericHID.h
├── Descriptors.c
├── Descriptors.h
├── makefile
│
├── Config/
│ └── AppConfig.h
│
├── LUFA/
│
├── pc_libusb.c
├── led/
│ └── led.c
│ └── bouton_led.c
│ └── pc_libusb.c
Partie microcontrôleur (ATmega16u2)
Fichiers utilisés
GenericHID.c
GenericHID.h
Descriptors.c
Descriptors.h
makefile
Rôle des fichiers
Ces fichiers servent à créer le périphérique USB du programmeur.
Firmware
- initialise USB
- initialise SPI (ISP)
- initialise RESET cible
- initialise les LEDs
Périphérique USB
- endpoint OUT
- endpoint IN
Réception des commandes
Le firmware reçoit les commandes du PC via l’endpoint OUT.
Commandes ISP
| Commande | Fonction |
|---|---|
| LED | test LED |
| 0x10 | lire signature AVR |
| 0x20 | lire flash |
| 0x30 | charger page flash |
| 0x31 | écrire page flash |
Réponse
Le firmware renvoie les réponses via l’endpoint IN.
Partie PC
Fichier
pc_libusb.c
Compilation
gcc pc_libusb.c -o pc_libusb -lusb-1.0
Rôle
Le programme PC :
- ouvre le périphérique USB
- utilise le VID 0x03EB
- utilise le PID 0x204F
- envoie les commandes avec libusb_interrupt_transfer
- reçoit les réponses via l’endpoint IN
Fonctionnement global
Architecture finale
PC
↓
libusb
↓
USB
↓
ATmega16u2
↓
SPI
↓
AVR cible
↓
connecteur ISP
Tests réalisés
✔ test LED avec firmware simple
✔ passage en DFU (lsusb)
✔ DFU bootloader détecté
✔ firmware LUFA : création du périphérique USB
✔ endpoint IN / OUT via LUFA
✔ programme PC avec libusb
✔ lecture signature AVR via SPI ISP
✔ lecture flash cible par commande ISP
✔ écriture flash cible par commande ISP
Compilation finale
make produit :
GenericHID.hex
Flash du microcontrôleur
dfu-programmer atmega16u2 erase
dfu-programmer atmega16u2 flash GenericHID.hex
dfu-programmer atmega16u2 reset
Bilan
Le projet a été réalisé sur 5 séances.
Séance 1
Conception du schéma électronique et routage de la carte PCB sous KiCad.
Séance 2
Développement du programme pc_libusb.c permettant la communication USB entre le PC et le périphérique.
Séance 3
Soudage des composants sur la carte (microcontrôleur, résistances, condensateurs, LED, connecteurs).
Séance 4
Vérification des soudures et préparation de la programmation du microcontrôleur.
Séance 5
Test de la carte.
Ajout de deux programmes de test :
led.c
test du clignotement des LED
bouton_led.c
test des boutons et des LED
Cependant, les tests complets n'ont pas pu être réalisés car le câble adaptateur pour la programmation ne fonctionnait pas correctement.
Vidéo
Eventuellement la vidéo brève du fonctionnement complet du programmateur :
Média:2025-PSE-BB-PROG-final.mp4.
Premier système embarqué
Archive GIT
Mon archive GIT pour le projet KiCAD et pour les programmes : [1].
Archive privée. Binôme comme administrateur. Boé et Redon comme administrateur.
Ajouter un .gitignore pour KiCAD et langage C.
Structure avec matériel (y compris production - gerber, bill of materials) / logiciel / documentation (e.g. documentation technique).
Description du système embarqué
Ce projet consiste à concevoir et réaliser une carte électronique permettant la communication NFC (Near Field Communication) à l’aide du circuit PN532. Le système est piloté par un microcontrôleur ATmega8U2, qui gère la communication avec le PN532 et permet l’échange de données avec un ordinateur via USB.
Le PN532 est un contrôleur NFC capable de lire et d’écrire des cartes ou des tags compatibles (par exemple les cartes Mifare). Pour fonctionner correctement, il nécessite un circuit spécifique comprenant notamment une antenne NFC, un circuit de matching RF, un quartz, ainsi qu’une alimentation stable en 3.3V.
Dans notre projet, le PN532 est configuré en mode SPI, ce qui permet une communication rapide avec le microcontrôleur. Les signaux principaux utilisés sont MOSI, MISO, SCK, NSS et IRQ.
Carte électronique
Carte réalisée en utilisant le logiciel KiCAD : Fichier:2025-PSE-15-systeme.zip.
Schéma électronique de la carte :
Résultat du routage :
Photo de la carte soudée :
Vidéo très courte et en basse résolution de la carte en fonctionnement :
Travail effectué
Ce projet nous a permis de concevoir et de réaliser une carte électronique basée sur un microcontrôleur ATmega32U4 et un contrôleur NFC PN532. Nous avons réalisé le schéma électronique, le routage du PCB, puis l'assemblage et la soudure des composants.
Éléments validés
✔ Programmation du microcontrôleur via ISP fonctionnelle.
✔ Mode DFU opérationnel.
✔ Exécution correcte des programmes de test sur l’ATmega32U4.
✔ Fonctionnement des LEDs validé.
✔ Circuit de charge de la batterie testé et validé.
✔ Batterie testée et fonctionnelle.
Problème rencontré
Lors des essais du PN532, nous avons rencontré un problème d'alimentation.
Après analyse du schéma et des mesures réalisées sur la carte, nous avons constaté que le contrôleur NFC ne recevait pas la tension de 3,3 V nécessaire à son fonctionnement.
L'origine du problème semble provenir de l'étage de régulation/alimentation de cette partie du circuit.
Conséquences
✘ Fonctionnement complet du PN532 non validé.
✘ Tests de lecture de badges NFC non réalisés.
État du projet à la fin des séances
La carte électronique est assemblée et plusieurs sous-ensembles ont été validés avec succès (microcontrôleur, LEDs, batterie et chargeur). Le principal problème restant concerne l'alimentation du PN532, qui empêche actuellement la validation complète de la partie NFC.
programe led
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB |= (1 << PB4) | (1 << PB5);
while (1)
{
PORTB |= (1 << PB4);
PORTB &= ~(1 << PB5);
_delay_ms(80);
PORTB &= ~(1 << PB4);
PORTB |= (1 << PB5);
_delay_ms(80);
}
}
Bilan
Séance 1 : Recherche et compréhension du projet
Pendant la première séance, nous avons commencé par comprendre le projet et analyser les composants principaux.
Nous avons :
étudié le fonctionnement général du projet ;
recherché la documentation du PN532 et de l’ATmega8U2 ;
analysé un schéma de référence existant afin de comprendre l’architecture générale de la carte.
Séance 2 : Intégration du PN532 dans notre carte
Pendant cette séance, nous avons travaillé sur l’intégration du PN532 dans notre schéma.
Nous avons :
étudié le schéma de référence du PN532 pour comprendre son fonctionnement ;
sélectionné les parties importantes à conserver (antenne, circuit de matching, quartz, alimentation) ;
supprimé les parties liées à Arduino qui ne sont pas nécessaires dans notre projet ;
ajouté un régulateur 3.3V pour alimenter le PN532 ;
configuré le bus de communication en mode SPI ;
relié les signaux SPI entre l’ATmega et le PN532 :
SCK
MOSI
MISO
NSS
IRQ
vérifié que les alimentations et les connexions sont cohérentes.
Séance 3 : Modifications après retour du professeur
Suite au retour du professeur sur notre schéma, nous avons apporté les modifications demandées.
Nous avons :
corrigé certaines connexions ;
ajusté l’organisation du schéma pour qu’il soit plus clair ;
vérifié les alimentations et les signaux SPI.
Séance 4 : Nous avons corrigé les points demandés par le professeur
Nous avons :
ajouté les résistances sur les lignes SPI,
intégré la partie batterie et le régulateur,
corrigé le montage du cristal,
simplifié les nomenclatures ambiguës des signaux.
Séance 5
Nous avons mis à jour notre schéma électronique en suivant les conseils du professeur pour rendre la carte plus fiable. Nous avons d'abord ajouté des résistances de protection sur les connexions SPI et USB, puis corrigé le montage du cristal pour stabiliser l'horloge. Pour l'alimentation, nous avons intégré un régulateur qui transforme le 5V en 3.3V avec des condensateurs pour éviter les parasites, tout en ajoutant un circuit de charge de batterie (MAX1811) relié à l'USB. Enfin, nous avons bien séparé les branchements de l'antenne NFC (ANT1/ANT2) pour assurer une bonne communication sans fil.
Séance 6
L’objectif de cette séance était de rendre le schéma électronique plus cohérent et fonctionnel pour le projet de scanner de badges NFC basé sur le PN532, tout en corrigeant les incohérences de composants et d’alimentation.
1) Remplacement du microcontrôleur
Suite à la remarque de l’enseignant, le microcontrôleur a été remplacé :
ancien composant : ATmega8U2
nouveau composant : ATmega32U4
Ce changement permet une meilleure intégration de la communication USB et offre plus de flexibilité pour le projet.
2) Reconfiguration du bloc horloge
Le circuit d’horloge externe a été revu :
ajout / vérification du quartz Y3
connexion aux broches :
XTAL1
XTAL2
ajout des deux condensateurs :
C6 = 22 pF
C7 = 22 pF
connexion du boîtier du quartz à la masse (GND)
Cette partie a été vérifiée pour assurer un fonctionnement stable du microcontrôleur.
3) Bloc reset et boot
Le circuit de reset a été corrigé :
ligne RESET
résistance de pull-up :
R5 = 10 kΩ
bouton poussoir de reset
ligne nHWB avec résistance de tirage
Cela permet la reprogrammation et le démarrage correct du microcontrôleur.
4) Alimentation
Le bloc d’alimentation a été clarifié :
utilisation du régulateur AMS1117-3.3
conversion :
5 V USB → 3.3 V
ajout / vérification des condensateurs de découplage :
C29 = 100 nF
C30 = 100 nF
L’objectif est d’alimenter correctement :
le PN532
le ATmega32U4
en 3.3 V
5) Communication USB
Le connecteur USB a été revu :
lignes :
D+
D−
VBUS
résistances série :
R10 = 22 Ω
R11 = 22 Ω
Le signal VBUS a été conservé pour l’alimentation et la détection USB.
6) Interface NFC / PN532
Le câblage SPI entre le microcontrôleur et le PN532 a été préparé :
SCK
MOSI
MISO
NSS
RSTPD_N
Les noms des labels ont été harmonisés pour garder un schéma cohérent.
7) Partie batterie
Le bloc charge batterie a été corrigé autour du MAX1811 :
entrée alimentation USB
sortie VBAT
connexion vers le connecteur batterie
condensateur de stabilisation
LED de charge
Les broches de sélection SELI / SELV ont été revues.
J'indique où j'en suis arrivé à la fin des séances.
Vidéo
Eventuellement la vidéo brève du fonctionnement complet du programmateur :