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

Pages: 1 ... 7 8 [9] 10 11 ... 14
121
Bus DCC / Re : Une centrale DCC en moins de 200 lignes C
« le: mars 17, 2021, 07:44:16 pm »
Les commandes sont issues d'un seul et unique caractère envoyé sur le port série (USB).
Voici ce que ça peut faire :
0 => F0 off
1 => F0 on
+ => Speed + 1 sur 14 steps
- => Speed - 1 sur 14 steps
s => stop
d => change direction FORWARD / REVERSE
p => change power ON/OFF

Toute autre touche affiche un menu qui a priori récapitule cela.
Les commandes sont envoyées sur l'adresse 3 de base.

122
Débuter / Re : Information générale
« le: mars 17, 2021, 02:02:52 pm »
En programmation objet, les types fondamentaux sont généralement encapsulés dans ... des objets, ce qui permet d'associer les données et le code qui les manipulent.

String est une classe objet qui sert à manipuler une chaine de caractères.

En langage C, vous utiliseriez une variable de type char* à laquelle vous allouez une zone mémoire, puis vous utilisez des fonctions de la librairie standard de manipulation des chaines pour traiter le contenu : strcpy, sscanf, sprintf, etc...

En C++, on va plutot utiliser un objet String pour obtenir le meme résultat final, mais de façon plus élégante...plus "objet".

Tous les langages modernes utilisent ce paradigme : Java, C#, C++...et bien entendu la plupart des langages "scriptés".

Vous focalisez sur "String" comme étant une clef centrale d'un programme. C'est forcément erroné : String est une simple chaine de caractères. Ca ne peut en soit constituer un programme ou etre un élément déterminant du programme.

Soit votre programme est "vide" et ne fait rien, et vous ne voyez que des bribes de ce qui aurait du forme une base de travail (par exemple une liste de chaines de caractères contenant les commandes futures à écrire), soit il y a dans vos sources une quantité importante de code que vous n'avez pas exploré.

Votre projet prévoyait une "console de paramétrage", donc une ligne de commande qui devait permettre d'injecter des ordres au clavier, puis une restitution à l'écran d'un résultat. Il est évident que pour faire cela il faut manipuler du texte :le flux des touches saisies, puis la génération des réponses. Il faut donc manipuler des "String" à un moment ou un autre, comme le fait la classe SerialCommand de DCC++. Mais la partie traitant cet aspect représente 20 lignes de codes sur plusieures centaines traitant d'autre chose.

Si tout ce que je viens de vous dire est "du petit chinois" pour vous, il faut que vous preniez le probleme à la base : vous ne pouvez pas programmer (et encore moins utiliser des objets) sans comprendre la terminologie de base des langages : classe, objet, types fondamentaux, et notamment opérations sur les chaines de caractere. C'est par là qu'il faut commencer.

Pour le reste, et comme l'a indiqué msport ci-avant, si vous voulez de l'aide il nous faut plus de données. En particulier les sources, les exemples de ce que vous avez testé ou pas, ce que vous ne comprenez pas, etc. Petit pas par petit pas.

123
Composants / Re : Logiciels de conception / routage : vos avis
« le: mars 16, 2021, 09:06:00 pm »
C'est la "punition" liée à un transport avec assurance en valeur déclarée : on doit donner la nature de l'objet transporté et sa valeur lors de l'ordre de mouvement, ce qui induit le dédouanement à l'entrée sur le territoire.

124
Super merci ! Je viens de me commander  un DSO 150 assemblé. Livraison d'ici le 31 mars si tout va bien, 25 € avec les frais de port.

Ca me permettra de mieux voir ce qui se passe sur les voies ;)

125
A bien y réfléchir il Y A UNE raison qui peut expliquer un tel écart ! Le montage et les composants étant sensiblement les mêmes, tout comme le décodeur quand tu utilises un Lais, l'élément qui change radicalement c'est....la charge ! La loco / le moteur utilisé.

