Vous êtes sur la page 1sur 7

ETUDE DE FP1 : Gestion des informations

Activité 11
Ressources :
datasheet PIC 16F877 et SAA1064, cours sur : PIC 16F877, langage C, transmissions série, PWM, TD sur le
SAA1064

Objectifs :
L'étude de FP1 se limite ici à la mise au point de logiciel permettent d'interfacer la carte
affichage/dimmer. Trois logiciels seront à faire.
• Prog1 : proposer un logiciel qui permet d'allumer et d'éteindre la lampe en tout ou rien
• Prog 2 : proposer un logiciel qui permet d'afficher un nombre sur les afficheurs
• Prog 3 : proposer un logiciel qui permet de faire varier l'intensité lumineuse de la lampe

6- SCHÉMA FONCTIONNEL DE FP1

RxD PWM

Innitialisation Reset Traitement OSC1 Cadencement


microprogrammé
FS1.2 OSC2 FS1.3
FS1.1

A0..A7, CLK, RAZ

7- COMMANDE DE LA LAMPE : LAMPE.C

Cahier des charges


L’utilisateur doit pouvoir allumer la lampe lorsqu’il actionne le bouton poussoir BPplus, et l’éteindre lorsqu’il
actionne le bouton poussoir Bpmoins. On recherche ici un fonctionnement en tout ou rien sur la lampe.

7.1 Algorithme ou algorigramme


Proposer un algorigramme ou un algorithme répondant au cahier des charges fourni.

7.2 Programmation
Traduire l'algorigramme en langage C, et le tester à l'aide de l'ICD2 et des cartes.
On pourra s'aider du squelette de programme donné en Annexes

THEME 2009 - v1.3 Partie électronique / TD : Carte Micro Page 3 / 9


Projecteur de scène DMX TD_carte_micro.odt
8- COMMANDE DES AFFICHEURS : I2C_AFFICHEURS.C

Ressources : datasheet du SAA1064, TD sur la carte affichage


Il est demandé de bien comprendre le fonctionnement du registre de contrôle du SAA1064 à l'aide de
l'étude de la carte affichage/dimmer avant de réaliser de logiciel.

Cahier des charges


Vous devez programmer le µC afin qu’il commande l’affichage sur les afficheurs sept segments d’un
symbole déterminé.
On affichera en boucle le texte suivant : « 2009 »

8.1 Algorithme ou algorigramme


Proposer un algorigramme répondant au cahier des charges fourni. On s'aidera du squelette de programme
donné en annexe.

8.2 Programmation
Compléter le squelette de programme donné en Annexes, et le tester à l'aide de l'ICD2 et des cartes.

9- GESTION DE LA PWM : I2C_PWM_AFF.C

Ressources :
● fonctionnement du module PWM dans la documentation constructeur du 16F877 et dans le cours
● fonctions disponibles en langage C dans la documentation CCS et dans l'étude de la carte
affichage
● algorigramme en annexe

Cahier des charges

9.1 GESTION DE LA PWM

L’utilisateur doit pouvoir augmenter la puissance lumineuse de la lampe lorsqu’il actionne le bouton
poussoir Bpplus, et doit diminuer la puissance lumineuse de la lampe lorsqu’il actionne le bouton poussoir
Bpmoins.
Remarque :
On utilise le module PWM du 16F877 afin de commander la lampe via le transistor. Il convient donc de
bien comprendre le fonctionnement de ce module avant de l'utiliser.

9.2 GESTION DE L'AFFICHAGE

L’affichage en pourcentage de la puissance sera effectué sur deux afficheurs sept segments. On
utilisera le driver du composant I2C SAA1064. Nous disposons de la fonction suivante (vue lors de l'étude
de la carte affichage/dimmer) :

- send_saa1064_num() : envoi d'un nombre sur 4 digits

9.3 Programmation
Compléter le programme donné en Annexes, et le tester à l'aide de l'ICD2 et des cartes.
On prendra soin de commenter et expliquer les lignes suivantes :

setup_ccp1(CCP_PWM); // a completer
setup_timer_2(T2_DIV_BY_16, 254, 1); // a completer

THEME 2009 - v1.3 Partie électronique / TD : Carte Micro Page 4 / 9


Projecteur de scène DMX TD_carte_micro.odt
10- ANNEXES

10.1 Prog 1 : lampe.c


