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

Pages: [1] 2 3 ... 6
1
Vos projets / Re : Un écran plus grand pour Labox
« le: décembre 04, 2024, 06:49:15 pm »
Avec un écran encore plus grand, le SSD1309 de 2,42 pouces.

Il n’y a pas de librairie à modifier, simplement des contacts un peu plus longs pour surélever l‘écran car il déborde sur l’ESP32.

2
Vos projets / Re : LaBox" : Une Centrale DCC polyvalente et abordable
« le: décembre 01, 2024, 07:54:08 pm »
Bonjour, chez moi l'appli. Z21 fonctionne sous Android (Samsung)

3
Vos projets / Un écran plus grand pour Labox
« le: novembre 28, 2024, 03:39:47 pm »
Bonjour, Labox est dotée d'un écran OLED de 0,96 pouce.(SSD1306)

Je souhaite un écran plus grand, le OLED SH1106  1,3 pouce.
Son mode d’affichage est différent et nécessite une autre librairie.

Cependant, il est plus simple de modifier la librairie existante (Adafruit_SSD1306.cpp)

Modifications logicielles à effectuer dans la librairie Adafruit_SSD1306.cpp

-   Sur première ligne, écrire : #define SH1106
-   Dans la fonction : void Adafruit_SSD1306::display(void) ,  après la ligne :      uint8_t *ptr = buffer;
Insérer ce code :

#if defined (SH1106)
   for (int8_t i = 7; i >= 0; i--){
      ssd1306_command1(0xB0 + i);                           // Set row
      ssd1306_command1(0x02);                               // Set lower column address
      ssd1306_command1(SSD1306_SETHIGHCOLUMN);              // Set higher column address
     
      for (uint16_t j = SSD1306_LCDWIDTH; j > 0; j--){
        Wire.beginTransmission(i2caddr);
        WIRE_WRITE(0x40);
        for (uint8_t x=0; x<16; x++) {
          WIRE_WRITE(buffer[i * SSD1306_LCDWIDTH + SSD1306_LCDWIDTH - j]);
          j--;
        }
        j++;
        Wire.endTransmission();
      }
    }
  TRANSACTION_END
  return;
#endif

-     Reste à ajuster l’offset verticale.
      Dans : static const uint8_t PROGMEM init2[]    Changer valeur  0  (// no offset)   à 1

Modification matérielle.
D’origine, sur le SH1106, les Pins Gnd et Vcc sont inversées par rapport au SSD1306.
Il faut déplacer deux pontages au dos de l’afficheur pour que toutes les broches soient compatibles avec celles de Labox.


4
Débuter / Re : affichage LCD non fonctionnel...
« le: novembre 27, 2024, 12:10:16 pm »
Bonjour, il faut poster tous le code pour t'aider !

Et/ou tester le code suivant:

/**********************************************************************
  Filename    : Drive LiquidCrystal I2C to display characters
  Description : I2C is used to control the display characters of LCD1602.
  Auther      : www.freenove.com
  Modification: 2022/06/28
**********************************************************************/
#include <LiquidCrystal_I2C.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  if (!i2CAddrTest(0x27)) {
    lcd = LiquidCrystal_I2C(0x3F, 16, 2);
  }
  lcd.init();                // initialize the lcd
  lcd.backlight();           // Turn on backlight
  lcd.print("hello, world!");// Print a message to the LCD
}

void loop() {
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);// set the cursor to column 0, line 1
  // print the number of seconds since reset:
  lcd.print("Counter:");
  lcd.print(millis() / 1000);
}

bool i2CAddrTest(uint8_t addr) {
  Wire.begin();
  Wire.beginTransmission(addr);
  if (Wire.endTransmission() == 0) {
    return true;
  }
  return false;
}

5
Vos projets / Re : LaBox" : Une Centrale DCC polyvalente et abordable
« le: novembre 23, 2024, 07:19:21 pm »
Je trouve qu’il manque une option dans le menu OLED pour mettre les rails sous tension manuellement.
En attendant j’ai mis cette ligne de code à la fin du Setup :

TrackManager::setMainPower(POWERMODE::ON);       // Power Tracks ON

6
Vos projets / Re : Carte détecteur de présence 16 entrées RailCom
« le: novembre 21, 2024, 12:27:38 pm »
Impossible de différencier deux locos sur une même zone avec le canal 1, ça a toujours été comme ça.

7
Vos projets / Re : Carte détecteur de présence 16 entrées RailCom
« le: novembre 20, 2024, 05:33:59 pm »
Attention.
Le canal 1 adresse bien les ID de chaque engin mais pas sur la même section RailCom et avec multiplexage des entrées.
Si deux engins se trouvent sur une même section, c'est le canal 2 et leurs Ack qui déterminent l'adresse des locos.

8
Vos projets / Re : Carte détecteur de présence 16 entrées RailCom
« le: novembre 20, 2024, 03:36:25 pm »
Bonjour, je vous communique les conclusions d’un petit test de détection.

