Messages récents

Pages: 1 ... 4 5 [6] 7 8 ... 10
51
De mon côté, avec le montage que j'ai présenté précédemment, je ne rencontre aucune difficulté. Les lectures sont très stables et fiables. Au travers du switch, on a 4 choix possibles pour la détection de présence et 4 autres choix pour les seuils de courts-circuits. J'ai pu régler finement les détections sur mon réseau.

C'est un ATtyni44 qui assure la lecture analogique. Le code utilise la lecture et l'écriture directe des ports ce qui accélère grandement la vitesse d'exécution.

Par acquis de conscience, je réalise 4 lectures dont je fais la moyenne pour obtenir les consommations de courant.

En cas de court-circuit, le relais coupe très rapidement l'alimentation DCC sur les rails. Avant même que la centrale elle même ne coupe l'alimentation générale ce qui est bien sûr le but recherché. En même temps, un signal digital est envoyé sur la sortie CC.

/*

  Détection de présence et courts-circuits pour ATtiny44 (84)

  © Christophe BOBILLE 04/24 pour locoduino (www.locoduino.org)
  v 0.4

  Datasheet :
  https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7701_Automotive-Microcontrollers-ATtiny24-44-84_Datasheet.pdf

  Getting Started with ADC on ATTiny
  https://ww1.microchip.com/downloads/en/Appnotes/TB3209-Getting-Started-with-ADC-90003209A.pdf

  PA0 - PA1 / RX - TX

*/

#include <avr/io.h>


// Variables
uint32_t tempoCC = 5000UL;                             // Tempo réarmement suite à court-circuit
const uint16_t tabSeuilOcc[] = { 30, 40, 50, 60 };     // Seuil pour l'occupation
const uint16_t tabSeuilCc[] = { 250, 350, 450, 550 };  // Seuil pour le court-circuit
uint16_t seuilOcc;
uint16_t seuilCc;

// Etats
byte etatSwitchOcc;  // Etat des bits pour switch occupation
byte etatSwitchCc;   // Etat des bits pour switch court-circuit


uint16_t get_ADC_sample(void) {
  ADCSRA |= (1 << ADSC);  // start ADC measurement
  while (ADCSRA & (1 << ADSC))
    ;
  // return the ADC value
  return (ADCL | (ADCH << 8));
}



void setup() {

  DDRA |= (1 << PA2);   // Signal occupation
  DDRA &= ~(1 << PA4);  // Switch 0
  DDRA &= ~(1 << PA5);  // Switch 1
  DDRA &= ~(1 << PA6);  // Switch 2
  DDRA &= ~(1 << PA7);  // Switch 3
  DDRB |= (1 << PB1);   // Signal cc
  DDRB |= (1 << PB2);   // Relais

  etatSwitchOcc = (PINA & 0x30) >> 4;
  etatSwitchCc = (PINA & 0xC0) >> 6;

  seuilOcc = tabSeuilOcc[etatSwitchOcc];
  seuilCc = tabSeuilCc[etatSwitchCc];


  ADMUX =
    (0 << ADLAR) |  // do not left shift result (for 10-bit values)
    (0 << REFS1) |  // Sets ref. voltage to internal 1.1V
    (0 << REFS0) |  // Sets ref. voltage to internal 1.1V
    (0 << MUX3) |   // use ADC3 for input (PB4), MUX bit 3
    (0 << MUX2) |   // use ADC3 for input (PB4), MUX bit 2
    (1 << MUX1) |   // use ADC3 for input (PB4), MUX bit 1
    (1 << MUX0);    // use ADC3 for input (PB4), MUX bit 0

  ADCSRA =
    (1 << ADEN) |   // Enable ADC
    (1 << ADPS2) |  // set prescaler to 64, bit 1
    (1 << ADPS1) |  // set prescaler to 64, bit 1
    (1 << ADPS0);   // set prescaler to 64, bit 0


  PORTB |= (1 << PB2);   // Relais
  PORTA &= ~(1 << PA2);  // Signal occupation
  PORTB &= ~(1 << PB1);  // Signal cc
}


void loop() {

  uint16_t sample = 0;
  for (byte i = 0; i < 4; i++)  // 4 lectures pour lisser le résultat
    sample += get_ADC_sample();
  sample = sample >> 2;


  if (sample < seuilOcc) {
    PORTA &= ~(1 << PA2);  // Signal occupation
  }

  if (sample >= seuilOcc) {
    PORTA |= (1 << PA2);  // Signal occupation
  }

  if (sample >= seuilCc) {
    PORTB &= ~(1 << PB2);  // Relais
    PORTB |= (1 << PB1);   // Signal cc
    delay(tempoCC);
    PORTB |= (1 << PB2);   // Relais
    PORTB &= ~(1 << PB1);  // Signal cc
  }
  delay(1);
}
52
C'est plus compliqué à calculer car on est sur un signal carré en entrée, il y a le condensateur à charger,
et la diode nous fait aussi perdre un peu.
Et surtout, il y a la linéarité du coil. Le 0.2% de linéarité dans la datasheet du zmct103c est mesuré entre 250mA et 6A et on est loin en dessous à 1.5mA pour une roue.
Du coup on est bien en dessous de la valeur calculée.

