Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Dominique

Pages: 1 ... 139 140 [141] 142 143 ... 187
2101
Les réseaux / Re : Projet Dominique
« le: décembre 21, 2017, 07:16:10 pm »
Le logiciel du module de traction

Je ne vais pas recopier tout le logiciel d'un coup, 1700 lignes, ce serait imbuvable !

Mais je vais distiller des morceaux que vous pourrez récupérer et re-utiliser dans vos projets.

D'abord un numéro et une date de version : ça permet d'éviter de se mélanger les pinceaux quand le projet s'étale dans le temps :

const char VersTRACTION[20] =  "DCCppTract08 141217"; // 19 caractères + \0
Les bibliothèques utilisées :

#include "DCCpp.h"              // La bibliothèque de Thierry

#include <Wire.h>               // bus I2C
#include <Streaming.h>          // http://arduiniana.org/libraries/streaming/
#include <LiquidCrystal_I2C.h>  // I2C adresse 0x27
#include <SPI.h>                // bus SPI
#include <mcp_can.h>            // bus CAN
#include "Adafruit_MPR121.h"    // I2C adresse 0x5A
#include <Encoder.h>            // encodeur
#include <Bounce2.h>            // boutons poussoir
#include <EEPROM.h>             // Eeprom integree
#include "Classes.h"            // Ma classe CmdLoco pour commander les locos

Pour utiliser la bibliothèque DCCpp de Therry, rien de plus simple :

#define MOTOR_SHIELD_TYPE   0           // LMD18200
#define COMM_INTERFACE   0

#define LMD_DIR 12                      // DCC_MAIN = Arduino Mega - uses OC1B - DIR LMD18200
#define DCC_MAIN 12
#define LMD_PWM 3                       // DCC_ENABLE = PWM LMD18200
#define DCC_ENABLE 3
#define Max471  A0                      // current sensor

Je redéfini dans mon programme les valeurs qui sont dans config.h et dans DCCpp.h et il ne me reste plus qu'à démarrer DCCpp dans le Setup :

DCCpp::begin();
DCCpp::beginMain(UNDEFINED_PIN, LMD_DIR, LMD_PWM, Max471);        // Dc: Dir, Pwm, current sensor

Recherche des adresses des terminaux I2C

J'installe le sketch I2C_Scanner et j'obtient les adresses (je recopie le résultat dans mon programme, mais en commentaire :

//////////// I2C ///////////
// I2C device found at address 0x23  = NRF24L01
// I2C device found at address 0x27  = lcd
// I2C device found at address 0x5A  = clavier tactile

Cela me permet de déclarer l'écran LCD et le clavier tactile (qui fonctionne en 3,3V, attention, il ne faut pas oublier d'ajouter un circuit convertisseur de niveau)

///////////// LCD a l'adresse I2C = 0x27 ////////////
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 20 chars and 4 line display

///////////// RETRO-ECLAIRAGE LCD ///////////////////
#define eclairage  180000   // extinction auto du retro-eclairage au bout de 3 minutes
unsigned long retrotime;
unsigned long lblinktime;

///////////// Touchpad à l'adresse I2C = 0x5A ///////
Adafruit_MPR121 cap = Adafruit_MPR121();
uint16_t lasttouched = 0;
uint16_t currtouched = 0;
int Key;
// Attach the MPR121's IRQ pin to digital pin 4
const int PIN_TOUCH_IRQ = 4;

Puis on installe ces périphériques dans le setup :

  //--- init Serial et LCD
  pinMode(PIN_TOUCH_IRQ, INPUT);// pour l'interruption du clavier tactile
Serial.begin(115200);
  Serial.flush();
  Serial.println(VersTRACTION); // affichage du N° de version sur le Terminal
  lcd.init();                   // initialize the lcd
  lcd.clear();
  lcd .backlight();
  lcd.noBlink();

Le bus CAN

Je fais carrément un copier-coller depuis mes autres programmes (ceux des autres modules) :
- Constructeur de l'objet CAN
- Définitions et variables de la memoire tampon circulaire pour y stocker immédiatement tout message reçu
- routine d'interruption du CAN, qui ne fait que monter un flag
- liste des identifiants utilisés dans mon réseau, qui concernent ce module de traction

