LOCODUINO

Parlons Arduino => JMRI et Arduino => Discussion démarrée par: Erik84750 le décembre 26, 2019, 02:57:27 pm

Titre: 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le décembre 26, 2019, 02:57:27 pm
Bonjour, suite à un article par NOPXOR sur https://www.trainboard.com/highball/index.php?threads/24-in-48-out-card-for-jmri.116454/#post-1118030 (https://www.trainboard.com/highball/index.php?threads/24-in-48-out-card-for-jmri.116454/#post-1118030) , dont je pouvais déduire qu'il est français, je voudrais faire un suivi sur ce forum.
L'article par nopxor concerne une module Input & Output parallel qui communique avec JMRI à travers USB (sortie JMRI) transformé en RS485 (conforme protocol C/MRI).
La beauté de ce projet est qu'il conforme à tous les requis C/MRI, qu'il fait émulation transparent du hardware C/MRI, qu'il est équipé de software développé par nopxor, et qu'il peut être équipé d'un MCU Arduino Nano (version nopxor) ou d'un MCU Arduino Pro Mini (ma version adaptée).

En plus, ce qui est merveilleux, c'est que nopxor a mis disponible tout le nécessaire pour la fabrication: le hardware (Eagle .sch, .brd et le partslist) ainsi que le software pour l'Arduino (tout en annexe)!

