LOCODUINO

Parlons Arduino => Vos projets => Discussion démarrée par: sam95 le janvier 03, 2017, 01:18:49 am

Titre: TCO arduino Xpressnet
Posté par: sam95 le janvier 03, 2017, 01:18:49 am
Bonjour,

Voila j'ai chez moi un réseau tout simple constitué de module T-Trak et de 2 boucles de retournement pour former un "os de chien". Ce réseau est piloté par une Roco multimaus. Il y a 13 aiguillages qui sont actionnés par des servos et 2 arduino pour les "décodeur accessoire universel" de Thierry. Merci à lui pour l'aide d'ailleurs.

La mulltimaus n'est pas ce qu'il y a de plus pratique pour piloter les aiguilles, j'ai donc dessiné un petit TCO sous JMRI et avec un module GenLi et un mini pc (eeepc901)je peux piloter mes aiguillages via le PC ou via un tablette. Sympa pour la maison, mais les modules T-Trak sont aussi fait pour aller en expo.

Dans le but d'une expo en mars je voudrais donc réaliser un TCO tout simple avec des boutons poussoir qui se relie comme une souris Xpressnet à la centrale. Afin que n'importe qui puisse l'utiliser facilement.

J'ai trouvé un tuto tout prêt pour réaliser ce montage (étant donné mes connaissances proche de 0 en programmation):
http://modelisme58.free.fr/index.php/arduino.html
rubrique: Réaliser un TCO en digital DCC avec une carte ARDUINO

Il faut faire une petite carte avec le max485 pour la liaison avec la centrale. Ce n'est pas du tout insurmontable, mais en cherchant ou m'approvisionner en composant j'ai découvert des modules tout prêt sur ebay pour un prix défiant toute concurrence.
http://www.ebay.fr/itm/1011-MAX485-Module-RS-485-TTL-to-RS485-MAX485CSA-Converter-Module-For-arduino-/291949863536?var=&hash=item8996c98a44
https://arduino-info.wikispaces.com/SoftwareSerialRS485Example

Du coup je me demande si ce module est utilisable tel quel dans le projet de l'UAICF ?

Merci de votre aide
 
Titre: Re : TCO arduino Xpressnet
Posté par: DDEFF le janvier 03, 2017, 07:32:06 pm
Qu'il est agréable de voir quelqu'un qui a fait des recherches avant de poser des questions !  :D
Et ce, d'autant plus pour quelqu'un qui dit ne pas savoir programmer !

Le TCO en digital de modelisme58 est basé sur un développement de notre camarade Locoduiniste Nicolas Zin qui a construit une bibliothèque XPressNet pour commander les aiguilles d'un TCO. C'était fin 2014.
Bibliothèque qui a vu pas mal de sites s'en servir et c'est fait pour ça.
Si tu veux voir son article, c'est là : http://www.locoduino.org/spip.php?article42 (http://www.locoduino.org/spip.php?article42).
Le prochain coup, quitte à chercher, va sur Locoduino... ;)

Quant au module RS485-TTL qu'il a bricolé lui-même (à l'époque), il existe effectivement tout fait sur eBay (attention 3 semaines à 1 mois d'appro !!).
Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 04, 2017, 04:20:50 pm
J'avais vue l'article de Nicolas sur locoduino, mais je trouve en tant que noob, les explications du site modelisme58 plus simple et plug&play.

Bon je vais me lancer avec un module tout prêt du coup

Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 12, 2017, 03:31:58 pm
J'ai enfin rassemblé le matériel.
Premier test aujourd'hui non concluant. Le pregramme sur l'arduino ne communique pas avec la centrale. Il va falloir que je cherche pourquoi.


Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 12, 2017, 05:03:24 pm
J'ai vérifié et revérifié mon cablage, il me semble bon

Sur le module à base de max485:
RO->RX1 arduino
DI->TX1 arduino
DE et RE essemble -> pin 3 arduino selon le sketch

de l'autre coté du module max485
fil de ground du RJ11, sur GND et relié au GND de l'arduino
Fil A et B du RJ11 sur le bornier A et B, dans un sens ou dans l'autre avec ou sans résistance de 120ohm
borne VCC reliée à une sortie 5v de l'arduino

Le fil amenant du 12v depuis la centrale est resté non connecté.

Une idée ?
Titre: Re : TCO arduino Xpressnet
Posté par: DDEFF le janvier 12, 2017, 07:05:29 pm
Bonsoir,

1°) Nicolas branchait pin7 de l'Arduino MEGA, c'est à dire celle marquée PWM 3 en blanc sur fond bleu du MEGA
2°) La résistance de 120 Ω est obligatoire.

