D17: Une centrale a 10 balles

Les commandes numériques du réseau (appelées à tort "digitales") sont l'avenir du train miniature. Mais comment choisir, comment sauter le pas, avec ou sans ordinateur ? Autant de questions dont les réponses se trouvent dans l'expérience des uns et des autres…

Modérateur : MOD

Lulu_ho
Causant
Messages : 281
Enregistré le : ven. 16 déc. 2016, 12:24
Echelle pratiquée : HO
Prénom : Ulysse

Re: D17: Une centrale a 10 balles

Message par Lulu_ho » sam. 12 oct. 2019, 01:50

Bonsoir,

Le code des modules s88 'est pas très facile à comprendre car il n'utilise pas les fonctions classiques comme digitalRead.
Il manipule directement les registres de l'AT328P afin d’être le plus rapide possible afin de ne pas louper les impulsions à mémoriser sur les entrées et les fronts d’horloges sur le bus S88.
En regardant le code de digitalRead dans l’environnement arduino, on voit que c'est une fonction avec pleins de vérifications et indirections super longue, elle dure environ 4us.Lire nos 16 entrées prendrait donc 64us. A l'opposé, lire un registre de 8 entrées prend une instruction soit 62.5ns (à 16MHz). Lire 16 entrées prend 0.125us, c'est donc 512 fois plus rapide !
Avec les autres instructions avec digitalRead, on aurait besoin de 100us environ pour boucler et au mieux detecter un front montant d'horloge toute les 200us soit 5kHz. Le débit sur le bus s88 serait limité à 5000bits/s trop lent !!!!
Les interruptions sont aussi désactivées pour ne pas ajouter du temps et risquer de perdre un front d'horloge.
La liaison série ne fonctionne pas sans les interruptions.
Pour toutes ces raisons je ne te conseille pas de déboguer sur le module S88.

Si tu tiens absolument à le faire et si perdre des données sur le bus S88 ne te dérange pas (du moins pendant le debug), enlève la désactivation des interruptions et utilise digitalRead ou mieux en lisant les registres des entrées ...

Bonne chance !

Avatar du membre
Bug Killer
Éloquent
Messages : 382
Enregistré le : ven. 08 sept. 2017, 12:46
Echelle pratiquée : H0
Prénom : Jean-Michel
Site Internet : http://jmdubois.free.fr/dcc/
Localisation : Loir et Cher
Âge : 64

Re: D17: Une centrale a 10 balles

Message par Bug Killer » sam. 12 oct. 2019, 10:22

J'ai implémenté dans D17++ un mode trace sur IP pour pouvoir mettre au point les protocoles communiquant en USB. Désormais l'émulation Desktop Station de D17++ fonctionne à l'exception de la communication de la valeur lue d'un CV dont je n'ai pas réussi à trouver le format dans la documentation. Seul le mode trace permet de voir la valeur. L'affichage de la trace s'effectue avec un client telnet.
Que la vapeur soit avec toi.

Pepyto
Messages : 6
Enregistré le : sam. 10 nov. 2018, 22:44

S88 input scrpt TCO ???

Message par Pepyto » dim. 13 oct. 2019, 11:31

salut
merci
c'est cool ça marche la centrale reçoit bien mes données du bus S88

j'ai un téléphone android et j'utilise la sourie double qui marche bien pour piloter les trains.

je passe à l'étape suivante en utilisant un script TCO,
Comment j'utilise mes entrées S88 pour mettre des conditions dans mon script ????

MERCI

exemple du script d'Ulysse de base

MSG test_bb67400 #affiche un message sur l'ecran
CMD a8s+v20f0+   #canal a (car 2 canaux par souris), adresse 8, sens +, vitesse 20%, phares allumés
tempo 5          #attend 5s
 
MSG stop
cmd a8s-v0f0-
TEMPOR 5 20      #tempo aléatoire entre 5 et 20s
 
MSG arr
cmd a8s-v20f0+
tempo 5
 
