aide en programmation testeur de court-circuit et pinnage

bonjour, à tous !

je suis une étudiante en électronique et c'est dans le cadre de mon projet de fin d'études que on ma parler des forum qui jusque là !

je ne connaissais pas encore l'utilité . Aujourd’hui en lissant tous ce qui ci trouve , je crois que oui! je comprend enfin l'utilité et je pense que vous pourriez m'aidez.

En effet, pour mon projet , je suis charger de réaliser un appareil qui pourra tester la continuité entre l'entrée mâle et la sortie femelle des multicables audio , je dois aussi testé la possibilité de court-circuit entre les nombreuses pins de mon câbles et enfin, tester la possibilité de croisement dans une paire ( POINT CHAUD, POINT FROID, MASSE) dans un câble.

Cependant, j'ai réussit a réaliser le premier teste qui est celui de la continuité à l'aide de ll'arduino uno328 et les multiplexeurs 4051 et maintenant il me reste les deux autres testes.

J'aimerai vraiment que quelqu'un m'aide dans la programmation.

car , c'est là où je rencontre des problèmes.

Merci, d'avance !

Très vague tout ça.

Aider à la programmation oui il y a des grandes compétences sur ce forum (je ne parle pas de moi), fournir un programme tout fait ce n'est pas le genre de la maison.

Mais que faut-il programmer ?
Quel est ton cahier des charges ? Je pense que tu as déjà fait un schéma de principe, quel est-il ?
Tu parles de multicâbles audio c'est qu'il y a plusieurs câbles mais combien au min et au max ? Ce point doit être connu pour dimensionner l'outillage de test.
Un projet ne marche jamais comme sur le papier mais la phase papier est obligatoire pour éliminer des fausses solutions, choisir celle qui a le plus de chances d'aboutir et définir le matériel à approvisionner point important pour un projet de fin d'étude où le temps est compté.

PS : Ici un jour ou l'autre tout le monde fait des fotes d'ortograf mais mettre en service le correcteur du navigateur permet d'en éliminer beaucoup, appuyer sur le bouton "preview" permet aussi de voir le texte sous la présentation définitive où bizarrement les fautes sautent au visage. Si le lecteur est obligé de déchiffrer il se lasse et ne lit pas, penses s'y si tu ne veux pas handicaper ta future carrière.

Cependant, j'ai réussit a réaliser le premier test qui est celui de la continuité à l'aide de l'arduino uno328 et les multiplexeurs 4051 et maintenant il me reste les deux autres tests

Donc il faudrait que tu nous donnes le schéma de la partie qui existe déjà pour voir si partant de là il y a moyen de développer les tests suivants.
Comme le dit 68tjs on ne va pas te faire ton programme (cela ne t'apprendrait rien où serait l'intérêt) mais par contre on pourra t'aider à faire un organigramme pour que tu codes tes tests et ensuite on pourra te guider pendant le codage et la mise au point. D'ailleurs si tu as déjà la continuité (et qu'elle fonctionne :wink: ) je pense que le plus dur est fait les autres tests découlant plus ou moins du premier

bonjour, :frowning:

c'est toujours dans l'attente d'une suite favorable a mes questions que j'envois ce schéma qui présente un petit aperçu de ce que je dois pouvoir faire .

merci!

Ok cela va nous permettre d'avancer.

Bonjour, a tous et merci! pour vos remarques et vos conseils .

Cependant, voici le schéma du câblage du testeur de continuité et le code source.

byte A = 2;
byte B = 3;
byte C = 4;
byte Z1 = 0;
byte Z2 = 0;
byte Z3= 0;
int val1=0;
int val2=0;
int val3=0;

byte count;
int T[8];
byte count1;
int T1[8];
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);


void setup(){

        pinMode(A, OUTPUT);    // s0
        pinMode(B, OUTPUT);    // s1
        pinMode(C, OUTPUT);    // s2

        Serial.begin(9600);
        
         
}

