La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

ETUDE DUN SYSTEME DE COMPTAGE DE PIECES Compte-Rendu Projet microcontroleur Réalisés et presentés par : - SABIR Lihimdi - FATIMA ZOHRA El Merrakchi Année.

Présentations similaires


Présentation au sujet: "ETUDE DUN SYSTEME DE COMPTAGE DE PIECES Compte-Rendu Projet microcontroleur Réalisés et presentés par : - SABIR Lihimdi - FATIMA ZOHRA El Merrakchi Année."— Transcription de la présentation:

1 ETUDE DUN SYSTEME DE COMPTAGE DE PIECES Compte-Rendu Projet microcontroleur Réalisés et presentés par : - SABIR Lihimdi - FATIMA ZOHRA El Merrakchi Année : 2009/2010 3IAII Encadrant EMSI Mr:CHOURI.

2 Plan Presentation. Schéma du systéme. Materiels utilisés. Les fonctions utilisées. Les fonctions utilisées.Tester.

3 Presentation Le projet réalisé est un système de comptage, de trois types de pièces transportées par trois tapis roulants, au passage dune pièce devant un capteur optique,ce dernier génère une impulsion permettant dincrémenter le cpt1 pour le passage des pièces sur le tapis 1 et le cpt2 pour les pièces du tapis 2 et le cpt3 pour les pièces du tapis 3, la suite du programme est faite par un afficheur LCD pour afficher la Date,le jour,le mois, lheure et les minutes du circuit pcf et la valeur des trois compteurs,enfin lenregistrement des données dans la memoire EEPROM toutes les 30 minutes,avec la possibilité de la communication entre le Pic et le PC avec le logiciel Hyper-Treminal

4 Schéma du systéme

5 Materials utilisés Afficheur LCD 2 lignes 16 caractères en mode 4 bits Circuit PCF8583 utilisé en mode Horloge Mémoire EEPROM 24C64 Circuit MAX232

6 Les fonctions utilisées dans le projet projet

7 void start() {sdaon;sclon;sdaoff;scloff;} void stop() {scloff;sdaoff;sclon;sdaon;} void ackesclave() { unsigned char A; scloff;sdaon;sclon;A=PORTC.F4; if(A==0) scloff; } void transmission(unsigned char d) { unsigned char M=0X80; int i; for(i=0;i<8;i++){ if((d&M)!=0) if((d&M)!=0) {sdaon;} {sdaon;} else else {sdaoff; } {sdaoff; } sclon;scloff; sclon;scloff; M=M>>1; M=M>>1;}} unsigned char reception() { unsigned char v=0x00,m=0x80; unsigned char v=0x00,m=0x80; int i; int i; sdaon; sdaon; for(i=0;i<8;i++) for(i=0;i<8;i++){ sclon; sclon; TRISC.F4=1; TRISC.F4=1; if((PORTC.F4)==1) if((PORTC.F4)==1) v=v|m; v=v|m; scloff; scloff; m=m>>1; m=m>>1;} return (v); }

8 Ses fonctions servent à communiquer les composants du schéma de la carte connectés au bus i2C avec le microcontrôleur

9 void ecrirehorloge(unsigned char adrm,unsigned char d) {start();transmission(0xA0);ackesclave();transmission(adrm);ackesclave();transmission(d);ackesclave();stop();} unsigned char lire_horloge(unsigned char adresse) { unsigned char donnee; I2C_Start(); I2C_Start(); I2C_Wr(0xA0); I2C_Wr(0xA0); I2C_Wr(adresse); I2C_Wr(adresse); I2C_Repeated_Start(); I2C_Repeated_Start(); I2C_Wr(0xA1); I2C_Wr(0xA1); donnee = I2C_Rd(0u); donnee = I2C_Rd(0u); I2C_Stop(); I2C_Stop(); return donnee; return donnee; delay_ms(100); delay_ms(100);}

10 Ses deux fonctions servent à écrire et à lire à partir de lhorloge du circuit PCF8583. La fonction lire_horloge est pré-definie dans le logiciel de programmation La fonction ecrirehorloge est construite a partir des fonctions du bus i2C