msg stop2
cmd a8s+v0
tempo 2
cmd f0-
tempo 3
 
loop              #recommencer au début du fichier

Lulu_ho
Causant
Messages : 281
Enregistré le : ven. 16 déc. 2016, 12:24
Echelle pratiquée : HO
Prénom : Ulysse

Re: D17: Une centrale a 10 balles

Message par Lulu_ho » dim. 13 oct. 2019, 13:51

Bonjour Pepyto, super, tu arrives à tout faire fonctionner :)
Pour attendre une entrée, tu peux utiliser l'instruction WAITIN suivit du numéro de l'entrée.
Plus d'infos au chapitre 3.4 de la documentation.
Scripte bien !

Pepyto
Messages : 6
Enregistré le : sam. 10 nov. 2018, 22:44

Re: D17: Une centrale a 10 balles

Message par Pepyto » dim. 13 oct. 2019, 15:10

salut
merci pour ton aide, j'aurais encore besoin de tes lumières

ok j'ai fais un truc simple dans un script que je lance ( voir ci dessous)
Mais jamais le WAITIN 1 ne fonctionne.
quand je me connecte avec mon portable je vois sur le lien série de la centrale:
au1 dcc i1000 d000000000000 e000000000000 u000000000000000000000000 c00
le i1000 n'est pas forcément le bit 1 du WAITIN
j'ai mis à la masse le IN 0 du S88
j'ai configuré la centrale:
#define IO_IN_NB 16
en clair WAITIN 1 correspond à quelle entrée sur le S88 Arduino UNO ? que dois je configurer de plus dans la centrale?

MSG test 
CMD a3s+v20f0+
WAITIN 1
MSG pin1 à 1
cmd a8s+v0
tempo 5
MSG arr
cmd a3s-v20f0+
TEMPO 5
MSG stop
cmd a8s+v0
loop              #recommencer au début du fichier

MERCI

Pepyto
Messages : 6
Enregistré le : sam. 10 nov. 2018, 22:44

Re: D17: Une centrale a 10 balles

Message par Pepyto » dim. 13 oct. 2019, 18:16

resalut

en fait si tu mets IO_IN_NB |=96 par exemple 16, l faut aussi changer dans la sourie puisque c'est codé en dur:
mid$(msg$,10,24)

! chaine retour: au0 dcc iFFFFFFFFFFFFFFFFFFFFFFFF dFFFFFFFFFFFF e000000000000 uFFFFFFFFFFFFFFFFFFFFFFFF cyy
! 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901
! 0 1 2 3 4 5 6 7 8 9
all_rx_process_status:
IF(use_net = 0) THEN return

DO
SOCKET.CLIENT.READ.READY flag
IF(flag <> 0) THEN
SOCKET.CLIENT.READ.LINE msg$
IF(len(msg$) >= 91) THEN
IF(mid$(msg$,1,3) = "au1") THEN au = 1
IF(mid$(msg$,1,3) = "au0") THEN au = 0
IF(mid$(msg$,5,3) = "dcc") THEN ana = 0
IF(mid$(msg$,5,3) = "ana") THEN ana = 1
IF(mid$(msg$,9,1) = "i" ) THEN io_in$ = mid$(msg$,10,24)
IF(mid$(msg$,35,1) = "d" ) THEN io_dir$ = mid$(msg$,36,12)
IF(mid$(msg$,49,1) = "e" ) THEN io_dev$ = mid$(msg$,50,12)
IF(mid$(msg$,63,1) = "u" ) THEN io_u$ = mid$(msg$,64,24)
IF(mid$(msg$,89,1) = "c" ) THEN

Lulu_ho
Causant
Messages : 281
Enregistré le : ven. 16 déc. 2016, 12:24
Echelle pratiquée : HO
Prénom : Ulysse

Re: D17: Une centrale a 10 balles

Message par Lulu_ho » dim. 13 oct. 2019, 20:36

