Messages récents

Pages: [1] 2 3 ... 10
1
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« Dernier message par Dominique le mai 07, 2024, 05:00:16 pm »
Merci Pierre, mon optimisme se confirme donc.

Je vais pouvoir refaire complètement mon gestionnaire sur cette nouvelle mouture, même si la configuration est déjà faite sans le json car la version actuelle a été tellement modifiée qu’il vaut mieux repartir sur un bon pied.
2
Le logiciel DCC++ / Logiciel DCC CommandStation –EX-master avec fonction RailCom
« Dernier message par lebelge2 le mai 07, 2024, 02:23:55 pm »
Bonjour.

J’ai modifié légèrement ce logiciel pour qu’il insère un CutOut  à la fin des trames.
Donc maintenant compatible RailCom.

Fonctionne sur Mega et Uno.

Restrictions :

Pour le Mega; Dans MotorDriver.h  la Pin 9 est imposée.
    ex: new MotorDriver(7, 9, UNUSED_PIN, UNUSED_PIN, A0, 2.99, 2000, UNUSED_PIN),
Pour l'Uno; Dans MotorDriver.h  la Pin 12 est imposée.
    ex: new MotorDriver(7, 12, UNUSED_PIN, UNUSED_PIN, A0, 2.99, 2000, UNUSED_PIN),

Trois nouvelles sorties pour les signaux (Out1, Out2, CutOut/Brake) sur PC0, PC1, PC2
 (sur Mega 35 36 37, Uno A0 A1 A2)
Bien entendu que toutes les sorties d’origines fonctionnent toujours mais sans CutOut.
Le code est extrêmement simple, les bidouilleurs pourront modifier toutes les sorties.

La modification logiciel :

Tout ce passe dans l’interruption du Timer1 :ISR(TIMER1_OVF_vect)   dans DCCTimerAVR.cpp
Il faut la remplacer par le code que je propose ci-dessous avec les défines et variables.

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)  // MEGA
#define PINx   PINH             // Pin numéro 9 sur Mega (PH6)     
#define PinIn  6                // new MotorDriver(7, 9, UNUSED_PIN, UNUSED_PIN, A0, 2.99, 2000, UNUSED_PIN),
#define PORTx  PORTC            // Pin de sorties des signaux Out1, Out2, Brake/CutOut sur port C
#define Etat1  B00000100        // -_-_-_   Direct   Pin 35  (In1 pour type L298N, L6203, Dir pour type LMD18200)
#define Etat2  B00000010        // _-_-_-   Inversé  Pin 36  (In2 pour type L298N, L6203, Dir pour type LMD18200)
#define CutOut_ON  B00000111    // __----__          Pin 37  (BraKe Pour Type LMD08200)
#define CutOut_OFF B00000000    // ________
#else                                                           // UNO
#define PINx  PINB              // Pin numéro 12 sur Uno (PB4)
#define PinIn  4                // new MotorDriver(7, 12, UNUSED_PIN, UNUSED_PIN, A0, 2.99, 2000, UNUSED_PIN),
#define PORTx  PORTC
#define Etat1  B00000100
#define Etat2  B00000010
#define CutOut_ON  B00000111
#define CutOut_OFF B00000000
#endif

int i;
int temps;
int oldtemps;
int bitt;
uint8_t bitCount;
uint8_t DccBitVal;
volatile uint8_t dccrecState;
ISR(TIMER1_OVF_vect) {     // ISR called by timer interrupt every 58uS
  temps = (bitRead(PINx, PinIn));
  if (temps == 1)
    PORTx = Etat1;
  else
    PORTx = Etat2;
  interruptHandler();
 temps = (bitRead(PINx, PinIn));
  i++;
  if ((i % 2) == 0) {
    if (temps != oldtemps) {
      bitt += 1;
      DccBitVal = 0;
    }
    else {
      bitt += 2;
      DccBitVal = 1;
    }
    oldtemps = temps;
    if (bitt > 1) {
      bitt = 0;
      bitCount++;
      switch (dccrecState) {
        case 0:
          if (DccBitVal) {
            if (bitCount >= 10)
              dccrecState = 1;
          }
          else {
            bitCount = 0;
          }
          break;
        case  1:
          if (!DccBitVal ) {
            dccrecState = 2;
            bitCount = 0;
          }
          break;
        case 2:
          if (bitCount == 8 ) {
            dccrecState = 3;
          }
          break;
        case 3:
          if ( DccBitVal ) {
            dccrecState = 4;
          }
          else
            dccrecState = 2;
          bitCount = 0;
          break;
        case 4:
          dccrecState = 0;
          PORTx = CutOut_ON;
          delayMicroseconds(420);
          PORTx = CutOut_OFF;
      }
    }
  }
}


