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

Pages: [1] 2 3 4
1

Il faut faire attention à la vitesse du port série programmée à 250Kbs. Il faut paramétrer le moniteur série de l'IDE en fonction.

Il suffit juste de régler la bonne broche pour chaque entrée de lecteur Railcom

Christophe

Je vais ré-essayer ça lundi (je bosse tout le WE)
Sinon, sur cette page, ils parlent en effet d'autres informations que l'on peut récuperer par le railcom (tout en précisant que ça dépend du décodeur)
Pour ma part, j'ai des lenz standard V2
https://usuaris.tinet.cat/fmco/railcom_en.html

Autre petit souci, notamment par rapport à ce schema sur le site

j'ai du inverser le DCC entre l'entrée et la sortie. je ne pense pas avoir fait d'erreur de câblage mais si je branchais tel que sur le schéma, ma centrale se mettait en court circuit à l'arrivée de la loco dans la zone.

Merci de ton retour en tous cas

2
A priori, c'est la version 1.4
J'ai copié/collé directement le code dispo sur le site sans aucune modification.
J'ai juste branché la sortie detection sur le GPIO14
J'avais auparavant essayé avec Railcom in class sur la pin 33 mais ça ne fonctionnait pas non plus.
Je me demandais comment pouvoir controler le signal qui sort de la carte

/*
   Programme de lecture et de décodage des messages Railcom ©
   qui retourne l'adresse d'un décodeur (adresse courte ou longue)

   Fonctionne exclusivement sur ESP32
*/

#ifndef ARDUINO_ARCH_ESP32
#error "Select an ESP32 board"
#endif

#include <Arduino.h>

#define VERSION "v 1.4"
#define PROJECT "Railcom Detector ESP32 (freeRTOS)"
#define AUTHOR  "christophe BOBILLE Locoduino : christophe.bobille@gmail.com"

#include <RingBuf.h> // https://github.com/Locoduino/RingBuffer
#define NB_ADDRESS_TO_COMPARE 100 // Nombre de valeurs à comparer pour obtenir l'adresse de la loco
RingBuf<uint16_t, NB_ADDRESS_TO_COMPARE> buffer;

TaskHandle_t ReceiveData;                         
TaskHandle_t ParseData;                           

// Identifiants des données du canal 1
#define CH1_ADR_LOW 4
#define CH1_ADR_HIGH 8

const byte railComRX = 14; // GPIO14 connecté à  RailCom Detector RX
const byte railComTX = 12; // GPIO12 non utilisée mais doit être déclarée

// Queue
#define QUEUE_SIZE 10
QueueHandle_t xQueue;

void receiveData(void *pvParameters)
{
  TickType_t xLastWakeTime;
  xLastWakeTime = xTaskGetTickCount();
  uint8_t compt{0};
  uint8_t inByte{0};
  for (;;)
  {
    while (Serial1.available() > 0)
    {
      if (compt == 0)
        inByte = '\0';
      else
        inByte = (uint8_t)Serial1.read();
      compt++;
      if (compt == 3)
        compt = 0;
      xQueueSend(xQueue, &inByte, 0);
       Serial.println(inByte);
    }
    // Serial.println("---------");
    vTaskDelayUntil(&xLastWakeTime, pdMS_TO_TICKS(10)); // toutes les x ms
  }
}

