SE3Groupe2025-15

De projets-se.plil.fr
Aller à la navigation Aller à la recherche

Fichier:2025-pse-b15-prog.zip

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 :

Mon schéma électronique

Résultat du routage :

Mon routage

Vue 3D de la carte :

Vue 3D

Photo de la carte soudée :

Ma carte

Vidéo très courte et en basse résolution de la carte en fonctionnement :

Programmation

Fichier:Programe.zip

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 :

Mon schéma électronique

Résultat du routage :

Mon routage

Photo de la carte soudée :

Ma carte

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 :

Média:2025-PSE-15-systeme-final.mp4.