Mise en service du réseau , le signal DCC est uniquement composé de trames IDLE (Préambl, 0xFF, 0x00, 0xFF)

Nous avons deux locomotives RailCom  canal 1 (Cv28 à 1) (Adr 1 et adr 4)

Dépose d’une loco sur les rails ;  Immédiatement reconnue par le détecteur, adresse 1.
Dépose de la deuxième sur un autre canton ; Immédiatement reconnue par le détecteur, adresse 4.

Conclusion : La détection  de la loco se fait sans besoin de l’adresser.

Conditions pour détecter deux locos sur un même tronçon :
1)   Adresser la loco. (vitesse ou fonctions)
2)   Activer bit 0, 1 et 7   du Cv28
Dans ces conditions le canal 2 envoi 6x   0xF0 (Ack) et le détecteur peut déterminer l’adresse des locos.


9
Vos projets / Re : Carte détecteur de présence 16 entrées RailCom
« le: novembre 14, 2024, 08:14:00 pm »
Bonjour.
Ce sont bien les convertisseurs Analogiques digitales qui échantillonnent le signal RailCom (250.000 Bauds)
Il y en a quatre et sont très rapides (2 millions de conversions par seconde)
Comme je peux le comprendre, il y a quand même un multiplexage.
Un convertisseur échantillonne à la fois deux trames RailCom en alternant deux entrées.
Ainsi, huit entrées sont analysées par trames.

Ici extrait du Datasheet de l'ATXMEGA128

25.2 Overview
The ADC converts analog signals to digital values. The ADC has 12-bit resolution and is capable of converting up to two
million samples per second (MSPS). The input selection is flexible, and both single-ended and differential measurements
can be done. For differential measurements, an optional gain stage is available to increase the dynamic range. In
addition, several internal signal inputs are available. The ADC can provide both signed and unsigned results.


Et dans la doc. de l'auteur (Traduite de l'allemand)

Plusieurs locomotives dans une section
Railcom reconnaît 2 canaux pour recevoir les messages en provenance des locomotives. Le canal 1 est un canal de diffusion (broadcast) dans lequel chaque décodeur envoie en continu sur son adresse. S'il y a plusieurs décodeurs dans une section, les signaux se chevauchent et interfèrent. Au contraire, dans le canal 2 seulement le décodeur adressé peut envoyer (diffuser) son adresse.

Le GBM16T reçoit sur deux canaux, et peut ainsi distinguer jusqu'à 4 locomotives. Si dans le canal 1 aucune erreur ne s'est produite sur trois annonces d'adresses successives, cette adresse est acceptée comme valable. De même l'adresse DCC actuelle est acceptée comme valable, si le canal 2 reçoit une réponse exacte.


L'auteur ne fourni plus le code source, uniquement .hex et .epp

Bien à vous.


10
Vos projets / Re : Carte détecteur de présence 16 entrées RailCom
« le: novembre 09, 2024, 02:38:43 pm »
Bonjour Dominique

Pour mon réseau, je n’utilise pas de PC, auparavant c’était un Arduino Uno qui gérait les signaux en 3 Bal et l’arrêt et le redémarrage des trains.
Cela fonctionnait correctement.
Actuellement je transcris le code pour l’ESP32 de LaBox, les premiers essais sont en cours.
Il est possible de remonter les messages d’occupations vers un logiciel PC à condition de connaître le protocol !
Je n’y connais rien en CAN, j’ignore si une transmission en 9 bits 250.000 Bauds est possible !
Ci-joint un schéma bloc de mon installation.

11
Vos projets / Re : Carte détecteur de présence 16 entrées RailCom
« le: novembre 09, 2024, 12:40:55 am »
Premier essai  de trois cartes 16 entrées RailCom, un Arduino Mega et LaBox.

(Voir image)

( Le Mega possède quatre entrées séries, trois sont programmées en entrées et reçoivent les données (9bits) des trois cartes, la quatrième programmée en sortie envoie les données (8bits) vers LaBox.)

Un nouveau fichier nommé Automat.cpp est ajouté  à LaBox.

Fonctions automate programmable.

Deux fonctions principales.

1)   Gestion des signaux automatiquement en mode 2 ou 3BAL.
             Arrêt des locos. devant un signal rouge
             Redémarrage des locos au signal orange (vitesse réduite) ou vert.

2)   Une loco entrant sur un canton peut déclencher des événements, par ex.:
-   Allumage des feux.  (Entrée tunnel (extinction à la sortie))
-   Modifier sa vitesse, sens  ou arrêt.
-   Changer de position un ou plusieurs aiguillages.
-   Gérer une autre locomotive.

Nombreuses possibilités en vue, sans câblage « type usine à gaz » et matériel coûteux…
 
A suivre…


12
Vos projets / Carte détecteur de présence 16 entrées RailCom
« le: novembre 09, 2024, 12:38:57 am »
Bonjour, ma dernière réalisation pour le suivi des trains dotés de la technologie RailCom ou non.
Détection de la présence de matériel roulant par consommation de courant et identification du numéro de loco. sur 16 canaux.

