PIC18F6722 - Problème avec le Timer1
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

PIC18F6722 - Problème avec le Timer1



  1. #1
    invite3c35244f

    PIC18F6722 - Problème avec le Timer1


    ------

    Bonjour,

    voila, j'ai un soucis, j'utilise un PIC18F6722, et j'utilise une source externe pour le Timer1. Il s'agit d'une sortie 32Khz de ma RTCC DS1306. Elle est cablée sur le port RC0/T1OSO.

    Dans mon programme, j'initialise bien mon timer:
    Code:
      T1CON = 0b10000110;				// Initialisation timer1 - 16bits Timer/Ext source T1OSO
      TMR1H = 0x80;         			// Fixe la valeur du registre TMR1H
      TMR1L = 0x00;         			// Fixe la valeur du registre TMR1L
      T1CONbits.TMR1ON = 1;				// Enable Timer 1
      PIR1bits.TMR1IF = 0;           	// Initialise le flag TMR0IF d'IT du Timer 1
      PIE1bits.TMR1IE = 1;           	// Autorise les interruptions de TMR1
    
      RCONbits.IPEN = 1;				// Activation des niveaux de priorités
      INTCONbits.GIE = 1;              	// Autorise toutes les interruptions
    Et voila ma routine d'IT:
    Code:
    #pragma interrupt HighInterrupt
    void HighInterruptCde(void)
    {
      if (RCONbits.TO == 0)				//	Test du drapeau d'IT du WDT
    	{
         _asm 
    	 RESET
    	 _endasm
        }
    
     if (PIE1bits.TMR1IE == 1)
    	{
    	 if(PIR1bits.TMR1IF == 1)
    		{
    		if (BL_POWERON == 1)
    			{
    			BL_POWERON = 0;
    			}
    		else if (BL_POWERON == 0)
    			{
    			BL_POWERON = 1;
    			}
    	  	TMR1H = 0x80;         			// Fixe la valeur du registre TMR1H
      		TMR1L = 0x00;         			// Fixe la valeur du registre TMR1L
    		PIR1bits.TMR1IF = 0;
    		}
    	}
    
    }
    
    #pragma code high_vector=0x08
    void HighInterrupt(void)
    {
    	_asm 
    	goto HighInterruptCde
    	_endasm
    }
    #pragma code
    Et malheureusement, je n'accède qu'une seule fois a la routine d'interruption, et j'ai beau remettre le flag TMR1IF à 0, même s'il repasse à 1, il ne va pas en interruption...

    Je ne comprend pas!! Auriez vous une explication?

    Merci d'avance,

    PS: J'ai vu qu'il y avait une Errata sheet sur le Timer1 pour sur composant, mais je ne comprend pas trop...
    http://ww1.microchip.com/downloads/e...Doc/80329B.pdf

    Merci d'avance

    -----

  2. #2
    invite3c35244f

    Re : PIC18F6722 - Problème avec le Timer1

    Je vais apporter un petit éclaircissement, en fait, la raison pour laquelle je ne vais qu'une fois dans l'IT du Timer 1, c'est parce que le bit INTCONbits.GIE passe à 0 à un moment, et donc, il n'y a plus de génération d'IT pour le module timer 1.

    J'ai fais le test de remettre a 1 le bit GIE a chaque IT du Timer 1, et la ça marche, mais ce n'est pas très propre à mon gout...

    Pourquoi le bit passe GIE passe a 0 ??

    Merci d'avance

    et bonne journée a tous

  3. #3
    invite3c35244f

    Re : PIC18F6722 - Problème avec le Timer1

    Je suis perdu !!!!
    Maintenant, lorsque je suis dans ma routine d'IT, dès que j'efface le flag TMR0IF, il me met le bit GIE à 0 !!!

  4. #4
    RISC

    Re : PIC18F6722 - Problème avec le Timer1

    Salut,

    A voir ton code j'ai l'impression que tu n'initialises pas correctement les priorités dans les interruptions...Jette un oeil chez Bigonoff pour les détails.

    En bref :
    Si tu décides d'utiliser les priorités (RCONbits.IPEN = 1 il n'y a plus de GIE et PEIE mais GIEH et GIEL.
    Il faut IMPERATIVEMENT programmer 3 choses pour chaque interruption :
    * l'autorisation d'interruption
    * le flag d'interruption
    * la priorité de l'interruption (exemple, pour le TIMER1 il faut initialiser IPR1bits.T1IP et pour le TIMER0, INTCON2bits.TMR0IP

    a+

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

    Re : PIC18F6722 - Problème avec le Timer1

    Bonjour,

    merci RISC pour ces informations, par contre, je n'y arrive toujours pas, même en voulant faire sans priorité (IPEN = 0).

    Le problème, dès qu'il y a une détection d'une interruption(générée par un débordement du Timer), j'ai le bit GIE qui passe à 0, et donc, il n'y a plus ensuite de détection de dépassement du Timer...

    Je ne comprend pas pourquoi... Auriez vous une idée?

    Merci d'avance

  7. #6
    invite3c35244f

    Re : PIC18F6722 - Problème avec le Timer1

    Re Bonjour...

    alors voila, je crois qu'il est très urgent que je prenne des vacances !!! Encore une erreur bête !!!!

    Donc voila ce que j'avais pour la déclaration de ma routine d'IT (ma connerie en Gras):
    Code:
    #pragma interrupt HighInterrupt
    void HighInterruptCde(void)
    {
      if (RCONbits.TO == 0)				//	Test du drapeau d'IT du WDT
    	{
         _asm 
    	 RESET
    	 _endasm
        }
    
     if (PIE2bits.TMR3IE == 1)
    	{
    	 if(PIR2bits.TMR3IF == 1)
    		{
    		CPT_View++;
    	  	TMR3H = 0x80;         			// Fixe la valeur du registre TMR3H
      		TMR3L = 0x00;         			// Fixe la valeur du registre TMR3L
    
    		PIR2bits.TMR3IF = 0;
    		}
    	}
    }
    
    #pragma code high_vector=0x08
    void HighInterrupt(void)
    {
    	_asm 
    	goto HighInterruptCde
    	_endasm
    }
    #pragma code
    Et voila ce que j'ai fais pour corriger :
    Code:
    #pragma interrupt HighInterruptCde
    void HighInterruptCde(void)
    {
      if (RCONbits.TO == 0)				//	Test du drapeau d'IT du WDT
    	{
         _asm 
    	 RESET
    	 _endasm
        }
    
     if (PIE2bits.TMR3IE == 1)
    	{
    	 if(PIR2bits.TMR3IF == 1)
    		{
    		CPT_View++;
    	  	TMR3H = 0x80;         			// Fixe la valeur du registre TMR3H
      		TMR3L = 0x00;         			// Fixe la valeur du registre TMR3L
    
    		PIR2bits.TMR3IF = 0;
    		}
    	}
    }
    
    #pragma code high_vector=0x08
    void HighInterrupt(void)
    {
    	_asm 
    	goto HighInterruptCde
    	_endasm
    }
    #pragma code
    J'ai remplacé :
    #pragma interrupt HighInterrupt
    par
    #pragma interrupt HighInterruptCde

    Et tout rentre dans l'ordre.... jusqu'a ma prochaine étourderies !!!

    Bonne journée a tous

Discussions similaires

  1. Problème TIMER1 PIC
    Par invite3d4f2ff3 dans le forum Électronique
    Réponses: 5
    Dernier message: 27/04/2010, 17h00
  2. Probleme Timer1 PIC16f690
    Par invite6c0036c2 dans le forum Électronique
    Réponses: 25
    Dernier message: 27/01/2010, 22h39
  3. interruption avec timer1
    Par invite29c140ac dans le forum Électronique
    Réponses: 26
    Dernier message: 05/04/2009, 16h14
  4. réveiller mon pic avec timer1?
    Par invitee2a2ed9a dans le forum Électronique
    Réponses: 3
    Dernier message: 11/03/2008, 08h15
  5. Probleme avec Timer1 sur 16F876
    Par invited72fbbcc dans le forum Électronique
    Réponses: 4
    Dernier message: 27/12/2006, 15h02
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...