Tu alimentes ton Arduino comment ?

Denis


Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 12, 2017, 07:45:43 pm
actuellement il est alimenté par le port USB du PC pour avoir l'affichage de la console

est il possible de mesurer ce qui sort du max485 avec un multimetre?ou faut il un oscillo ?
Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 16, 2017, 11:19:55 am
Bonjour,

Pour le moment je n'ai cablé aucun switch sur mon arduino, j'ai juste branché la liaison avec la centrale et selon la doc je devrais avoir dans la console série un affichage de l'état de centrale = 0. Hors moi j'ai 255, qui veut dire qu'il n'y a pas de communication avec la centrale.

J'ai regardé le code et j'ai l'impression qu'il se sert de l'alimentation via la centrale et le cable RJ11 pour contrôler l'état de la communication, hors pour le moment je n'ai pas branché cette alim sur l'arduino. Pensez-vous que ça puisse être cela ?

**************************************************//
                //                                                  //
                //         Programme pour réaliser le TCO           //
                //                du pupitre DEMO                   //
                //          avec carte Arduino MEGA 2560            //
                //                                                  //
                //         TCO pour module Demo Aiguillage          //
                //                                                  //
                //             UAICF Nevers-Vauzelles               //
                //          http://modelisme58.free.fr              //
                //                                                  //
                //            Novembre 2015 - Vers 1.3              //
                //                                                  //
                //**************************************************//

//-------------------------------------------------------------------------
// Bibliothèques nécessaires

//----------------------------------------------------------------------------
#include <XpressNet.h>
XpressNetClass XpressNet;

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  #define SerialDEBUG 1  //For Serial Port Debugging (Arduino Mega only)
#endif

#if SerialDEBUG
  #include <SoftwareSerial.h>
  SoftwareSerial Debug(0, 1); // RX, TX - Mettre sur 0 et 1 pour MEGA 2560
#endif

//-------------------------------------------------------------------------
// /|\ Variables à modifier ----------------------------------------------- /|\
// Définition des adresses des aiguillages et entrées utilisés sur la carte Arduino MEGA

int Aig[]          = { 0,14,14,13,13,28,28,29,27,12,11};  // Adresse DCC des aiguillages
int Bt[]           = {23,25,27,29,31,33,35,37,39,41,43};  // Bornes de la carte ARDUINO

int NbreBoutons = 0;        // Nbre total de boutons
int NbrePoussoirs = 3;         // Nbre d'aiguillages commandés par Bouton Poussoir
int NbreLevier = 4;            // Nbre d'aiguillages commandés par Bouton Levier

#define XNetAddress 15        // Adresse de la souris XpressNet : 2 souris Xpressnet ne pourront pas avoir la même adresse
                              // Valeur entre 1 et 31

// /|\ Fin des variables à modifier --------------------------------------- /|\
//-------------------------------------------------------------------------

//-------------------------------------------------------------------------
// Définition des variables et constantes

int BtEtat[100] ; 
int BtEtatAncien[100] ;

byte Led = 13;
int DCCEtat;
long previousMillis = 0;

#define XNetSRPin 3       // Max485 Bus du driver relié à la borne de l'Arduino

