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 - bobyAndCo

Pages: [1] 2 3 ... 76
1
Ma petite contribution

Merci Fantasio, il est sympa ce petit programme ! Ca valait le coup d'insister.

Christophe

2
Si Marcel, ça fonctionne mais pas totalement. Voici ce que disait brunodujura "je comprends notamment pourquoi ma première broche ne s'allumait pas..."

Mais je pense que Christian va finir par nous donner un lien sur le programme dont il parle.

Christophe

3
Ah oui, c'est sans doute moi qui n'ai pas bien posé la question ! Comment est-il possible de se procurer ce guide et accéder ainsi à ce lien qui se fait tant désirer ?

Christophe

4
Si je comprends bien, il faut acheter le bouquin ou un exemplaire de Loco Revue !

Le programme est il open source au moins ?

Christophe

5
Comment est-il possible d'accéder à ce programme ???

Christophe

6
Il y a des choses bizarres dans le programme !!!

//https://model-railroad-hobbyist.com/node/23026
//18/02/2025

#define numleds 16
byte ledpins[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, A0, A1, A2, A3, A4 };  //0,3,4,5,6,8,9,10,11,12,13,A3,A2,A1,A0,A4,A5
void setup() {
  for (int i = 1; i <= numleds; i++) {
    pinMode(ledpins[i], OUTPUT);
    digitalWrite(ledpins[i], LOW);  //HIGH
  }
}
void loop() {
  digitalWrite(ledpins[random(0, numleds + 1)], lightsw());
  delay(5000);  //13000
}
boolean lightsw() {
  if (random(0, 100) > 50) return LOW;  //40
  else return HIGH;
}

Il y a 17 broches dans le tableau byte ledpins [ ] =  { 0,3,4,5,6,7,8,9,10,11,12,13,A0,A1,A2,A3,A4 }
Il faut donc donner comme valeur à numleds #define numleds  17   

Par ailleurs, dans le setup, avec int  i=1 la broche 0 n'est ni positionnée en output, ni placée à LOW puisque l'incrémentation commence à 1.

void setup( )  {                   
    for ( int  i=1; i <= numleds;  i++ )  {     
    pinMode ( ledpins [ i ], OUTPUT) ;
    digitalWrite ( ledpins [ i ] , LOW) ;//HIGH
   }
}

Il faut écrire ceci : for ( int  i = 0; i < numleds;  i++ )
Et donc dans le loop, remplacer numleds + 1 par numleds, sinon le programme va tenter de lire en dehors de la mémoire allouée au tableau et il y aura plantage assuré.

