Auteur Sujet: DCC++ sur Nano avec LMD18200  (Lu 75296 fois)

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2218
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #45 le: septembre 23, 2016, 09:42:05 pm »
juste pour la photo du throttle avant que je n'investisse (*) dans une machine de découpe au laser comme l'auteur (qui nous donne les typons).
http://trainelectronics.com/DCC_Arduino/DCC++/Throttle/#Wireless_Option
le clavier 4x4 est ce que j'avais dans mes tiroirs (au lieu du 3x4). Il me semble que les boutons poussoirs ne servent plus (remplacés par # et * du clavier) mais ils sont toujours dans le sketch. Celui-ci ci-joint modifié pour qu'il compile dans la version des bibliothèques qui vont avec l'IDE 1.6.9
Le câblage est le premier de l'article du lien ci-dessus.

* Bon, ce n'est pas si cher que ça : 370€, ni si important : (800x500x250mm) mais je vais quand même regarder si un boitier du commerce ne pourrait pas convenir. Ça ne va pas avec les meubles du salon.
http://www.ebay.fr/itm/40W-Engraving-Cutting-CO2-Laser-USB-Machine-Engraver-Cutter-woodworking-/290940824902?hash=item43bd6cad46:g:gMsAAOSw5VFWF3Pl
« Modifié: septembre 24, 2016, 06:00:43 pm par msport »
Cordialement

DDEFF

  • Hero Member
  • *****
  • Messages: 730
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #46 le: septembre 24, 2016, 07:49:19 pm »
Salut Dominique,

Dans la série "Denis barré", je me pose quelques questions :

1°) Tu as trouvé une idée géniale pour lire le CV1 (et d'autres pour les adresses longues). OK. Bravo !  ;D

Par ailleurs, ne serait-ce que pour la détection d'occupation, le réseau est découpé en cantons.
Cantons sur lequel un train seul fonctionne (sauf cas particuliers). C'est même un peu le but : un seul train par canton.

J'en déduis qu'à chaque fois qu'un train s'arrête (en gare, par exemple), tu peux faire ta mesure sur ce canton là, qui ne contient qu'une seule loco.
Et, donc, savoir quel train est sur ce canton.

La mesure que tu fais sur un seul train pour ta navette (quasi isolée du réseau) peut donc être étendue à d'autres cantons et plusieurs fois, pour re-caler le gestionnaire de réseau qui, normalement, sait quel train est sur quel canton.

2°) Si je lis bien ton post du 31/08 :

Citer
Pour ce faire, j’ai ajouté un enregistrement des valeurs de mesure de courant dans toutes les phases de ReadCV_Main (PacketRegister.cpp) et un affichage à la fin de la fonction. Comme cela, ça ne perturbe pas trop les timings.

Je rappelle que la fonction ReadCV envoie 8 fois une commande de lecture pour lire les 8 bits du CV, puis une 9ème commande pour obtenir un bit de vérification.
Aussitôt après chaque commande, le sketch se met en lecture du courant dans une boucle de 500 lectures (ACK_SAMPLE_COUNT qui doit correspondre grosso modo à au moins 6 millisecondes, je n'ai pas mesuré), au cours de laquelle il recherche une valeur qui dépasse le seuil égal au courant de base + 30 (ACK_SAMPLE_THRESHOLD). Si ce seuil est dépassé c’est un bit 1 sinon 0.

Evidemment, il faut UNE SEULE LOCO sur la voie principale et il ne faut pas que la loco roule pour faire cette mesure, moteur arrêté, car c'est en activant le moteur 9 fois pendant 6 ms que le décodeur va "passer son message".

Ces valeurs sont déduites de la norme NMRA http://www.nmra.org/sites/default/files/s-9.2.3_2012_07.pdf

Où il est écrit : Basic acknowledgment is defined by the Digital Decoder providing an increased load (positive-delta) on the programming track of at least 60 mA for 6 ms +/-1 ms. It is permissible to provide this increased load by applying power to the motor or other similar device controlled by the Digital Decoder.

La valeur du seuil (30 dans le soft) peut ou non correspondre à ces 60mA de delta consommation, c’est un truc à étalonner si ça ne marche pas du premier coup. De plus il est évident que c'est différent en N et en HO !?!

Ton système est basé sur une mesure relative d'une tension en environnement fortement bruité.
Et donc fonctionne d'autant mieux que la tension est faible (et donc au mieux à l'arrêt).