En ce qui concerne l'architecture, il s'agit d'une module connectable par JMRI (à travers le protocol C/MRI), et que plusieurs peuvent être installé en réseau "daisy-chained" (en série) sur le layout des trains (communications par RS485: 2 fils "twisted", une seule porte USB). Les commandes pour les sorties peuvent être automatisés à travers JMRI, les entrées peuvent être utilisés par JMRI également.
On peut par example même utiliser les sorties pour commander de aiguilages servo (il faut alors ajouter un interface avec un controlleur qui est programmé pour servos: il y a pleines de possibilités, par example des modules Adafruit (ou Ali Express) 16 channels PWM, I2C https://www.adafruit.com/product/815 (https://www.adafruit.com/product/815).

Ma contribution est que j'ai adapté le projet de nopxor en module pour SMD, pour Arduino Pro Mini, et ayant réduit les dimensions du pcb par la moitié.

Les fiches gerber sont utilisables chez elecrow.com.

EDIT: j'ai remplacé version 2a par version 2b: fonctionellement complètement identique, mais avec une toute petite modification esthétique de l'emplacement de quelques condensateurs: C5, C8 et C9.

EDIT 3/1/2020: il y a une erreur de connection dans la version dessous ainsi que dans la version 2b; une trace oubliée entre IC15 pin 13 et terre. Cette erreur est corrigée dans les version v2c et v3, inclus plus bas dans mes messages.
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Dominique le décembre 26, 2019, 07:27:00 pm
Bonjour Eric,

Bravo pour cette version compacte qui vient en complément de cette de nopxor qui est décrite ici :
 http://forum.locoduino.org/index.php?topic=507.0 (http://forum.locoduino.org/index.php?topic=507.0)
Je regrouperai ta contribution avec ce fil si tu es ok.
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le décembre 26, 2019, 07:42:53 pm
Oui tout à fait! Quelle honneur pour moi!
Je souhaite toute l'équipe de Locoduino des très bonnes fêtes de fin d'année, et j'espère vous rencontrer à Lille au foire du modelisme trains (à Pâques?).
Erik
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: CATPLUS le décembre 27, 2019, 08:03:23 am
Bonjour,
Pourriez-vous SVP fournir la liste des composants.
Une photo de l'ensemble assemblé.

Bonne fêtes de fin d'année à tous.
Marcel
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le décembre 27, 2019, 09:54:03 am
Voice la liste des composants.

La PCB vient d'être lancé hier soir, 2 semaines pour arriver, et si le temps permets, une ou deux semaines pour assembler: photo sera posée ici.
Salutations,
Erik
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le décembre 27, 2019, 09:55:41 am
Et voici une version de PCB (version 2c) avec trou de montage M4 inclus.
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le décembre 27, 2019, 10:07:41 pm
Cette carte donne 48 output digital. Pour commander 48 moteurs servo, comment procéder le mieux?
1. intermédiaire avec Mega plus module Adafruit I2C 16 channels PWM?
2. intermédiaire avec Uno plus matrice pour réduire le nombre d'input digital requis plus module Adafruit I2C 16 channels PWM?
3. autre?
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: nopxor le décembre 27, 2019, 10:56:30 pm
Bonjour Erik,

Félicitations pour ton travail.
Je suis content de t'avoir inspiré.

Salutations et bonnes Fêtes à tous.
Eric alias nopxor
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le décembre 28, 2019, 06:40:16 pm
Bonjour Eric,

oui tu avais fait un travail très original et bien recherché.
Merci pour ta réponse.

Entretemps j'avais réfléchi comment réaliser une interface pour 48 servos.
Je pense le faire de manière suivante:
1. fabriquer une carte (SMD) pour 4 MCP23017, adressable, I2C, utilisant interrupts sur Pro Mini, 16ch input, un peu comme ici http://macetech.com/store/index.php?main_page=product_info&products_id=23 (http://macetech.com/store/index.php?main_page=product_info&products_id=23), mais pour moins de 4EUR tot inclus, pcb avec composants soldés.
2. Pro Mini (software from https://www.best-microcontroller-projects.com/mcp23017-interrupt.html (https://www.best-microcontroller-projects.com/mcp23017-interrupt.html) et https://learn.adafruit.com/16-channel-pwm-servo-driver (https://learn.adafruit.com/16-channel-pwm-servo-driver)
3. fabriquer une carte (SMD) interface pour PCA9685 I2C 16ch PWM controlleur (lien ici dessus)
4. songer à une façon de lier les trois (ou pas, comme c'est du I2C).

Les MCP23017 sont déjà commandés, pas bon marché: le mieux j'ai trouvé à 11EUR/20 transport inclus. Les PCA9685 aussi commandés; tout en SOP.
Quelques semaines (il faut quand-même digérer le Nouvel An) de délai.

Bonne Année à tous!
Erik

Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Dominique le décembre 28, 2019, 09:11:46 pm
Bonsoir Erik,

Ton projet est très intéressant et le partage est très sympa ;) ;D
J’avais écrit une comparaison Can/I2C, a toutes fins utiles:
 http://forum.locoduino.org/index.php?topic=642.msg7237#msg7237 (http://forum.locoduino.org/index.php?topic=642.msg7237#msg7237)

Je ne veux pas empêcher d’utiliser l’I2C, mais ce serait intéressant d’envisager le Can dans le futur, comme le suggère Jean-Luc pour C/MRI dans ce fil.
 http://forum.locoduino.org/index.php?topic=765.msg8657#msg8657 (http://forum.locoduino.org/index.php?topic=765.msg8657#msg8657)
Avec une convergence vers les satellites, peut-être.

Qu’en penses-tu ?
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le décembre 28, 2019, 09:26:29 pm
Bonjour Dominique,
merci pour ces infos! J'explore le CAN bus. S'il est plus utilitaire, c'est la façon de procéder.
Salutations,
Erik
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le décembre 29, 2019, 07:15:37 pm
CAN ou I2C ou...

I2C: J'ai fait un peu de recherche et il est bien documenté que I2C est conçu pour communications sur pcb, distances de qq centimètres. Il y a évidemment des projets pour but de prouver que des distances de plusieurs mètres soient faisables, il y a des chips (PCA9615 et autres) ayant pour but de communiquer par I2C sur des dizaines de mètres mais fin du jour I2C n'est pas conçu pour ça. Donc même si j'ai commandé quelques IC's pour expérimenter, ce sera tout ce que j'en ferais.

CAN: conçu par Bosch pour automobile, ensuite un standard industriel, selon ce que j'ai lû il s'agit non seulement d'un layer physique (model OSI layer 1), c'est également un protocol layer 2: très performant mais à mon avis, pour le modelisme, c'est comme tirer dessus une moustique avec un calibre .50. Le débugging au niveau de microcontrolleur est très difficile, les spécifications sont loin au dessus de ce que exigerait le modelisme féroviaire, et l'appliquer pour des simples contrôles d'aiguillages je pense ne pas passer mon temps.

RS485: mode de transmissions adhéré par C/MRI, OSI layer 1 (physique, pas de protocol standard; le protocol utilisé en modelisme est celui développé par Bruce Chubb), bien établi, multinode, half-duplex (physiquement le même que ethernet sauf que lui c'est full duplex et de point à point), et bien éprouvé pour le modelisme; puisque C/MRI l'utilise, à mon avis la route que je choisirait.

Mais maintenant à propos des modules d'ici dessus: un bon ami vient de me demander si c'est bien choisi de commander 48 servos depuis une node. Sauf qu'n cas d'un yard gigantesque il n'y aurait pas vraiment besoin. Reste donc à déterminer quel est le montant d'aiguillages qu'il faudrait commander depuis une node pour un modelisme de train moyen: six, dix, quinze,.. mais peu probable que ce soit plus.
Donc il s"avère que ce serait plus pratique d'avoir plusieures nodes repartis sur un layout ayant chaque au maximum une dixaine, max 16 aiguilles à commander.

Et alors, pourquoi ne pas utiliser l'approche de Geoff Bunza: https://model-railroad-hobbyist.com/node/24316?page=51 (https://model-railroad-hobbyist.com/node/24316?page=51) ? Où utiliser C/MRI mais avec des nodes controllant les aiguilles aux allentours de quelques mètres maxi?


Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Dominique le décembre 29, 2019, 09:13:44 pm
Ton analyse sous l’angle OSI est correcte, mais le bus Can est très facile à utiliser, contrairement à ce que tu crois : voir l’article  http://www.locoduino.org/spip.php?article148#forum4339 (http://www.locoduino.org/spip.php?article148#forum4339).
C’est le MCP2515 (ou le MCP2517) qui fait tout le boulot : l’Arduino ne fait qu’envoyer et recevoir des messages, filtrés pour lui seulement avec garantie de ne rien perdre.

J’en utilise partout sur mon réseau sans aucun problème: un Mega gère toutes les détections d’occupation et les clés d’aiguilles sur le TCO physique, un autre Mega gère les aiguilles, un autre Mega gère le DCC les trains, un autre Mega s’occupe de la programmation des locos et un autre Due gère un TCO  gestionnaire sur écran graphique Tactile et tout ça communique par messages can (je n’ai pas fini de décrire mon réseau  http://forum.locoduino.org/index.php?topic=290.0  (http://forum.locoduino.org/index.php?topic=290.0)). La suite sera d’interface JMRI via une interface C/MRI et un traducteur de messages, comme Jean-Luc a commencé à l’expliquer ( http://forum.locoduino.org/index.php?topic=765.msg8657#msg8657 (http://forum.locoduino.org/index.php?topic=765.msg8657#msg8657)).

Et avec ces cartes (https://fr.aliexpress.com/item/33057126416.html?spm=a2g0o.productlist.0.0.55522856zKUQqK&algo_pvid=abf2d3f0-8e1c-4730-9965-4cd8dbc60cc4&algo_expid=abf2d3f0-8e1c-4730-9965-4cd8dbc60cc4-36&btsid=d2325bd7-2a91-40b5-9575-17263f72ddf1&ws_ab_test=searchweb0_0,searchweb201602_10,searchweb201603_53 (https://fr.aliexpress.com/item/33057126416.html?spm=a2g0o.productlist.0.0.55522856zKUQqK&algo_pvid=abf2d3f0-8e1c-4730-9965-4cd8dbc60cc4&algo_expid=abf2d3f0-8e1c-4730-9965-4cd8dbc60cc4-36&btsid=d2325bd7-2a91-40b5-9575-17263f72ddf1&ws_ab_test=searchweb0_0,searchweb201602_10,searchweb201603_53), ce n'est pas très cher !

Idéalement je devrai passer aux satellites, ce qui sera une évolution douce par la suite.

Mais ça n’avance pas vite  ??? ???
Et j’aimerai bien faire un peu de decor  :P


Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le décembre 30, 2019, 07:55:06 am
Bonjour Dominique,

merci de ta réponse, ça met les choses en perspective. Je continue à explorer; ce forum est très intéressant.
Regardant ton réseau il est bien composé.
Dans ton cas je peux bien m'imaginer qu'expérimenter avec un CAN bus pose une solution élégante. Je me trouve souvant sur des forums anglophiles et je remarque que souvent leurs réseaux sont de taille différentes; donc je me demande si on a des dizaines (voire parfois de centaines) d'aiguillages, de sensors, d'animations à controller ou lire comment choisir son mode (layer 1) et protocol (layer 2) de communications.

Par example Geoff Bunza semble adhérer au concept de multiples bus DCC; un bus à travers les rails pour les loco's, des bus pour les aiguillages et autres (dont il propose un décodeur statique de fonctions qui peux controller des servos, etc..).
Ou l'approche C/MRI: bus RS485, quand-même éprouvé robuste et industriel..
Ou l'approche CAN ou ses frères (OpenLCB, CBUS)
Tout les autres: https://www.jmri.org/help/en/webtoc.shtml (https://www.jmri.org/help/en/webtoc.shtml)
Un tableau de comparaison en fonction de type et dimension de layout?

Moi en ce moment je ne vois pas la forêt à travers les arbres.

Erik

EDIT: la charpente dans to chambre est adorable! le sol c'est du parquet? Et quel joli tapis, j'en ai aussi un comme ça de mes grand-parents prêt pour mon local.
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Dominique le décembre 30, 2019, 09:28:55 am
Bonjour Erik,

Citer
EDIT: la charpente dans to chambre est adorable! le sol c'est du parquet? Et quel joli tapis, j'en ai aussi un comme ça de mes grand-parents prêt pour mon loca

C’est un grenier au dessus du garage. Un jour j’ai décidé de l’aménager pour changer sa destination d’entrepôt en désordre permanent. D’abord l’isolation sous les tuiles avec du lambris, puis un parquet de pin. Le tapis est à la retraite (comme moi)!
Du coup avec un peu de chauffage je peux y venir en hiver.
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Jean-Luc le décembre 30, 2019, 10:26:31 am
Bonjour

C/MRI n'inclut aucune détection d'erreur. C'est à mon avis une grave faute de conception.

Le CAN est très facile à utiliser et le contrôleur incorpore tout le traitement du protocole. Il ne reste que le niveau applicatif à faire.
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: msport le décembre 30, 2019, 10:40:58 am
Pour apporter une petite contribution, en ce qui me concerne pour de petits réseaux démontables (maxi 2m x 1,2m en HO), j'utilise le DCC comme bus avec en particulier les montages de  Geoff Bunza / Rudy Boer (qui a été le premier?).
Une réalisation d'un circuit a été décrite dans ces colonnes, et j'en ai fait une variante.
J'ai utilisé l'I2C sur 1m/2m, mais il est trop facilement parasité (mais parfait sur un pcb).
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Dominique le décembre 30, 2019, 11:24:53 am
Bonne analyse :

Citer
Par example Geoff Bunza semble adhérer au concept de multiples bus DCC; un bus à travers les rails pour les loco's, des bus pour les aiguillages et autres (dont il propose un décodeur statique de fonctions qui peux controller des servos, etc..).
Ou l'approche C/MRI: bus RS485, quand-même éprouvé robuste et industriel..
Ou l'approche CAN ou ses frères (OpenLCB, CBUS)
Tout les autres: https://www.jmri.org/help/en/webtoc.shtml
Un tableau de comparaison en fonction de type et dimension de layout?

Moi en ce moment je ne vois pas la forêt à travers les arbres.

C’est vrai qu’il y a de quoi hésiter, ce qui fait que la plupart des modélistes succombent dans les technos des constructeurs de centrales : DCC à tout faire.

J’avais déjà suggéré en 2015 d’utiliser plusieurs bus car le DCC a des limites : voir cet article  http://www.locoduino.org/spip.php?article58 (http://www.locoduino.org/spip.php?article58) puis sa mise en pratique :  http://www.locoduino.org/spip.php?article153 (http://www.locoduino.org/spip.php?article153).

Cela dit, Msport a raison pour un petit réseau, mais ça coûte cher quand il y a beaucoup d’appareils de voie.

A cette époque je ne connaissais pas tous les autres bus et je rechignais à explorer les solutions plus ou moins onéreuses et m’y laisser enfermer. Jean-Luc m’a présenté le Can qui m’a convaincu d’emblée. Depuis je le confirme sans arrêt que ce fut un bon choix. Avec les satellites on a une architecture idéale 
( http://www.locoduino.org/spip.php?article242 (http://www.locoduino.org/spip.php?article242)).

Mais il faudra du temps pour tout définir et en faciliter l’accès à tous.

Un élément essentiel dans le réseau est le « chef de gare » (nom judicieusement donné par Marc-Henri), qui me semble plus parlant que « gestionnaire ».
JMRI en est un (et bien plus) comme RockRail et d’autres plus commerciaux, donc encore une zone de forte hésitation et d’investissement en temps :o

Je pense toujours qu’on doit pouvoir le faire soi-même, mais ce n’est pas facile d’éviter l’usine à gaz !

Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le janvier 03, 2020, 10:14:22 pm
Entretemps j'ai fait une version v3a de la carte nopxor 24in/48out avec des connecteurs IDC pour les 48  sorties.

changements:
1. 3x IDC connecteur 16 poles
2. enlever jumpers TX & RX car pas besoin avec Pro Mini
3. élargir les connecteurs Vcc et RS485 en modèles plus solides et plus commun
4. réduire connecteurs doubles RS485 en un connecteur RS485

Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: fcot2002 le janvier 04, 2020, 11:07:11 am
Merci Erik84750 !

Dominique, comme tout le monde je ne connaissais rien en arduino / bus etc.

Arduino, comme tout le monde j'ai cherché, trouvé et maintenant ça roule.

Bus il faut faire pareil, j'ai eut plus de facilité à comprendre C/MRI que CAN. Question de langage utilisé par les protagonistes. Comme quoi cela tient à peu. Et aussi aux éclairages de CatPlus et NopXor (encore merci à eux).

Maintenant ça roule bien DCC++ pour le digital, JMRI en chef de gare, C/MRI en transmetteur de données.

Quant au "C/MRI n'inclut aucune détection d'erreur. C'est à mon avis une grave faute de conception." laissez-moi rire nous ne sommes pas dans l'industrie aéronautique !... Le CAN Locoduino certes gère, mais est incompatible avec le chef de gare... ça c'est une faute de conception !

Encore Merci Erik84750 !
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le janvier 27, 2020, 07:09:32 pm
Et voici la carte finie (avec connecteurs IDC). La carte jaune est prévue sans IDC mais avec de simples "pinheaders" pour les 24 entrées et 48 sorties.
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: CATPLUS le janvier 28, 2020, 09:39:45 am
Bonjour
Trés bon travail
Cordialement
Titre: Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le février 10, 2020, 02:00:36 pm
Pour la suite de cette série j'ai réalisé une carte mère qui supporte max 6 cartes MCP23017 (16ch input) avec max 6 cartes PCA9685 (PWM output 16ch).

Un Pro Mini organise tout:

1. détecter si et oú il y a un changement d'entrée à une des MCP23017
2. detecter s'il y a une détection fausse (software debounce)
3. commander la sortie correspondante au PCA9685 correspondant.

Donc les cartes MCP23017 et PCA9685 se comportent en couple. Les addresses MCP23017 commencent à b000, les addresses des PCA9685 commencent à b000001. Ensuite les addresses doivent se suivre avec des couples de cartes ajoutées. La configuration est toute automatique. Donc à part de mettre la bonne addresse à chaque carte (soudure PCA9685, jumpers MCP23017), tout se passe automatiquement.

La configuration pour les servos se fait dans le setup du programme: à déterminer empiriquement selon le type de servo.

La carte 24In/48OUT de nopxor donc peut commander 3 cartes MCP230171 / 3 cartes PCA9685. Donc cette carte mère peut être connectée à deux cartes nopxor. Les connections se font par des connecteurs IDC 16p, cable flat de 16p. Les connections GROUND (GND, 0V) se fait par cable intercartaire de >0.75mm².
Alimentation 5V, séparée de DCC.
Alimentation des servos par source aussi séparée, connection GND au carte mère par cable >0.75mm².


La carte PCA9685 est conçu pour mettre un Adafruit PCA9685 en "piggy-back"
La carte MCP23017 est conçu pour un chip en SSOP28.
Tout en SMD.


Le programme du Pro Mini est en état de finalisation, quand c'est fini je le mettrai dans ce poste.
Titre: Re : Re : 24 IN / 48 OUT card for JMRI
Posté par: Erik84750 le janvier 16, 2022, 01:37:02 pm
Bonjour
Trés bon travail
Cordialement

Attention aux polarités des RS485!!

Je viens de découvrir qu'il faut respecter les connections A et B.

J'ai mis deux jours de recherche avant de constater cette solution.

Comme le Nano et le Pro Mini n'ont pas de UART hardware il est possible d'adapter le software pour accomoder un échange des fils A et B.

Maintenant trouver/écrire la programmation nécessaire...

Erik