interruption et timer
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

interruption et timer



  1. #1
    invite2f1b7080

    interruption et timer


    ------

    Bonjour, j'essaye de créer un compteur pour gérer l'état de leds.
    Je voudrais créer une interruption qui incrément le compteur jusqu'à 100 puis le remete à 0 et recomence.
    J'utilise un pic32 pour controler mon systeme
    pouvez vous me dire ce qui ne va pas dans mon prog.



    void __ISR(_TIMER_1_VECTOR, ipl2) Timer1Handler(void)
    {int cpt;
    // clear the interrupt flag
    mT1ClearIntFlag();
    cpt++;
    if (cpt==100)cpt=0;

    }
    .
    .
    .
    .
    int main(void)
    {
    /***********************Initial isation*********************** ************************/
    int pbClk; /**************************/
    pbClk=SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);

    // Configuration de l'RS-485
    OpenUART1(UART_EN, UART_RX_ENABLE | UART_TX_ENABLE, pbClk/16/DESIRED_BAUDRATE-1);

    OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_256, 0x64);

    // set up the timer interrupt with a priority of 2
    ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2);

    // enable multi-vector interrupts
    INTEnableSystemMultiVectoredIn t();
    .
    .
    .
    Eclairage=30;
    {
    if (cpt<Eclairage)
    {
    if (module_1==0x31)
    PORTB=PORTB | 0b0000000000100;
    else
    PORTB=PORTB & 0b1111111111011;

    if (module_2==0x31)
    PORTB=PORTB | 0b000000100000000;
    else
    PORTB=PORTB & 0b111111011111111;

    .
    .
    }

    -----

  2. #2
    PIC sur PAC

    Re : interruption et timer

    bonsoir
    c'est quoi les symptômes?
    mais là direct je dirais: "static int cpt;"
    Dans le doute reboot

  3. #3
    invite2f1b7080

    Re : interruption et timer

    c'est à peut près ca...
    C'est quoi qui ne va pas à votre avis?

  4. #4
    PIC sur PAC

    Re : interruption et timer

    si la variable n'est pas déclaré en static elle est recrée à chaque appel (car à la sortie elle est détruite pour libérer la mémoire) avec une valeur non défini peut etre 0 ou 15 ou 2000 enfin n'importe quoi. En static la variable est conservé et reprend sa dernière valeur.
    remarque pour compter jusqu'à 100 un char suffit (1 octet non deux).
    déclaration recommandée:
    static unsigned char cpt=0;
    et pour le if plutot un test de supériorité que d'égalité.
    Dans le doute reboot

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

    Re : interruption et timer

    ok merci bien, en plus quand on nous explique pourquoi c'est encore mieux.
    la déclaration il faut que je la fasse dans l'interruption ou autre part?
    j'essaye ca demain.

  7. #6
    PIC sur PAC

    Re : interruption et timer

    Au choix et au besoin,
    si c'est au niveau du main la déclaration doit être global et la variable est visible de tout le code.
    sinon simplement dans la fonction utilisant la variable.
    Dans tous les cas l'occupation en mémoire est la même.
    Dans le doute reboot

  8. #7
    invite2f1b7080

    Re : interruption et timer

    bin je m'en sers dans le reste de mon prog. le but de cette manip et de l'incrémenter, je suppose donc qu'il est préférable que je la définisse dans le main.non?

  9. #8
    PIC sur PAC

    Re : interruption et timer

    Dans ce cas oui.
    Mais connais tu les bases du C car là j'ai des doutes?
    Dans le doute reboot

  10. #9
    invite2f1b7080

    Re : interruption et timer

    bin pas tellement, j'en ai vu un peu en cours et en parcourant des tuto mais ca s'arretes la. C'est ma premiere réelle prog donc je galere un peu.
    Si tu sais ou je peux apprendre les bases assez rapidement je veux bien.
    Merci

  11. #10
    invite2f1b7080

    Re : interruption et timer

    J'ai un autre probleme maintenant, j'ai ca qui bloque l'allumage de mes leds

    OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_1, 100);

    // set up the timer interrupt with a priority of 2
    ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2);

    // enable multi-vector interrupts
    INTEnableSystemMultiVectoredIn t();

    enfin je pense que ca viens de la vu qu'elle s'allume sans, mais du coup mon cpt ne marche plus.

  12. #11
    invite2f1b7080

    Re : interruption et timer

    bonjour,
    j'ai réussi à faire incrémenter mon cpt (merci à toi PIC sur PAC) comme tu me la conseillé jai déclaré static unsigned char cpt;
    et char Eclairage;
    cependant maintenant mon programme se bloque lors de la comparaison cpt<Eclairage.
    je ne comprend pas pourquoi car l'orsque je faisait avec un for (cpt=0;cpt=100;cpt++) ce passage fonctionait.

  13. #12
    Bigonoff

    Re : interruption et timer

    Salut
    ------

    Si tu sais ou je peux apprendre les bases assez rapidement je veux bien.
    Va sur le site de developpez.com, il y a des cours et des tutoriaux très bien faits sur la plupart des langages (dont le C)

    A+
    Bigonoff
    Vive l'Internet libre

  14. #13
    PIC sur PAC

    Re : interruption et timer

    bonsoir,
    (cpt=0;cpt=100;cpt++)
    ca cela m'étonnerais que cela fonctionne (ou du moins pas comme tu le penses)!!
    cpt=100
    c'est une affectation et non un test d'égalité
    pour la comparaison cela vient certainement de là.
    Dans le doute reboot

  15. #14
    invite2f1b7080

    Re : interruption et timer

    nan je voulais dire cpt >100. dsl

  16. #15
    invite2f1b7080

    Re : interruption et timer

    bonjour, maintenant que j'arrive à faire incrémenter mon compteur, je voudrai envoyer des donnée via l'UART1, j'ai reussi à créer l'interruption et que mais variable prenne les bonnes valeur cependant au moment ou je sort de l'IT mes variable reprennes d'autre valeur, alors que je les ai déclarées en static (comme cpt)
    quelqu'un peut me dire ce quii ne va pas? merci

    // Configuration de l'RS-485
    OpenUART1(UART_EN, UART_RX_ENABLE | UART_TX_ENABLE, pbClk/16/DESIRED_BAUDRATE-1);

    ConfigIntUART1(UART_INT_PR1 | UART_RX_INT_EN);

    INTEnableSystemMultiVectoredIn t();
    .
    .
    .
    .

    void __ISR( _UART1_VECTOR, ipl1) InterruptHandler (void)
    {asm( " ei " );

    while(!DataRdyUART1());
    carte = (char)ReadUART1();

    while(!DataRdyUART1());
    Donnee_Module = (char)ReadUART1();

    while(!DataRdyUART1());
    module_1 = (char)ReadUART1();

    while(!DataRdyUART1());
    module_2 = (char)ReadUART1();
    }

  17. #16
    Bigonoff

    Re : interruption et timer

    Salut
    -----

    quelqu'un peut me dire ce quii ne va pas? merci
    Oui, moi je peux.

    Tu dis en #9 :

    Si tu sais ou je peux apprendre les bases assez rapidement je veux bien.
    Je t'ai répondu en #12.

    La réponse à ta question est donc : on ne sait pas programmer dans un langage qu'on ne connait pas, sans commencer par l'étudier correctement.

    Si tu espères faire de l'apprentissage interactif via un forum, tu n'es pas sorti de l'auberge et tu devras poser des questions à chaque avancée de ton programme.

    Procède donc dans l'ordre.

    Etage 1: télécharge un cours et étudie correctement le langage.
    Etape 2: étudie correctement le composant sur lequel tu comptes travailler
    Etape 3: étudie ton compilateur et ses librairies

    Sans ça, tu vas ramer "à vie".
    Et ce n'est pas une critique, c'est juste un conseil amical

    A+
    Bigonoff
    Vive l'Internet libre

  18. #17
    invite2f1b7080

    Re : interruption et timer

    je suis depuis ce matin sur le site que tu m'as conseillé et c'est vrai qu'il y a beaucoup de chose, qui m'ont d'ailleurs été très util.
    Cependand quand j'essayais le programme que je fais je trouvais des truc bizarre et je ne comprennais pas d'ou ca viens c'est pour ca que je me permettais de demander votre aide.
    J'ai d'ailleurs réussi à faire fonctionner mon pic comme je le voulais sur ma carte1, il ne me reste plus que 2 étapes avant d'avoir fini, une pour faire varier mon raport cyclique (Eclairage) et l'autre pour transmettre les informations sur d'autres cartes, en liaison série sachant que j'y arrive lorsqu'il n'y avait pas ma vairable Eclairage.

    merci de votre aide

  19. #18
    RicounetZap

    Re : interruption et timer

    Bonjour
    Juste en regardant le premier code, tu déclares une variable cpt dans l'interruption et je suppose une autre dans ta fonction main.
    Elles sont donc différentes.
    Si tu veux déclarer une variable globales à l'ensemble de tes fonctions, il faut la déclarer en entête de ton programme, et si tu l'utilises dans une interruption, il faut la déclarer volatile.
    volatile unsigned char iCpt

    Cordialement
    N'importe quoi, for ever :-)

  20. #19
    invite2f1b7080

    Re : interruption et timer

    merci RicounetZap mais la solution de PIC sur PAC (static unsigned char cpt fonctionne très bien.IL ne me reste plus qu'a faire la liason entre toute mes cartes pour finir mon projet. Ce qui je pense ne sera pas si facile que ca... J'arrive à peine a voir s'il sagit d'une liason CAN ou autre chose.

    Merci quand meme pour ton aide

Discussions similaires

  1. erreur timer+interruption
    Par invite5e12a73c dans le forum Électronique
    Réponses: 11
    Dernier message: 17/08/2010, 11h37
  2. Programmation en C avec Timer 0 et Timer 1
    Par invite6844fe5f dans le forum Électronique
    Réponses: 43
    Dernier message: 20/04/2010, 13h27
  3. [PIC]-Interruption / Timer / Led
    Par jorg1n dans le forum Électronique
    Réponses: 4
    Dernier message: 24/04/2008, 14h55
  4. Interruption Timer avec PIC16F876A
    Par invite5d1bc976 dans le forum Électronique
    Réponses: 9
    Dernier message: 28/07/2007, 21h57
  5. interruption ( timer )
    Par invite42dae262 dans le forum Électronique
    Réponses: 0
    Dernier message: 13/03/2007, 19h50
Découvrez nos comparatifs produits sur l'informatique et les technologies.