void loop () {

        digitalWrite(A, count & B00000001);

        digitalWrite(B, (count & B00000010) << 1);

        digitalWrite(C, (count & B00000100) << 2);

        int val1 = analogRead(Z1);

        if ( T[count] != val1) {
                T[count] = val1;
                    lcd.begin(16, 2);
             // Print a message to the LCD.
             lcd.print(count,DEC); 
             lcd.print(":");
             lcd.print(val1);
             
                Serial.print(count,DEC);
                Serial.print(val1);
                Serial.println();
        }

        count = (count+1) % 8;

        delay (500);
        
         Serial.print(" ");
        
        digitalWrite(A, count1 & B00000001);

        digitalWrite(B, (count1 & B00000010) << 1);

        digitalWrite(C, (count1 & B00000100) << 2);

        int val2 = analogRead(Z2);

        if ( T1[count1] != val2) {
                T1[count1] = val2;
                    lcd.begin(16, 2);
             // Print a message to the LCD.
             lcd.print(count1,DEC); 
             lcd.print(":");
             lcd.print(val2);
             
                Serial.print(count1,DEC);
                Serial.print(val2);
                Serial.println();
        }

        count1 = (count1+1) % 8;

        delay (500);
        
        
          Serial.print(" multiplexeur 3");
          
           digitalWrite(A, count & B00000001);

        digitalWrite(B, (count & B00000010) << 1);

        digitalWrite(C, (count & B00000100) << 2);

        int val3 = analogRead(Z3);

        if ( T[count] != val3) {
                T[count] = val3;
                    lcd.begin(16, 2);
             // Print a message to the LCD.
             lcd.print(count,DEC); 
             lcd.print(":");
             lcd.print(val3);
             
                Serial.print(count,DEC);
                Serial.print(val3);
                Serial.println();
               
        }

        count = (count+1) % 8;

        delay (500);
        
        
 if ( val1<1000 ||  val2<1000 || val2<1000) { lcd.print (count);
                                              lcd.print (" coupure"); }  
                                           
if ( val1>1000 ||  val2>1000 || val2>1000) { lcd.print (count);
                                             lcd.print (" coupure"); }                                                  

}

Edit de Jean-François : mettre le code entre les balises

J'ai par le passé encadré des stagiaires BTS ou DUT aussi je vais me comporter comme avec eux et non pas comme avec quelqu'un qui aurait de la bonne volonté et l'envie d'apprendre mais aucune connaissance en électronique ou en informatique.

J'ai quelques questions d'ordre général.
Tu as fourni un schéma de câblage, c'est celui dans lequel tu baignes parce que tu as la tête dans le guidon mais un schéma synoptique pour commencer aurait été plus compréhensible. Penses que si ton maître de projet aura une bonne connaissance de ton travail tu auras aussi des examinateurs qui n'auront eu que quelques dizaines de minutes pour prendre connaissance de ton projet. S'ils sont obligés de chercher cela ne les mettra pas dans de bonne dispositions à ton égard.

Pour tester la continuité tu utilises des interrupteurs analogiques bidirectionnels de la série 4051.
Ces interrupteurs présentent une résistance résiduelle sous 5V de 120 à 500 ohms pour Fairchild et jusqu'à 2500 ohms pour NXP (ex Philips), cela risque-t-il de te poser problème ?
As tu besoin de la bidirectionalité ?
Un simple multipleur digital n'aurait-il pas suffit pour tester une continuité ?
Attention je ne dit pas que ton choix n'est pas bon et je ne demande pas de justification, je me met simplement à la place d'un examinateur qui tient à s'assurer que le sujet est maîtrisé.