//-------------------------------------------------------------------------
// Initialisation du programme
void setup() {               

  delay(1000);

  NbreBoutons = NbrePoussoirs + NbrePoussoirs + NbreLevier + 1;
 
for (int i=0; i < NbreBoutons; i++)
{
  BtEtat[i] = 2;
  BtEtatAncien[i] = 1;
  pinMode(Bt[i], INPUT_PULLUP);
}
  pinMode(Led, OUTPUT);
 
  delay(100);
 
  Serial.begin(9600);
  Serial.println("UAICF Nevers-Vauzelles - http://modelisme58.free.fr");
  Serial.println("Octobre 2015 - Vers 1.2");

  XpressNet.start(XNetAddress, XNetSRPin);
  XpressNet.setPower(csNormal);

  Serial.print("  --> Etat Centrale DCC = ");
  Serial.println(XpressNet.getPower());
  Serial.println("");
 
  for (int i=0; i < NbreBoutons; i++)
    {
    BtEtat[i] = digitalRead(Bt[i]);
    Serial.print(" Borne Arduino : "); Serial.print(Bt[i]); Serial.print(" | Etat = "); Serial.println(BtEtat[i]);
    delay (10);
    }

  XpressNet.receive();
 
  Serial.println("--- Initialisation des positions des Aiguillages avec bouton a levier uniquement ---");
  // Uniquement pour les aiguillages commandés par un bouton à levier 
  for (int i = NbrePoussoirs*2 +1; i < NbrePoussoirs*2 + NbreLevier +1; i++)
    {
    if (BtEtat[i] != BtEtatAncien[i])
      {
        Serial.print("   Aiguillage ayant l'adresse DCC "); Serial.print(Aig[i]);
        Serial.print(" (Borne "); Serial.print(Bt[i]);
        BtEtatAncien[i] = BtEtat[i] ;
        XpressNet.setTrntPos (0x0, Aig[i]-1, BtEtat[i] );
        delay (200);
        XpressNet.setTrntPos (0x0, Aig[i]-1, BtEtat[i] );
        delay (750);
      }
    }
  Serial.println("--- Fin Initialisation des positions des Aiguillages ---");
  Serial.println("--- Fin initialisation du programme ---");   Serial.println(" ");
  digitalWrite(Led, HIGH);

}

//-------------------------------------------------------------------------
// Programme fonctionnant en boucle