C'est peut-être tout betement un problème de seuil de détection de courant à affiner / rendre réglable.
Je vais faire une version en ce sens et pour qu'on puisse compléter.

Tu peux me conseiller un matériel à 20€ (lien sur eBay par exemple) pour un oscillo minimum vital ?

126
OK merci pour tes retours et le temps que tu as passé !
Il faut que je me trouve d'autres décodeurs pour tester plus largement. Y a pas de raison qu'il y ai un tel écart...mais bon.
Ce n'est qu'une première version, ça manque de mise au point !

127
Pas tout à fait... c'est un peu plus subtile (et élégant en fait).

Les registres des comparateurs sont à double-buffer quand le timer fonctionne en mode PWM.
Les valeurs inscrites dans les registres sont "latchées" et basculées dans le timer au moment ou il fait son reset, donc au moment ou il atteind COMPARE A.

De fait, on lève une interruption lorsque le compteur passe le seuil de COMPARE B, donc au milieu du bit uniquement.
A ce moment on détermine le timing du prochain bit à transmettre et on pré-charge les deux valeurs dans COMPARE A et B. Du fait du double buffer cela n'a pas d'impact sur la génération du bit en cours, mais au contraire cela permet de lancer la génération du bit suivant immédiatement à la fin du bit en cours, sans perte de synchro.

De cette manière on a besoin de gérer qu'une seule interruption par bit, et on produit un signal extrèmement propre, la contrainte étant que le traitement de l'interruption doit durer moins longtemps qu'un demi-bit.

128
Oui c'est une des difficultés.

On utilise le PWM de l'Arduino pour générer le signal de changement de POLARITE de la carte moteur, donc changement de DIRection dans l'absolu.

Sur la carte moteur, l'entrée PWM qui sert normalement à donner la pulsation correspondant à la vitesse du moteur n'est pas utilisée. On la fixe à 1 pour activer la tension de sortie de façon permanente.

Donc sur la carte moteur :
entrée PWM reçoit 1 pour voie sous tension ou 0 pour voie hors tension
entrée DIR reçoit la modulation d'impulsion qui permet d'inverser la tension pour former le signal DCC

Sur l'arduino :
un timer X génère le signal PWM en mode dit "fast pwm"
Dans ce mode, le timer utilise deux comparateurs :
le comparateur A contient la longueur d'une alternance (donc d'un bit) totale. Lorsqu'il boucle, on passe au bit suivant.
le comparateur B contient la longueur d'une DEMIE alternance et définie le rapport  cyclique du PWM

Comme en DCC le rapport cyclique est de 1:1, le comparateur B est chargé avec la valeur du comparateur A divisée par deux, et on lui demande de basculer de 1 à 0 ou 0 à 1 quand il déclenche.

Au début d'une pulsation de signal DCC, le timer reset les comparateurs : les sorties correspondantes de l'Arduino sont à 0.

Après la moitié d'un bit, le comparateur B déclenche et INVERSE sa sortie, il passe à 1.

Plus tard, le  comparateur A va provoquer le cyclage du mécanisme. C'est une fonction interne au CPU : on ne pilote aucun signal avec ce comparateur.

Donc on relie la sortie de signalement du comparateur B, qui s'appelle OUTPUT COMPARE x B avec x = numéro du timer utilisé à l'entrée DIR de la carte moteur.

Pour le timer 1 sur un MEGA, OUTPUT COMPARE 1 B est sur la broche 12.

Ensuite, il faut envoyer un signal 1 sur l'entrée PWM de la carte moteur. Ici on peut soit le rendre pilotable avec une quelconque sortie de l'Arduino, soit simplement le relier à VCC. Mais dans ce cas on ne peut plus couper le signal / l'alimentation de la voie (surcharge, arret d'urgence....)

129
OK pour le 12 sur DIR = sortie du timer 1.