///////////// CAN BUS //////////////
MCP_CAN CAN(53);                    // Set CS to pin 53 (MEGA)
volatile byte Flag_Recv = 0;        // flag pour l'interruption IRQ

//--- Message recu
byte IdR;                           // Id pour la routine CAN_recup()
unsigned char lenR = 0;             // Longueur "    "       "
unsigned char bufR[8];              // buffer reception      "

//--- Message emis
unsigned char bufS[8];              // buffer emission

//--- Memoire circulaire pour le stockage rapide des messages recus
unsigned char _Circule[512];          // recepteur circulaire des messages CAN sous IT
unsigned int _indexW, _indexR, _Ncan; // index d'ecriture et lecture, nb d'octets a lire
byte _CANoverflow = 0;                // flag overflow (buffer _Circule plein)

int curIndex;                         // loco désignée dans un message CAN
bool DCC_OK_Central = false;

//--- Interruption (ISR) CAN
void MCP2515_ISR()
{
     Flag_Recv = 1;
}

//--- Ids des messages
#define RId_LOCO        0x30        // commande central pour un train (Index, Vit, Dir, F0)
#define RId_F0          0x31        // commande central F0
#define RId_URGENT      0x32        // arrêt urgence (0x8F) et reprise (0x0F)
#define RId_PARAM       0x33        // configuration (index, @dcc, Vmin, Vmax, cran30, cran60)
#define RId_POSTE       0x38        // affichage sur poste de conduite (0x00..0x3F)
#define TId_LOCO        0x13        // envoi des paramêtres de conduite (Index, Vit, Dir, F0)
#define TId_F0          0x14        // envoi F0 d'une loco (index, F0)
#define TId_DCC         0x15        // envoi état DCC (0x80 = on; 0x00 = off)
#define TId_ICC         0X16        // envoi intensité (mA/16) et alarme CC (bit 7)
#define TId_VV          0x17        // envoi consignes V&V (vitesses aller et retour)
#define TId_VITESSE     0x18        // envoi mesure de vitesse d'un train
#define TId_TRACT_CAN   0x1E        // envoi alarme CAN overflow

Et puis la routine appelée chaque fois que le Flag_Recv est monté :

//--- Routine de récuperation des messages CAN dans la memoire circulaire _Circule
//--- appelee par LOOP lorsque Flag_Recv = 1;
 
void CAN_recup()
{
  unsigned char len = 0;                // nombre d'octets du message
  unsigned char buf[8];                 // message
  unsigned char Id;                     // Id

  while (CAN_MSGAVAIL == CAN.checkReceive())  {
    CAN.readMsgBuf(&len, buf);          // read data, len: data length, buf: data buf
    Id = CAN.getCanId();
    if ((_Ncan+len+2) < sizeof(_Circule))  { // il reste de la place dans _Circule
      _Circule[_indexW] = Id;           // enregistrement de Id
      _indexW++;
      _Ncan++;
      if (_indexW == sizeof(_Circule))  {_indexW = 0;}
      _Circule[_indexW] = len;          // enregistrement de len
      _indexW++;
      _Ncan++;
      if (_indexW == sizeof(_Circule))  {_indexW = 0;}
      for (byte z = 0; z<len; z++)  {
        _Circule[_indexW] = buf[z];      // enregistrement du message
        _indexW++;
        _Ncan++;
        if (_indexW == sizeof(_Circule))  {_indexW = 0;}
      }
    } else {
      _CANoverflow = 1;  // depassement de la capacite de Circule
    }
  }
}

On remarque que cette routine assure la gestion des débordements (overflow) éventuels de cette mémoire tampon, ce qui ne m'est jamais arrivé.

On trouvera plus d'explications sur le CAN dans l'article ici : http://www.locoduino.org/spip.php?article148 et un peu plus loin dans ce sujet.

Petite pause pour se détendre, ensuite on verra un certain nombre de routines utilitaires écrites pour décharger la loop et la rendre plus lisible.

A suivre ...

