Messages récents

Pages: [1] 2 3 ... 10
1
Vos projets / Re : Automate embarqué
« Dernier message par msport le Aujourd'hui à 03:27:07 pm »
Bonjour,

est-ce que le programme de va-et-vient de Dominique ne pourrait pas servir de trame au votre ?

http://www.locoduino.org/spip.php?article232

et sur le forum :

http://forum.locoduino.org/index.php?topic=479.msg4837#msg4837

Dominique l'a bien structuré et c'est un exemple en particulier pour la méthode.
2
Bibliothèques / Re : Bibliothèque DCCpp
« Dernier message par Dominique le Aujourd'hui à 12:13:02 pm »
J’ai constaté qu’il y a des décodeurs récalcitrants qui ne se laissent pas programmer par DCC++, notamment CTelektronic.

Mais le MS2 y arrive. Il y a donc certainement d’autres méthodes.

J’ai fait une centrale dédiée à la programmation et j’explore ces questions.
Pas trop le temps en ce moment mais je vous donnerai les résultats.
3
Vos projets / Automate embarqué
« Dernier message par peyo le Aujourd'hui à 12:11:07 pm »
Bonjour à tous,
Voila quelques années que je construis des trains de jardin à l'échelle 1/13.5ème (Gn15) pour mon fils mais aussi un peu pour moi je l'avoue :-)
J'ai réalisé un circuit de 50m dans mon jardin et toute une serie de locos mais je bloque sur la prog Arduino..
J'ai bien avancé et progressé en code et compréhension de l'engin mais je suis bloqué à l'heure ou je vous tape ces lettres..
Je maîtrise le module RFID et sa programmation (lecture et envoi d'ordres) ainsi que le module L298 (accélération et sens moteur)

Le projet :
Un circuit de 50m linéaire avec un badge RFID à chaque extremité (butée fin de voie) et également 1 badge RFID en entrée ET sortie de gare (Gare 1 et Gare 2).
Sous ma loco j'ai un arduino nano, un bouton poussoir BP1, un lecteur RFID et également un module L298 pour gérer l'accélération progressive de la loco et le sens du moteur.

Mon objectif :
    1 : La loco se met en marche avant  (progressive) lorsque j'appui sur un bouton poussoir BP1.
    2 : Si la loco badge sur une puce RFID Fin de voie 1 ou Fin de voie 2, la loco s'arrête progressivement pour repartir dans l'autre sens suivant une tempo définie.
    3 : Si la loco passe sur un Badge Gare 1 ou Gare 2, la loco décélère, s'arrête, puis repart progressivement (dans le même sens) après une tempo définie.
    4 : enfin, si je rappuis sur BP1, la loco s'arrête.

Je peux ainsi déplacer les badges sur la voie pour faire évoluer le parcours...

Matos :
- Arduino nano
- Bouton poussoir BP1
- RFID RC522
- Module L298N
- Badge RFID Gare 1
- Badge RFID Gare 2
- Badge RFID Fin de voie 1
- Badge RFID Fin de voie 2

 :o Voila le bazard, J'arrive à faire quelques bout de code mais rien qui tienne le rail, j'y ai déjà passé une bonne vingtaine d'heure mais la... je vois pas d'issue possible avec mon niveau débutant..

Merci infiniment à toutes les personnes qui seraient de bon conseil et je vénérerai quiconque me proposerais un bout de code!

 Au plaisir  :)
peyo
4
Bibliothèques / Re : Bibliothèque DCCpp
« Dernier message par msport le Aujourd'hui à 11:01:59 am »
Bonjour,
si je comprends bien, à <W 33 1 400 100>
la réponse est <r400|100|33 -1> donc échec de l'écriture.
par contre le CV 33 a bien été lu à 0 avec : <r200|100|33 0>

