interruption multiple PIC18F452
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

interruption multiple PIC18F452



  1. #1
    inviteea0a5ccc

    interruption multiple PIC18F452


    ------

    Bonjour, je désire géner plusieurs interruptions avec mon PIC 18F452:
    - une pour générer une base de temps de 4ms, par débordement du Timer1; je gère 5 afficheurs 6 segments par multiplexage,
    - une pour générer un signal carré de période variable (1ms à 3s) générer en mode comparaison avec le Timer3.

    Chacun des programmes fonctionnant indépendament fonction très bien. Mais lorsque je les combine la période du signal carré ne correspond plus.

    je pense que cela est du à des interruptions qui n'ont pas pu se réaliser.

    Comment faire pour régler ce problème ?

    Merci bien pour vos réponses.

    ps: ces deux interuptions fonctionnent en Haute priorité.

    -----

  2. #2
    invite03481543

    Re : interruption multiple PIC18F452

    Bonjour,

    n'étant pas devin, il faudrait nous poster ton code.

  3. #3
    inviteea0a5ccc

    Re : interruption multiple PIC18F452

    Bonjour, le programme est assez long. Je vous l'envoie quand même.
    A bientôt.

    ps: le compilateur utilisé est mcc18 de microchip.
    Fichiers attachés Fichiers attachés

  4. #4
    invite03481543

    Re : interruption multiple PIC18F452

    INTCONbits.GIE=1;

    Remplace par:

    INTCONbits.GIEH=1;

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

    Re : interruption multiple PIC18F452

    Bonjour,

    @ HULK28 : GIE et GIEH désignent le même bits mais c'est vrai qu'il vaut mieux appeler les variables par leur nom.

    Citation Envoyé par jipewily
    Mais lorsque je les combine la période du signal carré ne correspond plus.
    Ne correspond plus, c'est-à-dire ?

    Etant donné que tu remets le bit IF à 0 uniquement après avoir appelé la fonction de traitement des interruptions correspondante, je pense que le traitement d'une interruption est trop long et empêche l'autre de se faire à temps.

  7. #6
    sdec25

    Re : interruption multiple PIC18F452

    Je viens de voir que tu désactives une interruption dans le main :
    Code:
    PIE2bits.CCP2IE=0
    Peut-être qu'elle n'est pas réactivée à temps.

  8. #7
    inviteea0a5ccc

    Re : interruption multiple PIC18F452

    J'obtiens un signal de fréquence variable. On dirait un signal modulé.
    Je modifie mon fichier en tenant compte de vos remarques. Merci bien

  9. #8
    invite03481543

    Re : interruption multiple PIC18F452

    Citation Envoyé par sdec25 Voir le message
    Bonjour,

    @ HULK28 : GIE et GIEH désignent le même bits mais c'est vrai qu'il vaut mieux appeler les variables par leur nom.
    Pour éviter ce genre de soucis il est toujours préférable de se faire définitivement un fichier 'renom.h' qui permet d'utiliser les noms exact des registre et leurs bits associés, c'est plus pratique d'avoir les même noms que ceux de la datasheet et on évite ainsi les confusions.

    MCC18 utilise GIEH et GIE, pour confuser y a pas mieux je trouve, c'est l'un ou c'est l'autre.

  10. #9
    invite03481543

    Re : interruption multiple PIC18F452

    Citation Envoyé par sdec25 Voir le message
    Etant donné que tu remets le bit IF à 0 uniquement après avoir appelé la fonction de traitement des interruptions correspondante, je pense que le traitement d'une interruption est trop long et empêche l'autre de se faire à temps.
    C'est certain, il vaut mieux stopper les interruptions lorsqu'on recharge CCP2 ou un registre timer, d'autant qu'une des interruptions ne sert qu'à rafraichir un affichage donc pas urgent.

    Habituellement on crée un ordre de priorité en tenant compte des timmings nécessaires.

  11. #10
    inviteea0a5ccc

    Re : interruption multiple PIC18F452

    Salut à tous,
    j'ai résolu mon problème en passant avec un Quartz de 8 Mhz et en activant la PLL me permettant d'avoir en interne une fréquence 8*4=32 Mhz.
    En effet, une des interruptions était trop longue.
    Merci pour les différentes réponses qui m'ont été données.
    A bientôt .

  12. #11
    invitee0bbe70d

    Re : interruption multiple PIC18F452

    Salut,

    Une autre amélioration possible concerne le temps de réponse des interruptions.
    Depuis la version 3.xx du compilateur C18, plusieurs zones RAM utilisées par les fonctions sont automatiquement sauvegardées en entrant dans l'interruption. Si ton code dans l'interruption ne fait pas appel à certaines de ces fonctions tu peux demander au compilateur de ne PAS sauvegarder ces zones RAM, ce qui réduit le temps de sauvegarde et de restitution et améliore le temps de réponse.
    Je parle en l'occurence de l'option nosave suivie de "MATH_DATA", ".tmpdata".
    Voir le manuel C:\MCC18\doc\hlpC18ug.chm

    a+

  13. #12
    sdec25

    Re : interruption multiple PIC18F452

    Bonjour.
    Je m'incruste dans ce topic pour demander quelques précisions.
    Citation Envoyé par microchip Voir le message
    Je parle en l'occurence de l'option nosave suivie de "MATH_DATA", ".tmpdata".
    Comment savoir quelles fonctions utilisent ces zones RAM ? Pour MATH_DATA je suppose qu'il s'agit des fonctions de math.h mais pour tmpdata :
    Contains the compiler temporary variables for the non-interrupt service routine source.
    Si, dans l'interruption, on utilise une fonction qui est aussi utilisée ailleurs, on ne doit pas mettre nosave=".tmpdata" ?
    Merci.

  14. #13
    invitee0bbe70d

    Re : interruption multiple PIC18F452

    Bonjour,

    Citation Envoyé par sdec25 Voir le message
    Comment savoir quelles fonctions utilisent ces zones RAM ?
    Je n'ai pas de méthode miracle pour savoir quelle fonction utilise quoi moi non plus. Si l'interruption est très courte on peut juste faire des tests et prier

    Pour MATH_DATA je suppose qu'il s'agit des fonctions de math.h mais pour tmpdata :

    Si, dans l'interruption, on utilise une fonction qui est aussi utilisée ailleurs, on ne doit pas mettre nosave=".tmpdata" ?
    Merci.

    C'est aussi comme cela que j'interprète la documentation du C18.
    En général (sauf utilisation des librairies mathématiques si je me souviens bien) on peut supprimer la zone MATH_DATA.

    Si c'est vraiment très critique, mais c'est risqué... tu peux essayer de faire nosave=".tmpdata" et de vérifier le code compilé derrière pour voir s'il y a collision ou non (si tu es à l'aise en assembleur)

  15. #14
    sdec25

    Re : interruption multiple PIC18F452

    ok merci je vais essayer.

  16. #15
    sdec25

    Re : interruption multiple PIC18F452

    Alors j'ai fait quelques tests avec ce tmpdata et c'était bien ce qu'on pensait.
    La section .tmpdata comprend une dizaine d'octets dans le début de la RAM. Ils peuvent être utilisés par n'importe quel instruction dans une fonction qui n'est pas #pragma interrupt.
    Donc si on met nosave = section(".tmpdata") on ne peut appeler que des fonctions #pragma interrupt

Discussions similaires

  1. PWM sur Pic18f452 en C
    Par invite2a7ab739 dans le forum Électronique
    Réponses: 8
    Dernier message: 21/02/2010, 18h51
  2. pic18F452
    Par jltthierry dans le forum Électronique
    Réponses: 4
    Dernier message: 05/08/2007, 13h35
  3. PIC18F452 vers 16f628
    Par dreamstyle dans le forum Électronique
    Réponses: 0
    Dernier message: 27/05/2007, 17h37
  4. Pic18f452
    Par invite29283208 dans le forum Électronique
    Réponses: 1
    Dernier message: 31/03/2007, 23h10
  5. Can Pic18f452
    Par invite9f8cba25 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/05/2006, 16h17
Découvrez nos comparatifs produits sur l'informatique et les technologies.