LOCODUINO

Parlons Arduino => Vos projets => Discussion démarrée par: PB le octobre 25, 2022, 02:12:24 pm

Titre: interruptions
Posté par: PB le octobre 25, 2022, 02:12:24 pm
Bonjour

De retour parmi vous aprés une longue absence....

Mon réseau ferroviaire est commandé par des ARDUINO MEGA 2560R3, dans ce cadre j'utilise des interruptions afin de ne pas "rater" une détection dans un canton avec des ILS; je controle l'état des variables avec mon écran d'ordinateur via la liaison série. Tout cela fonctionne à merveille.

J'ai fais une mise à jour de l'IDE (version1.8.19 sous windows 7) et depuis j'ai perdus l'affichage sur mon écran.
Aprés recherche je constate que la ligne de programme en cause est " accroche ISR aux Pins"; sans cette ligne tout redevient normal. Ce problème n'existait pas avant la màj !

Quelqu'un peut'il me venir en aide  ?

Voici la partie de programme en cause:

#include <PinChangeInt.h>
const byte pinarriveeG1 = 50; //capteurs arrivee canton G1


void interruptarriveeG1() {

  static unsigned long dateDernierChangement = 0;
  unsigned long date = millis();
  if ((date - dateDernierChangement) > dureeAntiRebond) {
    occupationG1 = 0;
    dateDernierChangement = date;
  }
}


void setup() {

  Serial.begin (9600);
 
    //---------------CANTON G1--------------
  // Programme les broches des capteurs en E/S
  pinMode(pinarriveeG1, INPUT_PULLUP);

 // accroche les ISR aux pins
  PCintPort::attachInterrupt (pinarriveeG1, interruptarriveeG1, FALLING);
Titre: Re : interruptions
Posté par: msport le octobre 25, 2022, 03:29:15 pm
Bonjour,

dites nous ce que vous avez déjà essayé :

Comme mettre à jour la bibliothèque :

https://github.com/NicoHood/PinChangeInterrupt
library.properties
Release 1.2.9

PS : il existe une balise # pour encadrer le code.
et il n'est pas utile de doublonner les messages pour aller deux fois plus vite.
Titre: Re : interruptions
Posté par: PB le octobre 25, 2022, 03:36:43 pm
Bonjour

En fait j'ai eu un message m'informant d'une mise à jour de l'IDE, j'ai donc cliqué sur ce message: pour ce faire il fallait télécharger l'IDE qui m'a demandé de déinstaller le précedent pour installer la nouvelle version.

Excusez moi pour le doublon; c'est une erreur
Titre: Re : interruptions
Posté par: PB le octobre 25, 2022, 03:57:47 pm
Désolé mais je suis un peu perdu avec les références que vous transmettez (je suis plutot novice...........)

Par ailleurs mon code ne posez pas de probléme avant màj; j'ai donc tendance à dire qu'il est bon.
Titre: Re : Re : interruptions
Posté par: chris_bzg le octobre 25, 2022, 04:25:59 pm
Bonjour

En fait j'ai eu un message m'informant d'une mise à jour de l'IDE, j'ai donc cliqué sur ce message: pour ce faire il fallait télécharger l'IDE qui m'a demandé de déinstaller le précedent pour installer la nouvelle version.

Excusez moi pour le doublon; c'est une erreur

En désinstallant la version de l'IDE, vous avez peut-être désinstallé des choses nécessaires au fonctionnement de votre programme.
C'est pourquoi nous avons insisté sur l'installation d'une nouvelle version d'IDE avec un fichier ZIP (à relire "comment installer l'IDE"). En effet, cela permet d'avoir plusieurs versions de l'IDE qui cohabitent, ainsi si la nouvelle version donne problèmes, vous avez toujours l'ancienne.

De plus, la bibliothèque PinChangeInt n'est plus maintenue depuis longtemps, raison pour laquelle j'ai réécrit le code du BAL à 8 cantons qui s'en passe très bien (voir cet article). Je vous invite donc soit à vous passer de cette bibliothèque, soit à en trouver une autre similaire qui fonctionne pour la carte Mega.

Je vous invite aussi à mettre à jour votre système d'exploitation : Windows 7 étant quelque peu dépassé.

Tout cela pour dire que pour faire du bon travail, il faut avoir les bons outils et tout ce que je vous dis là est absolument gratuit. A vous d'en profiter...  ;)
Titre: Re : interruptions
Posté par: PB le octobre 27, 2022, 03:17:45 pm
Bonjour chris_bzg
 
Je te remercie de tes conseils que j'ai suivi : je suis désormais sous windows 10; j'ai réinstallé l'IDE mais toujours le meme probleme: pas d'affichage moniteur.

Par ailleurs j'ais scrupuleusement appliquer les explications de l'article "interruptions" de locoduino; je suis surpris que la bibliothéque " PinChangeInt" ne soit plus d'actualité car il est précisé une mise à jour de l'article fin 2021 ?

Ou puis je retrouver l'article du code du BAL à 8 cantons ? c'est quoi le "BAL" ?

Desolé pour ces questions qui sont peut etre un peu basiques; mais j'apprends .....
Titre: Re : interruptions
Posté par: Fantasio le octobre 27, 2022, 04:24:54 pm
Bonjour PB

Le BAL c'est le Block Automatique Lumineux qui est un système de signalisation ferroviaire automatique utilisé en France pour assurer l'espacement des trains circulant sur une même voie...

Pour le BAL à 8 cantons, c'est ici: https://locoduino.org/spip.php?article297 (https://locoduino.org/spip.php?article297)

Une question n'est jamais idiote, la réponse peut l'être... :)
Titre: Re : Re : interruptions
Posté par: chris_bzg le octobre 27, 2022, 04:33:54 pm
..
Une question n'est jamais idiote, la réponse peut l'être... :)

