Messages récents

Pages: [1] 2 3 ... 10
1
Aide / Re : Re : Problème de démarrage serveur.
« Dernier message par Tony04 le Aujourd'hui à 12:26:52 am »
Je souhaiterais deja essayer de la faire 'tourner' sans rétro signalisation mais lorsque je téléverse, rien ne se passe par la suite.

Bonjour Cyril,

83, pas très loin du 04...

Je ne vais malheureusement pas t'apporter de l'aide pour ton problème exposé dans ce fil, mais quand tu auras trouvé la solution et que tu vas passer sérieusement à la rétro signalisation, ne fais rien avant d'avoir étudier ce nouveau principe.

Imagine coté centrale un câble de 20 à 30cm de long avec 5 fils qui vont à une carte composée simplement d'un WeMos D1 MINI et de 3 BSS138 (adaptateur de niveau 3,3/5V), montés sur un circuit pastillé comme ceci:



Voila tout ton bus S88 opérationnel pour les 512 retours, maximum acceptés par les centrales.
Je te joins au message 2 sketchs, l'un pour 1 word de 16 bits, et l'autre pour 15 word de 16 bits (ce dernier gère actuellement 4 TCOs dont celui de la vidéo plus bas dans ce message), juste pour te montrer la simplicité de l'ensemble.

De l'autre coté tu pourras mettre des détecteurs d'occupation de ce type, en 4 entrées:



ou 8 entrées (pas de photo de la carte fini, juste de mon PCB):



Ou des TCOs dans ce genre: https://www.youtube.com/shorts/YZ18kNaU1LU qui sont juste reliés par 2 fils pour le 12V (et 2 fils DCC si on veut gérer le retour des trames DCC de la centrale)

Ou toute autre commande pour une animation quelconque, bref tout ce qui peut se faire par la rétro signalisation S88...

Mais sans aucun fil à part l'alimentation des cartes ou le DCC selon le résultat à atteindre.
Et surtout plus d'achat de modules de rétro assez onéreux.

La fragilité (relative) du bus S88 est totalement balayée, car plus aucune longueur de câble et le S88 est géré par la majorité des centrales y compris les centrales "Locoduino".

Alors si tu veux plus d'infos tu peux me contacter par MP.

Cordialement
Antoine
 
2
Vos projets / Re : Les nouveaux AVR: coeur AVRx avec MEGACOREX, DXCORE, MEGATINYCORE
« Dernier message par laurentr le Aujourd'hui à 12:15:42 am »
COMPARATOR:

Tout d abord rappelons le rôle d'un comparateur.
Ce rôle est de déterminer entre 2 valeurs celle qui est la plus élevée et de donner un résultat par une valeur numérique de type "0" ou "1" en sortie.

Ces valeurs en entrée sont ANALOGIQUES. Typiquement des voltages qui sur nos CPU ne devront pas dépasser  la plage 0V 5V sur les entrées.
Des composants externes peuvent offrir d'autres caractéristiques notamment avec des amplitudes de tensions en entrée plus étendues.
A titre d exemple voir le LM393.

On parle souvent d'entrée inverseuse et non inverseuse notée respectivement + et -.

Pour le comparateur intégré à nos CPU vedettes nous allons dans cet exemple utiliser un mécanisme de base: basculer un état se sortie lorsque qu'un seuil est dépassé.

Pour cela on donne une valeur seuil de référence qui est comparée à une valeur qui va évoluer. Lorsque celle qui évolue dépasse celle de référence la sortie du comparateur bascule d'état et inversement lorsque les seuils se recroisent.

Voici notre code exemple toujours sur un ATTINY1626.


Notez que cette famille de  CPU ne dispose que  d' 1 comparateur.
Les ATTINY de la série 1 en disposent de 3 comme les AVR DA et DB.


#include "Comparator.h"

void INIT_COMPARATOR()
{
  //COMPARATOR:
   
    //POSITIV SIDE: AS FLOATING VALUE INPUT:
    Comparator.input_p = comparator::in_p::in0;     //INPUT P0 PIN_PA7
    //Comparator.input_p = comparator::in_p::in1;   //INPUT P1 PIN_PB5
    //Comparator.input_p = comparator::in_p::in2;   //INPUT P2 PIN_PB1
    //Comparator.input_p = comparator::in_p::in3;   //INPUT P3 PIN_PB6
   
    //NEGATIV SIDE: AS REFERENCE VALUE INPUT:
    //Comparator.input_n = comparator::in_n::in0;   //INPUT N0 PIN_PA6
    Comparator.input_n = comparator::in_n::in1;     //INPUT N1 PIN_PB4
    //Comparator.input_n = comparator::in_n::in2;   //INPUT N2 PIN_PB0
   
    Comparator.reference = comparator::ref::disable;
   
    Comparator.hysteresis = comparator::hyst::disable; 

     
    Comparator.output = comparator::out::enable;     //OUTÜT PIN_PA5
    //Comparator.output = comparator::out::disable;        // No output pin, signal not inverted internally
    //Comparator.output = comparator::out::disable_invert; // No output pin, signal inverted internally
    //Comparator.output = comparator::out::enable;         // Enable output pin (PA7), signal not inverted internally
    //Comparator.output = comparator::out::invert;         // Enable output pin (PA7), signal inverted internally
    //Comparator.output = comparator::out::enable_invert;  // Identical to out::invert
   
           
    Comparator.init();
   
    Comparator.start(); // Start comparator
 
}


