IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

MSTimer ou Tnterrpt Timer


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité, mais avide de savoir
    Inscrit en
    Mars 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité, mais avide de savoir

    Informations forums :
    Inscription : Mars 2022
    Messages : 11
    Par défaut MSTimer ou Tnterrpt Timer
    Bonjour,

    Je souhaite créer une série de tâches devant se dérouler toutes les 1 ms, 10 ms et 100ms.

    Je suis dans l’expectative relativement à utiliser des Timers en interruption ou, alors, utiliser MsTimer…

    D’un autre côté quels sont les avantages, inconvénient, de l’un ou l’autre ?

    Merci pour vos explications et bonne journée

    Cordialement

    Jean-Pierre

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 903
    Par défaut
    Quelle est la durée de la plus longue tâche pour les 3 différents cas?

    Sur quel Arduino programmez vous?

  3. #3
    Membre averti
    Homme Profil pro
    Retraité, mais avide de savoir
    Inscrit en
    Mars 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité, mais avide de savoir

    Informations forums :
    Inscription : Mars 2022
    Messages : 11
    Par défaut
    Citation Envoyé par Jay M Voir le message
    Quelle est la durée de la plus longue tâche pour les 3 différents cas?

    Sur quel Arduino programmez vous?
    Arduino UNO et ATMEGA 2560

    Ce sont des tâches très courtes. Elles servent à piloter des moteurs CC au centième de tour, de gérer un panneau de commande et gérer des temporisations. Cela fonctionne parfaitement bien avec un 68HC11 dont le soft est écrit avec un macro-assembleur...Mais je souhaite effectuer le travail, du moins pour le pilotage des moteurs avec un Arduino. Je découvre les micro-contrôleurs.

    Citation Envoyé par f-leb Voir le message
    Bonsoir,



    MsTimer ? J'ai bien trouvé une bibliothèque MsTimer2, mais cette bibliothèque utilise aussi des interruptions, alors la différence...
    Vous avez raison! Mais la question subsidiaire, MSTimer ou Timer Arduino avec interruptions?

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Citation Envoyé par JPB-BFI Voir le message
    Vous avez raison! Mais la question subsidiaire, MSTimer ou Timer Arduino avec interruptions?
    Ce que je veux dire c'est que la bibliothèque MsTimer2 utilise de toute façon un timer de l'Arduino pour déclencher une interruption. Donc utiliser MsTimer2 ou le timer2 avec interruptions, c'est utiliser les mêmes ressources du microcontrôleur. Bien entendu, si tu n'as pas envie de taper dans les registres du micro pour configurer les modes d'utilisation du timer, les prédiviseurs et autres, tu préféreras utiliser cette bibliothèque MsTimer2 qui offre quelques fonctions sympathiques pour t'éviter ces joyeusetés

    La question est plutôt de savoir si tu dois passer ou non par des interruptions pour gérer le timing.
    Avec un processeur monocoeur sans système d'exploitation, c'est à ton programme de gérer l'ordonnancement des tâches (pour simuler un fonctionnement multitâche) et il y a des précautions à prendre.
    Il faut se poser des questions : que se passe-t-il si par exemple une tâche est interrompue par une autre alors qu'elle n'est pas terminée, du point de vue matériel et de point de vue logiciel si des ressources sont partagées entre plusieurs tâches ?

    Déjà si la tâche la plus longue prend toujours moins de 1ms, on sait que les tâches ne seront jamais interrompues par d'autres si tes interruptions sont déclenchées toutes les ms, c'est un souci de moins.

  5. #5
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 903
    Par défaut
    Citation Envoyé par JPB-BFI Voir le message
    Ce sont des tâches très courtes.
    Beaucoup Moins d’une ms?

  6. #6
    Membre averti
    Homme Profil pro
    Retraité, mais avide de savoir
    Inscrit en
    Mars 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité, mais avide de savoir

    Informations forums :
    Inscription : Mars 2022
    Messages : 11
    Par défaut
    Citation Envoyé par Jay M Voir le message
    Beaucoup Moins d’une ms?
    Oui, juste la lecture du nombre de tours effectués, un calcul du nombre de tours restant à effectuer, une lecture de table pour la décélération choisie (pente 400 rad/s2, par exemple) et la comparaison pour décrémenter la consigne. Nous faisions cela il y a 40 ans avec un 8085 à 4 MHz...Et cela fonctionnait du tonnerre de dieu...
    Cordialement

    Jean-Pierre

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 197
    Billets dans le blog
    47
    Par défaut
    Bonsoir,

    Citation Envoyé par JPB-BFI Voir le message
    Je suis dans l’expectative relativement à utiliser des Timers en interruption ou, alors, utiliser MsTimer…
    MsTimer ? J'ai bien trouvé une bibliothèque MsTimer2, mais cette bibliothèque utilise aussi des interruptions, alors la différence...
    MsTimer2 and FlexiTimer2 will call your function from interrupt context. Because it will interrupt your program at any moment, special design is necessary to share data with the rest of your program.

  8. #8
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 903
    Par défaut
    Une bête attente sur micros() devrait fonctionner alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    void t1() {
      static uint32_t t = micros();
      if (micros() - t >= 1000ul) { // 1ms écoulée 
        // ici faire l’action 
        t += 1000ul;
      }
    }
     
     
    void t10() {
      static uint32_t t = micros();
      if (micros() - t >= 10000ul) { // 10ms écoulées
        // ici faire l’action 
        t += 10000ul;
      }
    }
     
    void t100() {
      static uint32_t t = micros();
      if (micros() - t >= 100000ul) { // 100ms écoulées
        // ici faire l’action 
        t += 100000ul;
      }
    }
     
     
    void setup() {}
     
     
    void loop() {
      t1();
      t10();
      t100();
    }

  9. #9
    Membre averti
    Homme Profil pro
    Retraité, mais avide de savoir
    Inscrit en
    Mars 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité, mais avide de savoir

    Informations forums :
    Inscription : Mars 2022
    Messages : 11
    Par défaut
    Citation Envoyé par Jay M Voir le message
    Une bête attente sur micros() devrait fonctionner alors
    Merci pour cette idée qui devrait me permettre de continuer mon projet!

    J'ai toutefois deux questions
    Est-ce que le suffixe UL (1000UL) est nécessaire ici?
    Puis-je, sans autre, intégrer les trois procédures dans un fichier .h et .cpp?

    Bon wek-end et merci encore pour l temps consacré à un béotien comme moi

    Jean-Pierre

  10. #10
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 903
    Par défaut
    Le ul n’est pas obligatoire il sert plus à montrer l’intention et le fait que l’on sait que l’on gère des unsigned long.

    Bien sûr on peut organiser le code comme on veut du moment qu’on respecte les règles du C++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire un Timer de fonction PORTABLE ?
    Par dieuP1guin dans le forum C
    Réponses: 3
    Dernier message: 04/07/2003, 10h44
  2. [horloge] conflit caractère / timer
    Par JeanJean dans le forum C
    Réponses: 10
    Dernier message: 09/05/2003, 23h47
  3. [] [Réseau] Anti-timer, anti-idle
    Par clonevince dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/01/2003, 22h19
  4. Timer de précision
    Par guigui dans le forum MFC
    Réponses: 1
    Dernier message: 04/12/2002, 15h21
  5. Timer en µsecondes
    Par Dagobert dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 25/11/2002, 00h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo