Auteur Sujet: interruptions  (Lu 18185 fois)

Tony04

  • Hero Member
  • *****
  • Messages: 570
    • Voir le profil
Re : interruptions
« Réponse #15 le: octobre 30, 2022, 03:30:14 pm »
Bonjour PB,

dans le cas de mes WeMos, j'ai utilisé le principe de la détection de courant pour connaitre l'occupation de la voie, donc aucune urgence pour le test, par contre avec des ILS il faut bien sûr bannir tout tempo par delay() et être sûr que le test de l'entrée soit dans une boucle suffisamment rapide pour ne pas la louper.

Tu peux aussi regrouper plusieurs entrées ILS, chacune sur un port quelconque et n'utiliser qu'une seule entrée d'interruption en reliant sur chaque entrée ILS la cathode d'une diode et regrouper toutes les anodes sur l'entrée interruption avec une résistance de rappel au +5V. 
La routine d'interruption va juste enregistrer l'état du ou des ports ILS et redonner la main au programme principal dans lequel tu as tout le temps de tester les différents états.

Je ne sais pas si cela est assez clair  :-\

Cordialement
Antoine

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : interruptions
« Réponse #16 le: octobre 30, 2022, 04:26:14 pm »
merci TONY
je pense que cà doit aller; je passe à l'action pour mettre tout cà en oeuvre
Je te tiens au courant des suites

Merci beaucoup

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : interruptions
« Réponse #17 le: novembre 23, 2022, 05:04:45 pm »
Bonjour a tous

Je reviens sur le sujet des interruptions:

Pour memoire je pilote mon reseau avec des Arduino Mega 2560-R3

je n'arrive pas a détecter mes ILS de cantonnement
j'ai remplacé des aimants classiques des fournisseurs de modélisme par des aimants super puissants de chez "supermagnette";
j'ai utilisé la librairie "enableInterrupt" et rien n'y fait quelque fois ca marche et bien souvent ca marche pas....
Pour m'assurer du fonctionnement des ILS et aimants je branche mon voltmètre a l'ILS, celui-ci me confirme bien le passage de l'information en niveau bas; j'en conclue  qu' il s'agit donc de la routine d'interruption.

ci-joint extrait de mon code
quelqu'un peut'il me dépanner, merci par avance pour vos précieux conseils.

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : interruptions
« Réponse #18 le: novembre 23, 2022, 06:03:12 pm »
... le txt est vide.
Cordialement

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1089
  • HO avec DCC++
    • Voir le profil
Re : interruptions
« Réponse #19 le: novembre 24, 2022, 09:19:12 am »
Bonjour,

Bien que les ILS ne soient peut-être pas en cause dans le problème rencontré, je pense qu'il est nettement préférable de les bannir des réseaux : Trop fragiles, trop gros, peu fiables.

Personnellement je leur préfère de loin les capteurs à effet Hall qui sont plus performants et plus discrets. Certes, ils nécessitent un peu plus de câblage puisqu'il faut leur fournir du 5V (en générale, mais il existe des 3,3V), une masse et un fil pour le signal.

chris_bzg

  • Sr. Member
  • ****
  • Messages: 319
    • Voir le profil
Re : interruptions
« Réponse #20 le: novembre 24, 2022, 09:35:51 am »
Effectivement, les capteurs à effet hall sont préférables car les ILS présentent tous les inconvénients des contacts mécaniques : fragilité, rebonds, risque de rester bloqués (c'est du vécu).
Quant au câblage supplémentaire, cela ne représente qu'un seul fil par rapport à l'ILS (trois pour Hall, et deux pour ILS) : ce n'est donc pas si compliqué.
Voir cet article : https://www.locoduino.org/spip.php?article273

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : interruptions
« Réponse #21 le: novembre 24, 2022, 11:02:07 am »
Bonjour

J'entends bien vos arguments, mais j'ai 34 ILS et ILS ou pas j'aurai toujours le pb d'interruption;
aussi je souhaiterais d'abord solutionner ce pb et ensuite pourquoi pas passer aux capteurs a effet hall.

Merci de votre aide

Je joins de nouveau le fichier de mon code (apparemment pas reçu !!)

chris_bzg

  • Sr. Member
  • ****
  • Messages: 319
    • Voir le profil
Re : interruptions
« Réponse #22 le: novembre 24, 2022, 12:27:29 pm »
Effectivement, ILS ou Hall n'est pas pour l'instant la priorité.

Je viens de reprendre votre code pour une carte Mega2560 et j'ai essayé de le compiler. L'erreur est que la variable 'arriveeC3' n'avait pas été déclarée !
Je l'ai donc déclarée comme vous l'avez fait pour 'arriveeG1' et cela compile ! C'est une première étape qui ne présage en rien du fonctionnement de votre système, mais c'est déjà ça.
De plus, je ne connais pas la façon d'utiliser la bibliothèque EnableInterrupt : j'ai vérifié que ma version est la 1.1.0 : et vous ?
Dans le enableInterrupt, vous pourriez remplacer 50 par 'ILS_arriveeG1' puisque vous l'avez déclaré précédemment.
Dans le loop, je ne comprends pas l'intérêt de faire un digitalRead() dont vous ne vous servez pas puisque vous utilisez des interruptions.
Autre remarque : sur ce code, quelques commentaires seraient les bienvenues ! Car ici, différentes variables portent des noms quasiment identiques : comment voulez-vous qu'un autre programmeur s'y retrouve ?

Enfin, je vous invite à relire ces deux articles donnant des montages similaires (un B.A.L ou Block Automatique Lumineux).
Le premier où on utilise des interruptions :
https://www.locoduino.org/spip.php?article204
Le deuxième où on se passe des interruptions car la surveillance des capteurs est suffisamment rapide pour ne pas louper d'événements, vu la vitesse à laquelle se déplacent les trains :
https://www.locoduino.org/spip.php?article297

Voilà, j'espère que ces quelques remarques vous seront utiles pour votre montage.
« Modifié: novembre 24, 2022, 12:29:45 pm par chris_bzg »

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : interruptions
« Réponse #23 le: novembre 25, 2022, 11:19:10 am »
Bonjour chris_bzg

Merci beaucoup de votre réponse qui m'est plus qu'utile puisque mes interruption fonctionnent à merveille :

En préambule, la variable 'arriveeC3' était bien déclarée et j'utilise bien la bibliothéque en version 1.1.0; en fait ce n'est qu'un extrait de mon code que j'ai transmis , voilà pourquoi il manquait une déclaration et les commentaires.

l'élément bloquant était le digitalRead, dés lors qu'il a été supprimé tout fonctionne correctement; j'imagine un conflit entre ce digitalRead et la routine d'interruption ?

Par ailleurs j'avais connaissance des 2 articles de Locoduino sur le cantonnement, mais je n'utilise pas de relais car je suis en PWM amplifié par des transistors MOSFET; cela permet de gérer les accélérations / décélerations et d'échapper aux coupures de rails pour définir les zone d'arret.

Encore un grand merci pour cette intervention; ce forum est un vrai enrichissement !!

Tony04

  • Hero Member
  • *****
  • Messages: 570
    • Voir le profil
Re : interruptions
« Réponse #24 le: novembre 25, 2022, 12:00:41 pm »
Bonjour PB,

je viens de réceptionner des effets hall LATCH (US1881), cad qu'un aimant dans 1 sens les fait conduire et un aimant dans l'autre sens les coupe.

Il suffit de mettre un aimant sous la loco et un autre dans l'autre sens sous le wagon de queue et tu as une occupation de voie complète pour quelques cts (10€ les 100).

Comme je les ai commandé par erreur, je pourrai t'en envoyer  pour tester.

Cordialement
Antoine

PB

  • Newbie
  • *
  • Messages: 30
    • Voir le profil
Re : interruptions
« Réponse #25 le: novembre 26, 2022, 05:12:02 pm »
Bonjour TONY

C'est très sympa de ta part, mais mon programme est basé sur le grafcet, donc une impulsion suffit pour activer une étape et désactivé l'étape prècedente.

Autrement dit il faudrait que je modifie complétement ma philosophie de programme.
Néanmoins tu m'as appris l'existance de ce type de capteur; mais si les ILS me pose probléme, il faudra bien que j'y vienne.

Merci encore de ta proposition, mais autant que cela serve un modéliste qui en a besoin....