void setup() {

  INIT_COMPARATOR();
 
}

void loop() {


}


Dans cet exemple on sélectionne un entrée flottante (positiv input) une entrée de référence (negativ input), on active la pin de sortie, on initialise cette combinaison d éléments et on démarre le composant.

La sortie sur la broche PA5 s'active si une tension sur la broche d'entrée est supérieure à la valeur sur celle de référence.
Inversement elle s'éteint si les seuils sont inversés.

On peut avoir un état de fonctionnement inverse à l aide de l'option d'inversion

Comparator.output = comparator::out::invert;
Bon tout ca c est très bien mais si je ne veux pas sortir sur la broche PIN_PA5... je fais comment?

Comme précédemment nous passerons par EVENT pour établir une liaison vers une broche de sortie de type EVOUTx ce qui offre 5 nouvelles possibilités au choix:
EVOUTA sur PIN_PA2 ou PIN_PA7
EVOUTB sur PIN_PB2 ou PIN_PB7
EVOUTC sur PIN_PC2

Et si cela ne suffit pas on peut passer par le bloc LOGIC en se servant de la sortie logique du comparateur comme un élément d'entrée d'un ou plusieurs bloc logique.

On récupère alors en sortie jusqu'à 6 nouvelles affectations exploitables.( 6 sur les CPU x06 et 8 sur les CPU x07) (les sorties LUTn OUT)


On le voit de suite les possibilités se multiplient, toutefois, on peut encore se sentir à l'étroit parfois et ou vouloir disposer d'encore plus de possibilités.
Pour cela on montera en gamme de CPU vers un modèle comportant plus de combinaisons, de composants programmables et in fine le plus souvent de leur nombre total de broches.

Ltr


3
Les réseaux / Re : Projet de réseau Jean-Claude74
« Dernier message par Jean-Claude74 le mai 03, 2024, 05:31:26 pm »
Bonjour à tous

Après pas mal de temps resté loin de ce forum mais toujours à décortiquer les articles de LOCODUINO en relation avec mon projet, j'ai enfin pu cadrer celui-ci avec les solutions proposées par ce site.
Je rappelle que je n'ai pas beaucoup de notions en programmation et à mon âge (81 ans) j'aimerais voir mes locos circuler sur mon réseau....
Aussi je recherche plutôt des solutions toutes faites mais néanmoins matériellement à construire.

Dans cette idée, j'ai retenu les articles suivants:

Pour la centrale qui est le cœur du projet:
- Soit la centrale DCC+ décrit dans
https://www.locoduino.org/spip.php?article182
sur Arduino Mega
avec les modules LMD18200 et MAX471
ou bien la carte toute faite Motor Shield, mais dans ce dernier cas, est-ce que la protection contre les court-circuit est assurée?

- Soit le projet de Michel Goyard plus récent "Ma première centrale DCC"
https://www.locoduino.org/spip.php?article304
Mais il est écrit dans cet article que de Motor Shield ne comporte pas de protection contre les C.C.
De plus limité à un Arduino Uno

- Soit le projet de "La Box"
https://www.locoduino.org/spip.php?article337
Mais que j'ai décliné car trop complexe pour mon niveau et de plus utilisant un nouveau composant (ESP32) inconnu pour moi alors que je possède déjà plusieurs Arduino Uno et Méga.

Je vais donc m'orienter vers la première solution.

Dans mon projet, il y aura bien sûr un rétrosignalisation des cantons par détection de courant et par détecteurs IR pour les zones d'arrêt. Pour cela je vais appliquer la "rétrosignalisation sur Arduino"
http://www.locoduino.org/spip.php?article138

Pour commander les locos à distance, j'aime bien utiliser des manettes à bouton rotatif (c'est peut-être rétro...)
Deux projets ont été développés:
- Soit Ma première manette DCC sans fil
https://www.locoduino.org/spip.php?article316
- Soit "la manette pour LaBox"
https://www.locoduino.org/spip.php?article286