1 // Rôle du programme : commande la lampe en ON/OFF
2 // àl'aide des BP- et BP+
3 // Auteur : Lépinard Grégory
4 // Lieu : Lycée Charles Tellier
5 // Version : 1.0
6
7
8 #include <16F877.H> //Fichier header du PIC16F877
9
10 // Fusibles de configuration
11 #fuses HS, NOWDT, NOPROTECT, NOLVP
12
13 #use delay (clock=20000000) //Fréquence du quartz en Hz = 20 MHz
14
15 //---------- définition des registres utilisés ---------------
16 #byte PORTA = 0x5 // adresse du PORT A
17 #byte PORTB = 0x6 // adresse du PORT B
18 #byte PORTC = 0x7 // adresse du PORT C
19 #byte PORTD = 0x8 // adresse du PORT D
20 #byte PORTE = 0x9 // adresse du PORT E
21
22 //---------- définition des bits utilisées ----------------
23 #bit bpplus = PORTB.1 // bouton poussoir plus
24 #bit bpmoins = a completer // bouton poussoir moins
25 #bit lampe = a completer // signal PWM de commande de la lampe
26
27
28 //---------- définition des prototypes de fonctions ----------
29 void init_ports (void); // configuration des ports d'entrée/sortie
30
31
32 //---------- fonction principale -----------------------------
33
34 void main(void)
35 {
36 init_ports (); // configuration des ports d'entrée/sortie
37
38 while(1) // boucle principale
39 {
40
41 a completer
42 }
43 }
44
45
46 // **********************************************************************
47 // Fonction : init_ports
48 // Rôle : configuration des ports d'entrée/sortie
49 // Entrée : -
50 // Sortie : -
51 // **********************************************************************
52 void init_ports (void)
53 {
54
55 set_tris_B (a completer); // PORTB bits 1 et 2 en entree : BP-, BP+
56 set_tris_C (a completer); // PORTC bit 2 en sortie : lampe
57
58 }
1

THEME 2009 - v1.3 Partie électronique / TD : Carte Micro Page 5 / 9


Projecteur de scène DMX TD_carte_micro.odt
10.2 Prog 2 : i2c_afficheurs.c

1 // Rôle du programme : envoi du nombre 2009 sur les afficheurs 7seg par I2C
2 // Auteur : Lépinard Grégory
3 // Lieu : Lycée Charles Tellier
4 // Version : 1.0
5
6
7 #include <16F877.H> //Fichier header du PIC16F877
8
9 // Fusibles de configuration
10 #fuses HS, NOWDT, NOPROTECT, NOLVP
11
12 #use delay (clock=20000000) //Fréquence du quartz en Hz = 20 MHz
13 #use i2c (master,sda=PIN_C4,scl=PIN_C3) //configuration du bus i2c en master
14
15 //---------- définition des registres utilisés ---------------
16 #byte PORTA = 0x5 // adresse du PORT A
17 #byte PORTB = 0x6 // adresse du PORT B
18 #byte PORTC = 0x7 // adresse du PORT C
19 #byte PORTD = 0x8 // adresse du PORT D
20 #byte PORTE = 0x9 // adresse du PORT E
21
22 //---------- définition des bits utilisées ----------------
23 #bit scl = PORTC.3 // clock i2c
24 #bit sda = PORTC.4 // datas i2c
25
26
27 //---------- définition des prototypes de fonctions ----------
28 void init_ports (void); // configuration des ports d'entrée/sortie
29 void send_saa1064_2009 (void); // Affiche la valeur 2009 sur les afficheurs
30
31
32 //---------- fonction principale -----------------------------
33
34 void main(void)
35 {
36
37 init_ports (); // configuration des ports d'entrée/sortie
38
39
40 while(1) // boucle principale
41 {
42
43
44 //Afficher "2009"
45 a completer
46
47 }
48 }
49
50
51 // **********************************************************************
52 // Fonction : init_ports
53 // Rôle : configuration des ports d'entrée/sortie
54 // Entrée : -
55 // Sortie : -
56 // **********************************************************************
57 void init_ports (void)
58 {
59
60 set_tris_C (a completer); // bits 3 et 4 en entrée (scl, sda de l'i2c)
61
62 }
63

THEME 2009 - v1.3 Partie électronique / TD : Carte Micro Page 6 / 9


Projecteur de scène DMX TD_carte_micro.odt
64
65 // **********************************************************************
66 // Fonction : send_saa1064_2009
67 // Rôle : envoie 2009 sur le SAA1064
68 // Entrée : addr, control,
69 // Sortie : -
70 // **********************************************************************
71 void send_saa1064_2009(void)
72 {
73
74 i2c_start(); // init i2c
75
76 i2c_write(a completer); // Send SAA1064 address
1

77 i2c_write(0x00); // Send instruction byte. Zero is control reg.


78 i2c_write(a completer); // Send control byte
79
80 // envoie des chiffres
81 i2c_write(a completer); //premier chiffre : 9
82 i2c_write(a completer); //second chiffre : 0
83 i2c_write(a completer); //troisieme chiffre : 0
84 i2c_write(a completer); //quatrieme chiffre : 2
85
86 i2c_stop(); //stop i2c
87
88
89 }

10.3 Prog 3 : i2c_pwm_aff.c