2102
Discussions ouvertes / Re : Train miniature du futur
« le: décembre 21, 2017, 12:58:28 pm »
Et la preuve que c’est possible : je viens de tester les commandes de mes trains par l’ecran tactile du gestionnaire, via le bus CAN : no de train, vitesse, direction, fonctions. Les messages CAN sont reçus par mon module de traction en cours de description ici : http://forum.locoduino.org/index.php?topic=290.30

Et ça marche nickel  ;D

2103
Discussions ouvertes / Re : Train miniature du futur
« le: décembre 20, 2017, 11:37:09 pm »
Juste pour dire que d’introduire un équivalent de l’adresse MAC dans les 2515 n’est plus possible et ne me parait pas indispensable, dans le cas de nos réseaux, la nécessité d’unicité n’étant pas si forte que sur Ethernet.

Par contre un système d’identification des types de modules avec reconnaissance automatique des capacités des modules connectés, comme le préconise la norme LCC (layer control command), en plus simple de preference, me semble une bonne chose.

2104
Discussions ouvertes / Re : Train miniature du futur
« le: décembre 20, 2017, 11:12:52 pm »
Tu as certainement lu mon article « Mise en œuvre du bus CAN » http://www.locoduino.org/spip.php?article148 dans lequel je décris comment réaliser une mémoire tampon circulaire pour ne perdre aucun message. Elle tient évidemment dans le même Arduino qui est connecté au 2515.

J’ai fait pas mal de tests pour verifier qu’aucun message n’est perdu de cette façon, y compris en observant le trafic en parallèle avec un autre Arduino. Il y a beaucoup de chose à dire sur la robustesse du protocole CAN, mais ce serait plutôt à faire sur le fil consacré au bus CAN http://forum.locoduino.org/index.php?topic=51.0 que sur sur le présent fil.

J’ai cru aussi au début qu’il fallait être capable de tenir des débits importants, mais ce n’est pas si vrai que ça et ça se calcule bien. Je pense que dans notre cas, on est loin des limites si on est en DCC (les commandes des locos passent par les rails, le reste par le CAN). C’est peut-être plus dense en traction PWM, avec la synchronisation expliquée par Jean-Luc puisque tout passe par le CAN.

Ta remarque concernant un contrôle de flux au niveau application (utiliser des accusés de réception) est tout à fait pertinente et je le pratique mais pas systématiquement. Par contre, pour commander des aiguilles j’evite que toutes les aiguilles changent en même temps et je fais respecter des délais pour éviter les pointes de courant trop importantes. Dans notre cas il y aura très peu d’aiguilles par canton (0 à 3 par exemple) et ce sera la commande des aiguilles par l’Arduino qui temporisera plutôt que le bus CAN.

En passant, j’ai déjà réalisé une console de surveillance du bus CAN, avec un écran LCD 4x20 et je te garantis que l’ecran est trop petit pour afficher tous les messages. Tu peux tout juste compter les principaux types de messages. Faire un data-logger sur carte SD avec lecture différée est possible.

Mais continuons cette discussion sur le fil du Can et revenons sur ce fil pour confirmer que le choix du CAN est valide.

2105
Discussions ouvertes / Re : Re : Train miniature du futur
« le: décembre 20, 2017, 10:43:42 am »
Ah Bravo  ;D ;D ;D J'adore cette discussion sur ce terrain qui correspond exactement au but recherché !

Très agréable, je constate que les discussions vont bon train !
Plein d'idées, certaines très intéressantes.

