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
    invited7788175

    Re : interruption et timer

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

  3. #3
    invite2f1b7080

    Re : interruption et timer

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

  4. #4
    invited7788175

    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é.

  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
    invited7788175

    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.

  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
    invited7788175

    Re : interruption et timer

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

  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
    inviteb6d767d2

    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

  14. #13
    invited7788175

    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à.

  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
    inviteb6d767d2

    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

  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
    invite89303051

    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

  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, 12h37
  2. Programmation en C avec Timer 0 et Timer 1
    Par invite6844fe5f dans le forum Électronique
    Réponses: 43
    Dernier message: 20/04/2010, 14h27
  3. [PIC]-Interruption / Timer / Led
    Par invite3c35244f dans le forum Électronique
    Réponses: 4
    Dernier message: 24/04/2008, 15h55
  4. Interruption Timer avec PIC16F876A
    Par invite5d1bc976 dans le forum Électronique
    Réponses: 9
    Dernier message: 28/07/2007, 22h57
  5. interruption ( timer )
    Par invite42dae262 dans le forum Électronique
    Réponses: 0
    Dernier message: 13/03/2007, 20h50
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...