1 // Rôle du programme : commande l'intensité lumineuse de l'ampoule en PWM
2 // et affiche la valeur sur les afficheurs 7seg par I2C
3 // Auteur : Lépinard Grégory
4 // Lieu : Lycée Charles Tellier
5 // Version : 1.2
6
7
8 #include <16F877.H> //Fichier header du PIC16F877
9
10 // Fusibles de configuration
11 #fuses HS, NOWDT, NOPROTECT, NOLVP
12
13 #use delay (clock=20000000) //Fréquence du quartz en Hz = 20 MHz
14 #use rs232 (baud=250000, xmit=PIN_C6, rcv=PIN_C7) // liaison série à 250 kbaud
15 #use i2c (master,sda=PIN_C4,scl=PIN_C3) //configuration du bus i2c en master
16
17 //---------- définition des registres utilisés ---------------
18 #byte PORTA = 0x5 // adresse du PORT A
19 #byte PORTB = 0x6 // adresse du PORT B
20 #byte PORTC = 0x7 // adresse du PORT C
21 #byte PORTD = 0x8 // adresse du PORT D
22 #byte PORTE = 0x9 // adresse du PORT E
23
24 //---------- définition des bits utilisées ----------------
25 #bit scl = PORTC.3 // clock i2c
26 #bit sda = PORTC.4 // datas i2c
27 #bit bpplus = PORTB.2 // bouton poussoir plus
28 #bit bpmoins = PORTB.1 // bouton poussoir moins
29 #bit pwm = PORTC.2 // signal PWM de commande de la lampe
30
31 //---------- définition des constantes globales ---------------
32 #define Tempo_Antirebonds 1 // en ms
33 long const duty_pwm_def=0 ; // rapport cyclique par defaut au demarage du générateur PWM
34 long const pwm_min=0 ; // rapport cyclique minimum
35 long const pwm_max=1023; // rapport cyclique maximum
36 int valeur_aff ; // valeur convertie en pourcentage du Rcy
37
38 //---------- définition des variables globales ---------------
39 long duty_pwm; // rapport cyclique du générateur PWM 10bits
40
41 //---------- Liste des fichiers Header -----------------------
42 #include "saa1064.h" //Driver pour le saa1064
43
44
45 //---------- définition des prototypes de fonctions ----------
46 void init_ports (void); // configuration des ports d'entrée/sortie
47
48
49

THEME 2009 - v1.3 Partie électronique / TD : Carte Micro Page 7 / 9


Projecteur de scène DMX TD_carte_micro.odt
50 //---------- fonction principale -----------------------------
51
52 void main(void)
53 {
54 init_ports (); // configuration des ports d'entrée/sortie
55
56 //Display 'On' on display with SAA1064 ADR pin tied to Vee
57 send_saa1064_msg(LED_ADDR0,LED_CONTROL,on_); //envoie message ON
58 delay_ms(2000); // tempo 2s
59 send_saa1064_msg(LED_ADDR0,LED_CONTROL,blank_);//eteindre les afficheurs
60 delay_ms(1000); //tempo 1s
61
62 while(1) // boucle principale
63 {
64
65 if (bpplus==0) // augmentation de la puissance vers rcy=100%
66 {
67 a completer
68 }
69 if (bpmoins==0)// diminution de la puissance vers rcy=0%
70 {
71 a completer
72 }
73
74
75 set_pwm1_duty(duty_pwm); // fixe le rapport cyclique de la PWM
76
77
78 // conversion en pourcentage de la valeur
79 valeur_aff = duty_pwm / 10.23 ; //10bits = 1023 max doit etre egal a 100%
80
81 send_saa1064_num(LED_ADDR0,LED_CONTROL,valeur_aff);
82 delay_ms(10);
83
84
85 }
86 }
87
88
89 // **********************************************************************
90 // Fonction : init_ports
91 // Rôle : configuration des ports d'entrée/sortie
92 // Entrée : -
93 // Sortie : -
94 // **********************************************************************
95 void init_ports (void)
96 {
97
98 setup_ccp1(CCP_PWM); // a completer
99 setup_timer_2(T2_DIV_BY_16, 254, 1); // a completer
100
101
102
103
104 set_tris_B (a completer); // PORTB en sortie
105 set_tris_C (a completer); // bits 3 et 4 en entrée (scl, sda de l'i2c)
106
107 set_pwm1_duty(duty_pwm_def); // innitialise le rapport cyclique a la valeur par defaut
108 duty_pwm = duty_pwm_def; // valeur par defaut du rcy -> 0%
109
110
111 }

THEME 2009 - v1.3 Partie électronique / TD : Carte Micro Page 8 / 9


Projecteur de scène DMX TD_carte_micro.odt
10.4 Algorigramme du programme 3

THEME 2009 - v1.3 Partie électronique / TD : Carte Micro Page 9 / 9


Projecteur de scène DMX TD_carte_micro.odt

Vous aimerez peut-être aussi