Faire une condition sur un intervalle de temps (Programmation PIC)
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Faire une condition sur un intervalle de temps (Programmation PIC)



  1. #1
    rami74

    Faire une condition sur un intervalle de temps (Programmation PIC)


    ------

    Salut tout le monde

    Je suis encore débutant en programmation de microcontrolleur et travaille avec mplabx avec hi-tech comme compilateur.
    Je cherche la bonne syntaxe pour décrire un fonctionnement comme suit:

    Do
    {
    Certaines instructions
    }
    Until (Un certain temps passe)

    En fait je veux répéter une certaine boucle d'instructions pendant un certain intervalle de temps que je précise.

    Merci d'avance pour votre aide.

    -----

  2. #2
    PA5CAL

    Re : Faire une condition sur un intervalle de temps (Programmation PIC)

    Bonjour

    Ce n'est pas un problème de syntaxe, mais de choix du procédé.


    Le test sur « Un certain temps passe » doit d'une manière ou d'une autre porter sur un compteur du temps passé à exécuter de façon récurrente la boucle depuis un instant initial donné.

    Le choix du procédé va dépendre de la précision requise et de l'ordre de grandeur de la durée escomptée, ainsi que de la possibilité de déterminer le temps d'exécution de « Certaines instructions » et des instructions de rebouclage.

    Selon le cas, on pourra utiliser un timer matériel, ou bien accumuler dans une variable une valeur représentant le temps d'exécution, exact ou approximatif, du code entre chaque itération.
    Dernière modification par PA5CAL ; 17/05/2013 à 10h29.

  3. #3
    rami74

    Re : Faire une condition sur un intervalle de temps (Programmation PIC)

    Si je comprend bien c'est un peu plus compliqué.
    Je vais essayer d'être plus précis. Par exemple je veux exécuter un une boucle de 16 instructions et qu'elle redémarre autant de fois jusqu’à ce qu'un intervalle de temps (10 secondes) s'écoule.
    Dernière modification par rami74 ; 17/05/2013 à 10h46.

  4. #4
    rami74

    Re : Faire une condition sur un intervalle de temps (Programmation PIC)

    (c'est pas un problème si le dernier cycle ne se termine pas: on prend les données du cycle précédent).

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

    Re : Faire une condition sur un intervalle de temps (Programmation PIC)

    Si par exemple tes 16 instructions prennent toujours 2,333 µs pour être exécutées et si le rebouclage (incrément, test et saut) prend 0,1 µs, alors 10 secondes représenteront 10/(2,333·10⁻⁶+0,1·10⁻⁶) = 4109589 boucles. Cela correspond à une boucle for avec comme compteur une variable entière sur 32 bits non signée.

    Si le temps d'exécution de tes instructions est variable mais connu, tu peux utiliser une variable pour accumuler la valeur du temps passé, par exemple exprimé en nombre de cycles machine.

    Si le nombre de boucle est beaucoup trop important, ou s'il n'est pas possible de déterminer assez précisément le temps d'exécution de tes instructions, il faudra programmer un timer matériel sur 10 secondes, le démarrer avant d'entrer dans la boucle, puis le tester à chaque itération pour voir s'il a terminé de compter.
    Dernière modification par PA5CAL ; 17/05/2013 à 11h24.

  7. #6
    rami74

    Re : Faire une condition sur un intervalle de temps (Programmation PIC)

    Merci PA5CAL, ça donne une idée.
    J'utilise une petit pic 12f675 puisque j'utilise pas beaucoup d'E/S dans mon application ce qui m'oblige de bien gérer la mémoire disponible (Program memory (flash) 1024 mots; Data memory (SRAM 64 bytes et EEPROM 128 bytes). Je vais encore utiliser l'horloge interne 4Mhz donc chaque instruction prend 1µs pour être exécuter (je pense que chaque instruction nécessite 4 coups d'horloge pour être exécuter, je suis pas sûr).

    la fonction suivante fait la moyenne des mesures d'un échantillon prises successivement pendant 3s: (je veux savoir si ces boucles vont surcharger la mémoire programme et comment je peux déterminer n)

    Code:
    void moy_mes(x)
    {
    unsigned long n=...;
    unsigned int a=0;
    unsigned int b[16];
    b[0]=GPIO1;
    while (n>0)
    {
    a= a +b[0]
    for (unsigned char i=1;i=15;i++)
    {
    b[i]= GPIO1;
    a= a + b[i];
    }
    b[0]=a>>4;
    n--
    }
    return b[0];
    }
    Dernière modification par gienas ; 17/05/2013 à 20h42. Motif: Ajouté les balises code obligatoires pour les programmes

  8. #7
    rami74

    Re : Faire une condition sur un intervalle de temps (Programmation PIC)

    Si je prend n le nombre correspondant à 0.1s donc n*x est le nombre correspondant à x fois 0.1s (j'ai oublier de mettre cette ligne)

    Code:
    void moy_mes(x)
    {
    unsigned long n=...;
    n=x*n;
    unsigned int a=0;
    unsigned int b[16];
    b[0]=GPIO1;
    while (n>0)
    {
    a= a +b[0]
    for (unsigned char i=1;i=15;i++)
    {
    b[i]= GPIO1;
    a= a + b[i];
    }
    b[0]=a>>4;
    n--;
    }
    return b[0];
    }
    Dernière modification par gienas ; 17/05/2013 à 20h42. Motif: Ajouté les balises code obligatoires pour les programmes

  9. #8
    PA5CAL

    Re : Faire une condition sur un intervalle de temps (Programmation PIC)

    Ton code contient des erreurs de syntaxe et de fonctionnement, ce n'est pas une moyenne qu'il réalise, et l'utilisation d'un tableau (b[]) est superflue.

    À part ça, il faudrait (après l'avoir corrigé et simplifié) le compiler une première fois avec une valeur de n quelconque, afin d'en tirer les instructions en langage machines qui permettront de déterminer (par calcul et en se référant aux spécifications du 12F675) le temps d'exécution d'une boucle, puis d'en déduire la valeur correcte de n.
    Dernière modification par PA5CAL ; 17/05/2013 à 19h38.

Discussions similaires

  1. Faire une thèse sur son temps libre (astrophysique)
    Par invite2d68d029 dans le forum Orientation après le BAC
    Réponses: 3
    Dernier message: 10/06/2012, 20h06
  2. temps pour mesurer une tension sur un pic
    Par alainav1 dans le forum Électronique
    Réponses: 7
    Dernier message: 28/08/2011, 11h46
  3. Programmation condition if
    Par invitebdba06cc dans le forum Électronique
    Réponses: 2
    Dernier message: 28/03/2010, 11h44
  4. Faire clignoter une led sur pic 16F876A
    Par invite3799b2e8 dans le forum Électronique
    Réponses: 9
    Dernier message: 20/11/2008, 13h11
  5. erreur 0X00 programmation PIC plus questions sur les PIC
    Par invite4a8ccabd dans le forum Électronique
    Réponses: 4
    Dernier message: 22/07/2007, 14h36
Découvrez nos comparatifs produits sur l'informatique et les technologies.