Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 34

Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?



  1. #1
    Cyril33127

    Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?


    ------

    Bonjour,

    Je poste ce message après de nombreuses et infructueuses recherches pour comprendre comment fonctionne exactement le système Arduino lorsqu'on le met hors-tension.

    Tout d'abord, j'utilise une carte Arduino Uno.
    J'ai besoin que mon programme se stoppe et redémarre exactement là où je l'ai arrêté, c'est-à-dire qu'il ne redémarre pas au début de la boucle loop(). J'ai compris que cela était possible grâce à un interrupteur mais le problème qui se pose alors est qu'au bout d'un moment la batterie qui alimente Arduino va finir par se décharger, et la carte sera alors hors tension... Et le programme devrait alors redémarrer la prochaine fois au début de la boucle, ce que je veux éviter.
    Il doit bien y avoir un moyen d'éviter cela. Pouvez-vous m'aider ?

    Ma question reste théorique car je n'ai pour l'instant pas tous les composants nécessaires pour réaliser mon projet donc j'anticipe.

    Merci

    -----

  2. Publicité
  3. #2
    DAUDET78

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Citation Envoyé par Cyril33127 Voir le message
    Il doit bien y avoir un moyen d'éviter cela. Pouvez-vous m'aider ?
    A la coupure du jus, tu stockes la valeur du PC en EEPROM.
    Par contre, au redémarrage, il y aura la ré-initialisation du contexte du µC ( sortie, entrée, UART, Timer etc etc)
    Bref ..... le mieux, c'est de prévoir une bonne batterie .... ou de changer la philosophie de ton programme .
    J'aime pas le Grec

  4. #3
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Citation Envoyé par DAUDET78 Voir le message
    A la coupure du jus, tu stockes la valeur du PC en EEPROM.
    C'est-à-dire ?

    Citation Envoyé par DAUDET78 Voir le message
    Par contre, au redémarrage, il y aura la ré-initialisation du contexte du µC ( sortie, entrée, UART, Timer etc etc)
    C'est-à-dire que le void setup() se relance ? Qu'est-ce que le contexte ?

    Citation Envoyé par DAUDET78 Voir le message
    Bref ..... le mieux, c'est de prévoir une bonne batterie .... ou de changer la philosophie de ton programme .
    Combien de temps une simple pile 9v energizer peut durer à votre avis ?

  5. #4
    DAUDET78

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Vu les questions que tu poses .... tu n'as pas les compétences pour mener à bien ce projet . Met une batterie 12V 45Ah !
    J'aime pas le Grec

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    D'accord, merci de votre franchise. Je vais faire ça alors.

  9. #6
    DAUDET78

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Si tu ne sais pas ce que c'est qu'une EEPROM, un compteur CP, un contexte d'un µC ....... tu n'as pas la compétence (ce n'est pas un reproche, mais une constatation) pour faire ça .

    Alors, maintenant, ce qui serait intéressant, c'est : Pourquoi tu veux faire ça ?

    Quelle est l'application et la finalité de cette demande ?

    Tropique disait : Dis moi ce dont tu as besoin, je te montrerais comment t'en passer !
    J'aime pas le Grec

  10. Publicité
  11. #7
    Yoruk

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Citation Envoyé par DAUDET78 Voir le message
    A la coupure du jus, tu stockes la valeur du PC en EEPROM.
    C'est effectivement ce à quoi je pense, mais j'ai peur que le bootloader qui s'exécute avant l'exécution normale du programme ne pose problème ?

    Mais sinon +1 pour le contexte à préciser.
    La robotique, c'est fantastique !

  12. #8
    DAUDET78

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Citation Envoyé par Yoruk Voir le message
    C'est effectivement ce à quoi je pense, mais j'ai peur que le bootloader qui s'exécute avant l'exécution normale du programme ne pose problème ?
    Pas forcément .
    Le BootMachin, après exécution donne la main au programme utilisateur .
    On vient tester le contenu de l'EEPROM qui mémorise le CP d'avant. On trouve FFFFFF, c'est la première mise sous tension . Terminé.
    C'est différent ? On ré-initialise le contexte et GOTO à la valeur PC .

    Ce que j'explique, c'est dans le monde des Bisounours car c'est plus complexe. A la coupure du jus, le CP était dans un sous-programme ? une INT ? donc il fallait sauvegarder le stack .....

    Bref faut bien réfléchir avant de se lancer dans ce genre de manip !
    J'aime pas le Grec

  13. #9
    Yoruk

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Certes !

    Tout ça pour dire que s'il est possible de l'éviter, c'est encore mieux...!
    La robotique, c'est fantastique !

  14. #10
    DAUDET78

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Voir la réponse du grand philosophe :
    Citation Envoyé par DAUDET78 Voir le message
    Tropique disait : Dis moi ce dont tu as besoin, je te montrerais comment t'en passer !
    J'aime pas le Grec

  15. #11
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Le programme que je veux réaliser est très simple:
    J'ai un moteur pas à pas qui tourne à une vitesse constante dans son système d'origine. Mon but est de modifier sa vitesse de rotation: lui donner une vitesse variant périodiquement car les engrenages du système de transmission entraînent des erreurs. Mon programme consiste donc à dire au moteur d'aller à une certaine vitesse pendant un certain temps, puis une autre vitesse, puis encore une autre (petites variations de vitesse) sur une période de l'ordre de 10 minutes.

    En résumé, à la place d'un signal constant, j'envoie au moteur un signal périodique que j'ai programmé une fois pour toute d'après les erreurs périodiques que j'ai relevé expérimentalement: l'axe du moteur étant fixé au reste du système de transmission, il faut donc que la rotation du moteur reprenne exactement là où elle s'est arrêtée (d'où l'objet de la discussion).

  16. #12
    Yoruk

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Donc, tu enregistres uniquement la vitesse, et éventuellement la tempo restante du cycle en cours...?
    La robotique, c'est fantastique !

  17. Publicité
  18. #13
    azad

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Salut
    Toute cette discussion me laisse rêveur.
    Si le matériel se résume à une carte Arduino, alors (sauf erreur) il est impossible de reprendre un programme interrompu par une coupure d'alimentation au point où il était avant la coupure.
    Les conseils de Daudet ne sont applicables que dans le cas d'un µprocesseur classique. Et encore, à condition de prendre des précautions drastiques du genre déceler la coupure de courant et lancer la procédure (interruption prioritaire) de sauvegarde qui consistera à comme le dit Daudet à sauver le PC (program counter), l'état de la pile, le registre d'état, sans oublier la valeur des différentes variables du programme. Et où sauver tout cela ? Jadis la méthode classique consistait à utiliser une mémoire de maintient à très faible consommation (quelques µA) alimentée par une petite batterie de 3,6V. Et il fallait que la routine de l'interruption s'exécute avant que la disparition du 5V soit effective. On ne dispose que de quelques milli-secondes.
    Mais cela n'est vrai que pour un micro-processeur classique. Avec un ATmegaXXX il en va tout autrement, car il faudrait aussi sauvegarder tous les états des périphériques internes à l' AVR (PIA, compteurs, timers, USART, j'en passe sans doute, et des meilleurs).
    Avec un programme entièrement écrit en assembleur, cela est peut-être possible, que quelqu'un me corrige si je me trompe.
    Et encore une précision : rien ne peut fonctionner en cas de déconnexion de l'alimentation. Ne pas confondre déconnexion et coupure. Avec une coupure et de bons condensateurs, on peut espérer avoir le temps de sauver quelque chose, avec une déconnexion, rien.
    Donc, je rejoins Daudet : jamais de coupure, vivent les grosses batteries.

  19. #14
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Donc, tu enregistres uniquement la vitesse, et éventuellement la tempo restante du cycle en cours...?
    Oui, si je pouvais faire ça ce serait suffisant. Mais d'après ce qui suit...

    Si le matériel se résume à une carte Arduino, alors (sauf erreur) il est impossible de reprendre un programme interrompu par une coupure d'alimentation au point où il était avant la coupure.
    Dans ce cas, il est clair que ce que je souhaite faire n'est pas possible. Donc grosse batterie ! Marché conclu.


    Merci beaucoup pour votre aide !

  20. #15
    Gérard

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Citation Envoyé par Cyril33127 Voir le message
    ...
    lui donner une vitesse variant périodiquement car les engrenages du système de transmission entraînent des erreurs.
    ...
    Comment les engrenages peuvent entrainer des erreurs ?

  21. #16
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Les dents des pignons sont parfois mal fabriquées, ce qui provoque des petits retards puis des petites "avances" lors du cycle d'un pignon. Bien que sur un cycle complet, ces erreurs s'équilibrent.

  22. #17
    antek

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Citation Envoyé par Gérard Voir le message
    Comment les engrenages peuvent entrainer des erreurs ?
    Et comment une variation de vitesse peut supprimer ces erreurs.

  23. #18
    Gérard

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Citation Envoyé par Cyril33127 Voir le message
    Les dents des pignons sont parfois mal fabriquées, ce qui provoque des petits retards puis des petites "avances" lors du cycle d'un pignon. Bien que sur un cycle complet, ces erreurs s'équilibrent.
    Alors achète de bons pignons, ça règle simplement les problèmes invoqués.

  24. Publicité
  25. #19
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Antek, si je ralentis le moteur quand les pignons accélèrent le mouvement je compense le problème

    Gérard, je pourrais effectivement faire ça mais le but était de régler le problème sans toucher à la monture. Mais tu as raison, c'est le plus simple.

  26. #20
    Elzaidir

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Bonjour,
    Au bout d'un moment il ne risque pas d'y avoir des déviations? Si par exemple l'arduino à un retard de 1% et que le moteur a fait 50 tours ça va amplifier les erreurs.
    Pourquoi ne pas mettre un retour vers l'arduino comme un potentiomètre sans butée? Avec ça pas besoin de rester dans le loop. Tu fait une petite fonction pour convertir la position en vitesse.

  27. #21
    Elzaidir

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Bonjour,
    Au bout d'un moment il ne risque pas d'y avoir des déviations? Si par exemple l'arduino à un retard de 1% et que le moteur a fait 50 tours ça va amplifier les erreurs.
    Pourquoi ne pas mettre un retour vers l'arduino comme un potentiomètre sans butée? Avec ça pas besoin de rester dans le loop. Tu fait une petite fonction pour convertir la position en vitesse.

  28. #22
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Oui tu as raison. C'est plus difficile mécaniquement mais plus simple informatiquement, et plus précis..

  29. #23
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Difficile mécaniquement car je n'ai pas accès à l'axe de rotation de sortie sous forme d'un arbre où je pourrais facilement installer un potentiomètre.

  30. #24
    jiherve

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Bonjour,
    Serait ce pour un entrainement de monture équatoriale ?
    Si c'est le cas alors il suffit de définir un zéro sur l'axe horaire et de le rejoindre en cas de redémarrage, la séquence de compensation restera la même.
    Les sauvegardes de contexte sont des procédure délicates à mettre en œuvre(j'en ai 40 ans d’expérience derrière moi) et si l'on peut les éviter il ne faut pas hésiter, ce d'autant plus que les Flash ou les EEPROM ont une limite en ce qui concerne les cycles d’écriture/effacement, il faut donc une gestion par blocs tournants pour éviter leur destruction prématurée.
    JR
    l'électronique c'est pas du vaudou!

  31. Publicité
  32. #25
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    C'est exactement ça Jiherve, et effectivement cela règle le problème ! Merci

    As-tu toi-même réalisé une compensation de la sorte ?

  33. #26
    jiherve

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Re
    Il y a de çà tres longtemps dans une tres lointaine galaxie j'ai effectivement bidouillé un entrainement pour monture équatoriale mais comme à cette époque les plus petits ordinateurs faisaient la taille d'une machine à laver soit on vivait avec les erreurs soit la solution devait être mécanique.
    Mais si j'avais à le refaire c'est comme indiqué plus haut que je procéderais, de toutes façon à moins de disposer d'un capteur précis sur l'arbre c'est ce qu'il te faudra faire pour faire un GOTO qui est je présume dans tes projets?
    JR
    l'électronique c'est pas du vaudou!

  34. #27
    Cyril33127

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    D'accord je vois oui

    Non mon projet se limite simplement à optimiser le suivi de ma monture dans le cadre d'un projet d'étude en fait Or si je remplace les pignons le sujet perd de son intérêt, voilà pourquoi je suis réticent sur ce point

  35. #28
    DAUDET78

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Notre ami Cyril33127 l'a rêvé ? Texas Instruments l'a fait !
    http://www.electroniques.biz/compone...nes-de-courant
    Dernière modification par DAUDET78 ; 26/05/2015 à 14h40.
    J'aime pas le Grec

  36. #29
    jiherve

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Bonsoir
    Pas mal l'engin , la fonctionnalité d'une NOVRAM incluse dans le µC c'est astucieux.
    Sont toujours bons chez TI!
    JR
    l'électronique c'est pas du vaudou!

  37. #30
    DAUDET78

    Re : Arduino: Comment déconnecter l'alimentation sans que la boucle "loop()" recommence du début ?

    Citation Envoyé par jiherve Voir le message
    Sont toujours bons chez TI!
    Ouais ... faut modérer le jugement . Depuis que je les ai quitté en 1982, visiblement, y a moins de matière grise ......
    J'aime pas le Grec

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. "fondamentales", "dures", "molles" ... : comment classer les sciences ?
    Par Arvirik dans le forum Epistémologie et Logique (archives)
    Réponses: 13
    Dernier message: 22/04/2017, 22h41
  2. Réponses: 4
    Dernier message: 20/11/2014, 20h12
  3. Actu - Alimentation : vers des étiquettes "sans OGM"
    Par RSSBot dans le forum Commentez les actus, dossiers et définitions
    Réponses: 0
    Dernier message: 07/11/2009, 09h45
  4. Option d'alimentation : basculer de "mise en veille" à "ne rien faire"
    Par VERSEAU44 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 04/04/2008, 18h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.