En effet, pour obtenir un réseau ferroviaire extrêmement simple à mettre en oeuvre, il est impossible de faire autrement : ce sont les éléments à assembler qui sont très sophistiqués pour présenter en final une interface très simples aux modélistes.
On connait bien ce principe qui a conduit à l'explosion de l'informatique personnelle quand Apple a crée le Mac (à l"époque de construisait mes propres ordinateurs et j'ai immédiatement abandonné pour me faire embaucher chez le constructeur californien), puis l'iPhone et les OS extrêmement complexes comme iOS et Android sans oublier les outils de développement nécessaires aux développeurs. Cela a créé un éco-système fécond surtout pour les créateurs.

Mais revenons à notre modélisme ferroviaire qui est infiniment plus simple (on commence à en voir les contours et tous les ingrédients en parcourant le site éditorial et le Forum Locoduino) : les ingrédients sont là et cette discussion aborde maintenant les première hypothèses d'architecture.

Je peux essayer de vous donner mon humble avis d'arduiniste, en gardant l'hypothèse d'un contrôleur à base d'arduino pour chaque canton, qui est certainement la plus modulaire ..?
L'arduinoOTA j'avais déjà commencé à regarder mais c'est un peu chaud.

Je ferai une modification du bootloader Arduino pour flasher via le CAN, c’est nécessaire sur mon réseau.

Merci bricoleau et Jean-Luc d'apporter votre expérience qui montre la faisabilité de réalisation de modules "intelligents"

Le sigle OTA (Over The Air) pourrait être remplacé par OTW (Over The Wires) car seul le bus CAN (ou variante Ethernet) reste à connecter, avec les alimentations de puissance qu'on gardera sagement à part.

Je note aussi l'importance fondamentale de bien définir les identifiants des messages CAN. J'utilise le CAN aussi, c'est ma première réalisation de ce type de réseau, ça marche très bien, je ne me soucie absolument pas de la bonne transmission des messages, toujours impeccable, malgré les évolutions des logiciels. Mais mon schéma d'identifiants est probablement à revoir. Là Jean-Luc a une avance considérable  8)

 

2106
Discussions ouvertes / Re : Train miniature du futur
« le: décembre 19, 2017, 12:45:11 pm »
Moi j’aimerai bien savoir ce que vous pensez de mon idée de canton ou zone pré-équipée d’un Arduino programmé et connecté à toutes les fonctions de ce canton ou cette zone (les 2 mots n’ont pas le même sens), par exemple :
  • les détecteurs de consommation des différentes zones
  • les sorties pour les leds des feux
  • les sorties pour les commandes d’aiguilles
  • les détecteurs de fin de course des moteurs d’aiguille
  • l’alimentation des rails en DCC ou PWM
  • le bus CAN, les lampes d’eclairage du décor, etc...

On peut peut-être imaginer un nombre restreint de tels modules dont les combinaisons permettraient de construire pas mal de types de réseaux.

Évidemment celui qui fabriquerait ces modules aurait plein de fils à brancher, mais pour les modélistes utilisateurs, ce serait plus simple.

A côté de cela, il faudrait concevoir un gestionnaire, genre écran tactile graphique, relié au CAN pour piloter tout ça. Avec un bon jeu de bibliothèques et un QI minimum, ça doit être possible en DIY.

Pas trivial, mais pas utopiste !

2107
Discussions ouvertes / Re : Train miniature du futur
« le: décembre 19, 2017, 12:19:07 pm »
Bonsoir à tous,
1) Quand on clique sur « citer » en haut d’une contribution, ça crée une réponse avec la totalité de la contribution, son auteur et la date. En général on ne garde qu’une partie pertinente de la contribution dans la réponse qu’on fait.

2) Quand on clique sur l’icône de citation (la petite bulle de texte dans les barres d’icônes au dessus du texte en cours de saisie) en mode édition d’une contribution, on n’a alors que le mot
Citer
citation
.

2108
Vos projets / Re : EDITS PRO ET ARDUINO
« le: décembre 19, 2017, 12:10:37 pm »
Je suis d’accord avec msport et je dirai même plus sur le choix entre DCC et PWM : faire une recherche sur « PWM » et sur « DCC » a partir de la page d’accueil du Forum te donnera une idée des problématiques qui occupent les modélistes.

Reviens vers nous ensuite avec ton sentiment  ;D
Ça nous intéresse.

Cordialement
Dominique

2109
Vos projets / Re : EDITS PRO ET ARDUINO
« le: décembre 19, 2017, 07:17:53 am »
Bonjour Cacou et bienvenue sur Locoduino,

c'est pour cela qu' Arduino me parait pouvoir convenir; es-ce le cas?
Par ailleurs, je ne sais pas si je peux espérer réutiliser des composants d'Edits PRO (booster...)

Bien évidemment l'Arduino (il y en a beaucoup, de toutes les tailles et puissance souhaitables) pourra convenir. As-tu lu les principaux articles sur l'architecture et les réalisations proches de celles qui te concernent ?

