Vous êtes sur la page 1sur 7

ET%DE DE FP1 : #e(tion de( in)o*+,tion(

Activit 11

Ressources : datas"eet PIC '%.8)) et S$$'=%43 cours sur PIC '%.8))3 langage C3 transmissions s-rie3 P#M3 +D sur le S$$'=%4 Objectifs : 1'-tude de .P' se limite ici < la mise au point de logiciel permettent d'inter!acer la carte a!!ic"age>dimmer* +rois logiciels seront < !aire*
Prog' proposer un logiciel 9ui permet d'allumer et d'-teindre la lampe en tout ou rien Prog ? proposer un logiciel 9ui permet d'a!!ic"er un nom@re sur les a!!ic"eurs Prog ( proposer un logiciel 9ui permet de !aire varier l'intensit- lumineuse de la lampe

-- SCHMA FONCTIONNE DE FP1


RxD PWM

Innitialisation

Reset

Traitement microprogramm

OSC1 OSC2

Cadencement

FS1.2

FS1.1

FS1.3

A0..A7, CLK, RAZ

7- COMMANDE DE A

AMPE :

AMPE.C

&a*ier 'es c*arges 1Autilisateur doit pouvoir allumer la lampe lors9uAil actionne le @outon poussoir 4Pplus3 et lA-teindre lors9uAil actionne le @outon poussoir 4pmoins* 6n rec"erc"e ici un !onctionnement en tout ou rien sur la lampe*

).1 +l#orithme ou al#ori#ramme


Proposer un algorigramme ou un algorit"me r-pondant au ca"ier des c"arges !ourni*

).2 5ro#rammation
+raduire l'algorigramme en langage C3 et le tester < l'aide de l'ICD? et des cartes*

6n pourra s'aider du s9uelette de programme donn- en $nne8es

THEME 2 ! - v'*( Projecteur 'e sc(ne %M)

Partie "lectroni#ue $ T% : &arte Micro


+D,carte,micro*odt

Page + $ !

/- COMMANDE DES AFFICHE%RS : I!C0AFFICHE%RS.C


Ressources : datas"eet du S$$'=%43 +D sur la carte a!!ic"age Il est demand- de @ien comprendre le !onctionnement du registre de contrBle du S$$'=%4 < l'aide de l'-tude de la carte a!!ic"age>dimmer avant de r-aliser de logiciel* &a*ier 'es c*arges Cous deve: programmer le DC a!in 9uAil commande lAa!!ic"age sur les a!!ic"eurs sept segments dAun s;m@ole d-termin-* 6n a!!ic"era en @oucle le te8te suivant 9.1 +l#orithme ou al#ori#ramme
Proposer un algorigramme r-pondant au ca"ier des c"arges !ourni* 6n s'aidera du s9uelette de programme donn- en anne8e*

,2

!-

9.2 5ro#rammation Compl-ter le s9uelette de programme donn- en $nne8es3 et le tester < l'aide de l'ICD? et des cartes*

1- #ESTION DE A P2M : I!C0P2M0AFF.C


Ressources :

!onctionnement du module P#M dans la documentation constructeur du '%.8)) et dans le cours !onctions disponi@les en langage C dans la documentation CCS et dans l'-tude de la carte a!!ic"age algorigramme en anne8e &a*ier 'es c*arges