void loop() {

  // Récupére l'état des entrées 
  for (int i=0; i < NbreBoutons; i++)
    {
    BtEtat[i] = digitalRead(Bt[i]);
    delay (1);
    }

  XpressNet.receive();

  unsigned long currentMillis = millis();

  // --- Commande pour Arret d'Urgence --------------------------------------------

  if (BtEtat[0] == 0 && DCCEtat == 0)
      {
      XpressNet.setHalt();
      delay (500);
      if (DCCEtat == 0)
          {
          digitalWrite(Led, LOW);
          Serial.println(" ");
          Serial.println(" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ");
          Serial.println(" !!! --- Arret d'Urgence --- !!! ");
          delay (1000);
          previousMillis = currentMillis;
          }
      }

  if (BtEtat[0] == 0 && DCCEtat > 0 && (currentMillis - previousMillis > 5000) )
      {
      XpressNet.setPower(csNormal);
      delay (500);
      if (DCCEtat > 0)
        {
        digitalWrite(Led, HIGH);
        Serial.println(" ");
        Serial.println(" --- DCC Ok --- ");
        previousMillis = currentMillis;
        }
      }

  // Envoie de la commande DCC pour accessoires si changement de l'état des entrées 

if (DCCEtat ==0)  // Si pas d'arrêt d'urgence d'enclenché
{
  // --- Commande pour Boutons à levier --------------------------------------------
  for (int i = NbrePoussoirs*2 +1; i < NbrePoussoirs*2 + NbreLevier +1; i++)
    {
    if (BtEtat[i] != BtEtatAncien[i])
      {
        Serial.print("Aiguillage ayant l'adresse DCC "); Serial.print(Aig[i]);
        Serial.print(" (Arduino "); Serial.print(Bt[i]);
        BtEtatAncien[i] = BtEtat[i] ;
        XpressNet.setTrntPos (0x0, Aig[i]-1, BtEtat[i] );
        delay (10);
      }
    }
   

  // --- Commande pour Boutons Poussoirs --------------------------------------------
  // Commande Position 1
  for (int i=1; i < NbrePoussoirs*2 +1; i=i+2)
    {
    if (BtEtat[i] != BtEtatAncien[i] && BtEtat[i] == 0 && BtEtat[i+1] == 1)
      {
        Serial.print("Aiguillage ayant l'adresse DCC "); Serial.print(Aig[i]);
        Serial.print(" (Arduino "); Serial.print(Bt[i]);
        BtEtatAncien[i] = 0;
        BtEtatAncien[i+1] = 1;
        XpressNet.setTrntPos (0x0, Aig[i]-1, 0 );
        delay (1);
      }
    }
   
  // Commande Position 2
  for (int i=2; i < NbrePoussoirs*2 +2; i=i+2)
    {
    if (BtEtat[i] != BtEtatAncien[i] && BtEtat[i] == 0 && BtEtat[i-1] == 1)
      {
        Serial.print("Aiguillage ayant l'adresse DCC "); Serial.print(Aig[i]);
        Serial.print(" (Arduino "); Serial.print(Bt[i]);
        BtEtatAncien[i] = 0;
        BtEtatAncien[i-1] = 1;
        XpressNet.setTrntPos (0x0, Aig[i]-1, 1 );
        delay (10);
      }
    }
}
  // Fin de l'envoi de la commande DCC pour accessoires si changement de l'état des entrées 

}
//-------------------------------------------------------------------------
// Message pour débogage

void notifyTrnt(uint8_t Adr_High, uint8_t Adr_Low, uint8_t Pos)
{
  Serial.print(") ---> Position = ");
  Serial.println(Pos, DEC);
}

//-------------------------------------------------------------------------
void notifyXNetPower (uint8_t State)
{
  Serial.print("  --> Etat Centrale DCC = ");
  Serial.println(State, HEX);
  DCCEtat = State;
 
}


Je ne peux pas tester avant demain soir c'est pour cela que je demande.
De plus puis-je brancher de VCCin de 12v et en même temps la prise USB sur l'arduino mega ?
Titre: Re : TCO arduino Xpressnet
Posté par: DDEFF le janvier 16, 2017, 11:46:49 am
Citer
De plus puis-je brancher de VCCin de 12v et en même temps la prise USB sur l'arduino mega ?

Je pense que c'est une mauvaise idée d'avoir deux alimentations !
Voir aussi :
http://www.locoduino.org/spip.php?article16 (http://www.locoduino.org/spip.php?article16)

C'est une situation assez étrange de demander à Locoduino de déplomber un programme de l'UAICF de Vauzelles  ???


Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 17, 2017, 02:07:07 pm
OK je ne pensais pas à mal, pour moi les projets arduino étant libre je ne voyais pas de problèmes d'en parler ici ou là. Surtout que l'UAICF n'a pas de forum.

Si cela pose problème un modo peut supprimer le sujet .
Titre: Re : Re : TCO arduino Xpressnet
Posté par: patrick le janvier 17, 2017, 04:10:51 pm
pour moi les projets arduino étant libre

Salut,

Le design de l'Arduino est "Open Hardware", signifiant que l'on peut le reprendre, le modifier, l'utiliser, etc... Par contre, le contenu n'est pas soumis aux mêmes règles. La communauté autour d'Arduino a tendance à donner librement le code, mais ce n'est pas pour autant "Open Source". C'est une idée reçue qui a la vie dure. Si tu développes un programme et tu veux le vendre, libre à toi. De même si tu trouves du code et que tu veux le réutiliser dans un produit commercial, ce n'est pas garanti que tu en as le droit. Tout dépend de chaque développeur.