void parseData(void *pvParameters)
{
  bool start{false};
  byte inByte{0};
  uint8_t rxArray[8]{0};
  uint8_t rxArrayCnt{0};
  byte dccAddr[2]{0};
  int16_t address{0};
  TickType_t xLastWakeTime;
  xLastWakeTime = xTaskGetTickCount();

const byte decodeArray[] = {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 64, 255, 255, 255, 255, 255, 255, 255, 51, 255, 255, 255, 52,
                        255, 53, 54, 255, 255, 255, 255, 255, 255, 255, 255, 58, 255, 255, 255, 59, 255, 60, 55, 255, 255, 255, 255, 63, 255, 61, 56, 255, 255, 62,
                        57, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 36, 255, 255, 255, 35, 255, 34, 33, 255, 255, 255, 255, 31, 255, 30, 32, 255,
                        255, 29, 28, 255, 27, 255, 255, 255, 255, 255, 255, 25, 255, 24, 26, 255, 255, 23, 22, 255, 21, 255, 255, 255, 255, 37, 20, 255, 19, 255, 255,
                        255, 50, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 14, 255, 13, 12, 255, 255, 255, 255, 10, 255,
                        9, 11, 255, 255, 8, 7, 255, 6, 255, 255, 255, 255, 255, 255, 4, 255, 3, 5, 255, 255, 2, 1, 255, 0, 255, 255, 255, 255, 15, 16, 255, 17, 255, 255, 255,
                        18, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 43, 48, 255, 255, 42, 47, 255, 49, 255, 255, 255, 255, 41, 46, 255, 45, 255, 255,
                        255, 44, 255, 255, 255, 255, 255, 255, 255, 255, 66, 40, 255, 39, 255, 255, 255, 38, 255, 255, 255, 255, 255, 255, 255, 65, 255, 255, 255, 255,
                        255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255};

  auto check_4_8_code = [&]() -> bool
  {
    if(decodeArray[inByte] < 255)
    {
      inByte = decodeArray[inByte];
      return true;
    }
    return false;
  };

  auto printAdress = [&address]()
  {
    Serial.printf("Adresse loco : %d\n", address);
  };

  for (;;)
  {
    do
    {
      xQueueReceive(xQueue, &inByte, pdMS_TO_TICKS(100));
      if (inByte == '\0')
        start = true;
    } while (! start);
    start = false;

    for (byte i = 0; i < 2; i++)
    {
      if (xQueueReceive(xQueue, &inByte, pdMS_TO_TICKS(100)) == pdPASS)
      {
        if (inByte > 0x0F && inByte < 0xF0)
        {
          if (check_4_8_code())
          {
            rxArray[rxArrayCnt] = inByte;
            rxArrayCnt++;
          }
        }
      }
    }

    if (rxArrayCnt == 2)
    {
      if (rxArray[0] & CH1_ADR_HIGH)
        dccAddr[0] = rxArray[1] | (rxArray[0] << 6);
      if (rxArray[0] & CH1_ADR_LOW)
        dccAddr[1] = rxArray[1] | (rxArray[0] << 6);
      address = (dccAddr[1] - 128) << 8;
      if (address < 0)
        address = dccAddr[0];
      else
        address += dccAddr[0];

      uint16_t j = 0;
      buffer.pop(j);
      buffer.push(address);
      bool test = true;
      do
      {
        if (buffer[j] != address)
          test = false;
        j++;
      } while (test && j <= buffer.size());

      if (test && address > 0)
      {
        printAdress();
      }
      // else
      //   Serial.println("NOK");
    }
    rxArrayCnt = 0;
    for (byte i = 0; i < 2; i++)
      rxArray[i] = 0;

    vTaskDelayUntil(&xLastWakeTime, pdMS_TO_TICKS(100)); // toutes les x ms
  }
}

void setup()
{
  Serial.begin(115200);

  Serial.printf("\n\nProject :    %s", PROJECT);
  Serial.printf("\nVersion :      %s", VERSION);
  Serial.printf("\nAuthor :       %s", AUTHOR);
  Serial.printf("\nFichier :      %s", __FILE__);
  Serial.printf("\nCompiled :     %s", __DATE__);
  Serial.printf(" - %s\n\n", __TIME__);

  Serial1.begin(250000, SERIAL_8N1, railComRX, railComTX); // Port série pour la réception des données (250k bauds)
  uint16_t x = 0;
  for (uint8_t i = 0; i < NB_ADDRESS_TO_COMPARE; i++) // On place des zéros dans le buffer de comparaison
    buffer.push(x);
  xQueue = xQueueCreate(QUEUE_SIZE, sizeof(uint8_t)); // Création de la file pour les échanges de data entre les 2 tâches
  xTaskCreatePinnedToCore(receiveData, "ReceiveData", 2048, NULL, 10, NULL, 0); // Création de la tâches pour la réception
  xTaskCreatePinnedToCore(parseData, "ParseData", 2048, NULL, 10, NULL, 1); // Création de la tâches pour le traitement

  while (true)
    ;
}

void loop(){}

Tu reconnaiteras la carte :)
je ne m'en sers que comme branchement de la pin14, pour le reste (Can..) rien n'est activé dans le code

