Auteur Sujet: Décoduino : une "centrale DCC" dédiée à la voie de programmation  (Lu 61091 fois)

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #30 le: septembre 06, 2020, 10:22:54 pm »
Merci Laurent,

Comme tu l'as remarqué, c'est le début d'un vaste projet.
Je le veux à la fois pédagogique (utilisable par un débutant, tu le verras quand tu auras le programme) et par les perfectionnistes (dont je suis  8).

Je vais commencer par satisfaire les débutants avec un programme d'usage simple et on verra par la suite.
Par exemple, la NMRA ne dit rien pour les fonctions au delà de F12.

Voilà ce que ça donne (après qu'on ait appuyé sur "valeurs par défaut")



Dès qu'on aura réglé le pb (simple, à mon avis) avec les répertoires Mac, je donnerai le programme. On ne peut pas donner un programme qui ne marche qu'avec Windows.

A part ça, je ne prévois pas du tout d'utiliser des décodeurs de fonctions. Il y a le bus CAN pour ça.

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

laurentr

  • Hero Member
  • *****
  • Messages: 648
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #31 le: septembre 07, 2020, 11:41:54 am »
Hello Denis

Comprendre mon propos sur les CV et les décodeurs comme une bonne méthode de suivre les prescriptions NMRA dans le mapping (ex CV pour les adresses, la vitesse max, min, la CV29, etc

Pour ce qui est du décodeur de fonction bine comprendre qu on parle d un décodeur embarque ( comme un de ceux du commerce dans nos locomotive) et non d un decodeur d accessoire qui lui comme tu le dits utilise ici souvent le bus CAN comme dans les "satellites".

En tous les cas l interface ne manque pas d allure!
J aimerai bien en faire autant (une belle interface IHM) pour un projet que j ai dans mes cartons pour un mapping de sorties et des feux SNCF dans différentes combinaisons ( toutes avec ou sans oeilleton)
Aujourd hui je gère cela avec une grille Excel et une série de macro que j ai mis au point avec un collègue mais si le tout pouvait etre sous une IHM cela permetrait de generer le code final à injecter...

Il va donc falloir que je me plonge dans le Processing... après avoir fini mes en cours!

Laurent

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #32 le: septembre 07, 2020, 12:14:21 pm »
Merci Laurent,

Pour faire suite à ton propos, j'ai agrandi le fichier "Proprietaires.tsv" (sans accent, d'ailleurs) avec les TITRES de fonctions 1 à 28.
(F0 est définitivement dédiée aux phares).

Dans l'image précédente, je n'avais pas mis de nom de fonction pour F1 - F12, parce que je ne savais pas quoi mettre...
Et je me suis dit que, POUR UN PROPRIÉTAIRE DONNE  les fonctions F1 - F12 ont la même attributions pour toute SES locos.
J'irai donc chercher ses attributions à afficher dans cet onglet dans le fichier "Proprietaires.tsv".

Par exemple : pour le propriétaire P1, F4 sera l'allumage de la cabine, alors que pour le propriétaire P2, F4 sera le son des freins.
Par contre, F4 sera l'allumage de la cabine pour TOUTES SES locos pour P1.
Et si des locos ne sont pas configurées comme ça, on pourra justement utiliser cet onglet pour mettre toutes les locos "d'équerre" !

Et il y a d'autres onglets sympas. Mais je ne peux pas diffuser un programme uniquement Windows... :(

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #33 le: septembre 07, 2020, 12:58:29 pm »

Et il y a d'autres onglets sympas. Mais je ne peux pas diffuser un programme uniquement Windows... :)

Mais achètes donc un Mac et cette obsession sur Windows cessera  ???
Cordialement,
Dominique

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #34 le: septembre 07, 2020, 03:32:43 pm »
Nobody is perfect ...
Cordialement

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #35 le: septembre 08, 2020, 05:14:18 pm »
Images des véhicules :

Pour moi, il est fondamental d'avoir une image de ses véhicules.
C'est un peu de travail, c'est vrai, mais c'est très agréable d'avoir pour chaque page l'image du véhicule sur lequel on agit. C'est beaucoup moins austère, comme interface !

Il s'agit donc de faire une photo de son véhicule posé de côté sur une feuille blanche et bien éclairée.

Puis, dans un logiciel gratuit comme Paint, on "détoure" le véhicule (on supprime tout le blanc qui entoure le modèle).

Cela rend le fond de la photo invisible.

En le sauvant au format ".png", on conserve cette invisibilité et on peut mettre ce modèle sur n'importe quel fond.

Comme il faut imposer une échelle, je propose de sauvegarder toutes les photos en 200 pixels de haut. C'est comme ça que le programme a été conçu.

Dans un premier temps, on rogne l'image dans un rectangle qui touche le véhicule en haut, en bas, à gauche et à droite. Puis on réduit l'image en utilisant "Image/Redimensionner" et en cochant "Conserver les proportions". Et on impose 200 pixels de haut, ce qui calcule la longueur de l'image.
Une image "pèse" ainsi environ 250 Ko.

Comme nous sommes sur un site communautaire, si quelqu'un a déjà l'image d'un véhicule, il peut en faire profiter les autres.
Ne vous gênez pas pour utiliser mes images si vous en avez besoin.

Page gestion :



C'est sur cette page qu'on arrive quand on lance le programme.
Là, l'image est prépondérante (elle sera plus petite dans les onglets du décodeur).

Le premier usage de cette image, c'est qu'on peut sélectionner le véhicule sur lequel on va agir.

Soit on avance de 1 en 1 avec les petits boutons bleus en dessous de l'image.
Mais avec 600 wagons, on ne peut pas agir ainsi…
C'est à ça que sert le curseur horizontal en dessous de l'image : on dégrossit la recherche, puis on affine avec les boutons.

Remarque :
Comme on est sur une voie isolée, on n'agit que sur un et un seul véhicule.
Et, dans ce véhicule, il ne peut y avoir qu'un décodeur, associé à ce véhicule.
C'est une limitation, c'est vrai, mais c'est un début.

Deux cases, en dessous de l'image :

Les infos issues de "Materiel.tsv" concernant le véhicule et celles concernant le décodeur éventuel associé.
ID(+1) vaut ici 1/21 (1er véhicule sur 21 dans la liste)

Les boutons :

On peut ajouter, mettre à jour ou retirer un décodeur dans le véhicule.

Pour ajouter un décodeur, il faut connaître son fabricant, sa famille et son modèle.
Et c'est là que les ennuis commencent : en général, on n'en sait vraiment rien…

J'ai donc crée un décodeur générique :
Fabricant = NMRA
Famille     = famille_ generique
Modele    = modele_generique

Cela permet de lire le CV8 (en lecture seule, voir la norme) qui donne le numéro du fabricant.
La dernière liste du NMRA date du 24/08/2020 et est en PJ.
Par exemple, Zimo a le numéro 145, qu'on retrouve donc dans le CV8.

C'est là que les dimensions exactes du décodeur vont servir, mais il faut aller sur internet.
On doit, au moins, trouver la famille.
J'avoue que c'est un défaut de mon programme : je ne sais pas aller plus loin.
Avez-vous une idée ?

Deuxième série de boutons : les copies.

On peut trouver intéressant de ne pas avoir à recopier un à un les CV d'un décodeur vers un autre décodeur.
Il existe à cet effet une fonction copier-coller de TOUS les CV d'un décodeur vers un autre.



On commence par aller sur le véhicule à copier.
On appuie sur "Copie". On peut encore changer de véhicule à ce stade.
Puis on appuie sur "Coller".
A ce moment, on a deux fois la même image en bas.
Mais si on bouge le curseur (ou on appuie sur les petites flèches de chaque côté), on change l'image du véhicule dans lequel les CV seront copiés.
Il suffit alors d'appuyer sur le bouton : "Réaliser la copie effective" ou "Sortir de la copie sans rien faire"

C'est dans cette fonction qu'on apprécie particulièrement d'avoir les images des véhicules !

Troisième série de boutons : les filtres.

Pour ne pas parcourir 600 wagons, on peut restreindre avec les filtres proposés :

Échelle, Moteur, DCC, Marque loco, propriétaire et, évidement, Effacer filtres.

Évidemment, plus on filtre, plus le compteur associé à ID(+1) diminue et, par voie de conséquence, l'écart, pour passer d'un véhicule à l'autre, augmente.
La ligne du curseur fait 1126 pixels (= 1366-240). On peut donc, théoriquement, gérer 1126 véhicules.
Dans l'exemple, comme il y a 21 véhicules, l'écart entre 2 véhicules est 1126/21 = 53 pixels.

Composition des trains :

Là, je n'ai pas encore développé jusqu'au bout.
L'idée est de sélectionner un véhicule en haut et d'appuyer sur "+" pour l'inclure dans un train et "-" pour retirer un véhicule dans le train, en bas.
Puis sauver ces compositions dans un fichier de plus dans "Communs".
A suivre. Je pense que c'est assez simple.

Les onglets :

En cliquant sur "Mise à jour" dans la version actuelle du programme, sur le véhicule "Loco0", on passe aux onglets, dans le même genre que Decoder Pro's.

Je n'ai, pour l'instant, développé que les 7 premiers onglets, parce que ce sont les plus utiles.
Je continuerai le développement des autres onglets quand j'aurai passé un cap fondamental : la lecture et l'écriture dans le décodeur.
Et là, comme demandé dans mon post du 06/09/20, je vais avoir besoin d'aide.
Par avance, merci.

Tout d'abord, lors d'échanges en juillet 2018, Pierre (Pierre59) m'avait proposé un programme capable de reconnaitre automatiquement sur quel port est branché l'Arduino depuis Processing.
C'est une pure merveille qui fonctionne sur Windows, Mac et Linux !
Si vous n'avez rien branché, il vous signale qu'il ne trouve pas l'Arduino, évidement.
Mais si vous avez branché l'Arduino, il vous donne dans une String le nom du port.
Par exemple : "Trouvé l'Arduino sur le port : COM4" pour Windows.

Fort de cette information, vous avez construit un port série entre l'Arduino (qui contient le programme de gestion DCC) et Processing.
On va pouvoir faire des échanges entre les deux programmes.

C'est à cette tâche que je vais m'atteler maintenant.
Dit autrement, mon programme actuel en Processing n'est qu'une IHM, avec un canal série, quand même.
Mais il fallait bien développer l'IHM pour savoir quelles informations échanger avec le gestionnaire DCC sur l'Arduino.

Interface Homme Machine :

Elle fait quand même plus de 5 000 lignes et mérite d'être décrite.
Dans un premier temps, je me suis attaché aux onglets du "Zimo/MX620//MX620 Version 9.12" car c'est l'un de ceux qui en a le plus dans Decoder Pro's.

Qu'on ajoute un décodeur ou qu'on le mette à jour, on tombe sur l'onglet "Fiche"



En haut, en vert, 3 cases qui se dimensionnement en fonction de leur contenu correspondent :
-> Le fabricant du décodeur
-> La famille du décodeur
-> Le modèle du décodeur

Au dessus des onglets, deux boutons explicites :
-> Mettre à jour et sortir
-> Sortir sans mettre à jour

Puis les 23 onglets de CE décodeur.
Le nombre d'onglet dépend du décodeur et est entré "en dur" dans le programme.
Pour chaque décodeur décrit, on devra donner les onglets dont il est composé et, dans chaque onglet, définir les groupes de boutons, puis les boutons et leur fonction spécifique.

Fort heureusement, on retrouve certains onglets dans tous les décodeurs (comme "Fiche") et il n'est décrit qu'une fois. C'est quand même un minimum.
On retrouve aussi certains groupes de boutons, certains boutons, …

Il n'empêche que la liste va être longue, très longue…

On retrouve dans chaque onglet :
-> L'image du véhicule
-> Le groupe de boutons "Boutons_validation_onglet"
-> Les boutons correspondants :
-> "Valider les choix pour cet onglet"
-> "Ne rien changer pour cet onglet"

Onglet "Fiche" :

On a :
-> Le choix du numéro du propriétaire qui sera dans le CV105.
En construisant le fichier "Proprietaires.tsv", il faudra bien faire attention à l'adéquation du nom du propriétaire et de son numéro (CV105). Il n'y a pas de garde-fou (pour l'instant, c'est en cours)
-> Les dimensions du décodeur qui sont "en dur" dans le programme
-> Le numéro du fabricant qui est en lecture seule dans le CV8
-> Le numéro de la version du décodeur qui est en lecture seule dans le CV7

Pour changer le numéro du propriétaire, on le tape au clavier, on fait RETURN
Le fond du bouton devient vert, preuve qu'on a bien pris en compte l'information.
C'est une constante pour tous les boutons.
Puis on appuie sur le bouton "Valider les choix pour cet onglet".
Cela met à jour le fichier "Materiel.tsv" (c'est fait) et le CV105 dans le décodeur (pour l'instant : non)

Le bouton "Valeurs usine" remet TOUS LES CV du décodeur dans leur version d'usine.
Sauf le CV105 qui est conservé.
En général, quand on fait ça, c'est que plus rien ne marche…

Il reste de la place pour d'autres informations. C'est voulu.

Notez que, de façon pédagogique, on sait, à chaque fois, sur quel CV on intervient, d'où vient l'info, etc…
On sait ce qu'on fait, au fur et à mesure. Cela peut même servir d'aide mémoire.

C'est tout pour aujourd'hui.
A suivre.

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

CATPLUS

  • Sr. Member
  • ****
  • Messages: 435
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #36 le: septembre 09, 2020, 06:52:24 am »
Bonjour Denis

Sacré boulot, félicitations

Marcel
Best Regards

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #37 le: septembre 09, 2020, 11:13:04 am »
Je continue…

Onglet Configuration :



Là, on s'occupe du CV29 qui a la particularité de gérer plusieurs fonctions, bit par bit.
On voit l'usage de chaque bit et la valeur du CV29 correspondant à tous les choix que vous avez fait.
Ici, on est en configuration usine, c'est-à-dire que tous les bits sont à 0, sauf :
->  Le bit 1 qui est à 1 (128 crans de vitesse), mais un pop-up précise aussi l'effet sur l'éclairage
->  Le bit 2 qui est à 1 (Autoriser le changement de source)

Si on clique sur l'un des boutons bleus, on a une fenêtre pop-up qui propose les choix :



Exemple après avoir cliqué sur "Autoriser le changement de source"
On a une question claire.

Une fois que les modifications ont été faites (et, pour chaque modification, le bouton devient vert), on valide par le bouton "Valider les choix pour cet onglet"

Onglet Adresse :



Voici comment se présente l'onglet quand on clique dessus si on est en adresse courte.

C'est la fameuse adresse 3.
On voit qu'elle est dans le CV1 et que le bit 5 du CV29 est à 0.

Supposons qu'on veuille mettre l'adresse 201. On la rentre simplement au clavier, puis RETURN.



Apparait alors la nouvelle adresse, qui sera dans les CV17 et CV18, en changeant le bit 5 du CV29 qui passe à 1.

En appuyant sur "Valider les choix de cet onglet", on change donc 3 CV, sans pouvoir se tromper.

Onglet moteur :



Dans l'onglet moteur, vous pouvez agir sur les CV3 et CV4.
Ils servent, respectivement, à déterminer la durée d'un cran de vitesse pour l'accélération et la durée d'un cran de vitesse pour la décélération.
En bougeant les curseurs, on peut agir sur la valeur des CV.
Au lieu de donner la valeur du CV, ce qui n'est pas très parlant, j'y ai ajouté les temps que ça donnait pour aller du cran 0 au cran 128 (ou 28, suivant le bit 1 du CV29)

Par exemple, ici, en mettant "22" dans le CV3, la durée d'un cran de vitesse, en 128 crans de vitesse; est de 156 ms et le train va de 0 à 128 crans en 20 s.

Nota :
Comme un CV peut accepter la valeur maximale de 255, cela correspond à 288 s (4' 48"), ce qui est énorme !
J'ai donc limité les choix à 63 s, ce qui est déjà pas mal. Cela permet d'augmenter la précision pour les petites durées.

Onglet Contrôle basique des vitesses :



Action sur les CV 2, CV6 et CV5 (je n'ai jamais compris pourquoi dans cet ordre)

Certains trains sont "longs à la détente" et leur faut une certaine tension pour démarrer.
Le CV2 permet que le train démarre dès le début du potar de vitesse.

Certains trains vont beaucoup trop vite quand le potar de vitesse est à fond.
Le CV5 permet de limiter la vitesse maxi quand le potar est à fond.
Ces deux CV permettent de profiter du maximum de précision pour la vitesse, la totalité de la course du potar étant utilisée.

Le CV6 permet de fixer la vitesse moyenne à mi-course du potar.
Pour être très précis : "au cran milieu", c'est-à-dire qu'on fixe ici la vitesse au cran 64 sur 128 ou au cran 14 sur 28.

Ici, J'ai choisi un réglage plutôt pour une vapeur qu'une électrique.
J'y reviendrai pour l'onglet suivant.
Nota :
Quand on valide cet onglet, on agit AUSSI sur le CV29, rappelé en bas de page.

Onglet Tableau des vitesses :

Là, j'avoue, je me suis lâché…
Depuis des années, j'ai envie de pouvoir affiner la courbe de vitesse d'une loco.

Il y a deux types de courbes :


1°) La courbe des moteurs thermiques, avec un couple faible au démarrage, couple qui augmente avec la vitesse, atteint un palier, puis décroit quand la vitesse continue à augmenter.
C'est donc le cas des locos vapeur.



2°) La courbe des moteurs électriques, avec un très fort couple au démarrage qui décroît progressivement.
C'est donc le cas des locos électriques, évidemment, mais aussi des diesels qui, finalement, ont bien un moteur électrique pour entraîner les roues.



Les formules des ces courbes étant très compliquées, j'ai choisi de pouvoir modifier les paramètres de ces courbes à l'inde de simples curseurs. Et on voit tout de suite l'impact sur le dessin de la courbe et, partant, sur la valeur des CV47 à CV94.

Le curseur P0 agit sur la vitesse mini, le curseur P4 agit sur la vitesse maxi, comme pour CV2 et CV5.
Le curseur P3 agit sur le point d'inflexion de la courbe, pour les vapeurs, et P1, P3 sur la convexité des deux ½ courbes.
Dit comme ça, c'est abscons, mais vous verrez en le faisant. C'est très visuel.
Pour les moteurs électriques, P2 agit sur l'aspect plus ou moins brutal de la croissance au départ.

Et si vous voulez personnaliser complètement votre courbe, il y a le bouton "Boutons libres" et, là, vous faites absolument ce que vous voulez.

Nota :
Quand on valide cet onglet, on agit AUSSI sur le CV29, rappelé en bas de page.

Onglet Carte des fonctions :

Voilà l'onglet tout au départ :



Lenz et la NMRA ont prévu que chaque bouton de fonction puisse agir sur 8 (!!) sorties.
C'est absolument énorme.
D'où cette carte des fonctions que je trouve assez démentielle, surtout sur la plupart des décodeurs qui sont déjà bien contents d'afficher 4 fonctions.
Si on appuie sur "Valeurs par défaut", on a une belle diagonale :



Une seule sortie par fonction. C'est déjà plus simple.

En cliquant sur une case, on a accès à une bascule : 0 = vide, V = 1.
On peut ainsi définir les CV 33 à CV46.
J'ai ajouté un code couleur des fils des sorties, très connu, mais qu'on retrouve là.
Comme ça on sait où le trouver si on a un doute.

Voilà.
J'arrête là pour le développement des onglets.
Il reste énormément de choses à faire, mais je vais me consacrer à ce qui se passe sur l'Arduino de la centrale DCC.
Quand ça marchera, je continuerai le développement du programme.

Denis
« Modifié: septembre 09, 2020, 11:15:06 am par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #38 le: septembre 09, 2020, 11:26:13 am »
Citer
Il reste énormément de choses à faire, mais je vais me consacrer à ce qui se passe sur l'Arduino de la centrale DCC.

En effet, as-tu documenté les échanges entre Decoduino et la centrale (quelle qu'elle soit, de préférence compatible La Box et DCCpp) ?
Cordialement,
Dominique

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #39 le: septembre 09, 2020, 11:55:34 am »
Depuis Processing, je peux envoyer/recevoir ce que je veux sur le port série. Je m'adapterai.
Si je suis compatible DCCpp, je serai compatible avec LaBox.

Si j'ai bien compris, on envoie un texte démarrant par un W pour écrire un CV dans la centrale, puis dans la loco ?

En fait, j'ai besoin de savoir ce que je dois envoyer à la centrale sur le port série pour lire un CV, écrire un CV. C'est tout.
Il n'y a que 2 messages.

Denis
« Modifié: septembre 09, 2020, 12:34:18 pm par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #40 le: septembre 09, 2020, 03:30:12 pm »
https://github.com/DccPlusPlus/BaseStation/wiki/Commands-for-DCCpp-BaseStation#engine-decoder-programming-commands


Engine Decoder Programming Commands
PROGRAMMING-MAIN TRACK
WRITE CV BYTE TO ENGINE DECODER ON MAIN TRACK

Writes, without any verification, a Configuration Variable BYTE to the decoder of an engine on the main operations track.

    Write CV BYTE Format is: < w CAB CV VALUE >
    CAB: The short (1-127) or long (128-10293) address of the engine decoder
    CV: The number of the Configuration Variable memory location in the decoder to write to (1-1024)
    VALUE: The value to be written to the Configuration Variable memory location (0-255)
    Returns: NONE

WRITE CV BIT TO ENGINE DECODER ON MAIN TRACK

Writes, without any verification, a single bit within a Configuration Variable BIT to the decoder of an engine on the main operations track.

    Write CV BIT Format is: < b CAB CV BIT VALUE >
    CAB: the short (1-127) or long (128-10293) address of the engine decoder
    CV: the number of the Configuration Variable memory location in the decoder to write to (1-1024)
    BIT: the bit number of the Configurarion Variable regsiter to write (0-7)
    VALUE: the value of the bit to be written (0-1)

    Returns: NONE

PROGRAMMING-PROGRAMMING TRACK
WRITE CV BYTE TO ENGINE DECODER ON PROGRAMMING TRACK

Writes, and then verifies, a Configuration Variable BYTE to the decoder of an engine on the programming track

    Write CV BYTE Format is: < W CV VALUE CALLBACKNUM CALLBACKSUB >
    CV: The number of the Configuration Variable memory location in the decoder to write to (1-1024 ).
    VALUE: The value to be written to the Configuration Variable memory location (0-255).
    CALLBACKNUM: An arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs that call this function.
    CALLBACKSUB: a second arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs (e.g. DCC++ Interface) that call this function.

    Returns: < r CALLBACKNUM|CALLBACKSUB|CV Value >
    CV VALUE: Is a number from 0-255 as read from the requested CV, or -1 if verification read fails.

WRITE CV BIT TO ENGINE DECODER ON PROGRAMMING TRACK

Writes, and then verifies, a Configuration Variable BIT to the decoder of an engine on the programming track

    Write CV BIT Format is: < B CV BIT VALUE CALLBACKNUM CALLBACKSUB >
    CV: The number of the Configuration Variable memory location in the decoder to write to (1-1024).
    BIT: The bit number of the Configuration Variable memory location to write (0-7).
    VALUE: The value of the bit to be written (0-1).
    CALLBACKNUM: An arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs that call this function.
    CALLBACKSUB: A second arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs (e.g. DCC++ Interface) that call this function.

    Returns: < r CALLBACKNUM|CALLBACKSUB|CV BIT VALUE>
    CV VALUE is a number from 0-1 as read from the requested CV bit, or -1 if verification read fails.

READ CONFIGURATION VARIABLE BYTE FROM ENGINE DECODER ON PROGRAMMING TRACK

Reads a Configuration Variable from the decoder of an engine on the programming track.

    Read CV BYTE Format is:< R CV CALLBACKNUM CALLBACKSUB >
    CV: The number of the Configuration Variable memory location in the decoder to read from (1-1024).
    CALLBACKNUM: An arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs that call this function.
    CALLBACKSUB: A second arbitrary integer (0-32767) that is ignored by the Base Station and is simply echoed back in the output - useful for external programs (e.g. DCC++ Interface) that call this function.

    Returns: **< r CALLBACKNUM|CALLBACKSUB|CV VALUE>
    CV VALUE is a number from 0-255 as read from the requested CV, or -1 if read could not be verified.

NOTES:

    Because of the way MarkDown language works I had to put a space between the < and the command letter otherwise the text is read as HTML code. A space after < , or before > in the command is ok but not mandatory. Spaces between Values in the command are required.
    All Commands and Formats were taken from the comments in the DCCpp_Uno.ino and Realted *.cpp files created by Gregg E. Berman and the files can be found Here DCC++ Base Station
Cordialement

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #41 le: septembre 09, 2020, 03:59:03 pm »
Merci Michel,

Je connais donc maintenant quels ordres envoyer/recevoir.

Au début, je vais utiliser la centrale basique Arduino UNO+Shield L298 (et pas n'importe lequel, le vrai, celui de Dominique).
Comme le port USB n'est pas utilisé dans cette centrale, je vais pouvoir l'utiliser pour faire un port série et transmettre/recevoir les ordres.
La centrale sera dédiée voie de programmation.

Pour LaBox, ce sera plus dur : elle n'a pas de sortie Voie de Programmation et, si j'ai bien compris, pas de port série...

Je vais aussi me plonger dans le programme Processing de Greg. Il y a certainement des choses à glaner.
En particulier comprendre CALLBACKNUM et CALLBACKSUM  :o

Mais il faut déjà que je réalise mon réseau : un rond sur une planche de bois ! Tadaa !  :D ;D

Un peu de patience.

Denis

Commençons par voir avec une centrale dédiée
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #42 le: septembre 09, 2020, 04:23:43 pm »
De rien,

LaBox donne accès au port USB de l'ESP32 donc au port serie du serial monitor (serial1 accessible par un header). Le serial2 est également accessible par un header mais sauf erreur, aucune fonction n'y est attachée.

Et effectivement pas de voie de programmation.

Mais pour une "centrale DCC" dédiée à la voie de programmation, il vaudrait mieux ne pas mélanger les genres surtout que pour moins de 10€ tu as parfaitement satisfait ton besoin avec une BaseStation dédiée sur Arduino UNO+Shield L298.
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #43 le: septembre 09, 2020, 05:47:18 pm »
Surtout que tu n’as pas vraiment besoin du wifi (encore que Processing sait faire) ni de la gestion des connexions de smartphones.

Néanmoins La Box peut être connectée à une voie de programmation moyennant les bons paramètres de configuration.
Ce qui serait intéressant serait d’embarquer quelques commandes de configuration de CVs utiles comme la recherche et programmation de l’adresse DCC.

Tu as du pain sur la planche et quelques kilomètres de contributions encore  ;D
Cordialement,
Dominique

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #44 le: octobre 15, 2020, 03:11:49 pm »
Hallucinant !

Pour continuer mon programme, j'ai branché un Arduino UNO + Motorshield et ça a marché.  ;D

Puis j'ai planté mon (seul) décodeur en lui envoyant trop rapidement des demandes d'écriture… :-[

Mais je ne pensais pas que ce serait si dur de se sortir de cette situation !…

J'ai épluché internet, suivi les conseils d'amis, mais rien n'y faisait.
J'avais même réussi à modifier le CV8 (numéro du fabricant) qui est un CV auquel on ne peut accéder qu'en lecture !!

Au passage, DecoderPro est muet sur le sujet. C'est peut-être ailleurs dans JMRI ?

Ma loco est une 232 TC 415, en N, pré-équipée DCC, référencée 707483 chez Fleischmann.
Avant la panne, j'avais bien regardé le numéro du fabricant (CV8) et j'avais trouvé 145, qui correspond à Zimo.
On trouve cette info en .pdf, mise à jour régulièrement, sur le site du NMRA :
S-9.2.2, Appendix A, DCC Manufacturer ID codes - (revised 10 September 2020)

En pièces détachées Fleischmann, on voit que le décodeur, c'est le Zimo MX617, qui permet le Railcom. Et le prix : 195 € !!...

La documentation Fleischmann indique :



On indique, pour le CV8 qu'on peut restaurer les valeurs d'usine en mettant le CV8 à 8.
Mais ça ne marche pas.

La doc Zimo est beaucoup plus complète pour le MX617 :



Mais elle donne la même manip et, donc, ça ne fonctionne pas.

J'ai acheté alors une centrale Märklin MS2, parce que j'avais lu que certains décodeurs se plantent est quittent le DCC pour se configurer en mfx ! Il me fallait donc une centrale ayant la double compatibilité DCC et mfx.

Quand elle est arrivée, j'ai tout de suite testé, mais sans succès, à nouveau, toutes les CV d'internet.
Mais rien n'y faisait et je ne voyais pas comment m'en sortir.

Puis je suis tombé sur ce site, en allemand :
https://www.1001-digital.de/pages/programmierung/zimo-decoder/hard-reset.php

On y trouvait une solution invraisemblable que je ne résiste pas à vous donner dans son intégralité (merci Google Traduction) :

"Parfois, des problèmes peuvent survenir dans lesquels les décodeurs Zimo ne réagissent plus, apparemment ne peuvent plus être programmés, mis à jour ou émis. Pour moi, c'était le cas de temps en temps lorsque je mettais à jour les décodeurs sonores avec un très ancien firmware, par exemple, avec MX648 du Fleischmann BR52 en N. Dans ce cas, vous pouvez essayer de relancer le décodeur via une séquence de CV à programmer.

Les CV doivent être programmés en mode service, c'est-à-dire sur la piste de programmation, exactement dans cet ordre avec exactement ces valeurs; aucune autre action (par exemple la lecture) ne peut être effectuée entre les deux. Par conséquent, le centre de contrôle doit régler les CV directement, les appareils tels que le MS2 ou la multi-souris, qui lisent toujours le CV avant la programmation, ne peuvent pas être utilisés.

CV 7 = 0
CV 31 = 0
CV 32 = 0
CV 8 = 8
CV 15 = 0
CV 16 = 0
CV 8 = 8
CV 144 = 0

L'action n'est bien sûr réussie que si seul le logiciel du décodeur s'est "avalé". En cas de défaut matériel, la seule chose qui aide est d'envoyer le décodeur à Zimo pour réparation."


Et ça a marché !!! C'est hallucinant ! :o :o

J'ai, depuis, replanté volontairement mon décodeur et, à chaque fois, je l'ai ressuscité avec cette manip', digne d'un "Easter Egg" de programme informatique !
Pour ceux qui ne connaitraient pas, allez sur le lien suivant :

https://fr.wikipedia.org/wiki/Easter_egg

Si tous les "Master reset" sont de cet acabit, on n'a pas fini…

Je note au passage que cette solution ne fonctionne pas avec certaines centrales du commerce.
Et que, mieux, ça marche avec DCCpp ! C'est une excellente nouvelle.

Je vous rassure tout de suite :

J'ai, depuis, mis des tempos dans Decoduino pour que ça ne replante plus mon décodeur.
J'ai mis 2 secondes entre l'écriture et le retour d'information.
Et 1 seconde pour afficher le résultat.

Exemple :

Je veux mettre le CV29 à "6".

J'envoie l'instruction DCC++  <W 29 6 129 129>

Et j'attends 2 secondes avec delay(2000). Je suis ainsi sûr qu'il n'y a pas d'autres choses faites entretemps.

Puis je reçois <r129|129|29 6>

Je vérifie que "29" (du premier "129") est identique au "29" (du deuxième "129"), lui-même identique au "29" (du "29") et qu'on a bien reçu ce qu'on a demandé : "6"

Si ça n'est pas bon, je recommence l'envoi 2 fois (donc, 3 fois en tout) et je teste à chaque fois.
Dès que j'ai une correspondance, je sors.
En dessous de 1,5 secondes, ça marche, mais il y a quelques rares loupés.
Avec 2 secondes je n'ai plus aucun loupé. Et ça marche du premier coup.

D'autant que je prends, en plus 1 seconde pour afficher une fenêtre en pop-up :



Remarque :

A chaque fois qu'on modifie une valeur de CV, j'ai mis une fenêtre pop-up qui vient confirmer le résultat.
Donc, quand, par exemple, vous modifiez une courbe de vitesse, vous modifiez en fait 28+1 CV, soit 29 x 3 s = 87 s. Il faut être patient. Mais c'est ça ou vous plantez le décodeur…

Je n'utilise delay() qu'entre écriture et lecture des CV.
Le reste des tempos utilise le temps machine, ce qui est la méthode classique.

DCCpp :

Mes premiers essais ont été fait avec DCC++, avec sur l'Arduino, DCCpp_UNO.
Mais, au démarrage, l'EDI Arduino note quelques erreurs, en particulier sur les CV. C'était quand même dommage…
Depuis, j'utilise la fameuse bibliothèque DCCpp de Thierry, qui fonctionne parfaitement. Et qui est mise à jour régulièrement.

Détections :

Avant de lancer vraiment le programme, je fais quelques tests :

1°) Y a-t-il un Arduino branché et, dans le cas de plusieurs Arduinos, lequel contient DCCpp ?
J'utilise une routine de Pierre (Pierre59) que j'ai adaptée à ce cas particulier.
J'envoie : "power on <1>" et seul l'Arduino contenant DCCpp me répond : "<p1>".
Et ça sert en même temps à allumer le Motorshield. Pourquoi s'en priver ?

Il m'a aussi aidé à faire fonctionner le programme indifféremment sur Windows et sur Mac.
Je le remercie beaucoup pour ses conseils et explications qui m'ont bien aidé.

2°) Comme on est souvent dans le fichier "Materiel.tsv", via Excel, ce qui est le plus pratique, on laisse parfois, par inadvertance, le fichier ouvert, ce qui va, bien sûr, poser des problèmes de mise à jour …
Donc, je teste au démarrage si on peut écrire dans ce fichier.

Setup()

Concernant la programmation de cette partie, on pourrait trouver bizarre que ce soit fait dans le draw() alors que ça n'est exécuté qu'une seule fois, au démarrage.

Mais si je l'avait fait dans le setup(), je n'aurais pas pu y joindre des fenêtre pop-up permettant de suivre les processus. On y perd, certes, quelques booléens, mais c'est beaucoup plus "parlant" qu'un écran blanc.

Nouvel onglet :

Pour bien vérifier que tout se passe bien, c'est-à-dire que les infos dans le fichier "Materiel.tsv" sont bien constamment identiques à celles qu'il y a dans le décodeur, j'affiche les 120 premiers CV et je peux, d'un clic, vérifier ce qu'il y a dans le décodeur pour un CV donné.
Et si jamais il y avait un décalage, deux boutons, en bas, permettent de rétablir l'équilibre.



J'ai laissé la place, en bas pour un troisième bouton pour afficher les CV de 121 à 240.
On verra si ça sert…

On y va !

Pour utiliser ce programme, il faut :

Un Arduino UNO et un Motorshield qui s'enfiche simplement dessus. Rien à souder.



Pour être sûrs de ne pas faire d'erreurs ou d'oubli, il faut lire l'article n°187 de Christophe (bobyAndCo)
Tout y est expliqué dans le détail, en particulier les coupures à faire sous le Motorshield et les deux straps 5-13 et 10-12

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

Remarque importante ici :
On se branche sur la sortie B (Voie de service) sinon DCCpp répondra systématiquement "-1" quand on interrogera le décodeur.

Remarque : Je n'ai testé qu'avec un Motorshield. Je ne vois aucune raison pour que ça ne fonctionne pas avec toutes les autres configurations proposées dans l'article de Christophe.
Vous me direz, si vous testez d'autres assemblages matériels.

Sur l'Arduino, il faut installer la bibliothèque DCCpp de Thierry.

Voir tous les détails dans l'article 228 :

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

Comme toute l'intelligence est dans la bibliothèque, on n'a plus besoin que d'un sketch très simple ici.
Je pense d'ailleurs que vous n'avez jamais utilisé un sketch aussi simple !

    /*************************************************************
    project: <Dc/Dcc Controller>
    author: <Thierry PARIS>
    description: <Dcc Serial Controller sample>
    *************************************************************/
     
    #include "DCCpp.h"
     
    #ifndef USE_TEXTCOMMAND
    #error To be able to compile this sample,the line #define USE_TEXTCOMMAND must be uncommented in DCCpp.h
    #endif
     
    void setup()
    {
      Serial.begin(115200);
     
      DCCpp::begin();
      DCCpp::beginMainMotorShield();
      DCCpp::beginProgMotorShield();

    }
     
    void loop()
    {
      DCCpp::loop();
    }

Et maintenant, il reste à sortir un ordi pour y installer le programme en Processing.
Si vous n'avez jamais utilisé Processing, j'avais fait l'article 219 pour y expliquer l'installation :

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

Dans cette phase 1 (principaux CV), je vous ai joint en plus dans le .zip l'arborescence nécessaire au fonctionnement (voir mon post du 06/09/20) avec les répertoires Processing, Decoduino et Communs.

Par la suite, je ne fournirais QUE le programme Decoduino pour ne pas écraser par mégarde les infos que vous aurez mises dans le répertoire Communs…

Étant donnés les déboires que j'ai eu pour le Master Reset de mon décodeur, cette fonction ne marche que si vous choisissez explicitement le MX617. Pour les autres décodeurs, elle est désactivée.
C'est plus prudent.

Maintenant, c'est à vous de jouer.

Comme nous sommes de nombreux Locoduineurs, je verrais bien la constitution d'une base de photos de faces latérales de véhicules, détourées, allant vers la gauche.
Ce serait en effet dommage que le même modèle de locomotive soit pris en photo plusieurs fois… 8)
Et, SURTOUT, nos photos seraient libres de droit, ce qui n'est pas le cas de ce qu'on trouve sur internet.
Sans compter que, sur internet, on n'a quasiment jamais de vue latérale.

De la même façon, il faut centraliser les infos sur les décodeurs qu'on possède.
Je pense ajouter un fichier Excel regroupant les infos des décodeurs qui sera dans le répertoire Communs.
Ce sera plus facile à mettre à jour. Actuellement, ces infos sont "en dur" dans le programme. Cela existe d'ailleurs déjà dans DecoderPros, au format .csv que je vais décortiquer.
Mais, par exemple, rien sur le MX617… ::)

Enfin, pour l'instant (phase 1), je n'ai utilisé que les 8 premiers onglets.
Rien sur les lumières et le son, en particulier. Il faut que je continue le développement. Mais mon seul décodeur n'a ni le son, ni la lumière…

https://www.locoduino.org/IMG/zip/processing_avec__repertoires.zip

Et voilà  :P
Denis
« Modifié: octobre 16, 2020, 07:16:38 am par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)