je propose un reset du décodeur (pour Lenz c'est 8 ou 33 dans le CV 8 )
Vérifier alors que le CV1 est à 3, et le CV 33 à 1.

l'allumage des feux avant avec F0 est classique avec le CV 33 à 1 pour les décodeurs que je connais.
5
Bibliothèques / Re : Bibliothèque DCCpp
« Dernier message par Souris verte le Aujourd'hui à 07:58:24 am »
Bonjour,

J’ai utilisé la syntaxe (la commande est dans mon message).
Le but est d’ecrire Ds les cc de 33 a 47 qui sont tous à 0. Donc pas possible d’alumer Les feux.

Merci
6
Composants / Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« Dernier message par Benoit92 le Aujourd'hui à 01:07:53 am »
Le code fonctionne sur le Teensy 3.2 avec 
Dcc.pin(0, 0, 0);// Pin 0= Interrupt 0
le décodage de la trame DCC s'effectue correctement (vu sur le moniteur série)
Par contre, quand je commande un son sur la commande "Cabin Light F1",aucun son n'est généré.
Je ne sais pas si je peux à la fois décoder la trame et générer un son à partir de la mémoire SPI Flash.

//Rangier Diesel Locomotive DCC Decoder
// Teensy 3.2 + Spi Flash + L298 + Bicolor Led (Red/White)
// Rear - Forward Lights -> Pin 5, 6 et 7, 8
// Cabin Light -> Pin 4
// Electric Engine H Bridge Command
//       int pin1Engine=12; //IN1 : Forward
//       int pin2Engine=10 ; //IN2 : Reverse
//       int pinPWMEngine=3;// ENAble PWM (0-255,125 Hz)-Throttle
    //SoundFiles
    //A0A8B14.TRW = Engine start - Pantograph up
    //A1AB814.TRW = Compressor + Air release
    //A2AB814.TRW = Horn
    //A3AB814.TRW = Start driving
    //A4AB814.TRW = Driving
    //A5AB814.TRW = Brake
    //A6AB814.TRW = Compressor - Air release + Engine start
    //A7AB814.TRW = Uncoupling
    //A8AB814.TRW = Stop driving
    //A9AB814.TRW = Stand-by engine
#include <NmraDcc.h>
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

#define This_Decoder_Address 3

const int FLASH_CHIP_SELECT = 10;  // SPI Flash Chip Select (CS)

// GUItool: begin automatically generated code (Audio.h)
    AudioPlaySerialflashRaw  playFlashRaw1;  //xy=228,273
    AudioOutputAnalog        dac1;           //xy=751,337
    AudioConnection          patchCord1(playFlashRaw1, 0, dac1, 0);
// GUItool: end automatically generated code

// Forward-Reverse Lights
int ForwardLight1 = 5;
int ForwardLight2 = 6;
int ReverseLight1 = 7;
int ReverseLight2 = 8;

// Cabin Light F1
int CabinLight = 4;

struct CVPair
{
  uint16_t  CV;
  uint8_t   Value;
};

CVPair FactoryDefaultCVs [] =
{
// The CV Below defines the Short DCC Address
  {CV_MULTIFUNCTION_PRIMARY_ADDRESS, This_Decoder_Address},

  // These two CVs define the Long DCC Address
  {CV_MULTIFUNCTION_EXTENDED_ADDRESS_MSB, 0},
  {CV_MULTIFUNCTION_EXTENDED_ADDRESS_LSB, This_Decoder_Address},

// ONLY uncomment 1 CV_29_CONFIG line below as approprate
//  {CV_29_CONFIG,                                      0}, // Short Address 14 Speed Steps
  {CV_29_CONFIG,                       CV29_F0_LOCATION}, // Short Address 28/128 Speed Steps

//  {CV_29_CONFIG, CV29_EXT_ADDRESSING | CV29_F0_LOCATION}, // Long  Address 28/128 Speed Steps 
};

NmraDcc  Dcc ;
uint8_t FactoryDefaultCVIndex = 0;

void notifyCVResetFactoryDefault()
{
  // Make FactoryDefaultCVIndex non-zero and equal to num CV's to be reset
  // to flag to the loop() function that a reset to Factory Defaults needs to be done
  FactoryDefaultCVIndex = sizeof(FactoryDefaultCVs)/sizeof(CVPair);
};

// Uncomment the #define below to print all Speed Packets
#define NOTIFY_DCC_SPEED
#ifdef  NOTIFY_DCC_SPEED
void notifyDccSpeed( uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t Speed, DCC_DIRECTION Dir, DCC_SPEED_STEPS SpeedSteps )
{
  Serial.print("notifyDccSpeed: Addr: ");
  Serial.print(Addr,DEC);
  Serial.print( (AddrType == DCC_ADDR_SHORT) ? "-S" : "-L" );
  Serial.print(" Speed: ");
  Serial.print(Speed,DEC);
  Serial.print(" Steps: ");
  Serial.print(SpeedSteps,DEC);
  Serial.print(" Dir: ");
  Serial.println( (Dir == DCC_DIR_FWD) ? "Forward" : "Reverse" );
 
// Forward-Reverse Lights
     pinMode(ForwardLight1, OUTPUT);
     pinMode(ForwardLight2, OUTPUT);
     pinMode(ReverseLight1, OUTPUT);
     pinMode(ReverseLight2, OUTPUT);     
      if( Dir == 1)
       {
        digitalWrite(ForwardLight1, HIGH);//White
        digitalWrite(ForwardLight2, LOW);
        digitalWrite(ReverseLight1, LOW);//Red
        digitalWrite(ReverseLight2, HIGH); 
        }       
      else
       {
        digitalWrite(ForwardLight1, LOW);//Red
        digitalWrite(ForwardLight2, HIGH);
        digitalWrite(ReverseLight1, HIGH);//White
        digitalWrite(ReverseLight2, LOW); 
       } 

    analogWriteFrequency(3, 125); // Change PWM frequency for electric engine - Teensy 3.2 pin 3 and 4 also changes to 125 Hz (default resolution = 8)
   
 // Speed Management
      int SpeedPrec;
      int pos;
      int pin1Engine=12; //IN1 : Forward Direction
      int pin2Engine=10 ; //IN2 : Reverse Direction
      int pinPWMEngine=3;// ENA PWM Electric Engine
      pinMode( pin1Engine,OUTPUT);
      pinMode( pin2Engine,OUTPUT);
      pinMode( pinPWMEngine,OUTPUT);

       if((Speed)== 0 || (Speed)== 1)  //Emergency Stop
          {
            digitalWrite(pin1Engine,LOW);
            digitalWrite(pin2Engine,LOW);
            analogWrite(pinPWMEngine,0);//Stop Engine

          }
       else
           if(Speed != SpeedPrec)   
                switch (Dir) // Direction
                {
                case 1:   // Forward
                  digitalWrite(pin1Engine,HIGH);
                  digitalWrite(pin2Engine,LOW);
                  analogWrite(pinPWMEngine,(Speed*7)+45);// Step 45=Gap to start
                 break;
                 case 0:  // Reverse
                   digitalWrite(pin1Engine,LOW);
                   digitalWrite(pin2Engine,HIGH);
                   analogWrite(pinPWMEngine,(Speed*7)+45);// // Step 45=Gap to start
                  break;
                }
        SpeedPrec = Speed;
};
#endif

// Uncomment the #define below to print all Function Packets
#define NOTIFY_DCC_FUNC
#ifdef  NOTIFY_DCC_FUNC
  void notifyDccFunc(uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP FuncGrp, uint8_t FuncState)
  {
      Serial.print("notifyDccFunc: Addr: ");
      Serial.print(Addr,DEC);
      Serial.print( (AddrType == DCC_ADDR_SHORT) ? 'S' : 'L' );
      Serial.print("  Function Group: ");
      Serial.print(FuncGrp,DEC);

    switch( FuncGrp ){
   {
      #ifdef NMRA_DCC_ENABLE_14_SPEED_STEP_MODE   
           case FN_0:
           Serial.print(" FN0: ");
           Serial.println((FuncState & FN_BIT_00) ? "1  " : "0  ");
           break;
      #endif
 
     case FN_0_4:
       if(Dcc.getCV(CV_29_CONFIG) & CV29_F0_LOCATION) // Only process Function 0 in this packet if we're not in Speed Step 14 Mode
       {
         Serial.print(" FN 0: ");
         Serial.print((FuncState & FN_BIT_00) ? "1  ": "0  ");
       }
   }
         Serial.print("FuncState:");
         Serial.print(FuncState);
         Serial.print("FN_BIT_00:");
         Serial.print(FN_BIT_00);
         
 //   Cabin Light F1       
            pinMode(CabinLight, OUTPUT );
               if( (FuncState & FN_BIT_01) == 1){
               Serial.print("CabinLight:");
               analogWrite(CabinLight,255);
 playFile1("A0AB814.TRW");
              }
               else
              analogWrite(CabinLight,0);

       Serial.print(" FN 1-4: ");
       Serial.print((FuncState & FN_BIT_01) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_02) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_03) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_04) ? "1  ": "0  ");
       break;
     
     case FN_5_8:
       Serial.print(" FN 5-8: ");
       Serial.print((FuncState & FN_BIT_05) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_06) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_07) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_08) ? "1  ": "0  ");
       break;
   
     case FN_9_12:
       Serial.print(" FN 9-12: ");
       Serial.print((FuncState & FN_BIT_09) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_10) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_11) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_12) ? "1  ": "0  ");
       break;

     case FN_13_20:
       Serial.print(" FN 13-20: ");
       Serial.print((FuncState & FN_BIT_13) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_14) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_15) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_16) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_17) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_18) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_19) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_20) ? "1  ": "0  ");
       break;
 
     case FN_21_28:
       Serial.print(" FN 21-28: ");
       Serial.print((FuncState & FN_BIT_21) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_22) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_23) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_24) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_25) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_26) ? "1  ": "0  ");
       Serial.print((FuncState & FN_BIT_27) ? "1  ": "0  ");
       Serial.println((FuncState & FN_BIT_28) ? "1  ": "0  ");
       break; 
    }
}
#endif

