Bug avec les interruptions - PIC
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Bug avec les interruptions - PIC



  1. #1
    *Baby*

    Bug avec les interruptions - PIC


    ------

    Salut,

    J'ai vient de tomber sur un bug vraiment bizarre.


    J'utilise un PIC16F688.

    Mon programme (codé est en ASM) fonctionne de la manière suivante :

    J'ai configuré un timer 0 qui me génère un interruption toutes les x secondes. Dans cette interruption, je met en forme le signal pour une émission infra-rouge à l'aide d'une pin du PIC, il y a donc que des bcf et bsf sur cette pin et des tempos.

    Ensuite, j'ai également une interruption de l'UART lorsque je réceptionne une donnée sur le port Rx du PIC.

    Mon programme fonctionne très bien, sauf que au bout de environ 2 à 3 minutes, il se bloque. En fait il se bloque dans les interruptions, c'est à dire qu'il fait en boucle l'interruption du timer 0 et ne revient plus jamais à mon programme principal.


    Le temps d'exécution de ma routine d'interruption (pas celle de l'UART, l'autre) est assez long, environ 30ms.

    Je voulais donc savoir si il y a un temps maximum pour les routines d'interruption ou si voyez une autre source d'erreur.

    Merci d'avance.


    J'ai remarqué que lorsque je supprime toutes les instructions qui sont dans ma routine d'interruptions du timer 0, le bug ne ce produit pas.

    -----

  2. #2
    invitefddea992

    Re : Bug avec les interruptions - PIC

    Bonsoir

    quand tu rentres dans ton interruption est ce que tu sauves w et status dans des memoire et avant ton retfie tu leur redonnes leurs valeurs ,,

    voila premiere chose a voir



  3. #3
    *Baby*

    Re : Bug avec les interruptions - PIC

    Oui Oui, puisque mon code fonctionne pendant 2 à 3 minutes.

    Toute cette partie est réalisée dans les règles de l'art selon le fascicule de Bigonoff.

  4. #4
    gedonet

    Re : Bug avec les interruptions - PIC

    Bonjour
    Avant de sortir d'une interruption, il faut effacer le flag (INTCON,TMR0IF), sinon c'est retour dans l'interruption.
    En plus il faut prendre garde à la taille de la pile, 8 niveaux sinon c'est le plantage, une interruption compte pour un niveau.
    Gilles

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

    Re : Bug avec les interruptions - PIC

    Salut,

    Postes ton code...
    Si ton interruption dure si longtemps c'est qu'il faut revoir l'architecture de ton logiciel.
    Je suppose à 99% que ton PB est généré par le code dans ton interruption...

    a+

  7. #6
    *Baby*

    Re : Bug avec les interruptions - PIC

    Je crois bien que le problème vient de la pile, j'utilise déjà 5 niveau rien que dans mon interruption.

    Je vais donc déplacer le code exécuté dans mon interruption au niveau du programme principale, afin de diminuer les temps d'exécution de la fonction d'interruptions et libérer un niveau de la pile.

    Je posterais mon code si cela ne marche pas.

    Merci.

  8. #7
    *Baby*

    Re : Bug avec les interruptions - PIC

    Je confirme, je me suis permis d'utiliser 10 niveaux sur la piles.

    Et oui pourquoi s'en privé ?? lol

  9. #8
    ftorama

    Re : Bug avec les interruptions - PIC

    Citation Envoyé par *Baby* Voir le message
    Je confirme, je me suis permis d'utiliser 10 niveaux sur la piles.

    Et oui pourquoi s'en privé ?? lol
    Parce que sur un microcontrôleur digne de ce nom, ça n'est pas un problème

    Plus sérieusement, une routine d'interruption doit être la plus courte possible et autant que faire se peut, ne pas faire appel à des fonctions. Si il y a des traitements lourds à effectuer, il vaut mieux les mettre dans ton programme principal, et les déclencher via un flag par exemple

  10. #9
    invite98765423456
    Invité

    Re : Bug avec les interruptions - PIC

    Citation Envoyé par ftorama Voir le message
    Parce que sur un microcontrôleur digne de ce nom, ça n'est pas un problème
    Je confirme ce que dit ftorama. Sur les µC qui en sont réellement (8051, AVR, 68xx, ) il y a a un registre qui s’appelle pointeur de pile et qui permet d'utiliser (en data ou adresse de retour) l'entièreté de la ram.

    th
    Les pics 16 ou 18 à ce point de vue c'est de la daube..

  11. #10
    *Baby*

    Re : Bug avec les interruptions - PIC

    Vous êtes méchant avec ces petites bébêtes. LoL

    Les (8051, AVR, 68xx, ) ont ils beaucoup d'autres avantages ?


    Pour ma routine d'interruption, j'ai tout viré et je fais les ce qui est long dans le programme principal.

  12. #11
    ftorama

    Re : Bug avec les interruptions - PIC

    Citation Envoyé par *Baby* Voir le message
    Vous êtes méchant avec ces petites bébêtes. LoL

    Les (8051, AVR, 68xx, ) ont ils beaucoup d'autres avantages ?


    Pour ma routine d'interruption, j'ai tout viré et je fais les ce qui est long dans le programme principal.
    Si on compare AVR à PIC16:
    - une vitesse d'éxécution 4 fois plus rapides. Allez pour DavidDB, il existe quelques PIC16 avec PLL pour palier ce défaut
    - 32 registres de travail au lieu d'un. Moins de transferts, on gagne encore du temps.
    - un vecteur d'interruption par interruption et non un seul pour tout le monde ou il faut faire le tri
    - une mémoire linéaire et non paginée
    - une taille de pile non imposée. C'est d'ailleurs une des raisons pour lesquelles Gcc n'a jamais supporté officiellement les PIC
    - une très grande compatibilité entre références. Les registres sont au même endroit, les vecteurs d'interruption itou, les périphériques sont relativement constants
    - un fort courant de sortie sur les ports permettant de réduire les composants externes, notamment les transistors de puissance et autres buffers
    - des pull-ups intégrées sur toutes les broches
    - une interface de programmation des plus simple. Pour un premier programmateur, 4 résistances sur le port parallèle suffisent, et tu peux ensuite te faire toi-même ton programmateur USB (voir USBASP, AVR910, etc.)
    - des périphériques désactivés par défaut. Dans ton programme, tu n'initialises que ce dont tu as besoin. Sur PIC16 (et sans doute sur PIC18), tu dois tout désactiver.
    - le support plein et entier de Gcc

    Sur les PIC18, l'écart s'est un peu resserré, mais la limite de courant des ports est toujours présente, et faire son programmateur relève toujours du quasi-impossible. Et pour Gcc, il faudra repasser

    Bref, comme à chaque fois que l'on ose dire du mal de ces petites bêtes, même en argumentant, la garde prétorienne va débarquer et descendre en flamme tout argument. Ne t'inquiète pas, c'est normal

  13. #12
    *Baby*

    Re : Bug avec les interruptions - PIC

    Tous tes arguments sont attirants. Aurait tu un bon cours/tutoriel pour commencer sur AVR en langage C ?


    Merci d'avance

  14. #13
    ftorama

    Re : Bug avec les interruptions - PIC

    Citation Envoyé par *Baby* Voir le message
    Tous tes arguments sont attirants. Aurait tu un bon cours/tutoriel pour commencer sur AVR en langage C ?


    Merci d'avance
    Pour déjà y voir plus clair dans les softs et les hardwares de prog, j'avais écrit un article il y a bien longtemps:
    http://everythingbutpic.blogspot.com...es-outils.html

    Pour les tutos, celui que je recommandais a malheureusement été retiré du net (un support de cours de l'IUT de Nice. Si Mr Salvat l'auteur nous lit, ça serait génial qu'il le remette à dispo). Je n'ai pas regardé les autres, mais tu en trouveras des tonnes sur le net.

    Il y a aussi le livre de Christian Tavernier qui est relativement simple. Maintenant, je reste partisan de l'ancienne méthode, la datasheet, les appnotes et le compilo et on essaie.

  15. #14
    invite98765423456
    Invité

    Re : Bug avec les interruptions - PIC


  16. #15
    *Baby*

    Re : Bug avec les interruptions - PIC

    Super Merci.

  17. #16
    MorpheusPic

    Re : Bug avec les interruptions - PIC

    "http://everythingbutpic.blogspot.com. ..es-outils.html"

    lol le nom du site veut tout dire ^^ je paris que c'est le site de ftorama

    aller sa me tante, ftorama tu m'offre mon starterkit atmega ^^ ?

  18. #17
    ftorama

    Re : Bug avec les interruptions - PIC

    Citation Envoyé par MorpheusPic Voir le message
    "http://everythingbutpic.blogspot.com. ..es-outils.html"

    lol le nom du site veut tout dire ^^ je paris que c'est le site de ftorama
    C'est bien le mien effectivement .
    J'avoue que j'ai pas pu me retenir sur le choix du nom lol

    aller sa me tante, ftorama tu m'offre mon starterkit atmega ^^ ?
    Allons, 1 micro, 4 résistances, une SUB-D 25 et un bout de platine d'essai, c'est pas si cher lol. Tu n'as pas besoin de plus pour démarrer

Discussions similaires

  1. Programmation en C : Plusieurs interruptions avec PIC 18
    Par lcoulon dans le forum Électronique
    Réponses: 2
    Dernier message: 24/10/2010, 07h07
  2. Interruptions multiples avec un pic 18f45j50
    Par invited003d5fc dans le forum Électronique
    Réponses: 2
    Dernier message: 15/06/2010, 12h18
  3. Les interruptions avec ICD2 et CC5xfree
    Par invite1e8ad136 dans le forum Électronique
    Réponses: 4
    Dernier message: 06/05/2008, 15h17
  4. Quand s'executent les interruptions d'un PIC 16F877???
    Par invite483d8df8 dans le forum Électronique
    Réponses: 11
    Dernier message: 02/05/2008, 22h07
  5. PIC : Du retard sur les interruptions I2C
    Par Julien1138 dans le forum Électronique
    Réponses: 3
    Dernier message: 20/04/2008, 20h44
Découvrez nos comparatifs produits sur l'informatique et les technologies.