0% ont trouvé ce document utile (0 vote)
5 vues9 pages

Améliorations du code PIC16F877A

Le document présente une analyse détaillée et des suggestions pour améliorer un projet de compteur 7 segments utilisant un microcontrôleur PIC. Il couvre la création du projet, la configuration du code, l'ajout de fonctionnalités comme l'incrémentation manuelle, le décomptage, l'activation/désactivation du décomptage, la sauvegarde en EEPROM, et l'utilisation d'interruptions. Les modifications apportées visent à rendre le programme plus fonctionnel, optimisé et robuste.

Transféré par

Noel Somda
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues9 pages

Améliorations du code PIC16F877A

Le document présente une analyse détaillée et des suggestions pour améliorer un projet de compteur 7 segments utilisant un microcontrôleur PIC. Il couvre la création du projet, la configuration du code, l'ajout de fonctionnalités comme l'incrémentation manuelle, le décomptage, l'activation/désactivation du décomptage, la sauvegarde en EEPROM, et l'utilisation d'interruptions. Les modifications apportées visent à rendre le programme plus fonctionnel, optimisé et robuste.

Transféré par

Noel Somda
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Pour répondre correctement aux différentes questions et modifications demandées dans le

travail à faire, voici une analyse point par point ainsi que des suggestions de corrections et
d'améliorations du code :

1) Création du projet sur MPLAB et configuration pour CCS C Compiler

• MPLAB X IDE est utilisé pour développer des applications embarquées sur les
microcontrôleurs PIC.

• CCS C Compiler est nécessaire pour compiler du code en langage C destiné aux
microcontrôleurs PIC.

• Dans MPLAB, créez un projet Compteur_7Seg et configurez CCS C Compiler comme


compilateur.

2) Compilation et test sous ISIS (Proteus)

• Dessinez le schéma du microcontrôleur PIC16F877A.

• Ajoutez un afficheur 7 segments câblé sur PORTD.

• Ajoutez des boutons poussoirs SW1 (RB2) et SW0 (RB0) pour tester l'incrémentation
et le décomptage.

• Vérifiez la compilation et testez la simulation sous Proteus.

3) Modification du main pour incrémentation manuelle via BP_INC (RB2)

Correction :

• Attendre l’appui du bouton BP_INC et incrémenter la valeur affichée de 0 à 9.

• Ajouter une temporisation de 250ms pour éviter les rebonds.

Code modifié :

void main (void)

PORTA = 0;

PORTB = 0;

PORTD = 0;

TRISA = 0b11111101;
TRISB = 0b11011111;

TRISD = 0b10000000;

RA1 = 1;

cpt = 0;

while(1)

PORTD = affiche(cpt); // Affiche la valeur actuelle

if (!BP_INC) // Détection de l’appui sur le bouton SW1

Delay_ms(250); // Anti-rebond

if (!BP_INC) // Vérification de la stabilité du signal

cpt++;

if (cpt == 10)

cpt = 0; // Remise à zéro si cpt atteint 10

while (!BP_INC); // Attendre le relâchement du bouton

4) Implémentation du bouton BP_START pour démarrer le décomptage

Correction :

• Attendre l’appui et relâchement du bouton BP_START pour commencer le


décomptage.
• Décrémenter cpt toutes les secondes jusqu'à 0.

• Allumer la LED RB5 lorsque le décomptage atteint 0.

Code modifié :

void decompte(void)

while (cpt > 0)

delay_ms(1000); // 1 seconde

cpt--;

PORTD = affiche(cpt);

Led = 1; // Allumer la LED pour indiquer la fin du décomptage

void main(void)

// Initialisation

PORTA = 0;

PORTB = 0;

PORTD = 0;

TRISA = 0b11111101;

TRISB = 0b11011111;

TRISD = 0b10000000;

RA1 = 1;

cpt = 0;

while(1)
{

PORTD = affiche(cpt);

if (!BP_INC)

delay_ms(250);

if (!BP_INC)

cpt++;

if (cpt == 10)

cpt = 0;

Led = 0; // Éteindre la LED au réglage

while (!BP_INC);

if (!BP_START)

delay_ms(250);

if (!BP_START)

decompte(); // Lancer le décomptage au relâchement

while (!BP_START);

5) Activation / Désactivation du décomptage


• Ajout d'une variable decompte_active pour activer ou désactiver le décomptage au
BP_START.

Code modifié :

int decompte_active = 0;

void main(void)

// Initialisation

PORTA = 0;

PORTB = 0;

PORTD = 0;

TRISA = 0b11111101;

TRISB = 0b11011111;

TRISD = 0b10000000;

RA1 = 1;

cpt = 0;

while(1)

PORTD = affiche(cpt);

if (!BP_INC)

delay_ms(250);

if (!BP_INC)

cpt++;
if (cpt == 10)

cpt = 0;

Led = 0;

while (!BP_INC);

if (!BP_START)

delay_ms(250);

if (!BP_START)

decompte_active = !decompte_active; // Basculer l'état

while (!BP_START);

if (decompte_active && cpt > 0)

delay_ms(1000);

cpt--;

PORTD = affiche(cpt);

if (cpt == 0)

Led = 1;

}
6) Sauvegarde de la valeur en EEPROM

• Écrire cpt en EEPROM avant l'extinction.

• Lire la valeur au démarrage.

Code ajouté :

#include <eeprom.h>

void sauvegarde_eeprom(void)

write_eeprom(0x00, cpt);

void charger_eeprom(void)

cpt = read_eeprom(0x00);

if (cpt > 9) cpt = 0; // Sécurité

void main(void)

charger_eeprom(); // Charger la valeur de cpt au démarrage

while(1)

PORTD = affiche(cpt);

if (!BP_INC)

delay_ms(250);
if (!BP_INC)

cpt++;

if (cpt == 10)

cpt = 0;

Led = 0;

sauvegarde_eeprom(); // Sauvegarde après modification

while (!BP_INC);

7 & 8) Configuration des interruptions TMR0 et RB0

Ajout de l’interruption TMR0 pour le décomptage

#int_TIMER0

void timer0_ISR(void)

if (decompte_active && cpt > 0)

cpt--;

PORTD = affiche(cpt);

if (cpt == 0)

Led = 1;

void configurer_timer0(void)
{

OPTION_REG = 0b00000111; // Prescaler 1:256

TMR0 = 60; // Ajustement pour ~1 sec

INTCON |= 0b10100000; // Activation des interruptions

Ajout de l’interruption sur RB0 (BP_START)

#int_EXT

void interrupt_RB0(void)

decompte_active = !decompte_active;

void configurer_RB0(void)

OPTION_REG &= 0b01111111; // INTEDG = 0 (front descendant)

INTCON |= 0b10010000; // Activation des interruptions externes

Conclusion

• Toutes les améliorations demandées sont intégrées.

• Utilisation des interruptions pour un meilleur fonctionnement.

• Sauvegarde EEPROM pour garder la dernière valeur de cpt.

Ces modifications permettent d’avoir un programme fonctionnel, optimisé et robuste.

Vous aimerez peut-être aussi