Peut-être que le diagram va aider à la comprehension...
![]()
-----
Peut-être que le diagram va aider à la comprehension...
![]()
Dernière modification par Antoane ; 22/06/2023 à 08h54. Motif: Rapatriement PJ
Bonjour,
Le programme en #30 devrait répondre à la question.
J'ai ajouté le timeout (time<2 => timeout 1s) pour supprimer la mémorisation du premier appui.
Si problèmes de rebonds, la solution soft est de placer une pause de 10 ou 20 ms après chaque transition. On peut les placer à titre préventif...
MM
Dernière modification par mag1 ; 22/06/2023 à 08h47.
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
Bonsoir Mag1
un "rebond" sur ce Post ...
Tout comme toi, je propose - parfois- une solution à base de PIC mais bon ...
Bonne soirée
Dernière modification par Sweeban ; 22/06/2023 à 18h01.
Juste pour le fun. Bien que ça ne demande qu'un CD4013 et un CD4011 + 3 résistances et 3 condos. Le Mosfet est là pour accélérer la possibilité de recommencer. Il peut être supprimé.Peut-être que le diagram va aider à la comprehension...
![]()
Et l'oscillo
![]()
Bonjour,
proposition avec juste un 4013 :![]()
Bonjour à tous,
Peut être ceci encore plus simple.
Pour éviter des appuis non désirables sur le bouton, utiliser 2 boutons poussoirs séparés mis en séries, seul les appuis sur les 2 boutons en mêmes temps pour activer le relais.
Pour le maintien du relais, les boutons doivent alimenter une temporisation inférieure à 300 ms (charge d'un condensateur électrochimique à travers une résistance (T=R.C) pour alimenter la base d'un transistor et le transistor le relais.
https://www.google.com/search?client...rhPUVjbJTL4BMM
Faire tout pour la paix afin que demain soit meilleur pour tous
mouarf, Salut Trebor, jette un oeil au #25Bonjour à tous,
Peut être ceci encore plus simple.
Pour éviter des appuis non désirables sur le bouton, utiliser 2 boutons poussoirs séparés mis en séries, seul les appuis sur les 2 boutons en mêmes temps pour activer le relais.
Pour le maintien du relais, les boutons doivent alimenter une temporisation inférieure à 300 ms (charge d'un condensateur électrochimique à travers une résistance (T=R.C) pour alimenter la base d'un transistor et le transistor le relais.
https://www.google.com/search?client...rhPUVjbJTL4BMM![]()
Non, rien de rien, je ne regrette rien.
#25 Et pour encore plus : On ajoute 1 troisième bouton, on sait jamais !..
Mais aussi cela Possible >> PIXACE (Mag1) ou PIC (Moi)
Sniff !..
Dernière modification par Sweeban ; 23/06/2023 à 18h26.
@lutshur et @DAT44 : Merci à vous, je garde ceci sous le coude, pour l'instant, j'ai commandé le matériel pour réaliser le montage avec un microcontrôleur... Si vraiment je bloque dessus, je passerais sur cette solution.
Salut voisin du doudou, ici c'est le baudet
J'avais pas vu ton message, chez nous c'est toujours pour une recherche de solution la plus simple.
Il y a des machines qui ont 2 boutons séparés à actionner des 2 mains, impossible d'avoir un doigt ou le bras écrasé ou coupé.
Il y a également la solution de placer un seul bouton poussoir dans un tube, le bouton étant un peu enfoncé (en retrait) dans le tube, impossible d'appuyer sur le bouton accidentellement.
Faire tout pour la paix afin que demain soit meilleur pour tous
@mag1 : Bonjour, je viens de réaliser le montage et envoyé votre programme. Il fonctionne mais pas comme désiré, sauf erreur de ma part, je me rends compte qu'un 08M2 fonctionne que sur "front montant/front descendant" de C.3 et qu'il n'y a pas possibilité de traiter l'information sur un front montant "maintenu" et en attente du front descendant ?
Je ne pense pas que l'on puisse faire ceci : (C.1 passera à 0 qu'au front descendant de C.3)
![]()
bonsoir MicroVinc
je viens de tester le code de MAG1 en #30, avec un 08M2, sans aucune modification:
ça fonctionne parfaitement, suivant ton chronogramme #42
sans rebonds et sans condensateur sur C.3 (que je conseillerai quand même suivant le poussoir utilisé)
l'entrée C.3 ne sert pas en interruption sur front, mais par lecture de l'entrée (pous=0 ou pous=1)
cordialement
Je viens de modifier le code pour qu'il réponde à mes attentes, voici le code :
Je dois améliorer le fait qu'il commence à compter les 300ms au front descendant alors qu'il faudrait au front montant. Car, par exemple, lorsque je reste appuyé une première fois pendant 5 secondes, je relâche et que je rappuie maintenu avant les 300ms, ma sortie passe à 1 alors qu'elle devrait rien faire car je devrais recommencer la procédure.
Code:;temps max pré-impulsion = 300ms ;temps max timeout si pas d'appui ensuite symbol pous = pinC.3 ; Définition de la broche C.3 comme "pous" (le bouton) symbol sort = C.1 ; Définition de la broche C.1 comme "sort" (la sortie) symbol nbou = b1 ; Variable pour compter les boucles pullup %1000 ; Activation de la résistance de pull-up interne sur C.3 nbou = 0 ; Réinitialisation du compteur de boucles do do loop while pous = 0 ; Attente que le bouton soit relâché do loop while pous = 1 ; Attente d'un appui sur le bouton pause 10 ; Attente pour filtrer les rebonds nbou = 0 ; Réinitialisation du compteur de boucles do inc nbou pause 10 ; Pause de 10 ms (300ms=30x10) loop while pous = 0 ; Attente que le bouton soit relâché (fin de pré-impulsion) if nbou > 30 then ; Si la pré-impulsion dépasse 300 ms, on effectue une action (ici, un reset) reset ; Réinitialisation du programme endif time = 0 ; Réinitialisation de la variable "time" do high sort ; Activation de la sortie "sort" ;pause 1 ;pour bug simu à supprimer if pous = 0 then exit ; Sortie de la boucle si le bouton est relâché endif pause 10 ; Attente pour filtrer les rebonds loop while pous = 1 ; Attente que le bouton soit relâché (fin de l'action) pause 10 ; Attente pour filtrer les rebonds low sort ; Désactivation de la sortie "sort" loop low sort ; Désactivation de la sortie "sort" à la fin du programme
attention au sens, comme indiqué dans le code #30,
poussoir actionné -> POUS=0 car il est relié à la masse.
Code:if pous = 1 then exit ; Sortie de la boucle si le bouton est relâché endif pause 10 ; Attente pour filtrer les rebonds loop while pous = 0 ; Attente que le bouton soit relâché (fin de l'action) pause 10 ; Attente pour filtrer les rebonds low sort ; Désactivation de la sortie "sort"
Dernière modification par Pascal071 ; 28/06/2023 à 00h51.
Bonjour,
Merci Pascal d'avoir testé ce code, je n'ai pas le moyen de le faire actuellement.
Il ne faut pas penser en terme de front montant ou descendant, mais en terme d'état bas ou haut.
Il faut considérer le câblage du poussoir et voir ce qu'il fait.
Avec la pullup sur C.3, sans autre connexion, la patte est au niveau haut. L'action sur le poussoir doit l'amener au niveau bas.
Pour inverser cette logique, il faut supprimer la commande pullup et câbler un R extérieure au 0V et le poussoir entre C.3 et +Vcc. Il faut ensuite inverser la logique du code en inversant les 0 et les 1. Le résultat sera le même.
Je vais lire ton code pour voir si il répond à ta demande...
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
bonjour
MicroVinc a bien commencé, mais ensuite a inversé le sens de C.3
erreurs en rouge:
pour mon test, j'ai simplement copié-collé ton code #30do
high sort ; Activation de la sortie "sort"
;pause 1 ;pour bug simu à supprimer
if pous = 0 then
exit ; Sortie de la boucle si le bouton est relâché
endif
pause 10 ; Attente pour filtrer les rebonds
loop while pous = 1 ; Attente que le bouton soit relâché (fin de l'action)
pause 10 ; Attente pour filtrer les rebonds
low sort ; Désactivation de la sortie "sort"
le résultat est OK, sans surprise.
ça ressemble au double clic de souris, maintenu si besoin !
je suis étonné qu'il n'y ait pas de rebonds, peut-être la vitesse du basic qui aide
Bonjour, voici les résultats en photos, étapes par étapes et le code qui fonctionne avec mon montage :
(Mon seul "petit" problème que je souhaite améliorer est le démarrage du Timer au premier appui et non au relâchement du premier appui.)
@Pascal071 : "je suis étonné qu'il n'y ait pas de rebonds, peut-être la vitesse du basic qui aide" Il y a peut-être une solution hardware au cas où ?
Code:;ATTENTION : Programme pour bouton poussoir connecté entre GND et C.3 ;temps max pré-impulsion = 300ms ;temps max timeout si pas d'appui ensuite symbol pous = pinC.3 ; Définition de la broche C.3 comme "pous" (le bouton) symbol sort = C.1 ; Définition de la broche C.1 comme "sort" (la sortie) symbol nbou = b1 ; Variable pour compter les boucles pullup %1000 ; Activation de la résistance de pull-up interne sur C.3 nbou = 0 ; Réinitialisation du compteur de boucles do do loop while pous = 1 ; Attente que le bouton soit relâché do loop while pous = 0 ; Attente d'un appui sur le bouton pause 10 ; Attente pour filtrer les rebonds nbou = 0 ; Réinitialisation du compteur de boucles do inc nbou ; Incrémenter la valeur de la variable "nbou" pause 10 ; Pause de 10 ms (300ms=30x10) loop while pous = 1 ; Attente que le bouton soit relâché (fin de pré-impulsion) if nbou > 20 then ; Si la pré-impulsion dépasse 300 ms (si 30) ou 200 ms (si 20), on effectue une action (ici, un reset) reset ; Réinitialisation du programme endif time = 0 ; Réinitialisation de la variable "time" do high sort ; Activation de la sortie "sort" ;pause 1 ; Pour bug simu à supprimer if pous = 1 then ; Si la valeur de la broche pous est égale à 0 exit ; Sortie de la boucle si le bouton est relâché endif pause 10 ; Attente pour filtrer les rebonds loop while pous = 0 ; Attente que le bouton soit relâché (fin de l'action) pause 10 ; Attente pour filtrer les rebonds low sort ; Désactivation de la sortie "sort" loop low sort ; Désactivation de la sortie "sort" à la fin du programme
hello
juste une t'ite remarque, un contact de "micro switch" est de par sa construction, un contact à "rupture brusque" générée par un ressort, cad pas trop tributaire de la vitesse d'action sur le levier de commande, alors qu'un bouton poussoir "classique" est plus soumis à la "rapidité" et la force de poussée, donc engendrera plus facilement des "rebonds" , ceci explique peut-être cela![]()
Non, rien de rien, je ne regrette rien.
Bonjour, ça marche bien avec le bouton d'origine de la carte d'essai : https://picaxe.com/docs/axe092.pdf
Mais, au cas où, si vous avez une solution hardware pour limiter le "rebond", je suis preneur![]()
bonjour
un 100nF en // sur le bouton devrait suffire.
le code de MAG1 en #30 est plus sain, et les 300mS démarrent dès le premier appui...
cordialement
Avec le code #30, le comptage démarre au premier appui, et non au relâchementBonjour, ça marche bien avec le bouton d'origine de la carte d'essai : https://picaxe.com/docs/axe092.pdf
Mais, au cas où, si vous avez une solution hardware pour limiter le "rebond", je suis preneur
Ben non, c'est le contraire.do loop while pous = 1 ; Attente que le bouton soit relâché
Dans #30, "do loop while pous=0" n'est utile que dans les rares cas où le poussoir soit dans l'état appuyé à la mise sous tension ou à la suite d'un recyclage, normalement, on passe directement à la boucle suivante: "do loop while pous=1". ;attente d'un appui.
Si on veut faire un anti rebond logiciel, il faut une pause entre ces deux boucles.
Pour un anti rebond matériel, on peut mettre une capa (disons 10nF) aux bornes du poussoir. Les plus pointilleux diront que l'énergie emmagasinée se dissipe dans le contact, donc nuisible, d'autres diront que cette énergie est bonne pour nettoyer le contact, il y a ceux qui placent une petite R
Petit tuto lo..https://www.youtube.com/watch?v=6Uj02YBz9BI
MM
Dernière modification par mag1 ; 28/06/2023 à 13h49.
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
@Pascal071 : effectivement, avec mon montage, je viens de tester le programme en #30 et il répond à mes attentes... Je vais le mettre en épreuve quand même
@mag1 : Merci pour la vidéo, je vais m'y interessé...
Attention, sur cette carte, le poussoir est en pulldown avec une R de 10k, ce qui ne convient pas pour le #30, à moins de modifier la logique voir plus haut, #46Bonjour, ça marche bien avec le bouton d'origine de la carte d'essai : https://picaxe.com/docs/axe092.pdf
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
@mag1 :Oui effectivement avec la carte "Picaxe" ça ne marche pas, voilà pourquoi j'ai adapté "mon programme"... C'est avec vos remarques que j'ai essayées le programme #30 sur mon montage et effectivement il marche bien car le signal en C.3 est le négatif, alors que sur la carte "Picaxe" c'est un positif !Attention, sur cette carte, le poussoir est en pulldown avec une R de 10k, ce qui ne convient pas pour le #30, à moins de modifier la logique voir plus haut, #46
MM
Quelle méthode as tu utilisée pour programmer? USB-RS232 ;USB-DB9 ; autre ?
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...
@mag1 : le câble de téléchargement USB AXE027 (USB-RS232)
salut
les cordons prolific PL2303 et convertisseur FT232
sont des interfaces série TTL, 0-5v, +5v au repos
leur avantage est qu'ils fournissent un +5v pour le montage en test.
les cordons USB-DB9 ou USB-RS232 standards remplacent les COMx des PC
-5 + 5v (auparavant -12, +12), -5v au repos.
le cordon AXE027 est un USB-RS232 avec jack 3,5
cdlt
Ok, l'AXE027 à l'avantage d'intégrer l'inverseur de polarité pour retrouver l'ancienne norme RS232 (celle des sorties sur port DB9) et l'inconvénient d'utiliser un jack.@mag1 : le câble de téléchargement USB AXE027 (USB-RS232)
En plus, c'est une version luxe à 20 euros, mais pour les modules picaxe,c'est le plus simple.
MM
Si il y a des erreurs ci dessus, c'est que je n'ai pas eu le temps de les corriger...