11 void pcf() { se=lire_horloge(0x02); m=lire_horloge(0x03); m=lire_horloge(0x03); h=lire_horloge(0x04); h=lire_horloge(0x04); j=lire_horloge(0x06)>>5; j=lire_horloge(0x06)>>5; mois=lire_horloge(0x06)& 0x1F; mois=lire_horloge(0x06)& 0x1F; date=lire_horloge(0x05)& 0x3F; date=lire_horloge(0x05)& 0x3F; Lcd_Out(1,1, t[j]); Lcd_Out(1,1, t[j]); Lcd_Chr(1,5,(date>>4)+48); Lcd_Chr(1,5,(date>>4)+48); Lcd_Chr(1,6,(date&0x0F)+48); Lcd_Chr(1,6,(date&0x0F)+48); Lcd_Out(1,7, "/"); Lcd_Out(1,7, "/"); Lcd_Chr(1,8,(mois>>4)+48); Lcd_Chr(1,8,(mois>>4)+48); Lcd_Chr(1,9,(mois&0x0F)+48); Lcd_Chr(1,9,(mois&0x0F)+48); Lcd_Chr(1,12,(h>>4)+48); Lcd_Chr(1,12,(h>>4)+48); Lcd_Chr(1,13,(h&0x0F)+48); Lcd_Chr(1,13,(h&0x0F)+48); Lcd_Out(1,14, ":"); Lcd_Out(1,14, ":"); Lcd_Chr(1,15,(m>>4)+48); Lcd_Chr(1,15,(m>>4)+48); Lcd_Chr(1,16,(m&0x0F)+48); Lcd_Chr(1,16,(m&0x0F)+48);}}

12 Cette fonction permet de lire le jour,le mois,la date, lheure et les minutes dans lhorloge du circuit pcf8583 et de les afficher dans lafficheur LCD.

13 void affiche(unsigned char Val,unsigned char l,unsigned char co) { val= Val%10; val= Val%10; Lcd_Chr(l,co, val+48); Lcd_Chr(l,co, val+48); Val=Val/10; Val=Val/10; val= Val%10; val= Val%10; Lcd_Chr(l,co-1, val+48); Lcd_Chr(l,co-1, val+48); Val=Val/10; Val=Val/10; val= Val%10; val= Val%10; Lcd_Chr(l,co-2, val+48); Lcd_Chr(l,co-2, val+48); Val=Val/10; Val=Val/10; val= Val%10; val= Val%10; Lcd_Chr(l,co-3, val+48); Lcd_Chr(l,co-3, val+48);}

14 Cette fonction montre comment calculer les unités et les dizaines de la valeur du compteur et les afficher.

15 unsigned char compteur() {if(PORTC.F0==0){cpt1++;delay_ms(250);}if(PORTC.F1==0){cpt2++;delay_ms(250);}if(PORTC.F2==0){cpt3++;delay_ms(250);} return cpt1,cpt2,cpt3; }

16 Cette fonction incrémente les 3 compteurs à chaque fois quune impulsion est reçue. et retourne leurs valeurs.

17 void afficher_cpt() { if(PORTD.F0==0) if(PORTD.F0==0) { Lcd_Out(2,1, "Compt1 :"); Lcd_Out(2,1, "Compt1 :"); affiche(cpt1,2,12); affiche(cpt1,2,12); } if(PORTD.F1==0) if(PORTD.F1==0) { Lcd_Out(2,1, "Compt2 :"); Lcd_Out(2,1, "Compt2 :"); affiche(cpt2,2,12); affiche(cpt2,2,12); } if(PORTD.F2==0) if(PORTD.F2==0) { Lcd_Out(2,1, "Compt3 :"); Lcd_Out(2,1, "Compt3 :"); affiche(cpt3,2,12); affiche(cpt3,2,12); }}

18 Cette fonction affiche le compteur puis sa valeur. exemple: compteur1 : 0009 cest-à-dire le compteur1 contient la valeur 9. Alors 9 pièces sont passé devant le capteur 1