Dans le void setup()   (CommandStation-EX), placer le code ci-dessous.
Code: [Sélectionner]

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)  // MEGA
  pinMode(35, OUTPUT);         // OUT 1  PC0
  pinMode(36, OUTPUT);         // OUT 2  PC1
  pinMode(37, OUTPUT);         // BRAKE  PC2
#else                                                           // UNO
  pinMode(A2, OUTPUT);         // OUT 1  PC0
  pinMode(A1, OUTPUT);         // OUT 2  PC1
  pinMode(A0, OUTPUT);         // BRAKE  PC2
#endif

Testé avec Mega, Uno et L298N, doit fonctionner avec L6203
Je viens de recevoir un LMD18200 mais il est défectueux, donc rien testé

Cablage :
Mega  =======> Bridge  Driver                 
    35  =======> In1  (Dir pour type LMD18200)
    36  =======> In2
    37  =======> Brake, seulement pour type LMD18200

  Uno  =======> Bridge  Driver                 
    A2  =======> In1  (Dir pour type LMD18200)
    A1  =======> In2
    A0  =======> Brake, seulement pour type LMD18200

Bien à vous.
3
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« Dernier message par Pierre59 le mai 07, 2024, 11:29:32 am »
@ Dominique

Pas d'inquiétude, la bibliothèque "Arduinojson" a tout ce qu'il faut. C'est un peu déconcertant car l'opérateur [] du C++ est redéfini pour accéder aux éléments du fichier json, mais en définitive l'écriture est plus compacte et plus lisible. J'ai déjà fait des essais.

Pierre
4
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« Dernier message par Dominique le mai 06, 2024, 06:58:18 pm »
@pierre,

J’ai cherché l’équivalent des initializations des objets zone, aiguille, signaux, trains, etc à partir du fichier JSON (Z1.osé) en C++ pour Arduino.
Mais je n’ai rien trouvé de simple et compréhensible même dans les projets Arduinojson de Blachon et d’Arduino.
En Java, l'objet "doc" peut être décomposé simplement en objets "zone", "aigullle", etc.. directement utilisables ensuite par le programme.

En C++ ça semble bien plus compliqué.

J’ai peur que la version C++ du gestionnaire représente un gros boulot !
5
Vos projets / Re : Booster dans un circuit DCC
« Dernier message par Dominique le mai 06, 2024, 06:15:46 pm »
Il existe des circuits booster qui se connectent directement sur la sortie DCC (les 2 rails).

Je n'ai pas de référence en tête ni le temps de chercher...
6
Vos projets / Re : Booster dans un circuit DCC
« Dernier message par Jozef le mai 06, 2024, 04:19:31 pm »
Merci Dominique pour la réponse. Mais autant construire la Box ou même la centrale fût assez simple pour un novice comme moi, mais la ...
Il n'y aurait pas un schéma plus simple.
 
7
Vos projets / Re : Booster dans un circuit DCC
« Dernier message par Dominique le mai 06, 2024, 02:40:21 pm »
En suivant ce fil, vous trouverez des réponses à vos questions :
https://forum.locoduino.org/index.php?topic=1709.0
8
Vos projets / Booster dans un circuit DCC
« Dernier message par Jozef le mai 06, 2024, 12:48:54 pm »
Bonjour,
J'ai réalisé une centrale DCC avec Uno et un Lmd18200 comme moteur. J'ai également réalisé la BOX. Mon circuit comporte  plusieurs cantons donc j'ai besoin des boosters que je voudrais a la base du lmd18200. Mais je ne sais pas du tout comment récupérer DCC a partir de ma centrale.
Peut-on m'aider
Merci d'avance
Jozef
9
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« Dernier message par trimarco232 le mai 05, 2024, 07:08:45 pm »
Bonjour,
subordonner , dans ce cas , la libération de la tjd. à celle de l'aiguille du bas ...
ou ne pas faire de transit souple , c'est pas indispensable en MF ...
10
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« Dernier message par Pierre59 le mai 05, 2024, 05:12:19 pm »
Le gestionnaire json comporte déjà un compteur du nombre de zones occupées par un train, une borne max permettrait de détecter les ruptures d'attelage.

On peut aussi, lors d'une libération d'une zone par un train vérifier que la (ou les) précédente(s) ne contient plus ce train, ce doit être la dernière zone du train.

Pierre
Pages: [1] 2 3 ... 10