Patrick
Titre: Re : TCO arduino Xpressnet
Posté par: Dominique le janvier 17, 2017, 06:27:32 pm
Pourquoi ne contactez-vous pas l'UAICF ?
Pour les questions techniques et juridiques.

J'aimerai bien que Locoduino soit plus un lieu de partage de solutions réalisées en DIY avec Arduino, et qui fonctionnent, pour le plaisir du plus grand nombre, qu'un site de déverminage (ou de simple compréhension) des logiciels non présentés ici par leur auteur .

Vous pourrez revenir ici ensuite pour présenter la solution.
Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 20, 2017, 12:47:13 pm
Après revérification du câblage et le câblage d'au moins 1 inter (l’arrêt d'urgence) le montage fonctionne.
Titre: Re : TCO arduino Xpressnet
Posté par: DDEFF le janvier 20, 2017, 01:37:15 pm
Je suis content de voir que la persévérance paie. C'est souvent comme ça.  ;)
Continue à tester pour voir si tout fonctionne comme prévu.

Nicolas préconisait un branchement de l'interrupteur avec une résistance de rappel vers la masse.
Le programme de l'UAICF utilise une remarque faite suite à l'article par Jerome SAVARY en utilisant les résistances internes du pullup.

Tu as noté aussi que quelques variables sont à initialiser en fonction de ton réseau (nombre de boutons, etc...)

Denis
Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 29, 2017, 12:44:13 am
Bonjour,

Cela marche presque.

En effet j'ai donc une multimaus et j'ai 2 aiguilles kato pilotées par des décodeurs digitrax ds51k1. Ces 2 aiguilles sont pilotés par les adresses 1 et 2 sur ma multimaus.

Avec le tco rien ne se passe pour les inter aux adresses 1 et 2.
Je me suis souvenu qu'il existe un problème de décalage d'adresse de 4 entre la norme DCC et roco

Pour mes autres décodeurs à base de l Universal accessory decodeur de Thierry, j'ai codé ce décalage. Par exemple l'aiguille codée 26 dans l arduino de l uad se commande par l'adresse 30 sur la multimaus.

Mais du coup mes ds51k1 ils auraient une adresse decallee aussi ???? De -4 ? Est-ce possible d'avoir 1-4=-3 comme adresse ?
Titre: Re : TCO arduino Xpressnet
Posté par: Thierry le janvier 29, 2017, 01:28:14 pm
Je suis content que UAD continue de te servir correctement, et désolé d'apprendre tes soucis avec tes décodeurs ds51k1.
Il faudrait que tu remplaces un décodeur par un Arduino avec un programme de monitoring de l'entrée Dcc pour voir les paquets qui circulent et lire en clair l'adresse demandée par le TCO. Sur le site de l'UAICF, il y a justement un sniffer. Il y a même un article qui en propose un: http://www.locoduino.org/spip.php?article39 (http://www.locoduino.org/spip.php?article39). Si les paquets passent bien, alors il faudsra regarder du côté de l'alimentation, voir avec un testeur si le décodeur envoie bien du courant aux aiguillages... Ce qui doit être le cas si la Multimaus connectée directement fait fonctionner les moteurs...

Si tu dois changer tes programmes Arduino, pense à basculer vers Accessories et Commanders plutôt que UAD. De nombreux problèmes ont été réglés, et les fonctionnalités sont bien plus étendues. En plus je ne maintiens plus UAD. Enfin, et pour information, j'ai le projet à plus ou moins moyen terme de remplacer DCC_decoder, la partie DCC de Commanders et UAD, par les routines de NMRADcc disponibles sur git sous le nom mrrwa et qui ne semble plus avoir de problème de décalage, et ce uniquement dans Commanders.
Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 29, 2017, 04:23:36 pm
Merci je vais essayer de trouver les composants pour un sniffeur DCC.

Mais arrivant à reprogrammer l'adresse du DS51K1 via le TCO je pense qu'il reçoit la bonne adresse:

Je  programme le DS51K1 en adresse 6 avec la multimaus et le test à cette adresse, puis je connecte le TCO avec une adresse 10 dans le fichier ino, je remets le décodeur en mode programmation, j'actionne le bouton (lié à l'adresse 10). Une fois cela fait, sur la multimaus l'aiguillage ne réagit plus à l'adresse 6 mais bien à l'adresse 10.

 Je ne m'explique pas la fait qu'il n'envois pas ensuite l'impulsion vers le moteur de l'aiguillage
Titre: Re : TCO arduino Xpressnet
Posté par: Thierry le janvier 29, 2017, 06:15:31 pm
Effectivement, ce que tu décris ressemble à une incompréhension mutuelle... Est ce que par hasard le décodeur ne serait pas réglé pour recevoir des adresses longues, et le TCO pour envoyer des adresses courtes, ou l'inverse ?
Titre: Re : TCO arduino Xpressnet
Posté par: sam95 le janvier 29, 2017, 09:45:49 pm
Bonne question...... comment puis-je savoir cela ?
Titre: Re : TCO arduino Xpressnet
Posté par: plume le mai 23, 2017, 10:42:18 pm
Bonjour,

Pour reprendre un poste ci-dessus, il n'y aucun problème pour reprendre / modifier le code source de la souris (et autres fichiers) proposé par l'UAICF Nevers-Vauzelles : http://modelisme58.free.fr/index.php/arduino.html (http://modelisme58.free.fr/index.php/arduino.html)

La souris, ou plutôt les souris, ont été créées à partir d'une librairie disponible citée ci-dessus. L'UAICF a mis en forme le code source pour s'adapter à des besoins.

Pour répondre à une question, pourquoi 2 alimentations ?
Quand on branche plusieurs souris, l'alimentation de la centrale risque de ne pas suffire ou chauffer (retour d'expérience quand on utilise plusieurs souris avec écran LCD, carte RJ45,...). La souris peut être alimentée par la centrale. Il y a un switch qui permet de sélectionner la source d'alimentation au choix.

Plusieurs souris ?

Pour cette dernière, lorsque le tutoriel sera finalisé, une fiche présentera la mise en oeuvre d'une carte Arduino MEGA, d'un lecteur de carte SD, d'une LED de réception infrarouge (IR), d'une télécommande IR et de 5 matrices de LED.

Cette librairie XpressNet offre donc de nombreuses possibilités !

Plume
UAICF Nevers-Vauzelles
Titre: Re : TCO arduino Xpressnet
Posté par: jsavary le juin 01, 2017, 02:11:52 pm
Bonjour tout le monde.

n’étant pas sûr de mon montage électronique j'ai acheté un shield TTL to 485.

branchement fait, je refait un essai.
résultat : j'ai l'impression que la centrale discute bien avec le TCO (et inversement).
en revanche je commence à avoir de sérieux doutes sur la compatibilité des décodeur d'aiguillages ROCO 61196 et le TCO Xpressnet...
en effet celui-ci réponds bien lorsqu'il est piloté par ma multimauss, mais ne fait rien lorsque je veux l'actionner via le TCO.

Quelqu'un aurait la possibilité de tester ce montage avec ce décodeur d'aiguillage (ROCO 61196) ?

Merci d'avance pour vos retours...

Jerome.
Titre: Re : TCO arduino Xpressnet
Posté par: plume le juin 05, 2017, 12:53:23 pm
Bonjour,

Si la centrale discute bien, alors c'est que le shield TTL485 est bien connecté.
On peut vérifier avec la mise en ouvre du bouton d'arrêt d'urgence.

On peut aussi avoir un décalage d'une adresse DCC : pour vérifier cela, je conseille d'utiliser un analyseur de trame DCC pour s'assurer que la consigne a bien été envoyée. Cet analyseur de trames peut être réalisé avec un Arduino.
Voici un lien : http://modelisme58.free.fr/index.php/arduino.html