19 void interrupt() { if (PIR1.TMR1IF==1) if (PIR1.TMR1IF==1) { TMR1L=0XB0; TMR1L=0XB0; TMR1H=0X3C; TMR1H=0X3C; n++; n++; if(n==20000) if(n==20000) { n=0; n=0; PORTB.F7=!PORTB.F7; PORTB.F7=!PORTB.F7; EEprom_Write(0,date+48); EEprom_Write(0,date+48); EEprom_Write(1,mois+48); EEprom_Write(1,mois+48); EEprom_Write(2,h+48); EEprom_Write(2,h+48); EEprom_Write(3,m+48); EEprom_Write(3,m+48); EEprom_Write(4,cpt1); EEprom_Write(4,cpt1); EEprom_Write(5,cpt2); EEprom_Write(5,cpt2); EEprom_Write(6,cpt3); EEprom_Write(6,cpt3); } PIR1.TMR1IF=0; PIR1.TMR1IF=0; } if(PIR1.RCIF==1) if(PIR1.RCIF==1) { K = RCREG; K = RCREG; PIR1.RCIF=0; PIR1.RCIF=0; }}

20 Le TIMER1 est utilisé en mode tempo A chaque fois que linterruption est active on incrémente une variable pour atteindre 1sec et on multiplie la valeur pour avoir le temps désiré Après 30 min on enregistre les données dans la mémoire EEPROM La 2 eme partie cest pour le test des caractères reçus par le clavier sur le logiciel Hyper Terminal

21 void Serial_Init(void) { SPBRG = 12 ; SPBRG = 12 ; TXSTA = 0b ; TXSTA = 0b ; RCSTA = 0b ; RCSTA = 0b ;}

22 Cette fonction permet linitialisation du module USART du pic ( la communication en série de type RS232).

23 void Serial_Putchar(unsigned char V) { while(TXSTA.TRMT==0); while(TXSTA.TRMT==0); TXREG = V; TXREG = V;}

24 Cette fonction permet lémission dun caractère sur lUSART, et de lafficher sur lecran du PC.

25 La fonction globale :

26 void main() { ecrirehorloge(0x02,0x55); ecrirehorloge(0x05,0xA5); ecrirehorloge(0x02,0x55); ecrirehorloge(0x05,0xA5); ecrirehorloge(0x03,0x59); ecrirehorloge(0x06,0x21); ecrirehorloge(0x03,0x59); ecrirehorloge(0x06,0x21); ecrirehorloge(0x04,0x09); ecrirehorloge(0x04,0x09); ANSEL=0x00; ANSEL=0x00; ANSELH=0x00; ANSELH=0x00; TRISB=0x00; PORTB=0X00; TRISB=0x00; PORTB=0X00; TRISC=0XFF; PORTC=0XFF; TRISC=0XFF; PORTC=0XFF; TRISD=0XFF; PORTD=0XFF; TRISD=0XFF; PORTD=0XFF; Serial_Init(); Serial_Init(); I2C_Init(100000); I2C_Init(100000); INTCON.GIE=1; T1CON.TMR1CS=0; INTCON.GIE=1; T1CON.TMR1CS=0; INTCON.PEIE=1; T1CON.T1CKPS0=1; INTCON.PEIE=1; T1CON.T1CKPS0=1; PIE1.TMR1IF=1; T1CON.T1CKPS1=0; PIE1.TMR1IF=1; T1CON.T1CKPS1=0; TMR1L=0XB0; T1CON.TMR1ON=1; TMR1L=0XB0; T1CON.TMR1ON=1; TMR1H=0X3C; TMR1H=0X3C; Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Cmd(Lcd_Clear); Lcd_Cmd(Lcd_Clear); while(1) { pcf(); pcf(); compteur(); compteur(); afficher_cpt(); afficher_cpt(); if((h==0x18)&&(se==0x00)) if((h==0x18)&&(se==0x00)) { cpt1=0;cpt2=0;cpt3=0; cpt1=0;cpt2=0;cpt3=0; //PORTB.F7=1; //PORTB.F7=1; } if(K=='?') if(K=='?') { for(l=0;l<10;l++) for(l=0;l<10;l++) Serial_Putchar(Eeprom_Read(l)); Serial_Putchar(Eeprom_Read(l)); } } }

27 Appeler toutes les fonctions définies et initialiser les ports dentrées/sorties. Set lhorloge LUN 25/01 16:30. Configurer lafficheur LCD Lappel des fonctions en boucle infinie

28 Tester Tester

29 Fin du projet.


Télécharger ppt "ETUDE DUN SYSTEME DE COMPTAGE DE PIECES Compte-Rendu Projet microcontroleur Réalisés et presentés par : - SABIR Lihimdi - FATIMA ZOHRA El Merrakchi Année."

Présentations similaires


Annonces Google