Maintenant que tu as vu que tu pouvais programmer l'arduino et que les circuits répondaient correctement il te faut absolument définir quelle opérations tu doit faire et dans quel ordre.
-Combien de câbles à tester dans le multicâble ?
-Quels tests sont à faire ?
-Dans quel ordre faire les tests ?
Exemple pris au hasard : tu nous as dit que c'étaient des multicâbles, imaginons que tu ais une mesure de qualité individuelle câble par câble. Il ne faut pas commencer par cette mesure câble par cable mais rechercher en premier lieu les défauts rédhibitoires sur l'ensemble du multicâble afin d'éliminer les câbles foireux et ensuite ne passer aux mesures de précision que sur les câbles utilisables.

Ce type de réflexion va te définir un ordonnancement des opérations et donc l'architecture du programme.

Bon courage.

Je pense qu'il y a un petit problème dans cette partie de code

        digitalWrite(A, count & B00000001);

        digitalWrite(B, (count & B00000010) << 1);

        digitalWrite(C, (count & B00000100) << 2);

Tu cherches à placer le bit de poids faible de count sur la pin A, le bit suivant sur la pin B, le troisième sur la pin C.
Tu appliques un masque pour isoler le bit qui t'intéresse et ensuite tu fais un décalage pour aligner ce bit sur le poids faible (pour avoir au final 0 ou 1). Enfin du moins je suppose que c'est ce que tu as voulu faire. Car en fait le décalage est appliqué dans le mauvais sens.

<< décalage à gauche

décalage à droite

Le code correct serait plutôt ça:

        digitalWrite(A, count & B00000001);

        digitalWrite(B, (count & B00000010) >> 1);

        digitalWrite(C, (count & B00000100) >> 2);

Je suis d'accord avec 68tjs, un petit synoptique et une explication sur le montage aurait été un plus. On voit bien que tu utilises des multiplexeurs et un arduino. Mais par exemple on ne voit pas très bien où tu vas placer le cordon en cours de test et comment tu comptes faire le test.

Avant de réaliser une carte et un logiciel, il faut faire quelques synoptiques et organigrammes cela permet d'avoir une vue plus synthétique de l'ensemble et de mieux appréhender le fonctionnement.

Bonsoir, à tous !

mon idée sur le teste de croisement possible des pin d'une même paire, serai d'envoyer des codes binaires dans chaque paires et de vérifier si

j'obtient bien le même code sur la paire, dans le cas contraire mon microcontroleur pourras commander à mon LCD, d'afficher :" PAIRE 1

problème" .ainsi l'utilisateur pourras aller vérifier le pinnage de la paire 1

j' ai vraiment beaucoup d'idée , mais , j'aimerai qu'on m'aide à choisir les bon composants et aussi dans la programmation.

Merci! de me dire ce que vous en pensez !

merci, Fdufnews

je vais essayé avec cette partie que tu a corriger .

Cependant, je suis ouverte a toutes autres proposition car, je ne suis pas un professionnelle de la programmation !

pour le schéma synoptique je vous en fais une partie de celui -ci !

EXEMPLE DE SCHÉMA SYNOPTIQUE

bonjour,
quelqu'un peut-il m’expliquer ce code?
Car, je pense que ça pourras m'aider .

Merci d'avance!

/ / Mux_Shield_DigitalOut_Example
/ / Mux Shield | Mayhew Labs

/ *
Cet exemple montre comment afficher haute ou basse sur tous les 48 pins. Pour utiliser les broches analogiques que numériques, nous utilisons
numéros des broches 14-16 (au lieu de numéros analogiques 0-2).

Pour simplifier ce code en outre, on peut utiliser pour les boucles imbriquées ou des appels de fonction.

  • /

/ / Donner des noms pratiques pour les broches de commande

Define CONTROL0 5 / / MUX broche de commande 0 (S3 est connecté à Arduino broche 2)

Define Control1 4

Define Control2 3

Define Control3 2

void setup ()
{
/ / Définit les broches de commande MUX à la sortie
pinMode (CONTROL0, OUTPUT);
pinMode (Control1, OUTPUT);
pinMode (Control2, OUTPUT);
pinMode (Control3, OUTPUT);
}

