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

Pages: 1 [2] 3
16
Sur la demande de Dominique, je vous présente mon projet en quelques lignes. Je pourrais en parler longuement, mais je veux avant tout vous donner l'idée générale.

En fait, je pourrais résumer mon projet en trois mots: machine à états. Chaque noeud est une machine à états qui reçoit des évènements, réagit en effectuant une action et renvoie un autre message au système. Jusque là, rien de bien sorcier...

Ensuite: le système est répartit entre plusieurs noeuds, ce qui permet de gérer suffisamment de code sans nécessiter l'utilisation d'un ordi ou un logiciel externe. Pour le moment, j'en suis environ à 1500/1600 lignes de code pour chaque arduino. Et c'est là tout l'avantage de ce système: de petites fonctionnalités un peu partout et finalement tout tient dans quelques arduinos.

Le système fonctionne grâce au CanBus configuré à 500kbit/s. Ce qui est rapide (si on fait le calcul, cela représente quasiment 4000 messages à la seconde). J'ai fait des tests à plus basse vitesse et il y a encore de la marge... Disons que je n'ai pas encore rencontré de situation qui nécessite cette vitesse aussi rapide.

Pour les noeuds: comme je l'ai déjà mentionné sur mon blog, le tout s'organise autour de 4 types de noeuds:
- le DCC, gestionnaire de la position des trains et de la topologie du réseau (rails). Il génère aussi les messages DCC.
- le LOCO, il contient le script de la loco. C'est lui qui va demander au système s'il peut aller de tel à tel canton, demander l'état de la signalisation au modules CANTON, etc...
- le CANTON, il a la responsabilité d'un canton (3 zones de détection) et de la signalisation (2 feux complexes)
- enfin, les autres noeuds: aiguillages, animations, etc...

Un exemple de fonctionnement: un train entre sur une zone, le canton le détecte et met à jour la signalisation. Celui-ci envoie l'info d'occupation au DCC qui sauvegarde la position et autorise la poursuite du script si rien ne s'y oppose. Le module train, une fois entré dans un canton, demande l'état de la signalisation et ajuste sa vitesse en fonction... etc...

A chaque fois, il s'agit d'évènement qui entraine une action puis une réaction (nouveau message...). Le secret: bien manager le principe de message/réponse de façon atomique, et ne pas envoyer plein de messages dans tous les sens et espérant que les noeuds pourront gérer le tout en parallèle... Mon premier prototype semblait "plus intelligent" mais je me retrouvais dans des situations de "dead lock" parce que deux messages attendaient deux réponses simultanées et le système perdait les pédales...

A part cela, mon réseau une fois équipé devrait compter une douzaine de cantons, mais pas tous avec signalisation complète. Certaines branches de manoeuvres n'en utilisant pas.

Voilà, difficile d'en dire plus, ou alors ce serait vraiment beaucoup plus...

Si vous avez des questions sur des détails bien précis, je pourrai essayer d'y répondre.
Au plaisir,
Patrick

17
Vos projets / Automate DCC
« le: décembre 22, 2016, 07:20:47 pm »
Le  développement continue et approche de la fin... Depuis hier, la signalisation est autonome et réagit en fonction de la position des trains et des aiguillages, comme le montre cette dernière vidéo: http://jurasecondairen.blogspot.ca/2016/12/les-simulations-continuent.html

On peut y voir les R60 et RR60 avant l'embranchement et le carré en protection de l'aiguillage. La phase d'initialisation du réseau en encore manuelle (pose des trains et manipulation des aiguillages), mais la signalisation s'adapte à la situation.

Bientôt mon réseau sera de nouveau disponible pour des tests grandeur réelle... A suivre...
Patrick


18
Vos projets / Re : Re : Re : Utilisation d'ATTiny
« le: décembre 21, 2016, 09:11:37 pm »
Ce que tu as décrit servira peut-être à d'autres, quant à moi, je vais vérifier si oui ou non, elles sont présentes sur la version 1.6.13.