Je n'ai pas encore décidé laquelle.
Sont-elles compatibles avec la centrale retenue et avec le rétrosignalisation S88 entre autre au niveau des bornes Rx et Tx.

Voilà où j'en suis à la veille de commander le matériel.

J'oubliais le cerveau pour tout cela; ce sera le logiciel "RocRail" pour les mêmes raisons que j'ai développé au début de ce message.

Je suis bien sûr à l'écoute de vos remarques concernant mes choix et surtout si j'ai fait des erreurs dans mes options.

Merci d'avance
Cordialement
Jean-Claude

 
4
Vos projets / Re : centrale DCC / analogique modulaire
« Dernier message par lebelge2 le mai 03, 2024, 03:54:24 pm »
Oui, pour le montage des composants, il y a un supplément de 23 € par face, donc 46 € pour un double face (plus les composants)
5
Vos projets / Re : RailCom: Générateur de CutOut
« Dernier message par laurentr le mai 03, 2024, 01:12:03 pm »
Merci Dominique


Voici le lien pour comprendre les apports de ces nouveaux CPU:

https://forum.locoduino.org/index.php?topic=1712.0
6
Vos projets / Re : Re : RailCom: Générateur de CutOut
« Dernier message par Dominique le mai 03, 2024, 10:20:41 am »

Je vais ouvrir un post dédié car cela sera utile en dehors de ce projet.


Peux-tu indiquer le lien vers ce sujet ?
Au passage, j'ai regroupé 2 sujets séparés (ça fait désordre !) et c'est peut-être celui-là : RailCom: Générateur de CutOut avec booster
https://forum.locoduino.org/index.php?topic=1709.0
7
Aide / Re : Problème de démarrage serveur.
« Dernier message par Dominique le mai 03, 2024, 10:13:39 am »
Bonjour Cyril,

J'espère que quelqu'un se trouvant dans un cas similaire pourra t'aider.

Pour ma part je travaille différemment et ne peut t'aider.

8
Vos projets / Re : Re : centrale DCC / analogique modulaire
« Dernier message par bobyAndCo le mai 03, 2024, 08:24:51 am »
Bonjour.

Assemblage PCB:

Juste pour vous informer que je  viens de faire une simulation pour un double face et les prix ont fortement augmenté chez JLCPCB.
Pour ma part, je ne ferai plus que des simples faces....
Alors pour un quatre couches……

Bonjour,

Ce n'est pas exactement le cout de transport qui a augmenté mais les taxes incluses dans ce cout "apparent". C'est vrai comme le dit Laurent que le format 100 x 100 (ou moins) reste canon chez JLCPCB.

Il faut profiter de l'offre qui est faite pour la première commande (qui se renouvelle au moins tous les jours) pour le pack 5 exemplaires. Résultat, si j'ai besoin de 20 cartes, je commande 4 fois 5 cartes !!! C'est stupide, je sais, mais beaucoup moins cher (pas pour la planète). De l'ordre de 0,88 cts € la carte.

@lebelge : je ne comprends pas, un double face n'est pas plus cher qu'un simple face ! Ce n'est jamais qu'un PCB avec des piste recto-verso. Sauf peut-être si tu fais monter les composants.

Christophe
9
Vos projets / Re : Les nouveaux AVR: coeur AVRx avec MEGACOREX, DXCORE, MEGATINYCORE
« Dernier message par laurentr le mai 02, 2024, 11:31:00 pm »
COMPLEMENTS SUR EVENT:

Il ne faut pas confondre les notions suivantes:

EVOUTx comme EVOUTA EVOUTC qui sont des sorties physiques c'est à dire des PORTS liés à des broches et event_a ou event_b qui sont des éléments de type logiciel assurant une liaison entre éléments.

Pour les plus curieux je vous recommande d'essayer de visualiser ce que permet de faire l'outil ATMEL START pour combiner visuellement les éléments.

https://start.atmel.com/


Tous les CPU n'y sont pas présents (les derniers AVR DD n'y sont pas) mais vous y trouverez facilement les CPU usuels ( ATMAGE4809 par exemple) ou de cet exemple ATTINY1626

A titre d exemple voici le code que va generer l outils pour iniitaliser le bloc logic ( ici avec d autre valur que celle de notre exemple)


#include <ccl.h>

/**
 * \brief Initialize CCL peripheral
 * \return Return value 0 if success
 */
