LOCODUINO

Discussions Générales => Présentez vous ! => Discussion démarrée par: sajuuk le février 17, 2020, 03:46:13 pm

Titre: Enfin lancé, enfin inscrit !
Posté par: sajuuk le février 17, 2020, 03:46:13 pm
Bonjour à tous !

En quelques mots : Romain, fan de train après mon père, et mon grand père.
Aujourd'hui, je lance mon premier projet train à moi, et j'en profite pour m'inscrire ici après des années (et des années) de lecture attentive.

Je vais déjà faire mon mauvais élève : je ne souhaite pas baser mon projet sur un arduino, mais sur un Raspberry Pi.
Pourquoi ? Parce qu'un arduino sous DCC++ (ou autre) a besoin d'un ordi pour fonctionner.
Or, un RPi est un ordi, avec un arduino intégré  :)
Mon côté tatillon a eu raison de ma raison : ça m'oblige recréer cooooooomplètement un logiciel pour émettre du DCC directement depuis le Raspberry, sans intermédiaire.

S'il y en a que ça intéresse, je pourrai parler de ce projet de centrale 2 en 1 sur un fil.
En attendant, le reste est très proche du fonctionnement lu sur locoduino, d'où ma présence  ;)

A bientôt !
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: Tony04 le février 17, 2020, 04:42:07 pm
Citer
Pourquoi ? Parce qu'un arduino sous DCC++ (ou autre) a besoin d'un ordi pour fonctionner.
Pourquoi l'Arduino a-t-il besoin d'un ordinateur pour fonctionner ?
Par contre le gros soucis du RPi est son temps de démarrage, je pense que tu vas vite le découvrir.

Qu'en pense la communauté ?

Antoine
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: sajuuk le février 17, 2020, 08:33:36 pm
Je complète ma phrase : j'ai un peu pris des goûts de luxe, j'aime bien mon interface graphique sur un écran d'ordinateur, avec clavier et souris.
Jusqu'à présent, je n'ai vu que des configurations PC + Arduino pour ce résultat.
J'avais envie de regrouper tout ça.

Quant au temps de démarrage, je l'ai accepté d'entrée en choisissant d'utiliser un ordinateur et non une simple centrale  :)
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: msport le février 17, 2020, 08:52:50 pm
Une lecture rapide du site pendant quelques mois m'a permis de constater qu'un arduino en solo peut gérer des manettes, des boosters, des centrales autonomes, des TCO, des décodeurs, des sniffers, etc et cela avec DCC.
Pourquoi remplacer un ordi par un Raspberry, avec le plaisir de se palucher du Linux ... Les problèmes de Windows me suffisent.
Mais plutôt qu'un projet, nous aimerions voir une (des) réalisation(s).
Certes un Raspberry peut faire tourner JMRI à la place d'un PC (et ça été évoqué ici, pour autant faut-il réinventer DCC++ avec le lot de bugs qui ira avec ?
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: sajuuk le février 17, 2020, 10:59:28 pm
Oui, un arduino peut faire ça. Je ne l'ai pas découvert ici.
Mais les greffer sur DCC++, pour moi c'est impossible. Je n'y connais rien en C/C++, alors hors de question de modifier DCC++.

L'avantage que je retiens d'un raspberry, c'est de pouvoir le coder avec autre chose, en l'espèce le java, que je connais. En quelques jours j'ai réussi à créer un train DCC complet.
Et non, JMRI ne fait pas d'envoi direct depuis un raspberry.
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: fcot2002 le février 18, 2020, 10:07:49 am
Bonjour

mes collègues l'on dit, et je rajoute (même i je ne vois pas l'utilité de "regrouper")

moi je fonctionne avec une centrale DCC++ arduino, un JMRI sur un bel écran, et au milieu de tout ça un beau RPi 3B+

What else ?...

au pire tu regroupes les cartes dans une même boîte.......
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: Jean-Luc le février 18, 2020, 11:40:37 am
Bonjour,

Générer un signal DCC avec du soft tournant sous Linux sachant que les instants de changement d'état du signal doivent être précis à +/- 3µs n'est pas possible. Les intervalles de temps d'appel de l'ordonnanceur varient, d'après ce que j'ai trouvé, 750µs et 6000µs.

