Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Interruptions sur PIC18F4431



  1. #1
    dambeh21

    Interruptions sur PIC18F4431


    ------

    Bonjour à tous,
    je vous explique mon problème, je cherche à faire tourner un moteur pas à pas, pour cela, j'ai fait une carte électronique composé de transistor ainsi que d'un PIC18F4431 pour les commander. La partie électronique est correcte, mon problème est sur la partie info, je programme sous mplab avec MCC18.
    Je me sers du timer0 pour créer des interruptions qui me font incrémenter ou décrémenter en fonction du sens de rotation souhaité une liste de commande des transistors.
    Pour être plus clair, voici un bout de mon programme:

    // High priority interrupt routine

    #pragma code ItHandlerHigh = 0xE00
    #pragma interrupt InterruptHandlerHigh

    void InterruptHandlerHigh ()
    {

    if (INTCONbits.TMR0IF) //check for TMR0 overflow
    { TMR0H = StartTMR0H; //init hight timer value
    TMR0L = StartTMR0L; //init low timer value
    INTCONbits.TMR0IF = 0; //clear interrupt flag
    if (Flags.Bit.CW && Flags.Bit.Enable) //test if Schedule and switch1 are enable {
    Schedule++; //increment the schedule table if (Schedule > 8)
    Schedule = 1;
    }

    else if (Flags.Bit.CCW && Flags.Bit.Enable) //test if Schedule and switch2 are enable) {
    Schedule--;
    if (Schedule < 1)
    Schedule = 8;
    }

    else
    {
    Schedule = 0;
    }

    }

    }

    #pragma code


    void main(void)
    {

    TRISA = 0xFF; // Activation port RA2, RA3, RA4
    TRISB = 0xFF; // Activation port RB0, RB1, RB2, RB3, RB4, RB5 TRISC = 0xFF; // Activation port RC6, RC7 TRISD = 0xFF; // Activation port RD6, RD7



    // configure Oscillator
    OSCCON = 0xF2;
    OSCTUNE = 0x00;

    // Clear flags
    Flags.Byte = 1;

    // configure TMR0
    T0CON = 0xCF;
    TMR0H = StartTMR0H; //init hight timer value
    TMR0L = StartTMR0L; //init low timer value


    // Configure interrupts
    INTCON = 0xE0; //enable global interrupt


    while(1) // main loop
    {

    switch(Schedule)
    {
    case 1: T0 = 0; // Phase 1
    ........ Après suit mon cycle de commutation des transistors
    }


    Voila, j'espère que j'ai été assez clair et que vous pourrez m'aider

    Cordialement
    Damien

    -----

  2. Publicité
  3. #2
    cherwam07

    Re : Interruptions sur PIC18F4431

    Petit détail qui a son importance : C'est quoi le problème ??


  4. #3
    dambeh21

    Re : Interruptions sur PIC18F4431

    Le problème est que le programme ne détecte aucune intérruption!
    Comme c'est la première fois que je programme sur PIC, je ne sais pas trop si c'est un problème de configuration du registre d'interruption ("INTCON") ou du registre du timer ("TMR0") ?? Il reste dans ma boucle infinie ...

    merci

  5. #4
    cherwam07

    Re : Interruptions sur PIC18F4431

    A mon avis ca vient de cette ligne :
    #pragma code ItHandlerHigh = 0xE00
    L'addresse de saut pour les interruptions hautes est 0x000008.
    Donc met plutot :
    Code:
    #pragma code ItHandlerHigh = 0x000008
    Et si dans ItHandlerHigh, tu as bien écrit :
    Code:
    _asm InterruptHandlerHigh _endasm
    , ca doit marcher.

    Bon courage

  6. A voir en vidéo sur Futura

Discussions similaires

  1. PIC : Du retard sur les interruptions I2C
    Par Julien1138 dans le forum Électronique
    Réponses: 3
    Dernier message: 20/04/2008, 21h44
  2. Aides sur les Interruptions
    Par Paulochon dans le forum Électronique
    Réponses: 8
    Dernier message: 18/06/2007, 14h20
  3. Interruptions sur changement d'état du port B
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 29/05/2006, 22h40
  4. Interruption et PIC18F4431
    Par sylvain_c dans le forum Électronique
    Réponses: 1
    Dernier message: 09/03/2006, 15h01
  5. Interruptions : changement de RB4-7 sur P16F84A
    Par Nico G. dans le forum Électronique
    Réponses: 10
    Dernier message: 21/01/2006, 02h56
Découvrez nos comparatifs produits sur l'informatique et les technologies.