int8_t DIGITAL_GLUE_LOGIC_0_init()
{

// CCL.SEQCTRL0 = CCL_SEQSEL_DISABLE_gc; /* Sequential logic disabled */

// CCL.SEQCTRL1 = CCL_SEQSEL_DISABLE_gc; /* Sequential logic disabled */

CCL.TRUTH0 = 4; /* Truth 0: 4 */

// CCL.LUT0CTRLC = CCL_INSEL2_MASK_gc; /* Masked input */

CCL.LUT0CTRLB = CCL_INSEL0_AC0_gc    /* AC0 OUT input source */
                | CCL_INSEL1_IN1_gc; /* IO pin LUTn-IN1 input source */

CCL.LUT0CTRLA = CCL_CLKSRC_CLKPER_gc     /* Peripheral Clock */
                | CCL_EDGEDET_DIS_gc     /* Edge detector is disabled */
                | CCL_FILTSEL_DISABLE_gc /* Filter disabled */
                | 1 << CCL_ENABLE_bp     /* LUT Enable: enabled */
                | 1 << CCL_OUTEN_bp;     /* Output Enable: enabled */

CCL.TRUTH1 = 1; /* Truth 1: 1 */

CCL.LUT1CTRLC = CCL_INSEL2_EVENTB_gc; /* Event input source B */

CCL.LUT1CTRLB = CCL_INSEL0_AC0_gc       /* AC0 OUT input source */
                | CCL_INSEL1_EVENTA_gc; /* Event input source A */

CCL.LUT1CTRLA = CCL_CLKSRC_CLKPER_gc     /* Peripheral Clock */
                | CCL_FILTSEL_DISABLE_gc /* Filter disabled */
                | 1 << CCL_ENABLE_bp     /* LUT Enable: enabled */
                | 1 << CCL_OUTEN_bp;     /* Output Enable: enabled */

CCL.TRUTH2 = 4; /* Truth 2: 4 */

CCL.LUT2CTRLC = CCL_INSEL2_IN2_gc; /* IO pin LUTn-IN2 input source */

CCL.LUT2CTRLB = CCL_INSEL0_AC0_gc    /* AC0 OUT input source */
                | CCL_INSEL1_IN1_gc; /* IO pin LUTn-IN1 input source */

CCL.LUT2CTRLA = CCL_CLKSRC_CLKPER_gc     /* Peripheral Clock */
                | CCL_EDGEDET_DIS_gc     /* Edge detector is disabled */
                | CCL_FILTSEL_DISABLE_gc /* Filter disabled */
                | 1 << CCL_ENABLE_bp     /* LUT Enable: enabled */
                | 0 << CCL_OUTEN_bp;     /* Output Enable: disabled */

CCL.TRUTH3 = 4; /* Truth 3: 4 */

CCL.LUT3CTRLC = CCL_INSEL2_EVENTB_gc; /* Event input source B */

CCL.LUT3CTRLB = CCL_INSEL0_AC0_gc       /* AC0 OUT input source */
                | CCL_INSEL1_EVENTA_gc; /* Event input source A */

CCL.LUT3CTRLA = CCL_CLKSRC_CLKPER_gc     /* Peripheral Clock */
                | CCL_EDGEDET_DIS_gc     /* Edge detector is disabled */
                | CCL_FILTSEL_DISABLE_gc /* Filter disabled */
                | 1 << CCL_ENABLE_bp     /* LUT Enable: enabled */
                | 0 << CCL_OUTEN_bp;     /* Output Enable: disabled */

CCL.CTRLA = 1 << CCL_ENABLE_bp      /* Enable: enabled */
            | 0 << CCL_RUNSTDBY_bp; /* Run in Standby: disabled */

// CCL.INTCTRL0 = CCL_INTMODE0_BOTH_gc /* Sense both edges */
// | CCL_INTMODE1_BOTH_gc /* Sense both edges */
// | CCL_INTMODE2_BOTH_gc /* Sense both edges */
// | CCL_INTMODE3_BOTH_gc; /* Sense both edges */

return 0;
}


A défaut d être familier avec ce langage plus "brut" l'apport de la librairie LOGIC prend ici tout son sens.

Rappelons une fois encore que toutes les combinaisons ne sont pas possibles et il faudra être attentif aux contraintes et restrictions imposées.

Il peut y avoir plusieurs façons de faire, parfois l'une apparaitra  "meilleure" ou plus adaptée. Chacun étant libre de ses choix.


Ltr

10
Vos projets / Re : Les nouveaux AVR: coeur AVRx avec MEGACOREX, DXCORE, MEGATINYCORE
« Dernier message par laurentr le mai 02, 2024, 10:15:40 pm »
Au travers des exemples mis en œuvre nous avons déjà couvert simplement l'utilisation de:

LOGIC
EVENT

A l'aide de ces éléments avec une syntaxe "simplifiée" sur laquelle il faut être rigoureux,  nous pouvons déjà bien combiner de multiples cas d'usage de ces hardwares méconnus

Je vous propose ensuite de passer à COMPARATOR.

Stop ou encore?

Ltr
Pages: [1] 2 3 ... 10