:.1 ; <=72( / >+ 5?0 1Autilisateur doit pouvoir augmenter la puissance lumineuse de la lampe lors9uAil actionne le @outon poussoir 4pplus3 et doit diminuer la puissance lumineuse de la lampe lors9uAil actionne le @outon poussoir 4pmoins* Remar#ue : 6n utilise le module P#M du '%.8)) a!in de commander la lampe via le transistor* Il convient donc de @ien comprendre le !onctionnement de ce module avant de l'utiliser* :.2 ; <=72( / >%+@@7CA+; 1Aa!!ic"age en pourcentage de la puissance sera e!!ectu- sur deu8 a!!ic"eurs sept segments* 6n utilisera le driver du composant I?C S$$'=%4* &ous disposons de la !onction suivante 0vue lors de l'-tude de la carte a!!ic"age>dimmer7 - send_saa1064_num() envoi d'un nom@re sur 4 digits :.$ 5ro#rammation Compl-ter le programme donn- en $nne8es3 et le tester < l'aide de l'ICD? et des cartes* 6n prendra soin de commenter et e8pli9uer les lignes suivantes setup_ccp1(CCP_PWM); // a completer setup_timer_2(T2_DIV_BY_16, 254, 1); // a completer

THEME 2 ! - v'*( Projecteur 'e sc(ne %M)

Partie "lectroni#ue $ T% : &arte Micro


+D,carte,micro*odt

Page . $ !

13- ANNEXES
13.1 5ro# 1 , lampe.c
1 // Rle du programme : commande la lampe en ON/OFF 2 // l'aide des BP- et BP+ 3 // Auteur : Lpinard Grgory 4 // Lieu : Lyce 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) //Frquence du quartz en Hz = 20 MHz 14 15 //---------- dfinition des registres utiliss --------------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 //---------- dfinition des bits utilises ---------------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 //---------- dfinition des prototypes de fonctions ---------29 void init_ports (void); // configuration des ports d'entre/sortie 30 31 32 //---------- fonction principale ----------------------------33 34 void main(void) 35 { 36 init_ports (); // configuration des ports d'entre/sortie 37 38 while(1) // boucle principale 39 { 40 41 a completer 42 } 43 } 44 45 46 // ********************************************************************** 47 // Fonction : init_ports 48 // Rle : configuration des ports d'entre/sortie 49 // Entre : 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 2 ! - v'*( Projecteur 'e sc(ne %M)

Partie "lectroni#ue $ T% : &arte Micro


+D,carte,micro*odt

Page / $ !

13.2 5ro# 2 , i2cBafficheurs.c

1 // Rle du programme : envoi du nombre 2009 sur les afficheurs 7seg par I2C 2 // Auteur : Lpinard Grgory 3 // Lieu : Lyce 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) //Frquence du quartz en Hz = 20 MHz 13 #use i2c (master,sda=PIN_C4,scl=PIN_C3) //configuration du bus i2c en master 14 15 //---------- dfinition des registres utiliss --------------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 //---------- dfinition des bits utilises ---------------23 #bit scl = PORTC.3 // clock i2c 24 #bit sda = PORTC.4 // datas i2c 25 26 27 //---------- dfinition des prototypes de fonctions ---------28 void init_ports (void); // configuration des ports d'entre/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'entre/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 // Rle : configuration des ports d'entre/sortie 54 // Entre : 55 // Sortie : 56 // ********************************************************************** 57 void init_ports (void) 58 { 59 60 set_tris_C (a completer); // bits 3 et 4 en entre (scl, sda de l'i2c) 61 62 } 63

THEME 2 ! - v'*( Projecteur 'e sc(ne %M)

Partie "lectroni#ue $ T% : &arte Micro


+D,carte,micro*odt

Page 0 $ !

64 65 66 67 68 69 70 71 72 73 74 75 76 1 77 78 79 80 81 82 83 84 85 86 87 88 89

// ********************************************************************** // Fonction : send_saa1064_2009 // Rle : envoie 2009 sur le SAA1064 // Entre : addr, control, // Sortie : // ********************************************************************** void send_saa1064_2009(void) { i2c_start(); // init i2c i2c_write(a completer); // Send SAA1064 address i2c_write(0x00); // Send instruction byte. Zero is control reg. i2c_write(a completer); // Send control byte // envoie des chiffres i2c_write(a completer); i2c_write(a completer); i2c_write(a completer); i2c_write(a completer); i2c_stop(); //stop i2c } //premier chiffre : 9 //second chiffre : 0 //troisieme chiffre : 0 //quatrieme chiffre : 2

13.$ 5ro# $ , i2cBpCmBaff.c


1 // Rle du programme : commande l'intensit lumineuse de l'ampoule en PWM 2 // et affiche la valeur sur les afficheurs 7seg par I2C 3 // Auteur : Lpinard Grgory 4 // Lieu : Lyce 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) //Frquence du quartz en Hz = 20 MHz 14 #use rs232 (baud=250000, xmit=PIN_C6, rcv=PIN_C7) // liaison srie 250 kbaud 15 #use i2c (master,sda=PIN_C4,scl=PIN_C3) //configuration du bus i2c en master 16 17 //---------- dfinition des registres utiliss --------------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 //---------- dfinition des bits utilises ---------------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 //---------- dfinition des constantes globales --------------32 #define Tempo_Antirebonds 1 // en ms 33 long const duty_pwm_def=0 ; // rapport cyclique par defaut au demarage du gnrateur 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 //---------- dfinition des variables globales --------------39 long duty_pwm; // rapport cyclique du gnrateur PWM 10bits 40 41 //---------- Liste des fichiers Header ----------------------42 #include "saa1064.h" //Driver pour le saa1064 43 44 45 //---------- dfinition des prototypes de fonctions ---------46 void init_ports (void); // configuration des ports d'entre/sortie 47 48 49

THEME 2 ! - v'*( Projecteur 'e sc(ne %M)

Partie "lectroni#ue $ T% : &arte Micro


+D,carte,micro*odt

Page 7 $ !

50 //---------- fonction principale ----------------------------51 52 void main(void) 53 { 54 init_ports (); // configuration des ports d'entre/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 // Rle : configuration des ports d'entre/sortie 92 // Entre : 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 entre (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 2 ! - v'*( Projecteur 'e sc(ne %M)

Partie "lectroni#ue $ T% : &arte Micro


+D,carte,micro*odt

Page 1 $ !

13.* +l#ori#ramme du pro#ramme $

THEME 2 ! - v'*( Projecteur 'e sc(ne %M)

Partie "lectroni#ue $ T% : &arte Micro


+D,carte,micro*odt

Page ! $ !