Pour récupérer le booster d'Edits Pro, il faudra le comparer aux circuits tout faits du commerce comme le LMD18200 que je connais bien (moins les autres) et qui vaut moins de 10 € (est-ce la peine de s'embêter à adapter un ancien système ?)

Mais nous te donnons la parole pour expliquer ton projet.

2110
Présentez vous ! / Re : Présentation Rob1
« le: décembre 19, 2017, 07:10:51 am »
Bonjour Rob1 et bienvenue sur Locoduino.

Je vois que tes compétences vont te permettre de réaliser et partager ton projet avec les lecteurs de Locoduino, nous t'en félicitons d'avance.  :D :D

Pour commencer, as-tu une idée de l'architecture visée pour ton réseau, avec quels types d'éléments tu vas le réaliser ?

Cordialement
Dominique

2111
Débuter / Re : Connection
« le: décembre 17, 2017, 01:01:32 pm »
Citer
https://www.tme.eu/fr/details/gs40a09-p1j/alimentations-de-bureau/mean-well/

Ah oui elle est bien cette alim ;)

Je garde les alims à découpage des appareils obsolètes, j’en ai 2 caisses pleines !
Je jete maintenant les alims à transfo, trop lourdes et elles chauffent.
Dans tout ce t’as d’alims, j’en ai toujours une qui va bien pour faire des tests.

2112
Débuter / Re : Connection
« le: décembre 17, 2017, 12:07:28 pm »
Si vous voulez alimenter l'ensemble du montage, Arduino compris, à partir du signal DCC pris sur les rails, alors il y a ce schéma :
https://www.opendcc.de/elektronik/HW1/opendecoder_hw_sch_e.html

Il suffit de relier les entrées X2 et X1 ensemble !

Probablement un peu compliqué pour vous ?

2113
Débuter / Re : Connection
« le: décembre 17, 2017, 11:54:32 am »
Pas mal de gens récupèrent une alim de PC qui fournit du 5V, du 12V et et 3,3V en fort amperages et bien filtré.
Moi j'alimente mes Arduino à partir du 12V, réduit à 9V.

2114
Débuter / Re : Connection
« le: décembre 17, 2017, 11:25:56 am »
Je dirai même plus (comme les Dupont et Dupont) que le mieux est de s'inspirer de l'article Un décodeur DCC pour 16 feux tricolores ici :http://www.locoduino.org/spip.php?article199

Dans ce schéma (toujours le même), qui se situe entre les rails et l'Arduino, il y a une alimentation 5V qu'il faut fournir pour que le montage fonctionne. Ce 5V est normalement fourni par l'Arduino (broche 5V). Ne pas oublier de relier aussi le GND de l'arduino à la broche 5 du 6N137.

Si cela ne fonctionne pas, alors que vous croyez avoir bien suivi le schéma, alors c'est qu'il vous reste une ou plusieurs erreurs de câblage à trouver, car ce montage fonctionne bien chez tous les modélistes qui l'ont mis en oeuvre (dont moi, plusieurs fois).

Avez-vous lu tout ce qui s'est écrit sur ce sujet dans le forum ?

Bon courage

2115
Vos projets / Re : Re : 2D2 Echelle 1/32
« le: décembre 16, 2017, 08:50:14 pm »
Je fait ce que je peux, mais ce ton comminatoire me semble bizarre ! ! :!

Je fais (f-a-i-s) ce que je peux aussi en tant que modérateur pour garder une certaine tenue dans ce site. Il faut prendre le temps de vérifier les choses (y compris l’orthographe) avant d'écrire quelque chose de faux. L’esprit de partage n’est pas à sens unique et dire que ça ne marche pas avant de chercher un peu n’augure pas la bonne fin de ton projet. Quand on écrit quelque chose sur ce forum, c’est dans l’espoir que ça puisse intéresser d’autres modélistes qui n’ont pas besoin de savoir si W10 a ou pas un clipboard...
Bon je suis désolé pour ce ton, mais j’ai demandé plusieurs fois des choses qui n’ont pas été entendues. Il faut se servir du bouton « Modifier » autant que nécessaire. Maintenant tu l'as fait, j'ai vu, mais pas la peine de le faire remarquer si fortement.

Pages: 1 ... 139 140 [141] 142 143 ... 187