Exactement ! Quand j'enseignais, j'insistais auprès de mes élèves pour qu'ils disent lorsqu'ils ne comprenaient pas et j'essayais toujours de reformuler le concept d'une manière différente. Trop souvent les enseignants ne font que redire la même chose : moralité, l'élève ne comprend toujours pas mais il n'ose plus le dire.
C'est vrai qu'on a tendance à utiliser les acronymes mais lorsqu'on les voit pour la première fois, cela peut être du chinois. En plus, j'aurais dû écrire B.A.L et non BAL (et l'expliquer...). Au temps pour moi !
Titre: Re : interruptions
Posté par: msport le octobre 27, 2022, 08:37:43 pm
Bonsoir,
en cas de question sur un terme, il n'est pas interdit de faire une petite recherche. Si Wikipedia ne donne rien, on peut utiliser la "recherche" en haut à droite soit sur le forum soit sur le site éditorial. Pour ce dernier, 76 réponses et la première donne la bonne explication pour BAL. Ensuite, avec Ctrl F on trouve où dans la page.
Titre: Re : Re : interruptions
Posté par: Tony04 le octobre 27, 2022, 09:10:10 pm
Ou puis je retrouver l'article du code du BAL à 8 cantons ? c'est quoi le "BAL" ?

Bonjour PB,

si tu es intéressé par un BAL réduit à sa plus simple expression tu peux trouver une idée ici: https://forum.locoduino.org/index.php?topic=1405.0

Cordialement
Antoine
Titre: Re : interruptions
Posté par: PB le octobre 28, 2022, 11:09:19 am
Bonjour à tous et en particulier à TONY04

Tony04 tu suscite toujours autant les passions....
Ton systéme est génial, je vais essayer cela mais il va me falloir un temps de "digestion"; néanmoins sans tout comprendre du premier coup, avec la vidéo on comprend bien le principe général
J'ai déjà appliquer ton systéme d'accélération /décélération avec succés, cela ne m'a pas poser de pb!!!

Pourrais tu m'envoyer le code svp ?
Un grand merci en tous cas pour ton investissement sur des problématiques de débutant.
Titre: Re : interruptions
Posté par: Tony04 le octobre 28, 2022, 07:37:04 pm
Bonsoir PB,

voici mon code en PJ, si tu as besoin d'explication n'hésite pas. Ce n'est pas évident si on ne connait pas le fonctionnement du WeMos en WIFI.

Cordialement
Antoine
Titre: Re : interruptions
Posté par: PB le octobre 29, 2022, 12:32:33 pm
Merci beaucoup TONY04

Je pense qu'il va me falloir un certain temps pour digérer tout cà et ne pas avoir une indigestion !!!!!
Titre: Re : interruptions
Posté par: Tony04 le octobre 29, 2022, 09:12:40 pm
Bonsoir PB,

il faut commencer par comprendre la philosophie des WeMos WIFI peut-être ici: https://randomnerdtutorials.com/esp-now-esp8266-nodemcu-arduino-ide/
pour voir comment ils échangent entre eux.

Antoine
Titre: Re : interruptions
Posté par: PB le octobre 30, 2022, 10:32:53 am
Bonjour TONY

Indépendement de tout cà (que j'applique le principe des BAL ou des interruptions ); je me pose toujours la question suivante: est-ce que les ILS vont toujours etre détecté ? malgré l'abandon des interruptions.
Titre: Re : interruptions
Posté par: Tony04 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
Titre: Re : interruptions
Posté par: PB 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
Titre: Re : interruptions
Posté par: PB 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.
Titre: Re : interruptions
Posté par: msport le novembre 23, 2022, 06:03:12 pm
... le txt est vide.
Titre: Re : interruptions
Posté par: bobyAndCo 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.
Titre: Re : interruptions
Posté par: chris_bzg 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
Titre: Re : interruptions
Posté par: PB 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 !!)
Titre: Re : interruptions
Posté par: chris_bzg 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.
Titre: Re : interruptions
Posté par: PB 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 !!
Titre: Re : interruptions
Posté par: Tony04 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
Titre: Re : interruptions
Posté par: PB 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....