Attention Pepyto lorsque l'on modifie en dehors de la partie de configuration utilisateur "user part", il faut faire très attention et savoir exactement ce que l'on fait. Normalement IO_IN_NB en dehors de cette partie ne doit pas être modifié sinon avec la souris ça ne marche plus, tout est décalé... Pas grave si tu as moins que 96 entrées, il y aura n'importe quoi de transmis pour les entrées 16-95.Ton problème vient du fait que les entrées sont numérotées i0 à i95. Faire wait_in 0 doit résoudre ton problème. Maintenant que tu as jetté un coup d'œil dans le code, tu sais exactement comment ça fonctionne ;-) Bonne chance !

Pepyto
Messages : 6
Enregistré le : sam. 10 nov. 2018, 22:44

Re: D17: Une centrale a 10 balles

Message par Pepyto » mar. 15 oct. 2019, 23:06

merci pour ta réponse
j'arrive à tout faire avec les variables u etc...
Script et TCO OK
détecteur de courant OK
j'ai remarqué que seulement via les scripts on pouvait régler les vitesses des trains en mettant des condition sur les entrées.
es vrai ?
J'ai une question via un script
j'aurais aimé mettre deux trains sur le même circuit mais pas en UM.
faire ralentir les trains si celui qui est devant est présent sur le tronçon de devant.
comment tu fais pour mettre des conditions sur une entrée
exemple le train est sur une portion ou IN1 =1
si IN2 = 1 alors présence train devant => je ralentis
si IN2 = 0 alors train absent je peux continuer à la même vitesse
le code ci dessous est complètement farfelu dans un script basic avec la sourie, c'est pour donner un exemple
Es possible dans la centrale de coder en C se genre de chose => gestion des trains en plus des IOs
merci
CMD a3s+v100f0+
WAITIN 1
IF WAINTIN 2
CMD a3s+v20f0+ ralentir
TEMPO 3
IF WAINTIN 2
CMD a3s+v0f0+ arrêt
IF WAITNOTIN 2
CMD a3s+v100f0+ je redémarre
else
CMD a3s+v100f0+ je ne ralentis pas

Lulu_ho
Causant
Messages : 281
Enregistré le : ven. 16 déc. 2016, 12:24
Echelle pratiquée : HO
Prénom : Ulysse

Re: D17: Une centrale a 10 balles

Message par Lulu_ho » jeu. 17 oct. 2019, 01:57

Bonjour Pepyto, content de voir que tu es arrivé à tout faire fonctionner. Ce que tu demandes n'est pas simple car il faut suivre les trains et les piloter en //. C'est clairement hors de porté facilement de ce petit mode script. C'est généralement le rôle d'un logiciel PC. BugKiller l'a fait sur son logiciel D17++. Si tu veux quand même le faire avec le mode script de base, il faut lancer 2 scripts a partir de 2 souris, chacun suivant sa loco et adaptant la vitesse en fonction des occupations de la loco précédente, comme dans ton exemple... Il serait aussi possible de faire évoluer le mode script pour en lancer plusieurs... Bien entendu tu peux aussi faire cela en c sur la centrale ou en rfo basic sur une souris en utilisant des machines à états pour le parallélisme... Pour suivre les trains sur un oval ça va encore mais si en plus il y a des aiguillages ça se complique. Si tu te base uniquement sur les détections, il faut pouvoir détecter les wagons ou au moins le wagon de queue. Une autre méthode est d'utiliser les variables u pour définir une occupation d'un canton. De la mettre a 1 quand une loco entre dans un nouveau canton et de la mettre a 0 lorsqu'elle arrive sur la zone d'arrêt du canton suivant, c'est un peu moins réaliste, mais pas besoin de détecter les wagons... Bref c'est un sujet à part entière avec beaucoup de possibilités et de la complexité ;-) Je te laisse choisir ta méthode et je peux t'aider pour la faire fonctionner ++