Le détecteur est composé d'une carte fille de chez Olimex  (processeurs Atmel ATXMEGA128A1) et de composants traversants.

C'est un clone du  GBM16T dont les plans, la construction et les fichiers sont libres de droits.

Pour les caractéristiques, je vous renvoie sur le site de l'auteur de la carte originale.
(16 entrées, faible insertion (0,3v), sensibilité ajustable, alimentation par DCC ou séparée, isolation galvanique des masses, etc…)

https://www.opendcc.de/s88/gbm_bidi/gbm_bidi_f.shtml

Je fournis le plan, la liste des composants, le fichier gerber (voir mon Github) ainsi qu’un support pour les interessés de cette réalisation.

https://github.com/Lebelge2/Carte-16-entrees-RailCom


La carte transmet les  rapports d'occupations et détection RailCom via son interface série isolée galvaniquement (9bits, 250.000 bauds)

Les messages peuvent être envoyés sur un logiciel de train tel que : CDM-Rail, JMRI, Rocrail ou LaBox.

La carte fille ATXMEGA128 est fournie sans Bootloader, un programmateur spécifique (PDI) est nécessaire. Voir la doc. (Programmer ATXMEGA128) sur mon Github.


Prix aproximatif des composants de la carte :

PCB carte mère (5 pièces JLCPCB)         5 €
ATXMEGA128 carte fille Olimex         15 €
1 ADUM 1201 (Isolateur magnétique)     1 €
33 diodes 1N5821 (lot de 50)                   4,15 €
32 résistances 1k (lot de 100)                   1,50 €
3 réseaux R1k (lot de 10)                          1,90 €
4 connecteurs mâles 2x10 (lot de 10)        2 €
20 LED 3mm (lot de 100)                         2 €
1 régulateur 7805 (lot de 10)                     1 €
21 borniers pich 5,08 (lot de 30)               3,40 €

Petit matériel
-----------------
1 transistor Mosfet BS170
2 condensateurs 22µF
2 condensateurs 100nF
1 diode Zener 3v3
1 résistance 100  Ohms
1 résistance 10K
1 résistance 20   Ohms 1W
1 Barette pico mâle et femelle 2,54

!!! Remarque :  Les frais de livraisons sont plus chères que le prix des pièces !!!

Démo. avec ce petit script à mettre dans le  void loop()  du  .ino
Affiche dans le moniteur les itinéraires  et numéros des locomotives.


unsigned long crT1 = 0;      // currentTime1
unsigned long pvT1 = 0;     // previousTime1
int DataTemp;
int Data[10];
int NbrData;
int i;

void setup() {   // Dans le setup configurer le sériél
  Serial1.begin(250000, SERIAL_8N1, 13, 14);   // Carte RailCom
//  Serial2.begin(250000, SERIAL_8N1, 15, 17);   // Carte RailCom
}

void loop() {  // A mettre à la fin du loop()

  if (Serial1.available()) {
    DataTemp = (Serial1.read());                 // Lit Data
    crT1 = millis();
    if ((crT1 - pvT1) > 10) {                    // >10ms,  Premier Data
      pvT1 = crT1;
      i = 0;                                     // Init tableau
      NbrData = DataTemp;                        // Nombre de Data dans trame
    }
    Data[i++] = DataTemp;                        // Mémorise les data
    if (i == NbrData + 1) {                      // Tous les Data reçus ?
      if (Data[1] == 2) {                        // Détection RailCom
        Serial.print("Loco n°");   Serial.print(Data[3]);
        if (Data[4] == 0)          Serial.print(" entre dans canton n°");
        else                       Serial.print(" entre à contre sens dans canton n°"); //0x80
        Serial.println(Data[2]+1);
      }
    }
  }
}

Bien à vous.

13
Vos projets / Re : LaBox" : Une Centrale DCC polyvalente et abordable
« le: octobre 20, 2024, 12:57:07 am »
Pour moi, tu n'as pas sélectionné le bon microprocesseur.    (ESP32 WROOM)

14
Trucs & astuces / Re : Rétrosignalisation S88 et UNO
« le: octobre 15, 2024, 07:56:47 pm »
Il ne faut pas recopier le code de la librairie dans le .ino !

15
Trucs & astuces / Re : Rétrosignalisation S88 et UNO
« le: octobre 11, 2024, 07:19:39 pm »
Chez moi, ça compile correctement !

#include <UNO_S88.h>    // la librairie S88 pour les UNO/Nano

void setup() {
  S88_Setup(16);        // on donne le nombre capteur 8 ou 16
}

void loop() {
  S88_Loop();           // boucle sur les capteurs
}

Le croquis utilise 1614 octets (5%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 27 octets (1%) de mémoire dynamique, ce qui laisse 2021 octets pour les variables locales. Le maximum est de 2048 octets.

Pages: [1] 2 3 ... 6