« SE3Groupe2025-9 » : différence entre les versions

De projets-se.plil.fr
Aller à la navigation Aller à la recherche
(ajout liste des composants + code de test)
Ligne 2 : Ligne 2 :


= Programmation des systèmes embarqués =
= 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 électronique ==
Ligne 35 : Ligne 32 :
== Liste des composants==
== Liste des composants==
1x Batterie Lithum 3.7V, 100mA
1x Batterie Lithum 3.7V, 100mA
1x ATMega32u4
1x quartz 16MHz
1x port USB mâle


1x Régulateur de tension ref: LDL1117S33R (en stock E306)
1x Régulateur de tension ref: LDL1117S33R (en stock E306)
Ligne 42 : Ligne 45 :
1x écran LCD 1602A
1x écran LCD 1602A


1x régulateur de tension step up MAX8815A
1x régulateur de tension step up MCP1640
 
1x régulateur de tension MAX1811
 
4x Led
 
2x bouton
 
 
4x Pin mâle 1x3
 
1x Pin mâle 1x2
 
1x connecteur ISP
 
résistances:
 
2x 510Ω
 
2x 10kΩ
 
2x 22Ω
 
2x 2.2kΩ
 
1x 976kΩ
 
1x 309kΩ
 
 
capacités:
 
2x 10µF
 
3x 100µF
 
2x 22pF
 
1x 100nF
 
2x 2.2µF
 
3x 22µF
 
1x 4.7µF
 


1x MAX1811
Inductances:


1x Led
1x 4.7µH


==Archive GIT==
==Archive GIT==
Ligne 77 : Ligne 125 :


[[File:2025_PSE-G09-systeme-carte.jpg|thumb|center|400px|Ma carte]]
[[File:2025_PSE-G09-systeme-carte.jpg|thumb|center|400px|Ma carte]]


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


18/05 et 19/05: soudage des composants USB, boutons et écran + création du code de teste de l'écran.
18/05 et 19/05: soudage des composants USB, boutons et écran + création du code de teste de l'écran.
== Programmation ==
code permettant de tester le bon fonctionnement de l'écran:
#include <avr/io.h>
#include <util/delay.h>
// Définition des broches utilisées pour le LCD, selon notre câblage
#define RS PD0
#define EN PD1
#define D4 PD4
#define D5 PD5
#define D6 PD6
#define D7 PD7
//Fonction du gère les commandes données au LCD (commandes en 8 bits, on en 1er les 4 bits de poid fort, puis les 4bits de poid faible
void Read_bits(){
        PORTD |=(1<<EN);        //4 actions qui permettent à l'écran de lire une commande
        _delay_ms(5);          //ça permet de stocker les 4 bits envoyé en mémoire en attendant les 4 prochains bits
        PORTD &=~(1<<EN);      //pour effectuer la commande 8 bits à partir d'envois de donnée 4bits
        _delay_ms(10);          //(l'écran récupère les 4 bits de poid fort de PORTD lors d'un front déscendant de EN)
}
void LCD_Commandgiver(unsigned char command){
        PORTD &=~(1<<RS); //mode commande (RS à 0 et R/W à 0) (R/W toujours à 0 car relié au gnd)
        //envois des 4 bits de poid fort:
        PORTD = (PORTD & 0x0F); //remise à 0 des 4 bits de poid fort de PORTD
        PORTD|= (command & 0xF0); //envois des 4 bits de poid fort de command
        Read_bits();
        //envois des 4 bits de poid faible:
        PORTD = (PORTD & 0x0F); //remise à 0 des 4 bits de poid fort de PORTD
        PORTD|= ((command << 4) & 0xF0); //envois 4 bits de poid fort de command décalé vers à gauche de 4 bits
        Read_bits();
}
//Gère l'envoi d'un paramètre char
void LCD_Character( unsigned char data){ //même concepte que pour commandgiver
        PORTD |= (1<<RS); //mode écriture
        PORTD = (PORTD & 0x0F) | (data & 0xF0);
        Read_bits();
        PORTD = (PORTD & 0x0F) | ((data << 4)&0xF0);
        Read_bits();
}
//Initialise le LCD et active les registres pour écrire
void LCD_Initializer (void){
        DDRD = (1<<D7)|(1<<D6)|(1<<D5)|(1<<D4)|(1 << EN)|(1<<RS); //met les pins en mode écriture
        _delay_ms(20);
        LCD_Commandgiver(0x02); //retour du cursor à la position initiale
        LCD_Commandgiver(0x28); //data 8bits, 2 lignes font type 11 dots
        LCD_Commandgiver(0x0c); //allume l'écran
        LCD_Commandgiver(0x06); //mode d'entré I/D
        LCD_Commandgiver(0x01); //clear l'écran
        _delay_ms(2);
}
//Gère l'envoi d'une chaîne de caractère au contrôleur
void LCD_String(char* str){
        int i = 0;
        while(str[i] != '\0')
                LCD_Character(str[i]);
}
//Clear l'écran
void LCD_Clear(){
        LCD_Commandgiver(0x01);//clear l'écran
        _delay_ms(2);
        LCD_Commandgiver(0x80);
}
//fonction principale
int main(){
        while(1){
                LCD_Initializer();
                for(int i = 0; i<10; i++){
                        LCD_Character(0x30+i);
                        _delay_ms(5);
                }
        }
}





Version du 23 mai 2026 à 11:28


Programmation des systèmes embarqués

Carte électronique

Carte réalisée en utilisant le logiciel KiCAD : Fichier:2025-PSE-B9-PROG.zip.

Schéma électronique de la carte :

2025-PSE-P9-PCB.pdf

Résultat du routage :