Plume
Titre: Re : TCO arduino Xpressnet
Posté par: jsavary le juin 05, 2017, 08:42:51 pm
Salut, et merci pour ta réponse plume.

j'ai donc monté un analyseur de trame DCC.
donc avec ma multimaus, lorsque j'envoi une commande à l'aiguillage, l'analyse montre que c'est l’accessoire en adresse 23 qui est sollicité.

je retourne donc dans mon programme de TCO, je modifie les bons paramètres et voici le résultat.

depuis la multimaus => droit
Acc 23 6:2 1 On  10000110 11111101
Acc 23 6:2 0 On  10000110 11110101
-
depuis la multimaus => dévié
Acc 23 6:2 1 Off  10000110 11111100
Acc 23 6:2 0 Off  10000110 11110100
-
depuis le TCO => position A de l'interrupteur
Acc 23 6:2 0 On  10000110 11110101
-
depuis le TCO => position B de l'interrupteur
Acc 23 6:2 0 Off  10000110 11110100

sauf que depuis le TCO... rien ne se passe sur mon aiguillage... pfffff...

je reste dans le flou.......

si quelqu'un a une nouvelle idée, je prends.

Merci a vous de votre aide.

Jérôme.
Titre: Re : TCO arduino Xpressnet
Posté par: jsavary le juin 05, 2017, 10:29:25 pm
J'ai trouvé.... et ça marche.

je vous fait le détail dans la semaine.. là j'en ai marre ^^

