Répondre à la discussion
Page 1 sur 4 12 3 DernièreDernière
Affichage des résultats 1 à 30 sur 96

Interruptions PIC



  1. #1
    flolarajasse

    Interruptions PIC


    ------

    Bonjour,
    Je souhaite réaliser un compteur qui compte les impulsions sur une entrée de mon PIC18F4550.J'utilise des interruptions, est ce que ce programme pourrait fonctionner?

    int compte;

    #EXT_RB
    void RB_isr(void)
    {
    compte==compte++;
    }

    void main(void)
    {
    compte==0;

    while (TRUE)
    {
    EXT_isr();
    printf(usb_cdc_putc, " Le nombre d'impusions est = %2x\n\r", compte);

    }

    }


    Merci

    -----

  2. Publicité
  3. #2
    RicounetZap

    Re : Interruptions PIC

    Bonjour,

    Le main ne doit pas appeller la fonction d'interruption.
    IL faut d'abord initialiser correctement ton PIC, lui indiquer que tu vas utiliser les interruption sur un changement d'état de port.
    Dans ta fonction d'interruption, il faut vérifier que ce soit effectivement la bonne interruption qui a été déclenché.
    Si oui, incrémentes ton compteur. Pour information tu peux simplement faire compteur++; l'affectation est automatique.
    il faudra aussi que tu déclares ton compteur comme volatile et que tu fasses attention au débordement.

    Peux tu également me dire à quoi correspond la variable usb_cdc_putc ?
    Pour moi, ce n'est pas un FILE *, c'est plus une fonction USB qui permet d'écrire un caractère sur le port USB.

    Cordialement

  4. #3
    flolarajasse

    Re : Interruptions PIC

    IL faut d'abord initialiser correctement ton PIC, lui indiquer que tu vas utiliser les interruption sur un changement d'état de port.[/I]

    Comment fait on cela?

    De même pour : il faudra aussi que tu déclares ton compteur comme volatile et que tu fasses attention au débordement.

    En effet, usb_cdc_putc permet d'envoyer des caractères par la liaison USB.

    Cordialement

  5. #4
    RicounetZap

    Re : Interruptions PIC

    Je ne suis pas chez moi, mais au travail. Je n'ai donc pas la documentation sous la main.
    Si personne ne te réponds d'ici là, je verrai ce soir.

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    flolarajasse

    Re : Interruptions PIC

    Merci d'avance

  9. #6
    Seb.26

    Re : Interruptions PIC

    Tu ne peux pas plutôt utiliser un des timer du PIC en mode "compteur" sur ton entrée ?! ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  10. Publicité
  11. #7
    flolarajasse

    Re : Interruptions PIC

    Comment cela?j'utilise un PIC18F4550...

  12. #8
    Seb.26

    Re : Interruptions PIC

    Citation Envoyé par flolarajasse Voir le message
    Comment cela?j'utilise un PIC18F4550...
    Lis la datasheet dans la section des Timer : le hard de ton PIC sait déjà compter des impulsions ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  13. #9
    flolarajasse

    Question Re : Interruptions PIC

    Citation Envoyé par Seb.26 Voir le message
    Lis la datasheet dans la section des Timer : le hard de ton PIC sait déjà compter des impulsions ...
    Il faut que je configure un registre en fait?

  14. #10
    flolarajasse

    Re : Interruptions PIC

    mouai dsl je vois pas...

  15. #11
    Seb.26

    Re : Interruptions PIC

    Dans ton PIC, il y a des timers, un timer est en fait un compteur ...
    ... compteur qui peut s'incrementer toutes les 'x' uS ... ou alors sur chaque front montant d'une de tes pin ... tu obtiens donc un compteur d'impulsions ...

    il suffit de lire la datasheet ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  16. #12
    RicounetZap

    Re : Interruptions PIC

    Si tu utilises MCC18, regardes dans le dossier example, puis interrupt.
    Il y a un code d'explication fourni par Microchip. Ce n'est pas la même référence, mais c'est un bon début pour apprendre à utiliser les interruptions.
    Bon courage

  17. Publicité
  18. #13
    RISC

    Re : Interruptions PIC

    Salut,

    Sur les timers 1 et 3 tu peux entrer un signal externe qui incrémente TIMER1 ou TIMER3

    a+

  19. #14
    flolarajasse

    Re : Interruptions PIC

    non j'utilise PCW.Voici ce que j'ai fait mais cela ne marche pas.

    unsigned int compte=0;


    #int_RB
    void RB_isr(void)
    {
    compte++;
    }

    void main(void)
    {
    while (TRUE)
    {
    RB_isr();
    printf(usb_cdc_putc, " Le nombre d'impulsions est = %d\n\r", compte);


    }

    }


    help me please!!

  20. #15
    flolarajasse

    Unhappy Re : Interruptions PIC

    non j'utilise PCW.Voici ce que j'ai fait mais cela ne marche pas.

    unsigned int compte=0;


    #int_RB
    void RB_isr(void)
    {
    compte++;
    }

    void main(void)
    {
    while (TRUE)
    {
    RB_isr();
    printf(usb_cdc_putc, " Le nombre d'impulsions est = %d\n\r", compte);


    }

    }


    help me please!!

  21. #16
    RicounetZap

    Re : Interruptions PIC

    Bonjour,

    Je ne connais pas ton compilateur.
    Une interruption, comme l'indique son nom, est un mécanisme implémenté dans les microcontroleurs/processeurs etc.. permettant d'interrompre le fonctionnement normal d'un programme sur un évenement "externe"
    C'est à dire que ta boucle principale execute une série d'instruction en boucle, et que lors d'un évenement, cette boucle est "stoppée", les informations essentielles sont sauvegardées (SFR,...) et la fonction d'interruption est appelée.
    Une interruption peut être déclenchée par le dépassement d'un timer/compteur, par le changement d'état d'un port d'entrée, par l'arrivée d'un caractère dans l'UART etc.
    Le pic 18F4550 gère une quantité d'interruptions différentes. Il faut donc :
    1) Configurer les différents registres pour indiquer les interruptions que l'on veut gérer.
    2) Autoriser les interruptions : GIE = 1;
    3) Pour traiter les interruptions, il faut vérifier quelle interruption est intervenue et la traiter. Tu ne vas pas incrémenter un compteur lors de la réception d'un caractère dans l'USART et lire l'USART si le PORTBbits.RB5 est passé de 0 à 1.

    Ensuite, pour ton programme qui ne marche pas, qu'est ce qui ne marche pas ?
    La platine d'essai fonctionne t'elle ?
    Arrives tu à faire clignoter une led ?
    Si tu as un LCD pour l'affichage, arrives tu déjà à afficher du texte ?
    Si tu utilises un autre moyen de communication, reçois tu des messages ?

    Et s'il te plait, arrêtes d'appeler ta fonction d'interruption dans la boucle principale du programme.

    Cordialement

  22. #17
    flolarajasse

    Re : Interruptions PIC

    Bonjour,
    Ma carte fonctionne parfaitement, en fait lorsque j'affiche à l'écran,par le biais d'une liaison USB, sa affiche "Le nombre d'impulsions est 0" alors que j'envoie un signal de fréquence de 1Hz sur la broche B0 de mon PIC.Normalement, chaque seconde ma variable "compte" devrait s'incrémenter de 1.La liaison USB fonctionne parfaitement.J'ai modifié mon programme :

    unsigned int compte = 0;


    #int_EXT
    void EXT_isr(void)
    {
    compte++;
    }

    void main(void)
    {
    usb_init_cs();
    enable_interrupts(GLOBAL);
    ext_int_edge( 0, L_TO_H); //interruption sur front montant

    while (TRUE)
    {
    usb_task(); //config pour la liaison USB
    usb_debug_task(); //config pour la liaison USB
    EXT_isr();

    do
    {
    printf(usb_cdc_putc, " Le nombre d'impulsions est = %d\n\r", compte);
    }
    }

    }

  23. #18
    RicounetZap

    Re : Interruptions PIC

    Pourquoi appelles tu la fonction EXT_isr() ?
    Initialise d'abord l'interruption sur changement de front avant de valider les interruptions.
    Commence simplement : dans ta boucle principale, attends que ton RB0 passe à 1, incrémente ton compteur, attend que RB0 passe à 0 et affiche le résultat.
    Tu verras comme ça si la détection sur le port RB0 fonctionne correctement (Init en input par défault ?)
    Ensuite, on verra en fonction des résultats

  24. Publicité
  25. #19
    flolarajasse

    Re : Interruptions PIC

    Voici mon main() :


    void main(void)
    {
    usb_init_cs();
    enable_interrupts(GLOBAL);
    ext_int_edge( 0, L_TO_H);
    compte = 0;

    while (TRUE)
    {
    usb_task();
    usb_debug_task();

    if(RB0 == 1)
    {
    compte++;
    }
    else
    {
    printf(usb_cdc_putc, " Le nombre d'impulsions est = %d\n\r", compte);
    }
    }
    }

    En revanche, cela affiche toujous "Le nombre d'impulsions est 0"...

  26. #20
    RicounetZap

    Re : Interruptions PIC

    Je n'ai pas la doc du 18f4550 sous la main, seulement celle du 18f4550.
    Par défaut, au reset, RB4:RB0 sont configurés comme des entrées analogiques et toujours lu "0".
    Il faut donc configurer les registres ADCON, puis le TRISB.

  27. #21
    flolarajasse

    Re : Interruptions PIC

    Citation Envoyé par RicounetZap Voir le message
    Je n'ai pas la doc du 18f4550 sous la main, seulement celle du 18f4550.
    Oui c la même


    Pour le TRISb je pensais pareil, mais est-ce obligatoire de configurer ADCON?

  28. #22
    Seb.26

    Re : Interruptions PIC

    Rtfm !!! ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  29. #23
    RicounetZap

    Re : Interruptions PIC

    Citation Envoyé par Seb.26 Voir le message
    Rtfm !!! ...
    Rtfm, c'est bien l'abbréviation de :

    Restes Tranquille, les Forums Moulinent ?
    Relis Tranquillement le Forum et Merci
    Roupilles Tardivement et Fais Mieux



    Il faudra quand même qu'un jour que je lise ce manuel

  30. #24
    flolarajasse

    Re : Interruptions PIC

    Read the fucking manual ...

  31. Publicité
  32. #25
    flolarajasse

    Re : Interruptions PIC

    Quand j'écris TRISB = 0x01, sa me met undefined identifier ; comment déclare-on TRISB déja?

    Faut-il le déclarer dans le main ou avant?

  33. #26
    sdec25

    Re : Interruptions PIC

    Citation Envoyé par flolarajasse Voir le message
    Quand j'écris TRISB = 0x01, sa me met undefined identifier ; comment déclare-on TRISB déja?

    Faut-il le déclarer dans le main ou avant?
    Tu les déclares où tu veux.
    TRISB est un registre, qu'on peut utiliser avec une variable dont l'adresse est définie manuellement.
    Soit tu la déclares toi-même.
    Soit tu utilises les fichiers .h fournis avec ton compilateur + le fichier qui donne les adresses mémoires des registres.

  34. #27
    flolarajasse

    Re : Interruptions PIC

    Soit tu la déclares toi-même.
    Soit tu utilises les fichiers .h fournis avec ton compilateur + le fichier qui donne les adresses mémoires des registres.
    Je n'arrive toujours pas à déclarer TRISB=0x01

  35. #28
    Seb.26

    Re : Interruptions PIC

    Citation Envoyé par flolarajasse Voir le message
    Je n'arrive toujours pas à déclarer TRISB=0x01
    << TRISB=0x01; >> n'est pas une déclaration, mais une instruction ... comme indiqué par sdec25, tous les #define sont présents dans le fichier .h fourni avec ton compilo.

    -> cherche un dossier "include" dans les dossiers de ton compilo, tu devrait y trouver un pic18f4550.h ... il faut inclure ce fichier à ton projet pour que le compilo connaisse TRISB
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  36. #29
    flolarajasse

    Re : Interruptions PIC

    c 'est bon sa marche enfin!!et pas besoin de configurer TRISB et ADCON!!!!!

    J'ai cru que j'allais devenir ^^

    ENfin merci pour le coup de main!!

  37. #30
    RicounetZap

    Re : Interruptions PIC

    Juste par curiosité, peux tu nous montrer le code.
    J'aime bien les programmes qui tombent en marche

Page 1 sur 4 12 3 DernièreDernière

Discussions similaires

  1. Interruptions simultanées PIC 16F877A
    Par maximilien dans le forum Électronique
    Réponses: 10
    Dernier message: 25/07/2009, 18h39
  2. gestion interruptions sur pic
    Par alainav1 dans le forum Électronique
    Réponses: 4
    Dernier message: 27/12/2008, 15h38
  3. PIC interruptions simultanées
    Par quentennis dans le forum Électronique
    Réponses: 4
    Dernier message: 16/06/2008, 12h45
  4. interruptions PIC 18F452
    Par koaber dans le forum Électronique
    Réponses: 3
    Dernier message: 09/03/2005, 19h37
  5. interruptions portB PIC
    Par romelec dans le forum Électronique
    Réponses: 6
    Dernier message: 02/05/2004, 10h12
Découvrez nos comparatifs produits sur l'informatique et les technologies.