Mais comme tu as une alimentation unique pour le réseau, on peut se permettre de la compliquer un peu.
J'ai des souvenirs (théoriques, malheureusement) "d'extraction d'un signal noyé dans du bruit". Cela doit être possible de nettoyer ton signal et améliorer la précision de la mesure, via l'électronique ?  ???

3°) Encore plus fou : on coupe le courant d'une loco en coupant l'alimentation de ce canton.
On mesure (54 ms) et on remet le courant  :o ::) :o

Amicalement


« Modifié: septembre 24, 2016, 08:51:33 pm par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2870
  • 100% Arduino et N
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #47 le: septembre 24, 2016, 11:23:37 pm »
J'en déduis qu'à chaque fois qu'un train s'arrête (en gare, par exemple), tu peux faire ta mesure sur ce canton là, qui ne contient qu'une seule loco.
Et, donc, savoir quel train est sur ce canton.
La mesure que tu fais sur un seul train pour ta navette (quasi isolée du réseau) peut donc être étendue à d'autres cantons et plusieurs fois, pour re-caler le gestionnaire de réseau qui, normalement, sait quel train est sur quel canton.

Ce n'est pas tout à fait cela que je fais : la mesure de courant pour récupérer la réponse du décodeur de la machine se fait au niveau de la centrale et non au niveau du canton. Je ne peux pas faire une mesure dans une zone (on ne devrait pas dire "canton") particulière. Je lis la réponse d'une loco quelle que soit sa position dans le réseau. C'est pour cela qu'il faut qu'il n'y en ait qu'une seule.

Ou alors il faudrait installer un Max471 dans toutes les zones où on veut faire une lecture, chose qui pourrait se combiner avec la détection de consommation (qui est binaire pour le moment).

Effectivement, s'il fallait ramener une tension analogique (la sortie du Max471) vers une ou plusieurs entrées analogiques dans la centrale, à travers des fils assez longs, il y aurait certainement des perturbations. Le meilleur moyen serait de coller un Arduino Pro Mini avec chaque Max471 dans chaque zone concernée, puis d'échanger un processus de commande - réponse avec le gestionnaire (pourquoi pas avec le bus CAN).

Mine de rien, on est en train de réinventer RailCom !!!! Mais je ne le connais pas assez pour comparer (pour le moment).

Mais peut-être en plus simple ?
Cordialement,
Dominique

DDEFF

  • Hero Member
  • *****
  • Messages: 730
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #48 le: septembre 25, 2016, 02:18:23 pm »
Et surtout en beaucoup moins cher... ;D ;D

Je ne connais pas bien RailCom, mais c'est sûr qu'il y a du matos pour chaque zone.
Il est hors de question de balader de l'analogique : il faut traiter au niveau du canton (ou de la zone, si tu veux.)
Mais je n'envisage pas de détecter la présence autrement qu'avec de la détection de consommation de courant.

Amicalement
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2870
  • 100% Arduino et N
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #49 le: septembre 27, 2016, 02:21:42 pm »
Au passage j'annonce que je détecte maintenant les adresses longues (si bit 5 du cv#29=1) dans les CV 17 et 18, et les adresses courtes (si bit 5 du cv#29=0) dans le CV 1.

J'en profite pour corriger tous les "warning" du compilateur et j'ajoute des commandes "de l'intérieur" sans perdre les possibilités de commandes par le port série : c'est très pratique pour la mise au point.
« Modifié: septembre 27, 2016, 08:43:32 pm par Dominique »
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2870
  • 100% Arduino et N
    • Voir le profil