J'ai installé récemment cette version (sur Linux) et il m'a fallu installer la librairie à la main. Ceci sur un ordi "propre". Donc, pas de ATTiny dans l'installateur.

J'ai l'impression que dans le cas Windows, les libraries sont installées dans un répertoire Documents/Arduino. Ainsi, ce répertoire est persistent quelque soit la version ou les versions de l'IDE qui sont installées ou désinstallées.

A une certaine époque, l'IDE créait un répertoire Arduino1.0, puis Arduino1.1, etc... dépendant de la version de celui-ci. Or depuis quelques versions je pense que le nom du répertoire est le même (ne contient plus de version) d'où la réutilisation des librairies...

Hmmm... J'espère que ce n'est pas trop du charabia...
Patrick

19
Vos projets / Re : Utilisation d'ATTiny
« le: décembre 21, 2016, 02:46:20 pm »
Si cela peut te rassurer, la procédure afin d'ajouter des définitions de hardware est bien celle-là (utilisation du gestionnaire...). J'ai installé plusieurs hardwares différents et c'est toujours la même chose...

Bon, en tout cas, ça fonctionne 😉

20
Vos projets / Re : Re : Re : Utilisation d'ATTiny
« le: décembre 18, 2016, 01:20:25 am »
un grand merci pour le lien.
Avec plaisir...

Citer
d'autant que sauf erreur, une fois programmé, si il y a une erreur, c'est fini.
??? Que veux-tu dire?

21
Vos projets / Re : Utilisation d'ATTiny
« le: décembre 16, 2016, 11:45:21 pm »
C'est un beau petit projet pour commencer avec les décodeurs embarqués.