a très vite pour les explications... ( ca c'est de la bonne annonce  :P )
Titre: Re : TCO arduino Xpressnet
Posté par: Thierry le juin 06, 2017, 09:44:02 am
Pour prendre un peu d'avance sur l'explication, il faut savoir que les centrales lorsqu'elle pilotent des accessoires envoient toujours au moins deux paquets : un pour l'activation de l'accessoire, un autre pour le désactiver au bout d'un temps généralement réglable sur la centrale elle même. Les deux trames sont identiques au bit 3 près, celui de l'activation. C'est pour cela que dans ma bibliothèque Commanders, je ne me fie qu'à celui qui désactive...
Titre: Re : TCO arduino Xpressnet
Posté par: jsavary le juin 06, 2017, 07:37:55 pm
Bonjour,
chose promise chose due.

voici comment je me suis débrouillé pour trouver ma solution.

Postula de départ : commander un aiguillage commandé par un décodeur roco 61196 depuis un TCO xpressnet monté sur arduino.

je suis donc parti de la solution établie à partir de différents travaux ( NZIN, UAICF, SAM95 ).
malheureusement cela ne fonctionnait pas chez moi.

hier soir j'ai donc utilisé un arduino uno pour monter un sniffer DCC.
cela m'a donc permis de voir le résultat suivant:

Citer
depuis la multimaus => droit
Acc 23 6:2 1 On  10000110 11111101
Acc 23 6:2 0 On  10000110 11110101
-
depuis la multimaus => dévié
Acc 23 6:2 1 Off  10000110 11111100
Acc 23 6:2 0 Off  10000110 11110100
-
depuis le TCO => position A de l'interrupteur
Acc 23 6:2 0 On  10000110 11110101
-
depuis le TCO => position B de l'interrupteur
Acc 23 6:2 0 Off  10000110 11110100

Vous voyez là comment il manque des choses entre la multimaus et le TCO... il manque une ligne à chaque fois.
j'ai donc tenté de changer les adresses de décodeur dans tous les sens, mais rien n'y faisait.
je me suis dit: "il y a peut être une mise à jour de la librairie XpressNet pour arduino.."  et c'est le cas.
je suis donc passé de la version 1.8 à la version 1.9.

et là qu'elle n'est pas ma surprise dans le sniffeur...
sans rien changer au code de mon TCO, voici le resultat:

Citer
depuis la multimaus => droit
Acc 23 6:2 1 On  10000110 11111101
Acc 23 6:2 0 On  10000110 11110101
-
depuis la multimaus => dévié
Acc 23 6:2 1 Off  10000110 11111100
Acc 23 6:2 0 Off  10000110 11110100
-
depuis le TCO => position A de l'interrupteur
Acc 7 6:2 0 On  10000110 11110101
-
depuis le TCO => position B de l'interrupteur
Acc 7 6:2 0 Off  10000110 11110100

Tiens donc, je passe d'un accessoire en adresse 23 dans le code à une adresse 7 sur les rails.... pas cool.
voila donc une modification à faire.
à taton, j'ai donc trouvé que l'adresse à mettre dans le code est 99 pour mon décodeur d'aiguillage roco61193 .
donc 99 dans le code TCO = 27 dans le multimauss = 23 dans le sniffer DCC.

"clac" .. ca marche dans un sens, mais pas dans l'autre.
selon comment est positinné l'aiguillage avec la multimaus, le TCO opère, mais l'inverse n'est pas vrai.

je note que les commandes passées ne sont pas les même lors d'une mise en action de l'aiguillage avec la multimauss.
10000110 11111101
10000110 11110101
et
10000110 11111100
10000110 11110100

en simplifiant :
1101
0101
et
1100
0100

le bit de poids 8 semble indiquer l'activation.
le bit de poids 1 semble indiquer le sens de l'aiguille.

c'est peut etre faux , mais c'est mon analyse. ^^

partant de ce principe, j'en conclue que la commande qui vient du TCO est incomplete.
j'ai donc modifié le code que j'utilise ( UAICF ) de la façon suivante :

Citer
  // --- Commande pour Boutons à levier --------------------------------------------
  for (int i = NbrePoussoirs*2 +1; i < NbrePoussoirs*2 + NbreLevier +1; i++)
    {
    if (BtEtat != BtEtatAncien)
      {
        Serial.print("Aiguillage ayant l'adresse DCC "); Serial.print(Aig);
        Serial.print(" (Arduino "); Serial.print(Bt); Serial.print(" Adresse : ");Serial.print( Aig, BtEtat );
        BtEtatAncien = BtEtat ;
        XpressNet.setTrntPos (0x0, Aig-1, BtEtat-8 ); // --- Ajout pour roco61196 + activation du bit de poids 8
        delay (10);                                                    // --- Ajout pour roco61196
        XpressNet.setTrntPos (0x0, Aig-1, BtEtat );
        delay (10);
        Serial.print("Aiguillage ayant l'adresse DCC "); Serial.print(Aig);
        Serial.print(" (Arduino "); Serial.print(Bt); Serial.print(" Adresse : ");Serial.print( Aig, BtEtat );
      }
    }
   
   
"clac", "clac"..... alléluia
CA MARCHE !!!!!!!

voici le résultat du sniffeur DCC

Citer
depuis la multimaus => dévié
Accessoire : 23 Adresse : 6:Port : 2 Etat : 1 Off  10000110 11111100
Accessoire : 23 Adresse : 6:Port : 2 Etat : 0 Off  10000110 11110100
depuis la multimaus => droit
Accessoire : 23 Adresse : 6:Port : 2 Etat : 1 On  10000110 11111101
Accessoire : 23 Adresse : 6:Port : 2 Etat : 0 On  10000110 11110101
-
depuis le TCO position B => dévié
Accessoire : 23 Adresse : 6:Port : 2 Etat : 1 Off  10000110 11111100
Accessoire : 23 Adresse : 6:Port : 2 Etat : 0 Off  10000110 11110100
depuis le TCO position A => droit
Accessoire : 23 Adresse : 6:Port : 2 Etat : 1 On  10000110 11111101
Accessoire : 23 Adresse : 6:Port : 2 Etat : 0 On  10000110 11110101
voila qui est plutot sympa après plus d'un an de recherche... ^^
reste à voir si mes indications seront expliquées plus dans le detail par les spécialistes.

j’espère avoir été suffisamment clair dans mes explications.

à bientôt, Jérôme.