Accueil

|

3D

|

DCC

|

Divers

|

ESP12-Car

|

Maquette

|

Principes

|

Téléchargement
 
DCC

>

Décodeur 6 feux ACK

>

Décodeur NMRA ACK

>

Un sniffer pour mon Ecos

>

Décodeur 8S8L

>

8S8L Matériel

>

Base d'un décodeur

>

Les annonces de gare

>

16L6SaPico

>

CV par smartphone
Recherche
le train de JC

>

6522 visites

>

Me contacter

>

Administration

-------Ici-------
Pas de cookies
Rien à accepter
Pas de pop-up
Pas de pub
 

Je n'ai pas trouvé de décodeur d'accessoires que l'on peut faire avec un arduino qui puisse être programmé avec votre centrale DCC (pour moi une Ecos ESU et un Lokprogrammer).

Après recherche, c'est normal, car les montages avec l'arduino ne comporte pas de circuit "ACK". En effet pour pouvoir dialoguer avec votre centrale, le décodeur doit augmenter sa consommation de 60ma pendant 6 millisecondes.

J'utilise la librairie NMRA.H d'Alex Shepherd.  que l'on trouve sur github

J'ai eu quelques échanges de mail avec Alex qui m'ont permi de faire des décodeurs avec des TEENSY (3.2 et 4.0) et de programmer mon décodeur avec ma centrale....encore merci Alex.

Pour que le décodeur puisse communiquer avec la centrale il faut ajouter un circuit "ACK" qui sera piloté par une sortie de l'arduino.

Il est composé

  • D'un pont de diode, pour auto-alimenter le "circuit ACK" et de transmettre la surconsommation.
  • D'un transistor BC560 PNP pour amplifier le signal de l'arduino.
  • D'une résistence (80 à100 ohms) de consommation (très peu).
  • D'un optocoupleur PC817 pour isoler le décodeur.

Une fois vos composants implantés, voici des explications sur la librairie NMRA.H

Déclarer l'utilisation de la librairie

#include <nmra.h>

Initialiser les objets

NmraDcc  Dcc ;
DCC_MSG  Packet ;
#define DCC_PIN    2   
#define DccAckPin  3

struct CVPair{
  uint16_t  CV;
  uint8_t   Value;
};

La procédure notifyCVAck est appelée par la librairie à chaque fois qu'elle a besoin de communiquer avec la centrale. Elle met à l'état haut la sortie DccAkPin (ici pin 3) pendant 6ms afin que le "circuit ACK" génére une surconsommation de 60ma.

void notifyCVAck(void){
  digitalWrite( DccAckPin, HIGH );
  delay( 6 );  // Attention ne pas changer
  digitalWrite( DccAckPin, LOW );
}
 

La procédure callback notifyCVChange est appelée à chaque fois que vous avez changé un CV. Elle peut servir pour mettre à jour des variables

void notifyCVChange(uint16_t CV, uint8_t Valeur){

// votre code si besoin

// Vous avez à votre disposition CV qui est le numéro du CV modifié et Valeur qui est sa valeur (0-255)

}

La procédure callback notifyDccAccTurnoutOutput est appelée à chaque fois qu'un ordre accessoire DCC a été envoyé par votre centrale.

void notifyDccAccTurnoutOutput( uint16_t Addr, uint8_t Direction, uint8_t OutputPower ){

// votre code une série de tests sur Addr (numéro de l'accéssoire et de Direction (sa position 0 ou 1)

}

 

Dans votre SETUP

void setup(){
  pinMode( DccAckPin, OUTPUT );  // sortie ACK ici la pin 3
#ifdef digitalPinToInterrupt
  Dcc.pin(DCC_PIN, 0);   // pour les Teensy 3.2 et 4.0 (testé)
#else
  Dcc.pin(0, DCC_PIN, 1);   //pour les Nano
#endif
  Dcc.init( MAN_ID_DIY, 10, CV29_ACCESSORY_DECODER | CV29_OUTPUT_ADDRESS_MODE, 0 );

}

Dans votre LOOP

void loop()
{
  Dcc.process();

}

Vous avez là le code minimal à écrire pour faire un décodeur. Vous devez définir vos CV, pour ma par je commence au CV40. en effet pour le DCC il y a des CV importants de CV0 à CV29. Pour l'arduino cela correspond à l'adresse eeprom 40. C'est simple le CV55 est en eeprom 55.

Sans ce circuit "ACK", il est a noter que vous pouvez écrire un CV avec votre centrale...mais elle vous retournera une erreur. Mais surtout ce qui plus génant c'est que vous ne pouvez pas lire vos CV avec votre centrale.

Voici le plan d'un décodeur 8 sorties "leds" amplifiées et de 8 servomoteurs. Je vous ferai un article sur le décodeur avec explications des effets programmables par CV avec votre centrale  (Cela fonctionne avec une ECOS ESU et un LOKPROGRAMMER) Mise à jour l'article est ici

  • Clignotant configurable
  • ON/OFF avec ou non effet "néon"
  • Gyrophare configurable
  • Feux 2 ou 3 leds
  • Hasard configurable

Pour les servos

  • Borne minimun
  • Borne maximun
  • Vitesse
  • Initialisation
  • Inversion

 

 

 

 

 

 

 

5.6.34