Avatar du membre
Bug Killer
Éloquent
Messages : 382
Enregistré le : ven. 08 sept. 2017, 12:46
Echelle pratiquée : H0
Prénom : Jean-Michel
Site Internet : http://jmdubois.free.fr/dcc/
Localisation : Loir et Cher
Âge : 64

Re: D17: Une centrale a 10 balles

Message par Bug Killer » jeu. 17 oct. 2019, 16:43

Sur un petit réseau avec peu de zones de détection et peu de trains, une régulation me semble possible via des scripts attachés chacun à un train mais dès que le réseau s'étoffe et que le nombre de trains augmente, ça risque de devenir compliqué et lent. C'est pourquoi j'ai préféré implémenter la régulation dans un module du croquis de la centrale. Les algorithmes n'y dépendent pas des adresses des trains, peu importe celui qui occupe une zone de détection, le fonctionnement est toujours le même et automatique. Dans le code de D17++ est inclus un BAL bidirectionnel sur voie unique avec embranchement. Il fonctionne impeccablement à condition que tous les essieux soient conducteurs. Pour l'adapter à un autre réseau, le plus compliqué c'est de concevoir les règles de vitesse et d'affichage des signaux. Leur traduction en code C/C++ est simple grâce à des appels de fonctions documentées.
Que la vapeur soit avec toi.

Pepyto
Messages : 6
Enregistré le : sam. 10 nov. 2018, 22:44

Re: D17: Une centrale a 10 balles

Message par Pepyto » ven. 18 oct. 2019, 07:58

merci beaucoup
maintenant que l'électronique marche je m'attaque au réseau.
je me suis fait un plateau de 3m3 sur 2m50.
j'ai du boulot, dès que j'aurais mon premier circuit avec la coulisse qui tourne je reviendrais sur le sujet.

simplement, je pensait dans la centrale en C:
- détecter en fonction des tronçons la présence d'une loco en la faisant tourner toute seule. => la centrale connait la position de la loco sur le circuit.
- apporter la seconde loco => idem l'ambiguïté de sa position est alors levée.
- piloter les commandes DCC dans la centrale pour piloter la partie de code qui construit le msg DCC. Pour cela dans un premier temps je shunt les informations de la sourie.

biensur ceci est un cas simple avec deux locos.
peut être que l'IA sera bientôt dans la centrale DCC :)

charles.droz
Messages : 26
Enregistré le : mer. 16 mai 2007, 09:44

Re: D17: Une centrale a 10 balles

Message par charles.droz » ven. 29 nov. 2019, 22:29

Lulu_ho a écrit :
ven. 22 févr. 2019, 21:27
Ce soir, un peu de fun, allons de l'autre coté de la planète et connectons D17 au logiciel Japonais "Desktop Station"

Le logiciel Desktop Station permet de conduire les locos avec ses souris logicielles, commander les accessoires, voir l'état des capteurs sur le S88, propose un TCO et un mode script.
Il n'y a certes pas de nouvelles fonctionnalités par rapport à ce qui existe sous D17, mais il est bien fait, agréable a utiliser et intuitif.
Il tourne sur Windows et se connecte à D17 par USB (bientôt par WIFI aussi).
Contrairement à RocRail il ne joue pas avec la ligne DTR, nous pouvons donc utiliser directement la connexion USB de l'Arduino sans passer par un câble spécial.
Pour que cela fonctionne, il faudra utiliser le dernier programme pour la centrale D17 et sélectionner le bon protocole: #define USB_MODE 3  // 3 protocole Desktop station

lien: https://desktopstation.net/play.html

L'auteur Yaasan propose également des centrales et des décodeurs mobiles.

Image

voici un exemple de configuration pour D17:

Image

Je ne décris pas plus le logiciel car Yaasan le fait très bien (voir lien). La doc est en Anglais ...