void loop ()
{

/ / Comme tous les 3 multiplexeurs ont les mêmes broches de commande, le multiplexeur de données en ligne que nous voulons
/ / Parler devrait être réglé pour la sortie et les deux autres lignes de multiplexeur doit être être «contournée» par
/ / Fixer les repères d'entrée

/ / Activer la sortie numérique à la broche 14 (0 MUX) et éteindre les 2 autres broches de données du multiplexeur
pinMode (14, OUTPUT);
pinMode (15, INPUT);
pinMode (16, INPUT);

/ / Cette boucle for est utilisée pour faire défiler le premier multiplexeur
for (int i = 0; i <16; i + +)
{
/ / Les 4 commandes suivantes définir la logique correcte pour les broches de commande pour sélectionner l'entrée désirée

digitalWrite (CONTROL0, (i & 15) >> 3); / / S3
digitalWrite (Control1, (i & 7) >> 2); / / S2
digitalWrite (Control2, (i & 3) >> 1); / / S1
digitalWrite (Control3, (i & 1)); / / S0

digitalWrite (14, HIGH);
retard (100);
digitalWrite (14, LOW);
retard (100);
}

/ / Activer la sortie numérique à broche 15 (1 MUX) et éteindre les 2 autres broches de données du multiplexeur
pinMode (14, INPUT);
pinMode (15, OUTPUT);
pinMode (16, INPUT);

/ / Cette boucle for est utilisée pour faire défiler la deuxième multiplexeur
for (int i = 0; i <16; i + +)
{
digitalWrite (CONTROL0, (i & 15) >> 3); / / S3
digitalWrite (Control1, (i & 7) >> 2); / / S2
digitalWrite (Control2, (i & 3) >> 1); / / S1
digitalWrite (Control3, (i & 1)); / / S0

digitalWrite (15, HIGH);
retard (100);
digitalWrite (15, LOW);
retard (100);
}

/ / Activer la sortie numérique à la broche 16 (MUX 2) et éteindre les 2 autres broches de données du multiplexeur
pinMode (14, INPUT);
pinMode (15, INPUT);
pinMode (16, OUTPUT);

/ / Cette boucle for est utilisée pour faire défiler la troisième multiplexeur
for (int i = 0; i <16; i + +)
{
digitalWrite (CONTROL0, (i & 15) >> 3); / / S3
digitalWrite (Control1, (i & 7) >> 2); / / S2
digitalWrite (Control2, (i & 3) >> 1); / / S1
digitalWrite (Control3, (i & 1)); / / S0

digitalWrite (16, HIGH);
retard (100);
digitalWrite (16, LOW);
retard (100);
}
}