Re : Re : DCC++ sur Nano avec LMD18200
« Réponse #50 le: septembre 27, 2016, 08:53:19 pm »

Mais je n'envisage pas de détecter la présence autrement qu'avec de la détection de consommation de courant.

Et pourtant il y a plein d'autres manières de détecter des convois, que soit leur présence, leur passage, leur identité, etc.

Ce sujet est souvent abordé dans les articles de Locoduino et sur le Forum.

Cela vaudrait le coup de faire un article qui réinit toutes les techniques utilisables dans nos réseaux, et fonction des besoins et des technologies.
Cordialement,
Dominique

PAT95

  • Newbie
  • *
  • Messages: 10
  • PAT95
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #51 le: novembre 01, 2016, 08:06:01 pm »
Bonsoir à tous,

J'ai fabriqué une manette en DCC++ sur Nano et LMD18200, un afficheur grove LCD le tout "rentré" dans une boite du commerce. Les premiers essais sont très encourageant mais avant de poursuivre j'ai une question :

Comment gérer les surtensions, les courts circuit des déraillements?

Il doit y avoir des lignes de code dans DCC++ pour protéger le matériel. Comment et où?
Merci

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2870
  • 100% Arduino et N
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #52 le: novembre 02, 2016, 09:33:39 am »
Bonjour,

La détection de court-circuit est déjà présente dans le code de DCC++ BaseStation : c'est au début de la LOOP par l'appel de la méthode Check() de Currentmonitor.

Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2870
  • 100% Arduino et N
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #53 le: novembre 02, 2016, 10:36:56 am »
plus exactement c'est ça dans la loop() qui assure la détection de cc :

  if(CurrentMonitor::checkTime()){      // if sufficient time has elapsed since last update, check current draw on Main and Program Tracks
    mainMonitor.check();
    progMonitor.check();
  }
Cordialement,
Dominique

PAT95

  • Newbie
  • *
  • Messages: 10
  • PAT95
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #54 le: novembre 10, 2016, 10:14:55 am »
Bonjour Dominique
je vois sur le schéma de la petite centrale un module qui régule le 15v en 5v est-ce une fabrication maison ou achetée dans le commerce et où?
Merci de votre réponse je n'ai pas envie de reprendre le fer à souder.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2870
  • 100% Arduino et N
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #55 le: novembre 10, 2016, 10:21:48 am »
Le module d'alimentation 12-15V vers 5V à base de 7805 se trouve abondamment sur la baie, en voici un exemple :
http://www.ebay.fr/itm/L7805-LM7805-Step-Down-Converter-7-5V-35V-to-5V-Regulator-Power-Supply-Module-/400569233325?hash=item5d43c96fad:g:ay8AAOSwU-pXsss1

Mais on peut aussi facilement se bricoler une alim régulée avec un 7805, 2 capas, ... pas sûr que ça revienne moins cher  ???
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2870
  • 100% Arduino et N
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #56 le: novembre 10, 2016, 10:45:14 am »
Je viens de réaliser une nouvelle version de ma centrale pour Va et Vient.

Cette fois c'est un régulateur LM317 que j'avais dans mes fonds de tiroir  ::)

Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2870
  • 100% Arduino et N
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #57 le: novembre 11, 2016, 12:00:52 pm »
Voilà j'ai terminé la centrale Va et Vient version 2 avec une face avant plutôt sympa (environ 10x10 cm) que je vais intégrer dans mon tableau de bord.



J'ai tenté d'utiliser cette fois-ci la pin de mesure de courant du LMD18200 : échec, ça ne marche pas). J'ai donc ajouté le petit circuit Max471 en série avec l'alimentation du LMD18200 comme je l'ai préconisé plus tôt.