// Uncomment the #define below to print all DCC Packets
#define NOTIFY_DCC_MSG
#ifdef  NOTIFY_DCC_MSG
    void notifyDccMsg( DCC_MSG * Msg)
    {
        Serial.print("notifyDccMsg: ");
        for(uint8_t i = 0; i < Msg->Size; i++)
        {
          Serial.print(Msg->Data[i], HEX);
          Serial.write(' ');
        }
        Serial.println();
    }
#endif

void setup()
{
  Serial.begin(115200);
  Serial.println("NMRA Dcc Multifunction Decoder - Teensy - Spi Flash");
 
//********Set up SPI Teensy without audio Card*******************
  SPI.setMOSI(11); //7
  SPI.setMISO(12);
  SPI.setSCK(14);
    delay(2000);
    if (!SerialFlash.begin(FLASH_CHIP_SELECT)) {
        while (1){
            Serial.println ("Cannot access SPI Flash chip");
            delay (10000);
    }
  }
  //*******************************************************
    // Setup which External Interrupt, the Pin it's associated with that we're using and enable the Pull-Up
  Dcc.pin(0, 0, 0);// Pin 0= Interrupt 0
 
  // Call the main DCC Init function to enable the DCC Receiver
  Dcc.init( MAN_ID_DIY, 10, FLAGS_MY_ADDRESS_ONLY, 0 );

  // Uncomment to force CV Reset to Factory Defaults
  notifyCVResetFactoryDefault();
}