Mais bon, l'important est qu'on a des valeurs utilisables et fiables.
53
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« Dernier message par Dominique le avril 06, 2024, 02:26:49 pm »
Super  ;D
Merci Pierre,

J'ai tout juste fait un petit essai du Locoduinodrome 1 où j'ai lancé le TCO en premier et le gestionnaire en 2ème, puis démarré le train rose en cliquant sur l'itinéraire BX et c'est joli ! Le train fait le tour du circuit et s'arrête au signal à l'entrée de gare en venant de Y. Son curseur de vitesse passe à 0 et il faut le remonter pour redémarrer.

J'avoue que j'ai fait tout cela au pif en me souvenant du précédant Locoduinodrome. J'ai cliqué un peu partout sur les boutons d'itinéraires mais sans succès, faute de mode d'emploi.

J'ai jeté un coup d'oeil au code du gestionnaire et c'est du Java, je ne m'y retrouve pas mais je peux apprécier déjà que ce gestionnaire est plus complet que la version C++, il me semble, notamment sur le suivi des trains.
Ce qui me perturbe le plus c'est l'absence de définition des objets zones, trains, etc par comparaison avec celle du C++.
Mais là encore je ne connais pas le Java.

J'attend donc gentiment la version C++.
Je vais donc me plonger dans l'éditeur de Json en essayant de l'appliquer à mon réseau (en passant pas le Locoduinodrome 2 pour me faire la main).

C'est un travail énorme, bravo !

54
Bonjour

Petit interlude pour connaitre le mapping de sensibilité(s) que vous arrivez à déceler depuis le primaire? ( et du range de valeurs en sorties).

Quid en fait du seul correspondant en "bruit" et donc d une valeur en deca la mesure de détection est à "nettoyer"?

Ltr
55
Vos projets / Re : Les SATELLITES AUTONOMES: évolutions du socle initial
« Dernier message par laurentr le avril 06, 2024, 12:47:54 pm »
Bonjour

Le hard du bouclier d'inversion/protection est validé.
L'alimentation du montage depuis le DCC régule bien via le convertisseur DC DC.
Les commutations tournent comme une horloge. (déclanchement mécanique via bouton)

Il reste à valider les seuils des bascules, voir des temporisations de façon dynamique.

Si pour le HO je suis pourvu, les tests pour le N me sont impossibles car pas équipé pour.
Un volontaire qui dispose de l'infra pour cela? @Dominique peut être?

La suite dans la foulée...

Ltr

56
Vos projets / Re : Projet partagé d'un gestionnaire de réseau
« Dernier message par Pierre59 le avril 06, 2024, 11:01:04 am »
Voici une nouvelle version expérimentale d'un gestionnaire paramètré par un fichier JSON. Par rapport à la version précédente plusieurs choses ont changé :

