SE3Groupe2025-9
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 :
Résultat du routage :
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 :
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 :
Média:2025-PSE-09-systeme-video.mov
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.
