Temps de pause pour Pic 18F452 :S:
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Temps de pause pour Pic 18F452 :S:



  1. #1
    McCorwin

    Red face Temps de pause pour Pic 18F452 :S:


    ------

    Bonjour, je vous dérange rapidement, je n'arrive pas a saisir un petit truc, je cherche a faire une pause de 1 minute dans un programme destiné à un pic18f452 mais selon l'endroit où je place cette pause je varie entre 55s et 1min02 hors je dois tomber sur 1 minute pile poil.
    je vous montre mon code :

    for (i = 0; i < 2; i++)
    {
    tab[i][1] = 5600;//5600
    }
    for ( i=0; i<207;i++) //Pause 1 minute en réalité elle fait 59s
    {
    Delay10KTCYx(250);
    }

    for (i = 0; i < 2; i++)
    {
    tab[i][1] = 8200;
    }
    for ( i=0; i<207;i++) //Pause 1 minute en réalité elle fait 1 min 02
    {
    Delay10KTCYx(250);
    }
    ma config :
    /* configuration du PIC */
    #pragma romdata CONFIG
    _CONFIG_DECL (
    _CONFIG1H_DEFAULT & _OSC_HSPLL_1H ,
    _CONFIG2L_DEFAULT & _PWRT_ON_2L ,
    _CONFIG2H_DEFAULT & _WDT_OFF_2H,
    _CONFIG3H_DEFAULT,
    _CONFIG4L_DEFAULT & _STVR_OFF_4L & _LVP_OFF_4L
    & _DEBUG_OFF_4L ,
    _CONFIG5L_DEFAULT & _CP0_OFF_5L & _CP1_OFF_5L
    & _CP2_OFF_5L & _CP3_OFF_5L,
    _CONFIG5H_DEFAULT & _CPB_OFF_5H & _CPD_OFF_5H,
    _CONFIG6L_DEFAULT & _WRT0_OFF_6L & _WRT1_OFF_6L
    & _WRT2_OFF_6L & _WRT3_OFF_6L,
    _CONFIG6H_DEFAULT ,
    _CONFIG7L_DEFAULT & _EBTR0_OFF_7L & _EBTR1_OFF_7L
    & _EBTR2_OFF_7L & _EBTR3_OFF_7L,
    _CONFIG7H_DEFAULT & _EBTRB_OFF_7H
    );

    Voila, je me fie à vos avis éclairés une fois de plus et vous remercie par avance

    -----

  2. #2
    sdec25

    Re : Temps de pause pour Pic 18F452 :S:

    Salut.
    Il n'y a pas d'interruption pendant ce programme ? Si tu n'en es pas sûr, ajoute INTCONbits.GIE = 0 avant.

    Si ça ne vient pas de ça, lance un timer au début du code et arrête la à la fin. Si la valeur du timer est la même, ça vient de l'oscillateur. Sinon, regarde dans l'assembleur (tu peux utiliser un simulateur) quelles instructions prennent du temps.

    Si tu maîtrise bien MPSIM tu peux faire tout ça avec.

  3. #3
    RicounetZap

    Re : Temps de pause pour Pic 18F452 :S:

    Bonjour,

    Petite question, pourrais tu donner la définition de ton tableau tab[] ?
    Je verrais bien un petit débordement dans cette histoire

    Cordialement

  4. #4
    McCorwin

    Re : Temps de pause pour Pic 18F452 :S:

    pour la définition de tab :
    volatile int tab[10][2];
    Et oui j'ai des interruptions, 2 mais ce sont des timersbêtement je pensais qu'ils étaient réguliers...
    je viens de comprendre mon erreur,
    mais comment calculer la valeur que je dois avoir dans Delay10KTCY() ou dans la boucle pour chaque étape ??? comment calculer le temps de toutes les instructions ....

    #pragma interrupt MyInterrupt
    void MyInterrupt(void)
    {
    unsigned char sauv1;
    unsigned char sauv2;

    sauv1 = PRODL;
    sauv2 = PRODH;

    /* timer qui se charge de l'impulsion ET du délai inter-pulse*/
    if (PIR1bits.TMR1IF)
    {
    // on réarme le timer
    PIR1bits.TMR1IF = 0;

    /* on met le pin du servo actif ・l'état bas (PULSE_OFF = 0) */
    tab[s_actif][0] = PULSE_OFF;

    /* on change le servo actif */
    if (s_actif < (nb_servos - 1))
    s_actif++;
    else
    s_actif = 0;

    /* on met le pin du servo suivant à l'état haut (PULSE_ON = 1) */
    tab[s_actif][0] = PULSE_ON;

    /* le timer va se délencher à la fin de l'impulsion */
    WriteTimer1(65535 - tab[s_actif][1]);


    /* on apelle la fonction maj_servos pour refléter les changements */
    maj_servos();
    }

    PRODL = sauv1;
    PRODH = sauv2;
    }

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

    Re : Temps de pause pour Pic 18F452 :S:

    Tu sais combien de temps dure l'interruption ?
    Si oui, corrige l'erreur en modifiant la valeur du Delay.
    Sinon, si l'interruption est à intervalle régulier, incrémente une variable globale dans l'interruption qui servira à compter le temps.
    Si l'interruption n'est pas à intervalle régulier et que tu ne peux pas prévoir le temps total d'exécution des interruptions, tu ne peux pas avoir un temps précis sans utiliser de timer.

Discussions similaires

  1. pic 18f452
    Par inviteeab4d8e2 dans le forum Électronique
    Réponses: 14
    Dernier message: 21/11/2008, 21h28
  2. PIC 18F452-I/P ques-ce I/P ?
    Par MorpheusPic dans le forum Électronique
    Réponses: 6
    Dernier message: 12/08/2008, 13h32
  3. pic 18f452 @ 40Mhz, plantage de temps en temps
    Par nordiste dans le forum Électronique
    Réponses: 27
    Dernier message: 04/04/2008, 20h19
  4. pic 18F452
    Par invite38254ebb dans le forum Électronique
    Réponses: 0
    Dernier message: 01/02/2007, 16h37
  5. interruptions PIC 18F452
    Par invite86ad2abe dans le forum Électronique
    Réponses: 3
    Dernier message: 09/03/2005, 19h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.