Auteur Sujet: Retrosignalisation avec Arduino  (Lu 276 fois)

pierrepv

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Retrosignalisation avec Arduino
« le: septembre 27, 2018, 07:45:32 pm »
Bonsoir,

J’ai réalisé la retosignalisation S88 telle que décrite dans le projet Locoduino.

J’ai ainsi 40 cantons retrosignalés qui fonctionnent.

Mon problème est celui des innombrables détection fantômes.
Des qu’une locomotive roule, de nombreux cantons clignotent sur RRTC.

J’utilise un câble RJ45 entre l’Intellibox et l’Arduino Mega2560 grâce à un adaptateur.
J’ai réduit au maximum les fils qui achemine le 5v vers les cartes de détection
et je les ai torsadés.
J’ai ajouté un condensateur de 1microF entre l’entrée Arduino et la masse.

Rien n’y fait

Auriez vous une idée car en l’etat ce n’est pas utilisable.

Cordialement

msport

  • Sr. Member
  • ****
  • Messages: 423
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Retrosignalisation avec Arduino
« Réponse #1 le: septembre 27, 2018, 10:26:53 pm »
Bonsoir,
je ne sais pas ce que vous avez utilisé comme programme S88 (un lien vers la page Locoduino serait utile)
mais j'ai le même problème avec le programme de Rudy Boer que j'ai en partie résolu avec un debounce logiciel sur les entrées (cf pg joint)
Cordialement

pierrepv

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Retrosignalisation avec Arduino
« Réponse #2 le: septembre 28, 2018, 09:45:10 am »
Bonjour,

Merci de cette réponse.

Je connais le site de Rudy Boher, je crois d’ailleurs que Lociduino s’en est inspiré .
Le lien du projet Locoduino que j’ai utilisé est le suivant :

http://forum.locoduino.org/index.php?topic=612.0

J’ai utilisé le programme pour le Mega2560

L’idee d’intervenir par programme sur les entrées me paraît excellente

Je vais regarder ton programme dès que ma connexion Internet sera revenue.
Je suis en panne chez Free, et je n’ai plus que mon téléphone pour communiquer

Cordialement

msport

  • Sr. Member
  • ****
  • Messages: 423
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : Retrosignalisation avec Arduino
« Réponse #3 le: septembre 28, 2018, 10:07:45 am »
Je suis en panne chez Free ...

Bienvenue au club !

PS : le lien est celui de ce fil  :)
« Modifié: septembre 28, 2018, 10:09:33 am par msport »
Cordialement

pierrepv

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Retrosignalisation avec Arduino
« Réponse #4 le: octobre 10, 2018, 06:44:19 pm »
   Bonjour MSPORT,

J'ai chargé le programme que tu as joint dans ra réponse et je l'ai adapté à mon programme qui tourne sur un Arduino Méga2560.

Le programme de Locoduino est le même que celui de Rudy Boher.

Je n'ai pas une amélioration flagrante, mais je pense que celà vient peut-être de mon adaptation qui n'est pas parfaite.
Pourrais-tu m'expliquer la philosophie de la partie "debounce", que j'ai un peu de mal à comprendre.

Je vois qu'il y a une mise en tableau des entrées, mais je ne comprends pas ce qui empêche le "rebond" sur les entrées.

C'est toujours pareil, quand on a pas développé soi-même un programme, c'est un peu compliqué d'en comprendre la philosophie.

Peux-tu me dire également quel pourcentage d'amélioration je peux espérer.

Merci d'avance pour ton travail.

    Cordialement

msport

  • Sr. Member
  • ****
  • Messages: 423
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Retrosignalisation avec Arduino
« Réponse #5 le: octobre 11, 2018, 06:26:19 pm »
Bonjour,

Le principe est le suivant :
avec en entrée pinState[ i] , en sortie pinStateDeb[ i]

on fixe un délai pendant lequel on considère qu'il peut y avoir des rebonds : debounceDelay (50 ms)
Tant que l'état du pin n'a pas changé on met à jour lastDebounceTime avec millis()
On compare via read - pinState[ i] - avec l'état conservé - pinStateDeb[ i]
Quand il change on attend la fin de debounceDelay (50 ms) pour modifier le pinStateDeb[ i] qui sera utilisé pour envoyer les bits au S88.
et on met à jour lastDebounceTime avec millis()

En résumé si au bout de debounceDelay on a à nouveau l'état du début, il ne se passe rien. Autrement dit, si il y a un parasite de moins de 50 ms, il n'est pas vu.
Par contre, si il y a des parasites qui durent plus de 50 ms, ils peuvent être interprétés comme un changement d'état. On peut augmenter les 50 ms.

Mon problème qui est un mélange des entrées reçues au S88 (des entrées sont prises pour d'autres) me semble maintenant plutôt un problème de timing à la lecture (avec un BaseStation modifié pour le S88) que de parasites. Avec le debounce, je suis passé du n'importe quoi à une permutation des entrées reproductive mais inexploitable quand même. Quand j'aurais du temps je vais me lancer dans les montages de Paco pour décoder le S88.

Cordialement
« Modifié: octobre 11, 2018, 10:53:59 pm par msport »
Cordialement

pierrepv

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Retrosignalisation avec Arduino
« Réponse #6 le: octobre 14, 2018, 01:09:54 pm »
   Bonjour,

Ca y est j'ai trouvé comment adapter ton programme au mien, et ton explication m'a permis de bien comprendre son fonctionnement.

Ton programme est très efficace, et j'ai de bien meilleurs résultats, même si certains parasites subsistent encore.

Je pense que ta solution est vraiment la meilleure:
- on laisse les parasites circuler sur les fils.
- et on les piège à l'arrivée.

Pour aller plus loin, j'ai également envie de tester à l'occasion le projet LOCODUINO:  " Une Passerelle entre le bus S88 et le bus CAN pour la rétro signalisation"

https://www.locoduino.org/spip.php?article180

Le bus CAN a l'air très performant.

Je finalise l'adaptation de ton programme à mes 40 cantons et je te tiens au courant.

    Cordialement


msport

  • Sr. Member
  • ****
  • Messages: 423
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Retrosignalisation avec Arduino
« Réponse #7 le: octobre 14, 2018, 02:57:13 pm »
Très heureux que cela puisse servir.
Ne souhaitant pas investir dans une ECOS ou similaire, je regarde(rai) aussi les solutions DIY comme JRMI pour exploiter le S88. Une première tentative avec CDM-Rail bute sur cette capture du S88.
C'est clair que le CAN est de loin plus robuste que l'I2C.
Cordialement