PIC18f1320 avec un afficheur LCD
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 58

PIC18f1320 avec un afficheur LCD



  1. #1
    invite56c261eb

    PIC18f1320 avec un afficheur LCD


    ------

    Bonjour,

    Je dois réaliser un compte-tour pour moteur Brushless, pour cela je décide d'utiliser un PIC 18f1320 connecté à un afficheur LCD.
    J'ai réalisé le cablage sur une plaquette Labdec, et je programme via MPLAB sur C18.
    Le problème c'est que lorsque j'alimente la plaquette, le LCD affiche que des carrés noirs sur la première ligne.
    Est-ce que cela viendrait de mon montage ou de mon programme?

    Le principe de l'application reste simple, chaque fois que RB0 reçoit une impulsion le comptage est incrémenté.

    Voilà mon programme:

    /****************************** ****************************** ****************************** ***************
    * Tachymètre (compte-tour) numérique à base de capteur à effet Hall *
    * Quartz 20Mhz PIC 18F1320 *
    * *
    * Formule de calcul du timer0 : *
    * Temps=(256-valeur Décimale chargée TMR0) * 4 * (prescaler OPTION_REG) * 1/Oscillateur en Hz *
    * Ce qui donne: *
    * T=(256-0)*4*64*(1/20000000)= 0,0032768 >> pour avoir 0,999424 seconde à multiplier par cnt=305 *
    * 0,999424 étant pour ce quartz la valeur la plus proche de 1 seconde avec le timer0 *
    * *
    * Le capteur Hall connecté sur RB0 déclenche une interruption à chaque passage de l'aimant *
    ****************************** ****************************** ****************************** ***************/
    #include <p18f1320.h>
    #include <delays.h> // déclaration prototype fonctions delay
    #include <stdio.h> // pour avoir fonction sleep


    // Configuration des ports sur le LCD

    #define LCD_PORT PORTB // data afficheur ATTENTION Ports 4 bits faibles sur aff 4 bits forts

    #define LCD_E PORTAbits.RA1 // cde afficheur E
    #define LCD_RW PORTAbits.RA2 // cde afficheur RW
    #define LCD_RS PORTAbits.RA3 // cde afficheur RS

    #define LCD_D7 PORTBbits.RB7;
    #define LCD_D6 PORTBbits.RB6;
    #define LCD_D5 PORTBbits.RB5;
    #define LCD_D4 PORTBbits.RB4;

    // Orientation des ports
    #define LCD_E_DIR TRISAbits.TRISA1 // cde direction afficheur E
    #define LCD_RW_DIR TRISAbits.TRISA2 // cde direction afficheur RW
    #define LCD_RS_DIR TRISAbits.TRISA3 // cde direction afficheur RS

    #define LCD_D7_Direction TRISBbits.TRISB7;
    #define LCD_D6_Direction TRISBbits.TRISB6;
    #define LCD_D5_Direction TRISBbits.TRISB5;
    #define LCD_D4_Direction TRISBbits.TRISB4;


    //Déclaration des variables
    unsigned int temp,compteur,cnt,tour,i;
    unsigned char rotation_brute;
    unsigned short int seconde,sequence;
    void debordement (void);
    void Affiche_Compteur (void);
    void w_cde_nibble( unsigned char ); // ?crit le quartet fort du char x en mode cde
    void w_cde_octet( unsigned char ) ;// ?crit le quartet fort du char x en mode cde puis le quartet faible
    void w_data_octet( unsigned char ) ;// ?crit le quartet fort du char x en mode data puis le quartet faible

    // Declenchement de l'interuption -> Appelle de la fonction debordement
    #pragma code HIGH_INTERRUPT_VECTOR = 0x08
    void vecteur (void)
    {
    debordement();
    }
    #pragma code

    //****************************** ****************************** *****************
    void main(){ // Début du programme principal

    INTCON=0b10010000; // activer detection interruption front montant RB0 avec INTE et GIE
    T0CON = 0b00000101; // Config T0CON pour avoir prescaler 64 et le timer sur 16bits.
    INTCONbits.TMR0IE = 1; // Autorisation source d'interruption
    INTCONbits.GIE = 1; // Autorisation globale des interruptions
    TMR0L=0;
    TMR0H=0;
    T0CONbits.TMR0ON = 1; // Timer 0 marche (debut du comptage)
    ADCON0=0; // ADC désactivé
    TRISA=1; // PORTA configuré en entrée
    TRISB=0b00000001; // PORTB configuré en sortie sauf port0
    PORTA=0;
    PORTB=0;
    compteur=0;
    temp=0;
    seconde=0;
    tour=0;

    //****************************** ****************************** ******************

    //***** init LCD ****************************
    w_cde_nibble( 0x30 ); // 3 control
    Delay1KTCYx(750); // delay = 15mS
    w_cde_nibble( 0x30 ); // 3 control
    Delay1KTCYx(250); // delay = 5mS
    w_cde_nibble( 0x30 ); // 3 control
    Delay10TCYx(50); // delay = 100?S
    w_cde_nibble( 0x20 ); // 2 mode 4 bits

    w_cde_octet( 0x28 ) ;// fonction set attention si 2F il ecrit en bas a droite ? l'envers avec 4 caracteres de masques (affiche a partir du 5eme car ecrit !)
    w_cde_octet( 0x0F ) ;// display on
    w_cde_octet( 0x06 ) ;// mode d'entree
    w_cde_octet( 0x01 ) ;// clear display (facultatif)
    w_cde_octet( 0x80 ) ;// DDRAM 0000 (facultatif)
    w_cde_octet( 0x02 ) ;// home (facultatif)
    Delay1KTCYx(250); // delay = 5mS INDISPENSABLE pour CDE HOME !


    w_cde_octet( 0x01 ) ;// clear display (facultatif)
    w_cde_octet( 0x83 ) ;// 4eme case de la 1ère ligne
    w_data_octet( 0x54 ) ;// T
    w_data_octet( 0x41 ) ;// A
    w_data_octet( 0x43 ) ;// C
    w_data_octet( 0x48 ) ;// H
    w_data_octet( 0x59 ) ;// Y
    w_data_octet( 0x4D ) ;// M
    w_data_octet( 0x45 ) ;// E
    w_data_octet( 0x54 ) ;// T
    w_data_octet( 0x52 ) ;// R
    w_data_octet( 0x45 ) ;// E

    w_cde_octet( 0xC0 ) ;// passage seconde ligne
    w_cde_octet( 0xC8 ) ;// passage milieu seconde ligne

    w_data_octet( 0x54 ) ;// T
    w_data_octet( 0x52 ) ;// R
    w_data_octet( 0x2F ) ;// /
    w_data_octet( 0x4D ) ;// M
    w_data_octet( 0x4E ) ;// N

    //boucle infinie
    while(1)

    {

    Affiche_Compteur(); // Fonction d'affichage sur LCD

    } //fin de while

    } // fin de main

    void Affiche_Compteur (void){ // fonction d'affichage de nombre sur plusieurs digits

    unsigned int temp;
    unsigned char rotation_brute;

    rotation_brute = (compteur/1000)+48;
    temp = compteur % 1000;
    w_cde_octet( 0xC0 ) ; // passage seconde ligne
    w_cde_octet( 0xC3 ) ; // passage à la 4eme case de la seconde ligne
    w_data_octet( rotation_brute ) ; // Afficher les milliers
    rotation_brute = (temp/100)+48;
    temp = temp % 100;
    w_data_octet( rotation_brute ) ;// // Afficher les centaines
    rotation_brute = (temp/10)+48;
    w_data_octet( rotation_brute ) ;// // Afficher les dizaines
    rotation_brute = (temp % 10)+48;
    w_data_octet( rotation_brute ) ;// // Afficher les unités

    }


    //***** ecriture des fonctions ****************************
    void w_cde_nibble( unsigned char x) // ?crit le quartet fort du char x en mode cde
    {
    unsigned char a;
    LCD_RS=0; // mode cde
    LCD_E=1; // monte enable
    a=x>>4; // l'afficheur est sur les pds faibles du port !
    LCD_PORT=a; // ecriture sur le port
    LCD_E=0; // descends enable
    Delay10TCYx(50); // delay = 100?S
    }


    void w_cde_octet( unsigned char x) // ?crit le quartet fort du char x en mode cde puis le quartet faible
    {
    unsigned char a;
    LCD_RS=0; // mode cde
    LCD_E=1; // monte enable
    a=x>>4; // l'afficheur est sur les pds faibles du port !
    LCD_PORT=a; // ecriture sur le port
    LCD_E=0; // descends enable
    Delay10TCYx(5); // delay = 10?S
    LCD_E=1; // monte enable
    LCD_PORT=x; // ecriture sur le port
    LCD_E=0; // descends enable
    Delay10TCYx(50); // delay = 100?S
    }

    void w_data_octet( unsigned char x ) // ?crit le quartet fort du char x en mode data puis le quartet faible

    {
    unsigned char a;
    LCD_RS=1; // mode data
    LCD_E=1; // monte enable
    a=x>>4; // l'afficheur est sur les pds faibles du port !
    LCD_PORT=a; // ecriture sur le port
    LCD_E=0; // descends enable
    Delay10TCYx(5); // delay = 10?S
    LCD_E=1; // monte enable
    LCD_PORT=x; // ecriture sur le port
    LCD_E=0; // descends enable
    Delay10TCYx(50); // delay = 100?S
    }

    //****************************** ****************************** ******************
    //Interruption
    void debordement() {
    cnt++;
    TMR0L = 0; // Valeur décimale préchargée à soustraire à 256
    TMR0H = 0;

    INTCONbits.TMR0IF = 0; // On remet a 0 le flag pour pouvoir détecter un autre debordement
    if(INTCONbits.INT0IF==1){ // Si une interruption du port B0 est détectée
    tour++; // incrémenter la variable de détection d'aimant
    } // fin if



    INTCON = 0x20; // Initialisation du registre timer et interruption
    if(cnt==305){ // lorsque l'on compte 1 seconde (voir commentaire entête)
    compteur= (tour/8)*60; // Multiplier le nombre de tour/seconde par 60 (pour tour/min)
    i=tour;
    cnt=0; // RAZ variable cnt
    tour=0;
    INTCONbits.INT0IE = 1; // Activer RB0/INT interruption
    seconde++;
    } // Fin if

    } //fin interruption
    Je vous remercie de vos réponses

    -----

  2. #2
    katmai

    Re : PIC18f1320 avec un afficheur LCD

    Salut,

    Tu as bien cablé le contraste?

    Je me souviens avoir eu un soucis comme ça.

    A+

  3. #3
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Ben lorsque je fais varier le potentiomètre, ça fait varier le contraste. Tout me semble bon de ce côté.
    Y a des risques qu'il soit câblé à l'envers?

  4. #4
    paulfjujo

    Re : PIC18f1320 avec un afficheur LCD

    bonjour


    Le problème c'est que lorsque j'alimente la plaquette, le LCD affiche que des carrés noirs sur la première ligne.
    c'est deja bon signe !

    because
    Code:
     #define LCD_RW	PORTAbits.RA2 // cde afficheur RW
    la ligne R/W du LCD est bien au 0V ?

    Mettre une tempo de 100 à 500mS juste au debut du programme ,avant l'init du LCD...
    Dernière modification par paulfjujo ; 16/05/2014 à 16h13.

  5. A voir en vidéo sur Futura
  6. #5
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Citation Envoyé par paulfjujo Voir le message
    bonjour




    c'est deja bon signe !

    because
    Code:
     #define LCD_RW	PORTAbits.RA2 // cde afficheur RW
    la ligne R/W du LCD est bien au 0V ?

    Mettre une tempo de 100 à 500mS juste au debut du programme ,avant l'init du LCD...
    D'accord, je vais la rajouter, j'espère que ça vient de là, parce que je suis absolument pas sûr de mon programme non plus.
    Le R/W du LCD doit être à 0? Je l'ai câblé au port RA2 de mon PIC (comme indiqué dans le programme)

  7. #6
    paulfjujo

    Re : PIC18f1320 avec un afficheur LCD

    sauf, qu'on ne voit pas LCD_RW utilisé dans le programme...

  8. #7
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Citation Envoyé par paulfjujo Voir le message
    sauf, qu'on ne voit pas LCD_RW utilisé dans le programme...
    Effectivement, autant pour moi!
    Je vais modifier cela, mais je doute que ça vienne uniquement de ça

  9. #8
    paulfjujo

    Re : PIC18f1320 avec un afficheur LCD

    Code:
    w_data_octet( 0x54 ) ;// T
    w_data_octet( 0x52 ) ;// R
    w_data_octet( 0x2F ) ;// /
    w_data_octet( 0x4D ) ;// M
    w_data_octet( 0x4E ) ;// N
    
    
      RAjouter ici une bonne tempo 
                 pour verifier deja si le message s'affiche, avant d'entrer dans la boucle
     ------------
    
    //boucle infinie
    while(1)
    
    {
    
    Affiche_Compteur(); // Fonction d'affichage sur LCD
    
    } //fin de while

  10. #9
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Rajouté, aucun résultat. Si vous pensez qu'il n'y pas d'autre erreur dans mon programme, ça doit sûrement venir de mon câblage alors..

  11. #10
    invite3026ff02

    Re : PIC18f1320 avec un afficheur LCD

    Moi j'avais eu un soucis avec le RW et j'ai fini par le mettre à la mass et depuis ça la fonctionner...

  12. #11
    spown

    Re : PIC18f1320 avec un afficheur LCD

    Bonjour/bonsoir est bienvenue sur FUTURA,

    Code:
    #define LCD_E	PORTAbits.RA1 // cde afficheur E
    #define LCD_RW	PORTAbits.RA2 // cde afficheur RW
    #define LCD_RS	PORTAbits.RA3 // cde afficheur RS
    Remplace PORT par LAT

  13. #12
    paulfjujo

    Re : PIC18f1320 avec un afficheur LCD

    +1 pour Spown

    mais aussi ici !

    Code:
    #define LCD_PORT LATB	// data afficheur ATTENTION Ports 4 bits faibles sur aff 4 bits forts
    
    #define LCD_D7 LATBbits.LATB7;   // quoique inutilisé ?
    #define LCD_D6 LATBbits.LATB6;
    #define LCD_D5 LATBbits.LATB5;
    #define LCD_D4 LATBbits.LATB4;

    d'autre part,il serait plus judiceux d'armer les interrupts
    APRES l'init du LCD, Tranquille !....

    Code:
    void main(){ // Début du programme principal
    
    INTCON=0b10010000; // activer detection interruption front montant RB0 avec INTE et GIE
    T0CON = 0b00000101; // Config T0CON pour avoir prescaler 64 et le timer sur 16bits.
    IADCON0=0; // ADC désactivé
    TRISA=1; // PORTA configuré en entrée
    TRISB=0b00000001; // PORTB configuré en sortie sauf port0
    LATA=0;
    LATB=0;
    compteur=0;
    temp=0;
    seconde=0;
    tour=0;
    //*****	init LCD ****************************
    w_cde_nibble( 0x30 ); // 3 control
    Delay1KTCYx(750);	// delay = 15mS
    .... etc .......
    ............
    w_data_octet( 0x4E ) ;// N
    
    INTCONbits.TMR0IE = 1; // Autorisation source d'interruption
    INTCONbits.GIE = 1; // Autorisation globale des interruptions
    TMR0L=0;
    TMR0H=0;
    T0CONbits.TMR0ON = 1; // Timer 0 marche (debut du comptage)
    
    //boucle infinie
    while(1)
    {
    Affiche_Compteur(); // Fonction d'affichage sur LCD
    
    } //fin de while
    } // fin de main

  14. #13
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Je vais refaire le montage, + corriger avec vos modifications demain matin et je vous tiens au courant merci!

  15. #14
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Quand je change PORTA par LATA, ça me met ces erreurs:

    Error [1205] unknown member 'RA3' in '__tag_10'
    Error [1131] type mismatch in assignment

    Je vais essayer en changeant juste les PORTB et je vais voir ce que ça me donne.

  16. #15
    invitefa96bd8f

    Re : PIC18f1320 avec un afficheur LCD

    LATAbits.LATA1 par exemple

  17. #16
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Et LATBbits.LATB4 aussi?
    Parce que bizarrement LATBbits.RB4 ça compile sans soucis, mais pas LATAbits.RA1

  18. #17
    invitefa96bd8f

    Re : PIC18f1320 avec un afficheur LCD

    Si il compile avec LATBbits.RB4 : Ya un soucis !
    Enfin du moins, ca me semble bien bizarre.

  19. #18
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    J'ai fait avec vos modifications:
    Ça me fait exactement la même chose. Le LCD s'allume avec les carrés noirs mais rien ne se passe.
    Du coup je regarde si ma LABDEC n'a pas un soucis, je mesure la tension à plusieurs endroits. Aux bornes de OSC1 et OSC2 du pic, j'ai 2.5V aux bornes d'un condensateur de 22pf, mais j'ai 0v aux bornes du 2eme. C'est peut-être pour ça... Je l'espère en tout cas

  20. #19
    invitefa96bd8f

    Re : PIC18f1320 avec un afficheur LCD

    Si tu fais des emsures sur ton quartz, tu modifies sont fonctionnement, peut etre qu'avec une sonde x10 ou x100 tu peux mesurer...
    Le plus simple est deja de voir si ton micro tourne a la bonne frequence.

    fais ce test (peu importe le port, et mesure a l'oscillo la période en sortie):

    Code:
    	boucle:
    
    	LATBbits.LATB5 = 0;
    		_asm 
    		NOP
    		NOP		//4*NOP + CLEAR RB7 = 5 cycles
    		NOP
    		NOP 
    		_endasm
    	LATBbits.LATB5 = 1;
    		_asm 
    		NOP		//2*NOP + SET RB7 + GOTO = 5 cycles
    		NOP 
    		_endasm
    	goto boucle;	//10 cycles, soit 40 temps d'horloge. Mesure de la période du signal, a diviser par 40 pour avoir la periode de l'oscillateur

  21. #20
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Je vais voir mon prof aujourd'hui ou demain normalement, je vous tiens au courant. Merci de vos réponses rapides en tout cas!

  22. #21
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    On a toujours pas trouvé le problème...
    Du coup je vais essayer une autre solution

  23. #22
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    J'utilise les ports RA1 à RA3, et RB4 à RB7, et RB0 pour les interruptions.
    Est-ce que les ports non utilisés doivent être branchés?

  24. #23
    invitefa96bd8f

    Re : PIC18f1320 avec un afficheur LCD

    Tu as effectué mon test ? pour voir si le PIC tourne à la bonne fréquence (voir meme si il tourne?) ?

  25. #24
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Oui et je n'ai eu aucun résultat

  26. #25
    invitefa96bd8f

    Re : PIC18f1320 avec un afficheur LCD

    qu'entends tu pas aucun résultat ? pas de signal en sortie ?

  27. #26
    paulfjujo

    Re : PIC18f1320 avec un afficheur LCD

    Citation Envoyé par gautyy5 Voir le message
    Quand je change PORTA par LATA, ça me met ces erreurs:
    Error [1205] unknown member 'RA3' in '__tag_10'
    Error [1131] type mismatch in assignment
    la syntaxe est
    LATABits.LATA3 et non RA3
    de meme pour B4
    LATBbits.LATB4

    les 4 bits de poids faibles Data sur le LCD sont-ils reliés au 0V ?

  28. #27
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    J'ai changé de PIC et là ça marche! (C'est à n'y rien comprendre!)
    Maintenant je me bats avec les interruptions:

    Code:
    *     Formule de calcul du timer0 :                                                                                                     *
    *     Temps=(256-valeur Décimale chargée TMR0) * 4 * (prescaler OPTION_REG) * 1/Oscillateur en Hz             *
    *     Ce qui donne:                                                                                                                                       *
    *     T=(256-0)*4*64*(1/20000000)= 0,0032768  >> pour avoir 0,999424 seconde  à multiplier par cnt=305   *
    *     0,999424 étant pour ce quartz  la valeur la plus proche de 1 seconde avec le timer0                *
    Le but est donc de configurer de telle sorte à ce que la valeur cnt s'incrémente toutes les oscillations du Quartz (donc toutes les 0.0032768) de telle sorte à ce que lorsqu'il sera égal à 305, cela fera 1 seconde de fonctionnement.
    Sauf que je n'arrive pas à l'incrémenter comme cela.

    Voilà mon code:
    Code:
    //sous prog d'int
    void MyInterrupt(void);
    
    // on déclare que lors d'une interruption
    #pragma code highVector=0x08
    void atInterrupthigh(void)
    {
    // on doit éxecuter le code de la fonction MyHighInterrupt
    _asm GOTO MyInterrupt _endasm		
    }
    #pragma code // retour à la zone de code
    
    // ************************
    // ****  Interruptions ****
    // ************************
    #pragma interrupt MyInterrupt 
    void MyInterrupt(void)
    {
    				cnt++;
                    TMR0L = 0;                             // Valeur décimale préchargée à soustraire à 256
    			    TMR0H = 0;
    
    
    
                     if(INTCONbits.INT0IF==1){             // Si une interruption du port B0 est détectée
                                        tour++;            // incrémenter la variable de tour
                                        }                  // fin if
                     INTCON = 0x20;                        // Initialisation du registre timer et interruption
                     if(cnt==305){                         // lorsque l'on compte 1 seconde (voir commentaire entête)
                                compteur= tour*60;         // Multiplier le nombre de tour/seconde par 60 (pour tour/min)
                                i=tour;
                                cnt=0;                     // RAZ variable cnt
                                tour=0;
                                INTCONbits.INT0IE = 1;     // Activer RB0/INT interruption
                                seconde++;
                      }                                    // Fin if
    
       }       //fin interruption
    J'ai rajouté un GBF de 1HZ sur RB0, ce qui fait qu'il devrait m'afficher 60tr/mn, mais le résultat reste bloqué à 0 à cause justement de "cnt" (on ne rentre jamais dans la boucle car il n'arrive pas à 305), et la variable "tour" s'incrémente trop lentement.

  29. #28
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Il faudra que je fasse une deuxième interruptions sur le timer0, pour que dès qu'il arrive à 255, j'incrémente mon cnt. Il faut ainsi faire une 2eme interruption.
    Donc une sur RB0, et une sur le timer0. Comment faire svp?

  30. #29
    paulfjujo

    Re : PIC18f1320 avec un afficheur LCD

    bonsoir,


    Citation Envoyé par gautyy5 Voir le message
    Il faudra que je fasse une deuxième interruptions sur le timer0, pour que dès qu'il arrive à 255, j'incrémente mon cnt. Il faut ainsi faire une 2eme interruption.
    Donc une sur RB0, et une sur le timer0. Comment faire svp?

    les variables utilisees dans l'interruption doivent etre declarees volatile

    Code:
    volatile int cnt ;

  31. #30
    invite56c261eb

    Re : PIC18f1320 avec un afficheur LCD

    Voilà ce que j'ai fait (je ne sais pas si c'est comme ça):
    Code:
    //sous prog d'int
    void Interrupt_B0(void);
    void Interrupt_Timer(void);
    
    // on déclare que lors d'une interruption
    #pragma code highVector=0x08
    void atInterrupthigh(void)
    {
    // on doit éxecuter le code de la fonction MyHighInterrupt
    _asm GOTO Interrupt_B0 _endasm		
    }
    #pragma code // retour à la zone de code
    
    
    #pragma code lowVector=0x18
    void atInterruptlow(void)
    {
    // on doit éxecuter le code de la fonction MyLowInterrupt
    _asm GOTO Interrupt_Timer _endasm		
    }
    #pragma code // retour à la zone de code
    
    
    // ************************
    // ****  Interruptions ****
    // ************************
    #pragma interrupt Interrupt_B0
    #pragma interrupt Interrupt_Timer
    
    void Interrupt_B0(void)
    {
                     if(INTCONbits.INT0IF==1){             // Si une interruption du port B0 est détectée
                                        tour++;            // incrémenter la variable de tour
                                        }                  // fin if
                     INTCON = 0x20;                        // Initialisation du registre timer et interruption
                     if(cnt==305){                         // lorsque l'on compte 1 seconde (voir commentaire entête)
                                compteur= tour*60;         // Multiplier le nombre de tour/seconde par 60 (pour tour/min)
                                i=tour;
                                cnt=0;                     // RAZ variable cnt
                                tour=0;
                                INTCONbits.INT0IE = 1;     // Activer RB0/INT interruption
                                seconde++;
                      }                                    // Fin if
    
       }       
    
    void Interrupt_Timer(void)
    {
    			if (INTCONbits.TMR0IF)
    					{
    						cnt++;
    						INTCONbits.TMR0IF = 0;
    					}
    
    }
    Et j'ai comme erreur:
    Code:
    MPLINK 3.90, Linker
    Copyright (c) 2004 Microchip Technology Inc.
    Error - could not find file 'c018i.o'.
    Errors    : 1
    Qu'est-ce que ça signifie?

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Piloter un afficheur avec un pic
    Par invite9702c63e dans le forum Électronique
    Réponses: 21
    Dernier message: 28/04/2010, 10h49
  2. compteur decompteur avec afficheur
    Par invite00671cf1 dans le forum Électronique
    Réponses: 17
    Dernier message: 28/09/2007, 20h57
  3. afficheur LCD avec clavier
    Par invite412b515c dans le forum Électronique
    Réponses: 3
    Dernier message: 19/04/2007, 19h24
  4. Problème avec afficheur LCD
    Par invite890ff058 dans le forum Électronique
    Réponses: 5
    Dernier message: 20/12/2005, 19h00
  5. Gestion d'un afficheur avec un PIC
    Par invitee1ad6ffc dans le forum Électronique
    Réponses: 3
    Dernier message: 08/12/2005, 22h28
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...