- des itinéraires permanents ont étés ajoutés, deux conséquences, sur le TCO les boutons d'itinéraires ont étés changés pour ressembler à des vrais boutons d'itinéraires de PRS (voir le PRS de Méru pour les explications de fonctionnement post #160 du 10 janvier 10 2024 sur ce fil), dans le gestionnaire certains carrés peuvent servir de sémaphores pour assurer la continuité du cantonnement. Ces itinéraires permanents permettent de faire rouler un ou deux trains sur la boucle.

- en vue du passage au C/C++, impliquant un changement de bibliothèque JSON, tous les accès au JSON ont étés regroupés dans un seul onglet ("Json"), il reste dans les autres onglets un type (JSONArray) qu'il est difficile d'éliminer Java n'ayant pas de "typedef".

- pour accélérer le programme un certain nombre de valeurs de type chaine de caractères ("String") sont substituées par des valeurs numériques ("int") juste après la lecture du fichier JSON. Ces valeurs sont : "gauche", "droite", "pair", "impair", "pairOUimpair", "pairETimpair".

J'ai fait aussi des essais d'itinéraires spécifiés par une origine et une destination, genre PRG et successeurs.

Pour le fonctionnement du gestionnaire avec le TCO voir la précédente version post #339 du 18 février 2024 sur ce fil.

Il reste encore des bugs dans le gestionnaire, notamment pour les itinéraires. Il faut aussi implémenter une circulation automatique des trains et prendre en compte le nouveau Locoduinodrome (donc modification du TCO, déja bien avancée). Puis envisager des manoeuvres.

Pierre
57
Aide / Re : Dépannage CDM-Rail pour Ma première centrale DCC (1)
« Dernier message par jp33 le avril 06, 2024, 01:28:35 am »
Bonjour à tous,
Je vous contacte une nouvelle fois pour demander de l'aide.

Je rencontre un problème, je n'arrive plus à démarrer mon serveur dans CDM-rail. Le message me dit " impossibilité d'établir la connexion avec la centrale. Aucune interface trouvée sur les ports COM/USB ou IP ".
Ma centrale est la réalisation de msport: "Une centrale économique et polyvalente" et d'une carte Arduino Uno. J'ai également téléchargé le programme Dccpp-S88L.

Cela à fonctionner un temps. Après une interruption de quelques mois, plus rien; je n'ai plus de connexion avec le serveur. Si quelqu'un peut m'aider, je le remercie par avance. Cordialement
58
Vos projets / Re : Utilisation du laser vl53lxx
« Dernier message par Etienne66 le avril 05, 2024, 02:32:48 pm »
Je pense que le mieux pour tes ascenseurs c'est d'utiliser un moteur pas à pas.
C'est le nombre d'impulsions qui donnera la distance parcourue.

Sinon tu peux aussi utiliser des contacts de fin de course comme ceux qu'on a sur les imprimantes 3D.
59
Vos projets / Re : Utilisation du laser vl53lxx
« Dernier message par BricoTrain2024 le avril 05, 2024, 02:25:14 pm »
Bonjour à tous, voilà les dernières nouvelles des tests avec les VL53Lxx. D'abord merci, de votre intérêt. Mais, malheureusement, ces essais ne sont pas du tout concluants.
La première chose, il est possible de changer les adresses (0x29) à l'origine, dans les exemples, il y a un programme qui y est destiné. Ensuite les TCA, fonctionnent nickel.
Par contre, et si vous faites un peu de recherche sur le net, ces VL53Lxx, sont de VERITABLES cochonnerie. Ils sont vendus pour +-1mm de précision, mais dans les faits, c'est de l'ordre de 25mm (quelque soi la surface réflectrice, et en maintenant un angle de réflexion le plus parfait possible) , 1 pouce quoi, ils peuvent être utilisés pour plein de chose, mais sûrement pas pour une quelconque précision (les mesures varient jusqu'à 5mm en point fixe, sans perturbation). En résumé, à fuir, désolé d'avoir ouvert un post pour des détecteurs totalement nuls. Je vais les recycler dans la détection de passage, sur plusieurs voies, suffisamment distantes, cela pourra peut être servir? Et encore, sur 50cm, voire 1 ou 2 m, si les erreurs de mesure ne s'amplifient pas avec la distance.
60
JMRI et Arduino / Re : Projet d'interface polyvalente pour JMRI
« Dernier message par Etienne66 le avril 05, 2024, 12:23:50 pm »
Le système SNCF-2015 est vraiment mal configuré, incorrect et incomplet.
Je recrée donc un autre système qui utilisera les icônes de l'original mais des fichiers de configuration totalement différents.
Aspects DCC inchangés
Ajout des cibles C, E (2 versions), G (3 versions)
Suppression des TIV et autres pancartes qui n'ont rien à faire dans ces fichiers.( à part perturber le fonctionnement des BALs)
Fonctionnement prototypique des feux de manoeuvre.
Fonctionnement prototypique des ralentissements et rappels de ralentissement.
La combinaison RR30 et RR60 sur un même mât est possible mais demande un peu de logique (logix) supplémentaire.
(sans cette logique le RR30 prend le dessus)
Fonctionnement prototypique du carré qui reste fermé si la voie n'est pas réservée pour un train
(ça demande un peu de logix et ce n'est possible qu'avec des trains automatiques ou semi-automatiques)

Je ferai des tutos pour l'implantation des signaux et leur configuration dans JMRI.

En ce qui concerne l'interface :
Création automatique des mâts de signalisation dans JMRI (on doit juste mettre la liste des cibles dans le sketch du mega)
Le nom système contient la lettre de la carte et le numéro de broche de la première led pour faciliter les connexions.
J'ai fait un tableau qui donne l'ordre des leds pour chaque type de signal.
La transmission des aspects fonctionne et la carte les convertit en leds allumées/éteintes/clignotantes (il me reste à le faire pour quelques aspects et à faire le clignotement)
La carte gère aussi l'oeuilleton quand il y en a un.
Pages: 1 ... 4 5 [6] 7 8 ... 10