Faut oublier, c'est pas fait pour du temps réel.

Sans parler de Java  ;D
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: sajuuk le février 18, 2020, 10:30:43 pm
Pour répondre dans l'ordre :
Fcot 2002 : c'est vrai, j'aurais pu utiliser la version clé en main JMRI +arduino, ça m'aurait pris 5 minutes ...
M'en sentant capable et aimant coder, je me suis lancé.
Alors oui j'ai fait un choix difficile, mais j'avais envie.

Jean-Luc :
Ces temps sont hors de propos : le créneau est généré par le PWM du rpi. J'ai quand même vérifié avant de me lancer, puis sur oscillo, j'ai vu des créneaux parfaitement réguliers, y compris avec une période de 116microsecondes  :)
Donc le langage java ... Fait parfaitement l'affaire, et accessoirement, c'est le seul que je connaisse ;)
Titre: Re : Re : Enfin lancé, enfin inscrit !
Posté par: Jean-Luc le février 18, 2020, 10:41:40 pm
Ces temps sont hors de propos : le créneau est généré par le PWM du rpi. J'ai quand même vérifié avant de me lancer, puis sur oscillo, j'ai vu des créneaux parfaitement réguliers, y compris avec une période de 116microsecondes  :)
Donc le langage java ... Fait parfaitement l'affaire, et accessoirement, c'est le seul que je connaisse ;)

Ok, tu as réglé une PWM avec un temps de cycle de 116 µs, c'est le hardware qui fait le boulot.

Mais as tu noté que dans DCC++ il y a une interruption à chaque cycle de la PWM, c'est à dire toutes 116µs pour une rafale de bits à 1. La routine d'interruption reprogramme la PWM, TOP et OCR selon la valeur du prochaine bit et elle a 58 µs pour le faire.

Il faut donc garantir sous Linux qu'il s'écoule moins de 58 µs entre l'interruption du timer et la fin de la reprogrammation, passage dans le noyau, réordonnancement (si il veut bien donner la main à ton process) et changement de contexte compris.

Je te souhaite bon courage  :)
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: sajuuk le février 19, 2020, 09:33:22 am
J'avoue que j'ai un peu triché : la seule bibliothèque que j'ai trouvée qui gère le PWM en java, c'est une bibliothèque en C wrappée en java ...
Je me suis arrangé pour que le bloc qui émet un train de donnée n'utilise que les méthodes issues du C.

Après, je ne comprends toujours pas le problème avec l'ordonnanceur : toute la constitution du train de données est dans le même thread :
Pour l'instant, tout est dans le même, mais à terme, je compte lui dédier un thread, pour exploiter le processeur multi coeurs.
Pour le reste, java n'est pas vraiment plus lent à exécuter que du C/C++, ce n'est pas du python  ;D