Bonsoir
Y a t'il parmi vous des utilisateurs de desktopstation (version actuelle 097c)
dans l’affirmative je vous invite a essayer le programme Camera S88 du même auteur il s'agit d'un détecteur S88 virtuel
le principe est de filmer une partie du réseau a l'aide d'une Webcam : lors de la configuration vous définissez des zones 'sensibles'
auquel un détecteur S88 est affecté a chacun d'eux
lorsqu'un train pénètre dans cette zone celle ci réagit en déclenchant un signal sur le S88
évidement la fiabilité de cette détection vidéo nécessite quelques réglages et un certain contraste entre voie libre et voie occupée
( les feux allumés améliore grandement la chose )toutefois j'ai réussi a définir quatre zone d'occupation sans nécessité de coupures
Il est juste dommage que le système ne fonctionne qu'avec le desktopstation
J'ai l'ambition d'essayer avec deux webcam pour voir si le système supporte les deux processus en parallèle
amusez vous bien et Bon WE

Trimarco232
Disert
Messages : 490
Enregistré le : ven. 23 févr. 2018, 14:02
Echelle pratiquée : HO
Prénom : marco

Re: D17: Une centrale a 10 balles

Message par Trimarco232 » ven. 29 nov. 2019, 23:20

Bonjour,
merci
je pense depuis un certain temps que la caméra est l'avenir du suivi des trains. On a là du concret dans ce sens, mais il serait en effet dommage que chacun y aille de son propre système

Lulu_ho
Causant
Messages : 281
Enregistré le : ven. 16 déc. 2016, 12:24
Echelle pratiquée : HO
Prénom : Ulysse

Re: D17: Une centrale a 10 balles

Message par Lulu_ho » ven. 03 janv. 2020, 21:43

Bonsoir, D17 vous souhaite une bonne et heureuse année 20/20 !
Que vos projets se réalisent !!!!

Cela fait longtemps que je n'ai rien posté, mais avec la période froide je m'y remets …
Voila ce que je compte faire:

- Remplacer les souris Android

En effet, on ne trouve plus RFO basic sur le playstore Android ce qui impose des bidouilles pour arriver à installer les souris.
En discutant avec Philippe (merci encore), je crois que j'ai une solution qui tient la route …
Mettre un serveur Web sur D17 afin qu'il fournisse une page Web avec dedans un Javascript qui fait tourner une souris et communique par Websockets avec D17.
Pour le commun des mortels, on utilise son navigateur web pour accéder à D17. Adresse: "http://192.168.4.1/sou". Une page s'ouvre avec la souris dedans. Il n'y a donc rien à installer !
Voila le résultat (même l'accéléromètre fonctionne).

Screenshot_2020-01-03-21-16-07-676_com.android.chrome.png
Screenshot_2020-01-03-21-16-07-676_com.android.chrome.png (29.78 Kio) Vu 257 fois
Il me reste encore un peu de travail et surtout m'assurer que ce soit fiable à 100%.
Les souris étant plus simple à écrire, je pourrais en fournir des plus évoluées (par exemple avec le freinage…)
Un autre avantage est que ces souris peuvent tourner dans n'importe quel navigateur donc sous Android (tablettes et téléphones), PC, les machins avec une pomme ...

- Fournir un TCO réaliste

Avec PRS/PRG/BMVU sur tablettes. En ce moment j'ai un prototype qui fonctionne en Python sur PC, mais je voulais quelque chose de plus simple et sur tablettes aussi avant de la partager. Je compte aussi utiliser la même solution que pour les souris. Voici une capture d'écran du prototype en Python:

tco_prs.png

Y a plus qu'a ...

Avatar du membre
Baltic
Bavard
Messages : 86
Enregistré le : mar. 02 déc. 2008, 21:22
Echelle pratiquée : HO Zéro
Site Internet : http://mcmallier.forumactif.org/
Localisation : Bourbonnais
Âge : 70

Re: D17: Une centrale a 10 balles

Message par Baltic » ven. 03 janv. 2020, 22:20

:D bonne et heureuse année... avec plein de nouvelles de D17 !
le fait de pouvoir utiliser différents support est très intéressant, je vais pouvoir à nouveau me replonger sur tout ça... :wink:

Répondre