Donc dans le code tu as modifié le numéro de pin pour le TrackDriver ?
Dans mon exemple c'est la PIN 11 qui est utilisée pour activer la carte moteur, là ou toi tu as la PIN 3.

Donc tu dois utiliser : 

TrackDriver driver(3, &generator, &currentSensor);
au lieu de
TrackDriver driver(11, &generator, &currentSensor);

130
Débuter / Re : Information générale
« le: mars 15, 2021, 05:43:46 pm »
(posté en meme temps que "M" ;)

131
Débuter / Re : Information générale
« le: mars 15, 2021, 05:43:26 pm »
La commande de moteurs pas à pas est un domaine connu des Arduino : les imprimantes 3D d'entrée de gamme sont pour la plupart des Arduino un peu stéroidés qui pilotent 4 moteurs (NEMA souvent ou équivalent) via des "drivers" tels que les modules polulu ou autre issus des projets open source.

Vous avez donc la partie électronique et le réducteur pour gagner en précision de positionnement.

De ce que vous me dites, le code qui gère le moteur fonctionne déjà ? Je me trompe ?
Donc votre problème serait l'interface homme / machine pour piloter la chose ?

Dans le descriptif du projet que vous évoquez, que j'ai parcouru rapidement, je vois de nombreuses choses : la prise en charge RC5 pour une télécommande IR,....un projet effectivement lourd. La mise au point du décodeur DCC est-elle faite ?

Pouvez-vous compléter votre synthèse du sujet avec ce qui existe et marche, existe et ne marche pas, n'existe pas, principalement focalisée sur le plan logiciel ?

Le projet parle d'une interface "console" / ligne de commande, l'équivalent d'un interpréteur DOS (dans vos références) pour injecter des commandes au pont et le configurer. Est-ce utile ? Si la partie décodeur DCC est en place, une programmation via des CV pourrait s'avérer plus facile à réaliser...

132
Sur le mega, la broche sortie 3 correspond à l'OUTPUT COMPARE C du timer 3.

Le code pilote systématiquement OUTPUT COMPARE B pour la génération du PWM (c'est le cas aussi pour dccpp).
Les IFDEF de DCCpp positionnent le timer 3 en service mais c'est la sortie 2 qui fournie OUTPUT COMPARE B du timer 3.

Si tu utilises mon code sans le changer, tu es sur le timer 1 (a peu pres équivalent au timer 3 à peu de choses pres sur un Mega) donc OUTPUT COMPARE B du timer 1 présente sur la sortie 12

Pin mapping MEGA

133
Je corrige : R1 n'est pas dans le circuit de sortie...mal lu le tracé....mais ça ne change pas ma question...bien qu'à priori ce diviseur serve à reproduire la mesure de la tension d'alimentation qu'on a sur les circuits MAX 471 ?

Autre question plus "sur le geste" : quelques conseils pour la soudure des traversants soudés de part et d'autre ? Comme le condo électro chimique ici ?

134
@MSport : sur les photos de tes circuits à base de 472 il y a, si je ne m'abuse, deux résistances de 10 k qui ne sont pas reprises dans la nomenclature.

L'une pour fixer je crois le courant de la LED témoins de marche, à priori R2...bon celle là je peux m'en passer vu que je ne monte pas la LED pour mes tests.

L'autre est au dos, dans le circuit de sortie vers la pin sérigraphiée I (donc à inverser puisqu'il y a une sérigraphie inversée) serait il me semble R1 du pont diviseur de sortie. Donc pas négociable.

Tu me confirmes ? En CMS je n'en ai pas donc juste pour savoir si j'en commande ou si je peux m'arranger...

135
Bon un truc qui me semble hyper important...

Sur mon montage, si je me contente d'alimenter l'arduino par le port USB j'ai très peu de résultats de lecture fiables.
En revanche, en alimentant l'Arduino par un convertisseur DC/DC réglé sur 5V alimenté par la meme source que la carte moteur, je passe à un taux de succès très élevé...

Pages: 1 ... 7 8 [9] 10 11 ... 14