Mais c'est une bonne remarque, je testerai à l'oscillo les successions de bits.
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: msport le février 19, 2020, 10:08:10 am
Bonjour,
je crains que ce projet ne s'enferme dans une architecture à l'américaine (type console) :
La force de DCC++ est d'avoir clairement séparé la partie élaboration des commandes (manettes, TCO, etc) de la partie puissance (base station / booster).
Ce qui permet une totale liberté d'extension et de sources de pilotage.
On constate sur ce forum que l'époque de la bibliothèque CmdrArduino qui centralisait tout est terminée.
Et pour le programmeur lambda que je suis, qui admire bouche bée les grandes envolées de la programmation objet (mais qui n'y consacre pas toutes ses nuits), le DCC++ avec l'arduino me permet de réaliser les projets qui m'intéressent avec un minimum d'efforts et d'investissements.

Je constate par ailleurs que les réfractaires à Linux pourront trouver leur bonheur avec Windows ioT sur Raspberry :
https://www.clubic.com/raspberry-pi/article-853247-1-windows-iot-core-raspberry-pi.html

Mais toute créativité doit pouvoir s'exprimer, et Locoduino est l'endroit idéal pour qu'elle s'exerce dans le modélisme ferroviaire.

Bon, je retourne à mes ATTiny ...
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: sajuuk le février 19, 2020, 10:57:01 am
C'est tout à fait vrai, mais cette fois le problème vient de moi :
Je ne connais ni le langage arduino, ni le C ou C++. Donc pas possible d'étendre un système existant ...
Second problème, je n'y connais rien non plus en communication entre deux programmes. Si je fais un programme TCO, puis un programme de gestion du DCC, je ne saurais pas les faire communiquer, même s'ils tournent sur le même ordi.

Après, mon gestionnaire actuel de paquets DCC est simplet, il ne devrait pas y avoir besoin de revenir dessus trop souvent.
J'ai séparé mon programme en trois grandes parties :
- une interface graphique, pour commander l'ensemble,
- un traducteur, qui interprète les actions de l'utilisateur pour les convertir en 0 et en 1,
- un gestionnaire de GPIO, qui envoie les 0 et 1 sur les broches PWM.

Je trouve que ça enlève des intermédiaires par rapport à ce qui se fait avec DCC++ : Il nécessite un ordinateur séparé, incluant un traducteur vers des commandes textes, pour commander l'arduino qui traduit à nouveau ce texte en signal DCC.

Peut-être qu'effectivement je me retrouverai bloqué à un moment où à un autre. Mais bon, j'avais envie de coder, au moins un prototype  :P
Rien ne m'empêchera de racheter un arduino plus tard pour passer sur JMRI + DCC++  :)
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: Pierre59 le février 20, 2020, 10:17:08 am
Bonjour

Pour produire le signal DCC j'ai utilisé, et j'utilise encore, un boitier "Sprog" connecté à l'ordinateur, ou à un mini-ordinateur, en USB. J'ai un bout de programme en Java qui fabrique les trames DCC et les envoie au Sprog.

Pierre
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: sajuuk le février 21, 2020, 09:41:16 am
Merci beaucoup, je ne connaissais pas le SPROG.
Je vais regarder comment ça marche  :D
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: Thierry le février 21, 2020, 09:56:23 am
Juste pour éclaircir le débat, un SProg n'est ni plus ni moins qu'un microcontroleur dédié au DCC et à la programmation des décodeurs, et qui peut aussi servir de petite centrale. Ça ressemble furieusement à un Nano chargé de DCC++ ou DCCpp !!
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: sajuuk le février 21, 2020, 08:56:19 pm
Effectivement, à regarder je le vois de la même façon.
Ne connaissant pas du tout, je vais tâcher de trouver des détails, mais si c'est propriétaire, j'aurai vite fait le tour ...
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: msport le février 22, 2020, 10:33:02 am
Et encore plus à une Base Station montée en 2'30", décrite (entre autres) là :

http://locoduino.org/spip.php?article187

avec :

https://www.ebay.fr/itm/Arduino-UNO-L298NH-2A-H-Bridge-Two-Way-DC-Motor-Driver-Shield-Module-Than-L298P/172574983423  3,90€

https://www.ebay.fr/itm/UNO-R3-ATmega328P-CH340G-Development-Board-For-Arduino-USB/273894356458  3€

https://www.ebay.fr/itm/1-2-5-10PCS-40Pin-Dupont-20cm-Male-to-Male-1P-1P-Wire-Jumper-Cables-for-Arduino/173644556205 1€

A consommer sans modération ...

Photos suivent, trop lourdes ??
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: msport le février 22, 2020, 10:35:43 am
Photos et sketch original de Gregg ...
Titre: Re : Re : Enfin lancé, enfin inscrit !
Posté par: Pyk35 le février 26, 2020, 07:12:59 pm
Oui, un arduino peut faire ça. Je ne l'ai pas découvert ici.
Mais les greffer sur DCC++, pour moi c'est impossible. Je n'y connais rien en C/C++, alors hors de question de modifier DCC++.

L'avantage que je retiens d'un raspberry, c'est de pouvoir le coder avec autre chose, en l'espèce le java, que je connais. En quelques jours j'ai réussi à créer un train DCC complet.
Et non, JMRI ne fait pas d'envoi direct depuis un raspberry.

J'ai un peu de mal à te comprendre. Je te le dis au cas où tu aurais un doute mais si tu sais coder en java, tu sais coder en C++ à peu de chose près.
La syntaxe est très proche et tu n'auras pas beaucoup de difficulté à t'adapter (tu as le .h en plus, mais rien de compliqué).

Faire une centrale DCC sur un RPi me semble impossible surtout en java. Je partage à 100% l'avis de Jean-Luc.

Je crois que tu devrais écouter les conseils que l'on te procure ici, ce n'est pas pour t'embêter.

Sinon tu as ce projet : https://sourceforge.net/projects/f944.pgahtow.p/
Il te permettra de faire une centrale DCC similaire à une Z21 de chez Roco sur un Arduino Mega avec rien à coder. Tu pourrais même utiliser l'application roco sur smartphone et même connecter une multimauss. J4ai essayé, ça marche.

Une fois que tu as ça, tu pourras en java, moyennant de trouver une livraison xpressnet (déjà intégré à JMRI mais aussi https://github.com/schabauerj/Roco_Z21_Java/blob/master/src/main/java/com/schabauer/z21j/XpressNet.java ) et comme ça tu n'auras pas à gérer du temps réel.

Bon courage
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: sajuuk le février 29, 2020, 08:58:28 am
Hé bien oui, j'ai essayé de me mettre au C++. Mais n'ayant pas de réelle motivation à l'époque, ça me paraissait chinois, même connaissant le java ... La façon de penser générale est proche, mais la syntaxe trop différente.

Quant à la faisabilité du java, j'ai au moins envie de tester. J'attends juste mon pont en H pour essayer. Si ça ne fonctionne pas, ma foi, je pourrai revenir à une config plus classique en rajoutant seulement un Arduino.
Je maintiens que le java n'est pas beaucoup plus lent à exécuter que du C++. Juste ... Plus gros, c'est pour ça qu'on ne peut pas le mettre dans un Arduino.
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: Pyk35 le mars 01, 2020, 10:52:54 am
Pour jouer de la microseconde, je ne vois pas comment Java peut le gérer. Déjà en C++ sur un Linux normal, impossible de descendre sous la milliseconde. Il faudrait développer un driver qui agit au plus prêt du kernel pour le faire. Pour piloter du DCC depuis un ordinateur, il faut te contenter d’être au dessus de tout ça, c’est à dire envoyer des trames à un contrôleur (une centrale DCC en fait) qui lui va se charger de l’aspect temps réel.
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: msport le mars 01, 2020, 11:19:57 am
Et c'est là le génie de Gregg Berman d'avoir permis de séparer l'émission des commandes où on peut exercer sa créativité (avec pourquoi pas java) de la partie booster qui est exigeante sur les timings.
Les commandes sont formalisées.  (cf doc, disponible sur le git)
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: Pyk35 le mars 01, 2020, 11:26:23 am
Et c'est là le génie de Gregg Berman d'avoir permis de séparer l'émission des commandes où on peut exercer sa créativité (avec pourquoi pas java) de la partie booster qui est exigeante sur les timings.
Les commandes sont formalisées.  (cf doc, disponible sur le git)

Vraiment simple en effet comme messagerie! On peut la coder sur n’importe quel langage, même depuis un autre Arduino/esp voire pire, en php ou en basic  ;D
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: msport le mars 01, 2020, 11:59:43 am
Et je dirais même plus, en ligne de commande depuis le serial monitor de l'IDE.
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: Tony04 le mars 01, 2020, 06:11:35 pm
Et d'une trame du bus CAN, ne l'oubliez pas ce cher bus CAN  ;)

Cordialement
Antoine
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: Pyk35 le mars 01, 2020, 11:14:24 pm
Tu as raison Antoine, même si on peut le faire ainsi pour le CAN avec la magnifique gateway ethernet/CAN  ;)
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: CATPLUS le mars 03, 2020, 08:09:05 am
Bonjour

