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

Double astable et minuterie a tempo variable par aduino



  1. #1
    Angellla

    Double astable et minuterie a tempo variable par aduino

    Bonsoir,
    Je suis totalement novice en programmation, et je démarre doucement avec les arduinos.
    J'essaie actuellement de travailler avec l'arduino nano.
    Je n'ai pas besoin d'aucune information d'entrée, je cherche juste a utiliser la tempo de l'arduino

    Mon programme actuellement fais ceci :

    S1, S2 etant deux sorties numériques de l'arduino

    0/ Mise en marche
    S1 = 0V et S2 = 0V
    ------
    1/ne rien faire pendant 900000 msecondes (soit 15 minutes par la fonction delay)
    2/S1 = 5V
    3/attendre 600000 msecondes (10 minutes par la fonction delay).
    4/S1 = 0V et S2 = 5V
    5/ Attendre 10000 msec (fonction delay)
    6/ S2 = 0V
    ------
    7/ne rien faire pendant 3 600 000 msec (une heure) par la fonction delay
    on répète les actions 2;3;4;5 et 6
    ----
    on ne fait rien pendant 10 heures (ou 24 heures, ou 2 jours etc...)

    et ainsi de suite le cycle se répète 12 fois, et enfin le programme s’arrête

    Puisque chaque cycle a une durée différente, je n''utilise pas la fonction loop


    Ce que j'aimerais ajouter :

    Deux sorties (S3 et S4) qui me sortent chacune un signal d'horloge pour piloter deux moteurs pas à pas.
    Deux options :
    1/ les sorties S3 et S4 sortent tout le temps leur signal d'horloge
    2/S3 me sort son signal d'horloge a chaque fois que S1 = 5V et S4 me sort son signal d'horloge lorsque S2 = 5V.

    Dans les deux cas ça me convient, car les moteurs pas à pas seront commandés par un relais (chacun) donc la présence en continu du signal clock ne pose pas de problème


    Est ce qu'une âme charitable pourrait m'aider a inclure ces deux signaux d'horloge, ça me parait compliqué a mon niveau car si j'ai bien compris la fonction delay bloque l’exécution de n'importe quoi

    Merci infiniment pour toute aide

    -----


  2. Publicité
  3. #2
    Yvan_Delaserge

    Re : Double astable et minuterie a tempo variable par aduino

    C'est possible en utilisant la fonction millis, mais s'il faut compter jusqu'à plusieurs jours, il faudra utiliser des entiers long (32 bits) qui peuvent compter de -2
    147 483 648 à +2 147 483 647. ça ferait au maximum dans les 24 jours.

    Est-ce qu'il ne serait pas plus simple de générer l'horloge pour les moteurs pas-à-pas avec deux 555 séparés?
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  4. #3
    Yvan_Delaserge

    Re : Double astable et minuterie a tempo variable par aduino

    A la réflexion, en comptant depuis - 2 147 483 647 au lieu de 0, on double le temps. On arrive donc à 48 jours de durée maximale de temporisation. Est-ce suffisant?
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  5. #4
    Angellla

    Re : Double astable et minuterie a tempo variable par aduino

    Bonjour ,
    A vrai dire, le maximum dont j'aurais besoin ce sont 2 jours. Oui c'est possible d'ajouter des 555, mais si on peux régler le problème uniquement avec quelques lignes de codes c'est mieux.

  6. #5
    Yvan_Delaserge

    Re : Double astable et minuterie a tempo variable par aduino

    C'est facile avec la fonction millis. C'est bien expliqué dans le tuto d'Eskimon.
    Tu trouves ça dans cette doc, page 111
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  7. A voir en vidéo sur Futura
  8. #6
    Angellla

    Re : Double astable et minuterie a tempo variable par aduino

    Salut
    j'ai regardé la fonction millis, mais je n'arrive pas a savoir comment l'adapter a mon cahier des charges.

  9. Publicité
  10. #7
    Yvan_Delaserge

    Re : Double astable et minuterie a tempo variable par aduino

    Le compteur millis est mis en route au moment de la mise sous tension de l'Arduino et on ne peut pas l'arrêter.
    La fonction loop tourne à sa vitesse normale (un mombre considérable de tours de la boucle à chaque milliseconde) et à chaque boucle, on consulte millis, un peu comme si on regardait l'heure qu'il est, et on calcule la différence avec la dernière fois qu'on a regardé l'heure. Quand cette différence est supérieure à disons 3 600 000 millisecondes, tu sais qu'il s'est écoulé une heure.
    Et tu peux mettre autant de compteurs que tu veux dans ta boucle loop, notamment ceux qui vont te servir à générer ton signal d'horloge. Et tous vont faire la même chose: regarder l'heure qu'il est, faire la soustraction et tester si le moment est venu de faire quelque chose.

    Le problème, c'est que ne ne me rappelle plus jusqu'à combien peut compter millis. Il faudrait que tu le regardes sur la doc Arduino. Parce que si tu laisses l'Arduino en marche très longtemps (plusieurs jours) , il y a forcément un moment où le compteur millis va repasser à zéro. Et à ce moment-là, ton timing sera faux. Mais peut-être qu'en tenant compte du moment où millis repasse à zéro, on peut avoir quelque chose qui fonctionne quand même.

    Tel qu'il est maintenant, ton programme fonctionne-t-il?

    Code:
    S1, S2 etant deux sorties numériques de l'arduino
    
    0/ Mise en marche
    S1 = 0V et S2 = 0V
    ------
    1/ne rien faire pendant 900000 msecondes (soit 15 minutes par la fonction delay) 
    2/S1 = 5V
    3/attendre 600000 msecondes (10 minutes par la fonction delay).
    4/S1 = 0V et S2 = 5V
    5/ Attendre 10000 msec (fonction delay)
    6/ S2 = 0V
    ------
    7/ne rien faire pendant 3 600 000 msec (une heure) par la fonction delay
    on répète les actions 2;3;4;5 et 6
    ----
    on ne fait rien pendant 10 heures (ou 24 heures, ou 2 jours etc...) 
    
    et ainsi de suite le cycle se répète 12 fois, et enfin le programme s’arrête
    
    Puisque chaque cycle a une durée différente, je n''utilise pas la fonction loop
    Avec l'Arduino, il me semble que tu es obligé de mettre tes delay à l'intérieur de la fonction loop
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  11. #8
    Angellla

    Re : Double astable et minuterie a tempo variable par aduino

    non je n'ai pas encore de programme fonctionnel, mais ça va être quelque chose comme ce qui est ecrit dans le tuto d'Eskimon pour faire clignoter une simple LED.

  12. #9
    jiherve

    Re : Double astable et minuterie a tempo variable par aduino

    Bonsoir
    Pour faire du timing qui ne bouffe pas tout le temps du µC:
    initialiser un timer avec une période maximale compatible de calculs simple 100ms par exemple,
    autoriser une interruption TOVF en provenance de ce timer
    cette interruption incrémente un compteur de longueur arbitraire et déclenche les actions ad hoc au bon moment
    le programme principal, lui fait autre chose.
    JR
    l'électronique c'est pas du vaudou!

Sur le même thème :

Discussions similaires

  1. Calcul intégrale double avec double changement de variable
    Par Unluckyy dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 21/10/2012, 11h07
  2. astable à rapport cyclique variable
    Par roy_2 dans le forum Électronique
    Réponses: 11
    Dernier message: 01/07/2008, 10h55
  3. Minuterie à double affichage
    Par rocky banana dans le forum Électronique
    Réponses: 7
    Dernier message: 28/11/2007, 15h54
  4. Astable a Rapport Cyclique variable commandé numériquement
    Par totoc1001 dans le forum Électronique
    Réponses: 14
    Dernier message: 02/03/2007, 01h04
  5. tempo astable de 12mn
    Par priest28 dans le forum Électronique
    Réponses: 8
    Dernier message: 18/09/2006, 22h51