3
Bonjour,
Je me suis monté une carte de Christophe, j'utilise une centrale Labox avec la modif pour le Cutout mais je n'ai pas le résultat escompté :
J'utilise le 1er programme dans l'article.
Dès que la loco rentre sur le canton, j'ai une suite de chiffre qui défile trés rapidement sur le moniteur série avec de temps à autre le message "adresse loco :12850" (l'adresse réelle est 50) ou 12800 quand l'adresse réelle est 3
Quand le loco est à l'arret, je n'ai plus de message.
l'horodatage des messages donne une idée de la vitesse de défilement. (j'ai également une petite vidéo)
Je ne sais pas trop ou regarder

Merci d'avance si vous avez une idée....

4
Vos projets / Re : LaBox" : Une Centrale DCC polyvalente et abordable
« le: décembre 15, 2024, 11:17:58 pm »
J'en ai un si tu veux, Envoie moi ton adresse en MP

5
Bus CAN / Re : Re : Re : Le CAN sur nos réseaux : Pourquoi et comment ?
« le: novembre 12, 2024, 07:27:43 pm »

Pourquoi pas !!! Mais bon, si tu avais utilisé la bibliothèque ACAN_ESP32 comme la plus part d'entre nous il nous serait plus facile de répondre à tes questions


J'ai confondu avec la librairie ACAN simple pour connecter un module MCP2515 comme il est écrit dans les articles du site. Je ne voyais pas l'intérêt de connecter en SPI. Je ne savais pas que la bibliotheque ACAN_ESP32 était différente.
J'ai déjà écrit pas mal de code. je vais voir si je change de bibliothéque

6
Bus CAN / Re : Le CAN sur nos réseaux : Pourquoi et comment ?
« le: novembre 06, 2024, 11:56:12 pm »
Ca y est, grace aux cartes de Boby&co, tout fonctionne parfaitement chez moi et j'ai pu commencer la programmation des messages.

il est vrai que ce sont des cartes à base de MCP2562 qui sont au final plus simple à manipuler qu'un controleur SPI externe comme les cartes MCP2515.
J'utilise de ce fait la librairie TWAI-CAN

je me pose quand même une petite question:
Il y a une fonction à appeler pour controler l'arrivée de message, quel est le délai raisonnable entre 2 appels pour ne pas rater de messages? ces controleurs integrent ils une file d'attente pour les messages, de combien de messages?

Merci si vous avez ces précisions

7
Bus CAN / Re : Mes débuts en CAN, entre déboires et réussite...
« le: novembre 06, 2024, 11:45:29 pm »
Cartes bien reçues, j'en ai monté 3, tout fonctionne à merveille!!!
Aucun probleme de connexion, c'est également plus simple à manipuler avec le controleur CAN intégré à l'ESP32 plutôt que de brancher un controleur SPI externe.
J'utilise de ce fait la bibliotheque TWAI-CAN.

Merci beaucoup pour ces PCB!!

8
Bus CAN / Re : Le CAN sur nos réseaux : Pourquoi et comment ?
« le: octobre 13, 2024, 08:49:52 pm »
Oui, j'avais bien suivi les tutos,
Je suis en attente de nouveaux modules pour refaire des essais, Je ne manquerai pas de faire un retour

9
Bonjour,
A tout hasard, est il possible d'avoir les fichiers pour commander les cartes en smt, je ne sais pas si ils avaient été publiés.
Merci beaucoup

10
J'ai assemblé plusieurs detecteurs à partir du gerber 10 cartes.
Tout fonctionne parfaitement.
Merci!

J'ai fait faire chez JLCPCB.
Le plus compliqué a été la découpe des cartes!! Je ne sais pas combien coute leur option ligne de coupe

11
Vos projets / Re : LaBox" : Une Centrale DCC polyvalente et abordable
« le: octobre 13, 2024, 05:01:39 pm »
Bonjour,
J'ai réalisé Labox l'année derniere, elle fonctionne parfaitement.
Il me reste des PCB et je vais en monter 2 autres. je pense faire la modification pour integrer le railcom.
Au niveau du soft, les dernieres versions integrent bien railcom? il n'y a pas 2 versions différentes?

Merci de votre retour