J'ai commandé les éléments pour faire ce Trottle

https://model-railroad-hobbyist.com/node/35652

Marcel



Titre: Re : Enfin lancé, enfin inscrit !
Posté par: Dominique le mars 03, 2020, 09:13:01 am
J'ai transféré les messages du sujet "projet centrale wifi DCC++ Can" dans la section "Vos Projets"
Nous continuerons donc ici : https://forum.locoduino.org/index.php?topic=922.0 (https://forum.locoduino.org/index.php?topic=922.0) ;D

Amicalement
Dominique
Titre: Re : Re : Enfin lancé, enfin inscrit !
Posté par: Thierry le mars 03, 2020, 11:14:44 am
Vraiment simple en effet comme messagerie! On peut la coder sur n’importe quel langage, même depuis un autre Arduino/esp voire pire, en php ou en basic  ;D

A mon avis, le format de cette messagerie n'a d'intérêt que par son aspect bas niveau qui permet de faire exactement ce que l'on veut en respectant la norme DCC au plus près, mais c'est rebutant si l'on cherche des commandes un peu plus simples.

Il y a deux gros nœuds gordiens à trancher dans tout ça:
Les registres : piloter une locomotive suppose de lui dédier un registre pour les ordres continus comme la vitesse, et éventuellement un autre pour les fonctions (c'est un choix si l'on veut éviter de perdre l'info après une grosse coupure d'alimentation...), mais connaître ou affecter en dynamique des registres selon les engins pilotés à l'instant T est relativement compliqué pour quelqu'un qui ne connait pas le fonctionnement de DCC++ et sa liste de registres limitée en taille.
Les fonctions : activer ou désactiver une fonction particulière relève du chemin de croix pour celui qui ne maîtrise pas le binaire sur le bout des doigts (je rappelle qu'il y a 10 catégories de gens, ceux qui comprennent le binaire et les autres...). Il faut différencier les messages selon les fonctions, se rappeler des fonctions actives ou non pour ne pas toucher aux autres en construisant ce message, et stocker tout ça pour chaque locomotive ou engin piloté...

J'ai pour projet à moyen terme d'ajouter à DCCpp un gestionnaire de locomotives qui permettra de définir au fur et à mesure quelles sont celles qui sont pilotées, avec leurs fonctions associées. C'est ce gestionnaire qui affectera les registres, et contiendra un exemplaire (une instance) pour chaque loco de la classe FunctionsState déjà présente dans DCCpp. Ce type d'architecture devrait permettre de définir une interface texte bien plus simple, du genre "L4  S=-60" qui signifierai 'met la loco 4 à 60 en sens inverse' ou "L3 F17=1" 'active la fonction 17 de la loco 3'... Je pense que la gestion de ces locos par un JMRI ou un 'throttle' s'en trouverai grandement facilitée.

Autre sujet: la version DCCpp qui marche sur ESP32 est réalisée et fonctionnelle. Elle n'est juste pas à disposition parce que j'ai voulu me lancer dans de grands chantiers avec du Wifi, du Bluetooth et un programme Android... Je vais revenir un peu en arrière et pousser la version ESP32 d'ici peu (tout est relatif, hein..), sans ces connecteurs sans fil.
Titre: Re : Enfin lancé, enfin inscrit !
Posté par: sajuuk le mars 15, 2020, 09:40:04 am
Bonjour à tous !

J'ai enfin reçu mon pont en H, et j'ai pu tester mon bouzin !

Alors oui c'est du java, oui c'est géré par linux, mais ça fonctionne  ;D

Et je le prouve !

(http://pix.toile-libre.org/upload/thumb/1584264838.jpg) (http://pix.toile-libre.org/?img=1584264838.jpg)

Forcément, sur la photo, on ne voit pas les roues bouger, et on n'entend pas la sonorisation.
Mais ça fonctionne  :)

Mon logiciel prototype fonctionne, je peux commander des locos avec des trains courts (1 octet adresse, 1 octet data) pour la vitesse et les fonctions.
Je vais (déjà !) mettre le développement de mon logiciel en suspens pour me consacrer à la construction de mon réseau.

A très bientôt donc, j'ouvrirai un fil dédié à mon projet dès que je m'y remettrai  ;)