Ceci-dit, si tu veux utiliser ton décodeur comme un décodeur de fonctions (par exemple dans la motrice de queue d'un TGV), tu devrais plutôt prendre un peu de temps pour examiner la librairie NMRA. Je pense qu'elle est plus adaptée pour ce cas-là. En effet, il y a déjà un exemple de décodeur loco (ou fonctions) ici: https://github.com/mrrwa/NmraDcc/blob/master/examples/NmraDccMultiFunctionDecoder_1/NmraDccMultiFunctionDecoder_1.ino

La librairie est disponible au complet ici: https://github.com/mrrwa/NmraDcc

Quoiqu'il en soit, tu devrais obtenir à peu près les mêmes résultats avec ton approche...

Tiens-nous au courant...
Patrick


22
Vos projets / Re : Utilisation d'ATTiny
« le: décembre 16, 2016, 06:03:50 pm »
En effet, il semble s'agir du programme recherché. Il est basé sur DCC_decoder.h/.c.

La fonction RawPacket_Handler() agit comme une callback dans laquelle on peut ajouter la fonctionnalité désirée. Le principe de callback garantit que la fonction sera appelée lorsque le bon paquet DCC sera reçu. Elle est instanciée avec:

  DCC.SetRawPacketHandler(RawPacket_Handler);


Dans cet exemple, RawPacket_Handler() est appelé à chaque fois qu'un paquet générique (raw) est reçu (il peut s'agir d'un paquet décodeur de fonction ou décodeur de locomotive, etc...).  Une des premières tâches est de décoder l'adresse du destinataire transportée par le paquet.

  Address=0;
  if (!bitRead(dccPacket[0],7)) { //bit7=0 -> Loc Decoder Short Address
    Address = dccPacket[0];
    instrByte1 = dccPacket[1];
  }
  else if (bitRead(dccPacket[0],6)) { //bit7=1 AND bit6=1 -> Loc Decoder Long Address
    Address = 256 * (dccPacket[0] & B00000111) + dccPacket[1];
    instrByte1 = dccPacket[2];
  }


Ensuite, le code va vérifier que l'adresse reçue correspond à l'adresse du décodeur. Dans le cas contraire, le paquet est ignoré. De plus, libre à chacun d'utiliser l'adresse qu'il veut ici...

  int decoderAddress = 1830; // This is the decoder address, change into the number you want.
(...)
  if (Address==decoderAddress)...


Si c'est le cas, alors le paquet "est arrivé au bon endroit". Il ne reste plus qu'à décoder le numéro de fonction et son contenu, et d'exécuter l'action désirée (digitalWrite()... etc...).

J'espère que cela clarifie le problème...



23
Vos projets / Re : Utilisation d'ATTiny
« le: décembre 16, 2016, 02:52:42 pm »
Salut,

Ok je comprends ce que tu veux dire: tu veux donner une adresse au décodeur et non pas programmer les CV du décodeur en utilisant le bus DCC tel que tu pourrais le faire sur un réseau...

Quoiqu'il en soit, si tu n'arrives pas à télécharger les fichiers, tu peux trouver la librairie NMRA DCC à d'autres endroits, en particulier ici http://mrrwa.org/download/. Dans les exemples fournis avec la librairie tu trouveras un fichier DDC_Decoder.ino ou DCC_AccessoryDecoder.ino  ou un nom équivalent. Je n'ai pas chargé le fichier ZIP pour vérifier, mais en général, toutes les versions sont à peu près faites de la même manière...

Ensuite, une fois la librairie installée, pour donner une adresse à ton décodeur, tu devrais trouver dans le programme d'exemple, une structure avec un champs DCC_Address ou équivalent. Il te suffit de renseigner ce champs avec l'adresse qui t'intéresse et de compiler le programme. Ca ne devrait pas être plus compliqué que cela...

Remarque: certaines librairies renseignent l'adresse du décodeur sur 2 octets différents plutôt qu'avec un seul entier/valeur. Il faut bien vérifier lequel des deux octets est celui de poids fort et celui de poids faible. Sinon, en inversant les deux valeurs, tu crées une adresse différente.

Si tu as encore des difficultés, je pourrai essayer de poster une réponse plus détaillée dans la soirée ou ce week-end.

Patrick

24
Vos projets / Re : Re : Utilisation d'ATTiny
« le: décembre 15, 2016, 10:37:29 pm »
Petite utilisation maison d'un ATTiny pour jeu de lumières... https://4.bp.blogspot.com/-2ImM1FXzQp4/V_lv_mAlbfI/AAAAAAAAA3Q/nWcVPA-YRnoM7rTvyBL_QKZjFj1red27ACLcB/s1600/premier%2Bpcb%2Bcomposants.jpg Certe, le résultat est quasiment aussi gros qu'un Arduino Mini, mais c'est fait maison  ;)

Ma préoccupation comment  programmer le ATTiny en mode dcc

Que veux-tu dire par: programmer le ATTiny en mode dcc ?

25
Vos projets / Re : eclairage du reseau
« le: décembre 11, 2016, 08:44:40 pm »
Salut,

Je peux essayer de préparer quelque chose dans les prochains jours. Dans l'attente, tu peux consulter une de mes pages qui explique l'utilisation d'un "séquenceur" (sujet peut-être déjà abordé sur Locoduino). L'exemple donné est justement en relation avec l'animation jour et nuit. http://jurasecondairen.blogspot.ca/p/arduino-sortie-pwm.html#34. Cela donne déjà un bon point de départ.

Patrick

26
Vos projets / Automate DCC
« le: décembre 11, 2016, 06:46:51 pm »
Bonjour,

Comme mentionné lors de mon introduction, j'ai pour but la réalisation d'un automate complet pour réseau DCC. Celui-ci gère le mouvement des trains, la signalisation, la position des aiguillages, etc... sans utiliser de logiciel PC ou autre... et seulement avec des Arduino. On peut aussi piloter des locos manuellement au milieu de celles gérées automatiquement. Les possibilités sont nombreuses, entre autres: manoeuvrer en gare pendant que d'autres locos tournent sur le réseau, le tout protégé par une signalisation réaliste; toutes sortes d'automatisme comme va-et-vient, évitement automatique en gare, etc... Mais je pense que vous êtes familiers avec tous ces concepts sur le forum...

Le premier prototype complet est maintenant fonctionnel et une vidéo de la simulation est disponible: http://jurasecondairen.blogspot.ca/2016/12/la-premiere-simulation-en-video.html

La qualité de la vidéo n'est pas formidable (difficile de distinguer les couleurs des leds) mais le schéma en incrustation permet de suivre les évènements. Prochaine étape, ramener à la vie mon petit réseau de test pour valider le système grandeur nature.

Bon visionnement.
Patrick

27
Présentez vous ! / Re : Bonjour à tous
« le: décembre 07, 2016, 06:10:05 pm »
As-tu essayé de mesurer les valeurs qui sortent du détecteur en branchant la sortie sur un input analogique de l'Arduino? Juste par curiosité...

Peut-être qu'une pullup pourrait aider à supprimer les fluctuations?

En général, lorsque j'ai des problèmes de ce genre, c'est à cause d'une masse non reliée aux autres... Mais là, on dirait un problème généralisé d'alimentation...

28
Bus CAN / Re : Re : BreakoutBoard CAN
« le: décembre 07, 2016, 05:26:31 pm »
Vous savez, cette petite carte CAN ne coûte que 1,68€, port compris et elle contient son quartz (à 8mhz) et tout le reste.

Personnellement je ne "bricolerai" pas une carte Arduino pour relier un 2515 qui risque de coûter plus cher et nécessite plus de fils de liaison et une modif des "fuse" que je ne sais pas faire avec l'IDE: il faut être expert.

Pour les débutants en tout cas, la carte toute faite est la solution la plus simple.

Non, bien sûr, je suis d'accord. Le but n'est pas de bricoler ce genre de board. Par contre, lorsqu'on designe un PCB il est intéressant de connaitre les possibilités qui s'offrent à nous. Et le partage d'une horloge n'est pas sans intérêt.

Aussi, cela s'éloigne du niveau "débutant"... Moi-même débutant avec une petite expertise, je ne m'amuserais pas à cela. Trop compliqué à débugguer...

D'ailleurs à propos de quartz, c'est possible de partager 1 quartz entre 2 µc ??

Normalement oui, mais il y a la question "qui contrôle l'horloge". Si je ne m'abuse, il faut exciter le crystal pour qu'il y ait résonnance. Donc avoir deux "masters" n'est peut-être pas trivial à gérer...
La solution la plus fréquente que j'ai vue jusqu'à aujourd'hui est de propager le signal de IC en IC, ou d'ajouter un buffer entre les deux ICs et le crystal si jamais ils n'offrent pas cette possibilité.

Encore une fois, ce n'est que l'avis d'un débutant.  ;)

29
Présentez vous ! / Re : Bonjour à tous
« le: décembre 06, 2016, 10:33:30 pm »
Salut,

Sur ton schéma, tu as dessiné uniquement le fil "signal" qui va du capteur IR à l'Arduino ou à...? Comment as-tu branché l'alimentation du senseur IR? Est-ce une alimentation indépendante ou tu prends le 5V sur l'Arduino?

Tu peux essayer de mettre une capa au plus près du senseur, par exemple entre 10 et 100uF.

Patrick

30
Bus CAN / Re : BreakoutBoard CAN
« le: décembre 06, 2016, 08:09:47 pm »
Pour faire l'économie d'un crystal, il est possible de connecter le pin CLKO du 328 (port D8 sur le UNO par exemple) au pin OSC1 du MCP2515 (laisser OSC2 ouvert). Ainsi, l'horloge interne du Atmega pourra servir d'horloge externe au MCP2515. On trouve un petit peu d'information là-dessus sur le web... Il faut entre autre configurer un "fuse" du Atmega et vérifier que le bon prescaler est utilisé. Mais bon, mes connaissances s'arrêtent là!

Juste en passant...
Patrick

Pages: 1 [2] 3