12
Bus CAN / Re : Mes débuts en CAN, entre déboires et réussite...
« le: octobre 05, 2024, 12:31:03 am »
J'ai fini par commander la carte V7.0, C'est vrai que ça a l'air trés pratique pour developer des cartes avec le CAN.
A suivre maintenant....

PS: Pourrais tu me rappeler la ref du régulateur de tension, je crois en avoir utilisé 1 dans Labox mais c'était pour être sur
Et eventuellement la ref de la diode de protection montée sur le + (je pense que c'est du classique)

Merci beaucoup

13
Bus CAN / Re : Le CAN sur nos réseaux : Pourquoi et comment ?
« le: octobre 04, 2024, 06:37:47 pm »
Bonjour,

Je suis bien content de voir ce sujet et je vais pouvoir peut être enfin arriver à mettre en place le CAN: l'année dernière (c'est pour moi un hobby uniquement hivernal...), j'ai passé des heures à essayer de faire communiquer 2 arduino. j'avais des modules MCP2515 qui n'ont jamais marché et des cartes shield avec lesquelles je suis arrivé à un résultat mais trop aléatoire pour être utilisé.
un qui ne fonctionnait qu'en émetteur... Bref un peu frustré ne pas y être arrivé.....

Je n'ai pas compris pourquoi une telle difficulté alors que la théorie a l'air assez simple.

Est ce que les solutions matérielles intégrées que vous utilisez dans les satellites autonomes sont plus fiables ou quels modules faudrait il utiliser?

J'ai bien compris l'intérêt du CAN : Mon réseau est conçu sous forme de module que j'aimerai pouvoir relier de façon rapide avec un connecteur 6 broches : 2DCC, 2CAN, 2Alim

Merci




14
Composants / Re : PCB la Box
« le: février 21, 2024, 11:02:48 pm »
Un peu tard peut-être mais je vais revendre 2 PCB, avec eventuellement des composants, j'avais presque tout acheté pour les 5 exemplaires)
N'hésite pas à me contacter

15
Vos projets / Re : LaBox" : Une Centrale DCC polyvalente et abordable
« le: février 21, 2024, 08:05:57 pm »
Bonjour à tous,

A mes heures perdues (trop peu nombreuses...) je tente de controler Labox via le CAN, J'avais dans un premier temps élaboré un protocole de messagerie. J'ai ensuite déchiffré le tien avec les commandes dans l'ID sur 29 bits. j'ai d'ailleurs fait un beau tableau Excell. Mes messages semblent avoir le bon format sur mon sniffer CAN mais je n'ai pas encore testé sur Labox (je ne peux y consacrer beaucoup de temps et j'ai plusieurs petits projets en même temps...)

Je me pemet de donner mon avis sur 2-3 points :
- Je pense qu'il est nécessaire d'établir un protocole CAN défini, même si il l'est uniquement à l'échelle de locoduino. Cela permet à chacun de pouvoir apporter sa petite pierre à l'édifice à coté des développeurs chevronnés qui sévissent ici et de s'assurer de la compatibilité du code dans le temps.  (une petite manette CAN, un TCO, un accessoire,....)

- Le protocole doit rester abordable: le gros avantage de DCCex était quand même d'être controlé par des instructions simplissimes <1 xx xxx ....> Un débutant sait très vite envoyer une instruction sur un port série. Son principal inconvénient était de ne communiquer que dans un sens.
La nécessité initiale du CAN était d'apporter cette communication bidirectionnelle au gestionaire.
J'ai étudié les liens que Christophe m'a indiqué sur le CAN avec les possibilités de filtre. Rien n'est insurmontable ..... mais a t'on besoin d'apporter de la complexité supplémentaire?

(Concernant les satellites autonomes, c'est un concept tellement différent que les besoins en communication peuvent être différents également.)

Je ne veux surtout pas froisser les développeurs qui font un travail monstre, qui ont conçu Labox plein d'autres choses, mais en tant qu'amateur, on se sens vite largué quand on voit l'évolution impressionnante des projets, et de ce fait on se dit qu'on ne peut pas apporter grand chose... Je pense qu'il ne faut pas perdre l'aspect pédagogique et abordable pour l'amateur.

En tous cas, encore félicitations pour tout le travail accompli et aussi pour votre réactivité sur les forums quand on pose des questions. On ne reste jamais bloqué très longtemps.




 

Pages: [1] 2 3 4