void loop ( )  {   
                digitalWrite ( ledpins [ random ( 0, numleds ) ], lightsw ( ) ) ;

Sinon, c'est un petit programme au résultats qui effectivement doivent être amusants.

Christophe

7
Bonjour à tous,

Je ne sais pas si Laurent a terminé son travail sur ce booster « Railcom » car je n’ai pas trouvé son programme.

Pour ceux qui seraient intéressés, nous avons développé Marcel (Catplus) et moi un booster qui permet de générer le cutout à partir d’une centrale qui ne le produit pas.

Cela est traité par un ESP32 et reprend le montage bien connu à base de l’optocoupleur 6N137 utilisé entre autres choses pour les sniffer DCC.



Pour toutes les phases de développement et de tests, nous avons utilisé un BTS7960 dont la puissance a été limitée à 10A (ce qui est déjà beaucoup !).



Mais n’importe quelle autre booster ferait bien évidement l’affaire. Je pense par exemple à cette carte de DFRobot qui peut délivrer 15A et que je trouve très séduisante. Mais la puissance reste limitée de manière logicielle à 10A (recommandés).



Le fonctionnement est parfait. Il a été testé à partir de la centrale Zimo de Marcel et de mon côté, j’ai testé avec une MS2 de Marklin et une des premières Box à base de LMD18200.

Le signal à l’oscillo est super propre.



La détection de courts circuits est externe à l’ESP32 et assurée par un ATTiny 44/84. Ce n’est ni plus ni moins que le principe que j’avais réalisé pour Détection de présence et de courts-circuits en DCC et en MFX ici : https://www.locoduino.org/spip.php?article359

On distingue l'ATTiny en bas de la carte sur la photo ci-dessus. La carte est également pourvue du CAN.

Si quelqu’un est intéressé, je pourrais montrer cela à mon retour de vacances.

Le programme est en pièce attachée à ce message.

Christophe



8
 C’est cela que je ne comprends pas bien. Pourquoi passer par laBox et pas directement dans le logiciel (CDMRail, Rocrail etc…).

Et comment les signaux qui entrent dans la box sont ils envoyés au logiciel de gestion de réseau.

Merci par avance pour la réponse

Christophe

9
Bonjour LeBelge,

Bravo, je vois que tu as fait un énorme travail qui devrait enrichir encore les champs d'application de LaBox.

J'ai une question qui va peut être se révéler naïve mais (si je ne parle que du protocole que connais le mieux, le S88), qu'est que cela apporte à LaBox. Dit d'une autre manière, comment sont exploitées par la box les informations qui circulent dans les différents bus.

Merci par avance pour ta réponse... et encore bravo !

Christophe

10
Bus DCC / Re : Cheksum en DCC
« le: juillet 17, 2025, 09:24:41 am »
Ok !

Bon tu as une autre solution qui pourrait être de prendre une centrale comme la Box qui est déjà développée car ce n'est tout de même pas une simple affaire et de ne développer que les commandes.

Tu trouveras ici un exemple de manette pour commander la Box avec des commandes CAN :



https://forum.3rails.fr/t/table-de-commande-pour-6-locomotives-ou-plus/28608

Bon courage

Christophe

11
Bus DCC / Re : Cheksum en DCC
« le: juillet 17, 2025, 05:51:33 am »
La syntaxe exacte est : (((b1 ^ b2) ^ b3 )^ b4)

Voici un extrait d'un programme que nous avons réalisé avec Marcel :

// Calcul du checksum utilisé pour vérifier l'intégrité des données.
                  byte_1 = (dccPacket.data & 0x000000001FE) >> 1;
                  byte_2 = (dccPacket.data & 0x0000003FC00) >> 10;
                  byte_3 = (dccPacket.data & 0x00007F80000) >> 19;
                  byte_4 = (dccPacket.data & 0x00FF0000000) >> 28;
                  byte_5 = (dccPacket.data & 0x1FE000000000) >> 37;
                  bool send = false;
                  switch (dccPacket.count) {
                    case 28:
                      crc = byte_1 ^ byte_2;
                      if (byte_3 == crc) {
                        Serial.println("send 28 bits");
                        send = true;
                      }
                      break;
                    case 37:
                      crc = (byte_1 ^ byte_2) ^ byte_3;
                      if (byte_4 == crc) {
                        Serial.println("send 37 bits");
                        send = true;
                      }
                      break;
                    case 46:
                      crc = ((byte_1 ^ byte_2) ^ byte_3) ^ byte_4;
                      if (byte_5 == crc) {
                        send = true;
                        Serial.println("send 46 bits");
                      }
                      break;
                  }


12
Vos projets / Re : Commande de servo pour sémaphore avec ATtiny13
« le: juin 13, 2025, 07:34:55 pm »
Absolument génial !!!

Eric, tu es un champion.

Plein de bonnes idées, un vrai projet ferroviaire complet et utile. Comme toi je m'intéresse de plus en plus aux ATTiny qui permettent de faire plein de choses et qui sont très économiques. Tu démontres par ailleurs qu'il n'y a pas à s'effrayer des versions CMS.

Et alors le coup de faire réaliser ses plaques de laiton en République Tchèque, chapeau !!! Là aussi tu apportes une vraie nouveauté pour nos réseaux.

Ca mériterait d'être reproduit sous forme d'article pour améliorer la lisibilité et que cela soit également plus exposé. Les fils du forum ont tendance à être plus vite oubliés.

Encore bravo

Christophe


13
Vos projets / Re : Identification des trains par infrarouge
« le: juin 08, 2025, 05:05:48 pm »
Bonjour à tous,

J'ai reçu des PCB en quantités industrielles puisque j'ai fait la panélisation à partir de 100 x 100 !

Je peux céder à qui est intéressé des pcb nus ou avec les composants montés selon vos souhaits.

Contactez-moi en MP.

Christophe








14
Vos projets / Re : Identification des trains par infrarouge
« le: juin 05, 2025, 08:40:48 pm »
Merci Fantasio pour ton appréciation.

Pourquoi constexpr ? Tout d'abord, le c++ est un langage vivant et qui évolue contrairement à ce que pensent certains. l'utilisation de constexpr apparue avec c++11 (je crois) et peut maintenant répondre à plusieurs usages. Mais dans le cas où je l'ai utilisé, c'est principalement pour le substituer aux #define. C'est plus performant, tout d'abord pacque la constante est typée contrairement au #define.

constexpr vs const ? : Dans le premier cas, est évalué à la compilation (comme #define) alors que const est évalué à l'execution. Il est possible d'écrire const uint16_t a = getTaille();

Dans mon cas, je l'utilise à 99% des cas pour remplacer #define.

Christophe

15
Vos projets / Re : Identification des trains par infrarouge
« le: juin 02, 2025, 02:09:34 pm »
Bonjour à tous,

Pour info, j'ai publié un article assez exhaustif sur ce sujet : https://www.locoduino.org/spip.php?article370

Les questions ou les compléments f'information peuvent continuer à être publiés sur ce fil.

Christophe

Pages: [1] 2 3 ... 76