Lorsque tu postes du code il faut utiliser les balises code (le bouton avec l'icone # ). Le code doit être placé entre les 2 balises.

OKAY! merci pour le conseil

/ / Mux_Shield_DigitalOut_Example
/ / Http://mayhewlabs.com/arduino-mux-shield

/ *
Cet exemple montre comment afficher haute ou basse sur tous les 48 pins. Pour utiliser les broches analogiques que numériques, nous utilisons
numéros des broches 14-16 (au lieu de numéros analogiques 0-2). 

Pour simplifier ce code en outre, on peut utiliser pour les boucles imbriquées ou des appels de fonction.
* /

/ / Donner des noms pratiques pour les broches de commande
# Define CONTROL0 5 / / MUX broche de commande 0 (S3 est connecté à Arduino broche 2)
# Define Control1 4
# Define Control2 3
# Define Control3 2

void setup ()
{
  / / Définit les broches de commande MUX à la sortie
  pinMode (CONTROL0, OUTPUT);
  pinMode (Control1, OUTPUT);
  pinMode (Control2, OUTPUT);
  pinMode (Control3, OUTPUT);
}
  

void loop ()
{

  / / Comme tous les 3 multiplexeurs ont les mêmes broches de commande, le multiplexeur de données en ligne que nous voulons 
  / / Parler devrait être réglé pour la sortie et les deux autres lignes de multiplexeur doit être être «contournée» par 
  / / Fixer les repères d'entrée
    
  / / Activer la sortie numérique à la broche 14 (0 MUX) et éteindre les 2 autres broches de données du multiplexeur
  pinMode (14, OUTPUT);
  pinMode (15, INPUT);
  pinMode (16, INPUT);
    
  / / Cette boucle for est utilisée pour faire défiler le premier multiplexeur
  for (int i = 0; i <16; i + +)
  {    
    / / Les 4 commandes suivantes définir la logique correcte pour les broches de commande pour sélectionner l'entrée désirée
    / / Voir le bit à bit ET Arduino Référence: http://www.arduino.cc/en/Reference/BitwiseAnd
    / / Voir le Guide de référence Bitshift Aruino: http://www.arduino.cc/en/Reference/Bitshift
    digitalWrite (CONTROL0, (i & 15) >> 3); / / S3
    digitalWrite (Control1, (i & 7) >> 2); / / S2
    digitalWrite (Control2, (i & 3) >> 1); / / S1
    digitalWrite (Control3, (i & 1)); / / S0
    
    digitalWrite (14, HIGH);
    retard (100);
    digitalWrite (14, LOW);
    retard (100);
  }
  
  / / Activer la sortie numérique à broche 15 (1 MUX) et éteindre les 2 autres broches de données du multiplexeur
  pinMode (14, INPUT);
  pinMode (15, OUTPUT);
  pinMode (16, INPUT);
  
  / / Cette boucle for est utilisée pour faire défiler la deuxième multiplexeur
  for (int i = 0; i <16; i + +)
  {
    digitalWrite (CONTROL0, (i & 15) >> 3); / / S3
    digitalWrite (Control1, (i & 7) >> 2); / / S2
    digitalWrite (Control2, (i & 3) >> 1); / / S1
    digitalWrite (Control3, (i & 1)); / / S0
    
    digitalWrite (15, HIGH);
    retard (100);
    digitalWrite (15, LOW);
    retard (100);
  }
  
  / / Activer la sortie numérique à la broche 16 (MUX 2) et éteindre les 2 autres broches de données du multiplexeur
  pinMode (14, INPUT);
  pinMode (15, INPUT);
  pinMode (16, OUTPUT);
  
  / / Cette boucle for est utilisée pour faire défiler la troisième multiplexeur
  for (int i = 0; i <16; i + +)
  {
    digitalWrite (CONTROL0, (i & 15) >> 3); / / S3
    digitalWrite (Control1, (i & 7) >> 2); / / S2
    digitalWrite (Control2, (i & 3) >> 1); / / S1
    digitalWrite (Control3, (i & 1)); / / S0
    
    digitalWrite (16, HIGH);
    retard (100);
    digitalWrite (16, LOW);
    retard (100);
  }
}[code]

[/code]

Ne le prend pas mal mais je pense que tu prends le problème à l'envers.
Avant d'essayer de comprendre des bouts de code mal traduits avec google translate, tu ferais mieux d'écrire ce que tu veux faire.
Pour chaque test:
qu'est-ce que tu cherches à savoir
comment l'obtenir
en déduire toutes les étapes du test à dérouler
envisager les résultats que tu peux obtenir suivant que le câble et bon ou non. Et surtout bien appréhender comment tu pourras déduire les erreurs que tu cherches des résultats de tes tests.

Une fois que tu as fais cela pour les trois tests que tu envisages:
faire une synthèse des tests
voir si tu peux utiliser le même hardware pour les 3 tests

Une fois que tu auras fait ça tu pourras commencer à coder.

MERCI!

rassure toi , je suis entrain d'apprendre donc , je suis soumisse à toute proposition .

Je ne suis pas une pro de la programmation , et aussi concernant le hardware que je pourrais utiliser je suis ouverte à toutes propositions , car je n'est pas beaucoup d’expérience dans ce domaine . C'est mon premier stage et ma première expérience

Pour mon teste de la continuité j'ai opté pour un multiplexeur analogique 4051

Je n'ai rien à ajouter aux conseils de fdufnews, je les partage intégralement.
Ne cherches surtout pas un code qui "tombe en marche".
Défini bien tout ce dont tu as besoin et tout ce que tu dois faire.

Tu ne nous as toujours pas dit comment était constitué ton multicable audio.
Chaque fil est-il blindé individuellement ?
Le fil aller et le fil retour (chacun blindé ou pas) sont-il dans un blindage à leur tour ?
Le multicable contient combien de câbles élémentaires ?

Est-ce que les tests que tu dois faire sont en tout ou rien : ça conduit ou ça conduit pas (Go/NoGo) ou faut-il quantifier un paramètre ?
Tu parles d'envoyer une séquence dans le fil en test, quel est l'intérêt ? Une séquence sous entend une réponse fréquentielle, est-ce bien ce que tu dois faire ? Si un simple test continu suffit le programme sera simplifié.

Il y a une vingtaine d'année j'ai partagé un bureau avec un chef de groupe informatique. Je ne comprenais rien à ce qu'il faisait mais j'ai été surpris de voir que lui et son groupe passaient plus de temps à écrire de longs textes en français décrivant le programme qu'à la programmation proprement dite.
Dans ton cas c'est pareil : si toutes les hypothèses et demandes sont correctements identifiées et couchées sur le papier la programmation ne posera pas de soucis.

Pour mon teste de la continuité j'ai opté pour un multiplexeur analogique 4051

OK ça on a compris.

Mais on ne sait pas comment tu veux l'utiliser. Comment veux-tu conduire le test pour t'assurer que les liaisons sont bonnes et qu'il n'y a ni coupure, ni court-circuit, ni croisement?

Décris nous le déroulement des tests pour que l'on puisse t'aider.
Un programme ça commence par une analyse du besoin suivi d'une description des tâches à réaliser.
Une fois les tâches clairement posées, on peut commencer à coder. De ce bon découpage à l'origine va en découler un programme claire, simple et facile à faire évoluer et à mettre au point.
Chaque tâche devient une fonction dans le programme.
Chaque tâche se découpe, elle même, en d'autre sous-tâches qui vont donner d'autres fonctions.
Jusqu'à ce que l'on arrive aux fonctions de bas niveau celles qui vont adresser directement le matériel.

Toutes ces étapes s'écrivent en français et sont totalement indépendantes du langage de programmation que tu vas utiliser.
Tu les écris, dans l'ordre où elles se déroulent. Tu en déduis les traitements répétitifs qui vont donner lieu à des boucles dans ton programme.
Une fois que tu as tout écrit, tu suis le déroulement à la main de toutes les étapes en imaginant ce qui va se passer si le câble en test en bon ou non. Et tu vois si c'est bien ce que tu voulais obtenir.
Et là tu peut commencer à coder.

Bonjour, fdufnews

moi je pensais , comme je l'avais dit précédemment pourvoir identifié chacune de mes paires par des codes binaires différents que je dois envoyer de l'entrer mâle et à la sortit femelle je dois récupérer le même code dans le cas contraire , mon code en question auras trois possibilité vue que le croisement dans une paire n'offre que trois possibilité que sont par exemple:

si je prends les câbles soc apex 37 PINS dont les pinnage possible sont :

donc j'envois un code par exemple pour la première paire : 101 si j'ai 110 alors, il y a croisement entre la pin 2 et 3
si j'ai 011 alors, il y a croisement entre la pin 1 et pin 2

c'est vrai que je ne pourrais pas observer le croisement entre pin 1 et pin3 . mais, bon! je crois que je m’arrêterai là!

numérisation0003.pdf (891 KB)

Il faut que tu puisses tester des câbles avec 37 points?