2025-PSE-G9-PCB.png


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

Média:2025-PSE-09-PROG-video.mp4

Programmation

Bilan

J'indique où j'en suis arrivé à la fin des séances.

Eventuellement la vidéo brève du fonctionnement complet du programmateur : Média:2025-PSE-09-PROG-final.mp4.

Premier système embarqué

Liste des composants

1x Batterie Lithum 3.7V, 100mA

1x ATMega32u4

1x quartz 16MHz

1x port USB mâle

1x Régulateur de tension ref: LDL1117S33R (en stock E306)

1x Capteur de température, pression, humidité (BME680: https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme680-ds001.pdf )

1x écran LCD 1602A

1x régulateur de tension step up MCP1640

1x régulateur de tension MAX1811

4x Led

2x bouton


4x Pin mâle 1x3

1x Pin mâle 1x2

1x connecteur ISP

résistances:

2x 510Ω

2x 10kΩ

2x 22Ω

2x 2.2kΩ

1x 976kΩ

1x 309kΩ


capacités:

2x 10µF

3x 100µF

2x 22pF

1x 100nF

2x 2.2µF

3x 22µF

1x 4.7µF


Inductances:

1x 4.7µH

Archive GIT

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).

https://gitea.plil.fr/koutaleb/2025_PSE_09_koutaleb_aranivos

Description du système embarqué

Station météo: recuperation de données tel que la température, l'humidité, la qualité de l'air et la pression, ces données sont envoyé soit par USB soit sur affiché sur un écran.

L'usb permettra de charger la station et d'extraire les données.

Carte électronique

Carte réalisée en utilisant le logiciel KiCAD : Fichier:2025-station-G09.tar

Schéma électronique de la carte :

Mon schéma électronique
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 :

Média:2025-PSE-09-systeme-video.mp4

Travail effectué

17/02: recherche du sujet

03/03: sujet trouvé

du 10/03 au 24/03: recherche des composants à utiliser

du 24/03 au 07/04: schématique et routage

05/05: réception des cartes, récupération des composants à souder

12/05: soudage des éléments de teste du µC (teste par ISP réussi)

18/05 et 19/05: soudage des composants USB, boutons et écran + création du code de teste de l'écran.

Programmation

code permettant de tester le bon fonctionnement de l'écran:

#include <avr/io.h>
#include <util/delay.h>

// Définition des broches utilisées pour le LCD, selon notre câblage
#define RS PD0
#define EN PD1
#define D4 PD4
#define D5 PD5
#define D6 PD6
#define D7 PD7


//Fonction du gère les commandes données au LCD (commandes en 8 bits, on en 1er les 4 bits de poid fort, puis les 4bits de poid faible

void Read_bits(){
        PORTD |=(1<<EN);        //4 actions qui permettent à l'écran de lire une commande
        _delay_ms(5);           //ça permet de stocker les 4 bits envoyé en mémoire en attendant les 4 prochains bits
        PORTD &=~(1<<EN);       //pour effectuer la commande 8 bits à partir d'envois de donnée 4bits
        _delay_ms(10);          //(l'écran récupère les 4 bits de poid fort de PORTD lors d'un front déscendant de EN)
}

void LCD_Commandgiver(unsigned char command){
        PORTD &=~(1<<RS); //mode commande (RS à 0 et R/W à 0) (R/W toujours à 0 car relié au gnd)

        //envois des 4 bits de poid fort:
        PORTD = (PORTD & 0x0F); //remise à 0 des 4 bits de poid fort de PORTD
        PORTD|= (command & 0xF0); //envois des 4 bits de poid fort de command

        Read_bits();


        //envois des 4 bits de poid faible:
        PORTD = (PORTD & 0x0F); //remise à 0 des 4 bits de poid fort de PORTD
        PORTD|= ((command << 4) & 0xF0); //envois 4 bits de poid fort de command décalé vers à gauche de 4 bits

        Read_bits();
}

//Gère l'envoi d'un paramètre char
void LCD_Character( unsigned char data){ //même concepte que pour commandgiver
        PORTD |= (1<<RS); //mode écriture
        PORTD = (PORTD & 0x0F) | (data & 0xF0);

        Read_bits();

        PORTD = (PORTD & 0x0F) | ((data << 4)&0xF0);
        Read_bits();
}

//Initialise le LCD et active les registres pour écrire
void LCD_Initializer (void){
        DDRD = (1<<D7)|(1<<D6)|(1<<D5)|(1<<D4)|(1 << EN)|(1<<RS); //met les pins en mode écriture
        _delay_ms(20);

        LCD_Commandgiver(0x02); //retour du cursor à la position initiale
        LCD_Commandgiver(0x28); //data 8bits, 2 lignes font type 11 dots
        LCD_Commandgiver(0x0c); //allume l'écran
        LCD_Commandgiver(0x06); //mode d'entré I/D
        LCD_Commandgiver(0x01); //clear l'écran
        _delay_ms(2);
}

//Gère l'envoi d'une chaîne de caractère au contrôleur
void LCD_String(char* str){
        int i = 0;
        while(str[i] != '\0')
                LCD_Character(str[i]);
}

//Clear l'écran
void LCD_Clear(){
        LCD_Commandgiver(0x01);//clear l'écran
        _delay_ms(2);
        LCD_Commandgiver(0x80);
}

//fonction principale
int main(){
        while(1){
                LCD_Initializer();
                for(int i = 0; i<10; i++){
                        LCD_Character(0x30+i);
                        _delay_ms(5);
                }
        }
}




Eventuellement la vidéo brève du fonctionnement complet du programmateur : Média:2025-PSE-09-systeme-final.mp4.