L'afficheur 2x16 en I2C affiche :
- l'adresse DCC reconnue automatiquement (en configuration, on peut en définir une autre qui sera prise en compte en cas d'échec de la reconnaissance - il vaut mieux qu'il y ait de bons contacts entre les rails et la loco lors de cette reconnaissance)
- le cran de vitesse commandé à la loco par le logiciel
- la consigne de vitesse en km/h à l'échelle N
- la vitesse réelle en km/h mesurée en parcourant l'une des zones (dans mon cas : 2 zones centrales, 2 zones de ralentissement et 2 zones d'arrêt qui sont les 2 gares)
- le nom de la zone qui correspond à l'une des leds vertes reliées aux capteurs de consommation

J'ai remplacé le "potentiomètre qui crache" par un encodeur en quadrature, pas si facile à gérer que cela, il a fallu utiliser une interruption 0 (pin D2) et le code de Nick Gammon (de plus en plus mon grand copain ;)

Il ne reste que 2 boutons :
- un pour les feux
- un pour le Marche/Arrêt qui est 100% logiciel : Marche->Arrêt stoppe la loco et déactive le DCC (cela permet de changer de machine) et Arrêt->Marche relance la reconnaissance de l'adresse DCC et fait démarrer la loco en phase de reconnaissance du parcours pour initialiser l'automate.

La configuration ne peut se faire qu'à la mise sous tension, en maintenant appuyé le bouton de l'encodeur. Les paramêtres possibles sont : la distance de la zone qui sert à mesurer la vitesse (en cm), la durée d'arrêt dans les gares (en secondes) et l'adresse DCC par défaut.

Si vous voulez plus de détails et le logiciel, vous pouvez me le demander. Si vous êtes intéresse par un article complet sur la réalisation, je peux m'y mettre aussi.
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2870
  • 100% Arduino et N
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #58 le: novembre 11, 2016, 12:02:42 pm »
Et maintenant voici le coté câblage :



Là on peut voir les vicissitudes du DIY  :P :P

Certes le coût de la centrale est très faible (environ 20€) auquel il faut ajouter un paquet d'heures pour le montage et la programmation (une semaine, et encore je ne suis pas parti de zéro !). J'ai privilégié les soudures et les câbles en nappe pour avoir une meilleure fiabilité à long terme. Même le Nano est soudé, je ne pense pas que j'aurais besoin de le récupérer un jour et ce n'est que 5€.

Pour bloquer les nappes au dos de la face avant, rien de plus simple qu'une touillette de café collée à la cyano avec des petites cales pour ne pas abimer les nappes  :o 8)

Mais cela vaut le coup car la joie est grande de voir mes locos parcourir cette voie complètement automatiquement, avec des accélération et des ralentissements réalistes et avec plusieurs asservissements de vitesse qui marchent à merveille.  :D ;D

Cela confirme la grande qualité du logiciel DCC++ dont je n'utilise pas l'interface série (pour le moment mais elle n'est pas désactivée) et sa capacité à fonctionner en même temps que l'I2C et l'interruption 0 pour l'encoder.

Comme je l'ai écrit plus haut, les plans et le code sont à votre disposition sur demande.

Amicalement

Dominique
« Modifié: novembre 11, 2016, 12:18:00 pm par Dominique »
Cordialement,
Dominique

DDEFF

  • Hero Member
  • *****
  • Messages: 730
    • Voir le profil
Re : DCC++ sur Nano avec LMD18200
« Réponse #59 le: novembre 11, 2016, 02:05:06 pm »
Et quand on boit du thé, on fait comment ?  ;D ;D ;D

Je rigole : magnifique réalisation.  ;)

Évidemment, il faut un article pour la partie technique, la réalisation proprement dite.

Je ne pense pas que quelqu'un va réaliser exactement la même chose, puisque ton proto correspond à une situation particulière, mais savoir pourquoi tu as choisi tel matériel et pas un autre, où tu l'as eu, le schéma de câblage, ... Tout cela ne peux que donner des pistes pour des réalisations personnelles.

Par ailleurs, je sais que l'article sur la programmation, nécessaire aussi, évidemment, va, là aussi, ouvrir l'esprit des Locoduiniens.
Que demander de mieux ?
« Modifié: novembre 11, 2016, 04:44:44 pm par DDEFF »
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)