void loop()
{
  // You MUST call the NmraDcc.process() method frequently from the Arduino loop() function for correct library operation
  Dcc.process();
 
  if( FactoryDefaultCVIndex && Dcc.isSetCVReady())
  {
    FactoryDefaultCVIndex--; // Decrement first as initially it is the size of the array
    Dcc.setCV( FactoryDefaultCVs[FactoryDefaultCVIndex].CV, FactoryDefaultCVs[FactoryDefaultCVIndex].Value);
  }
 }
// ***********Spi Soundfile Read Function***************
    void playFile1(const char *filename)// Play audio file function
    {
      SerialFlashFile ff = SerialFlash.open(filename);
      Serial.print("Playing file1: ");
      Serial.println(ff);
      playFlashRaw1.play(filename);
     // Simply wait for the file to finish playing.
     while (playFlashRaw1.isPlaying()) {
     }
    }
7
Bibliothèques / Re : Bibliothèque DCCpp
« Dernier message par msport le juin 23, 2018, 10:31:09 pm »
Bonsoir,
il faut se référer à la syntaxe décrite dans le document  Commands for DCCpp BaseStation du Github.
Quel est le but de la manœuvre ?

#####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.
8
Bibliothèques / Re : Bibliothèque DCCpp
« Dernier message par Souris verte le juin 23, 2018, 07:18:36 pm »
Bonjour,

