Go Down

Topic: aide en programmation testeur de court-circuit et pinnage (Read 8 times) previous topic - next topic

mathy

     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 !




68tjs

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.

fdufnews

Quote
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 ;) ) je pense que le plus dur est fait les autres tests découlant plus ou moins du premier

mathy

bonjour,  :(

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!

fdufnews

#4
Apr 07, 2012, 12:06 am Last Edit: Apr 07, 2012, 04:18 am by Jean-François Reason: 1
Ok cela va nous permettre d'avancer.

mathy

#5
Apr 07, 2012, 01:44 pm Last Edit: Apr 07, 2012, 01:51 pm by Jean-François Reason: 1
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.

Code: [Select]

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

68tjs

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.



fdufnews

#7
Apr 07, 2012, 06:55 pm Last Edit: Apr 07, 2012, 07:11 pm by fdufnews Reason: 1
Je pense qu'il y a un petit problème dans cette partie de code
Code: [Select]
       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:
Code: [Select]
       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.

mathy

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 !

mathy

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 !

mathy

     EXEMPLE DE SCHÉMA SYNOPTIQUE

mathy

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

Merci d'avance!

/ / 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
   
    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);
  }
}

fdufnews

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.

mathy

OKAY! merci pour le conseil 
Code: [Select]
/ / 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]

fdufnews

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.

Go Up