je voudrais configurer les CV de ma loco et je bug...
montage : UNO, LMD18200 et MAX471.
branchement de la voie de Prog :
  DCCpp::begin();
  DCCpp::beginProg(UNDEFINED_PIN, 5, 11, A1);  // J'utilise des variables dans le code
 
  DCCpp::powerOn();

  for (int i=1; i<36; i++){
      delay(100);
      DCCpp::readCvProg (i, 200, 100);
  }

  DCCpp::writeCvProg(33, 1, 400, 100);
  delay(200);

J'obtiens:
<r200|100|1 3>
<r200|100|2 3>
<r200|100|3 32>
<r200|100|4 24>
...
<r200|100|33 0>
<r200|100|34 0>
<r200|100|35 0>
<r400|100|33 -1>
DCCpp WriteCv 33 : 1
*** DCCpp LIBRARY ***
VERSION DCC++:      2.0.0
VERSION DCCpp library: 1.3.0
COMPILED:     Jun 23 2018 16:50:48

DCC SIG PROG(DIR): 5
   DIRECTION: 255
   ENABLE(PWM): 11
   CURRENT: 15

INTERFACE:    SERIAL


J'en déduis que les connexions sont bonnes puisque la lecture se passe bien.
En revanche pour l'écriture pas possible ...
En tapant <W 33 1 400 100> même résultat.

Où est mon erreur? Merci

Yannick
9
Présentez vous ! / Re : original je démarre en arduino
« Dernier message par jac.fil le juin 23, 2018, 01:29:09 pm »
Bonjour à tous,

Après quelques heures de travail, quelques déboires ( toujours bêtes  >:( >:() toute la partie hardware est à présent opérationnelle et communique parfaitement avec l'Arduino mega ( et oui malgré mon petit réseau (2x4 cantons, 2x3 voies de garage en gare cachée) je me retrouve déjà avec 56 entrées sorties  )
Les leds du TC0 (1 Rouge et 1 verte par Canton et voies de garage) fonctionnent parfaitement ( et  la c'est vraiment du boulot de tout câbler 300 soudures environ), les zones d'arrêt arrêtent les trains, et les détecteurs détectent  ;D ;D ;D
Il ne reste plus qu'à rendre tout cela opérationnel et automatique, quelques heures de programmation en vue et quelques messages d'erreurs accompagnés de leur lot de juron  ;) ;)
10
Shields et Modules / Re : carte décodeur ULN2803 - DU
« Dernier message par msport le juin 23, 2018, 12:19:39 am »
Bilan après le test réussi du 6e (il m'en reste deux à terminer)
Le condensateur qui semble convenir à tous les optocoupleurs (même ceux qui n'en ont pas besoin) serait 47pF. 22pF ne marche pas à tous les coups.
Et une explication concernant les déboires que j'ai eu avec mes premiers essais et qui m'ont conduit à utiliser des tampons TTL, pensant que les entrées des ULN2803 consommaient trop. (2.7Kohm selon les specs)
En fait j'ai été piégé par une alimentation vendue pour 2A et dont la protection court-circuit intervenait pour les 12V/18ohms des bobines Fleischmann. Et repartait sans rien dire.
Problème contourné avec une grosse capacité aux bornes de l'ULN2803.
Condensateur qui n'est donc pas indispensable sur ce montage mais qui peut être néanmoins utile pour réduire l'induction parasite à la commutation.
Et pour vous éviter de chercher, ci-joint le sketch pour des aiguillages d'adresse 1 à 8, pilotant les sorties de gauche à droite.
Nota : d'autres skteches existent pour tout type d'accessoires.
Pages: [1] 2 3 ... 10