aide en programmation testeur de court-circuit et pinnage

skywodd

me proposait pour les risques de court-circuit, d'envoyer du 5V sur une des pins et tester si j'ai du 5V sur les autre pins

si c'est le cas , alors c'est qu'il y a court-circuit!

j'ai eu à utiliser des registre a décalage , et même le multiplexeur 4051 pour le teste de court-circuit

le soucis ici est mon nombres limité de pins sur mon ATMEGA 328 .

et concernant le registre à décalage c'était un 74HC595N

bonsoir
je prend en cours de route, mais j'ai lu les messages jusqu'ici
in fine cela consiste à verifier si un motif de cablage est conforme en continuité electrique
il "suffit" d'ecrire dans un tableau X/Y avec comme valeur 0 pas de continuité, 1 pas de continuité.

pour la discussion, la facilité et compte tenu du dimensionnement, je partirais sur un tableau X/Y de 96X96

pour l'injection je suis partisan comme fdufnews de l'utilisation de registre à decalage cascadables
pour le scan je me tournerais vers des demux CD4067 (16 sorties) 96 adresses peuvent etre commandées par 24 bits, directement avec 3 ports 8bits ou pourquoi pas aussi avec des registres à decalage pour l'adressage.

sauf gros plantage de ma part (je rentre de WE :grin: )
la durée de verification totale du motif est fonction du delay mini d'adressage et de lecture par l'arduino.
en mettant ça à 5µs le pas , ça doit tourner aux alentours de 50 ms (~ 10000 X 5µs) et meme avec un facteur 50 pour la durée du test ce n'est pas rédhibitoire.

Bonjour,

merci pour vos idées . si je comprends bien vous me demander de d'utiliser des registres a décalage pour le teste de continuité et d'utiliser les multiplexeurs / démultiplexeurs 4067 pour le teste de risque possible de croisement entre les pins d'une même paire?

et le multiplexeur / démultiplexeur 4051 alors ?

Cependant, j'ai déjà ces composants et sauf le 4067 que je n'est pas , mais à la place j'avais prix le 4051 pour une question de budget .

Par ailleurs, le problème comme je l'explique depuis le début est que je ne dois pas mettre une carte arduino entière dans mon projet je l'utilise juste pour mes testes sur breadbord , dans la réalisation de ma carte complet j'utiliserai juste l'atmega 328 qui est celui de mon arduino .

Mon principal problème est la programmation , j'ai pas énormément d'expérience comme beaucoup d'entre vous dans ce domaine sinon je ne vous embêterai pas .

Merci!

si je comprends bien vous me demandez d'utiliser des registres a décalage pour le test de continuité et d'utiliser les multiplexeurs / démultiplexeurs 4067 pour le test de risque possible de croisement entre les pins d'une même paire

Non on ne te demande rien on te donne des pistes. A toi de faire ton choix en fonction de tes impératifs.
On peut utiliser indifféremment des multiplexeurs ou des registres à décalage pour ce genre de fonctions.

Le multiplexeur est plus rapide, tu choisis directement la sortie que tu veux voir on positionnant les bits de sélection mais par contre il faut plusieurs broches pour sélectionner les voies et assez rapidement avec des plateformes comme l'arduino on se trouve à court de broches si on veut piloter séparément des multiplexeurs sur les entrées et les sorties (ce qui est nécessaire pour tester les courts-circuits et les croisements)

Le registre à décalage est plus lent puisqu'il faut générer autant de coups d'horloge que la longueur du registre. Mais, en contre partie, il suffit de 3 ou 4 broches par registres quelle que soit sa longueur. Et il est facilement extensible on ajoute un registre à la suite des précédents sans rien changer d'autre au hardware (et sans consommer de broches supplémentaires)

Maintenant la balle est dans ton camp tu évalues ton besoin, ton budget et tu fais ton choix.

bonjour
comme expliqué ici ou ailleurs :grin:
Ici on te donne des pistes, j'ai evoqué des 4067 mais si tu a des 4051 , c'est kif-kif fonctionnellement au moins pour la fonction mux/demux.
il te faut déjà poser correctement sur papier les fonctions à dérouler en fonction du "cahier des charges" , d'ailleurs "ce cahier des charges" si c'est pour un projet de fin d’étude (à rendre pour cette fin d'année "scolaire" ? :roll_eyes: ) , il doit bien être figé ? avec ses contraintes listées et/ou deduites ?

voici mon cahier des charges
merci!

Cahier des charges.doc (297 KB)

bonjour à tous !

voici mon cahier des charges.

Cahier des charges.doc (298 KB)

bonsoir! à tous j'ai besoin d'aide s'ilvouplait!

voici mon code

#include "Wire.h"
#include <LiquidCrystal.h>

#define win1 0x20 // expandeur envoyeur

#define win2 0x22 //expandeur envoyeur

#define win3 0x21 //expandeur  envoyeur

#define win4 0x23 //expandeur  envoyeur

#define win5 0x24 //expandeur receveur

#define win6 0x25 // expandeur  receveur

#define win7 0x26 //expandeur  receveur

#define win8 0x27 //expandeur receveur


int dd=200; 
int val= 0;
int val1=0;
//int valwin2=255;

byte a,c,d,e,f,g,h,j;
byte b;

int z;
int T[8];



// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


 void setup() {

Wire.begin();

Serial.begin(9600);
lcd.begin(16, 2);
  // Print a message to the LCD.
lcd.print(" court-circuit test");

 //allOff(); // les valeurs par défaut PCF8574N à élevé, de sorte cette fonction désactive toutes les sorties hors

}


void testfunc ( )

{


 Serial.println ();
Wire.beginTransmission(win1);
Wire.send(0x02);
Wire.endTransmission();
delay(2000);
Wire.requestFrom(win3, 7);
a = Wire.receive(); 
b = Wire.receive ();
c = Wire.receive ();
d = Wire.receive ();
e = Wire.receive ();
f = Wire.receive ();
g = Wire.receive ();
h = Wire.receive ();
Serial.println(); 
Serial.print ("RECEVOIR 1-"); 
Serial.print(a,DEC);
Serial.print(b,DEC);
Serial.print(c,DEC);
Serial.print(d,DEC);
Serial.print(e,DEC);
Serial.print(f,DEC);
Serial.print(g,DEC);
Serial.print(h,DEC);


}
void testfunc2()

{  


  
if (a!=2)
{  lcd.begin(16, 2);
  // Print a message to the LCD.
   lcd.print("coupure ");
  //Serial.print("coupure");
}


}


 
void allOff()

{

Wire.beginTransmission(win1);
Wire.send(255);
Wire.endTransmission();
Wire.beginTransmission(win2);
Wire.send(255);
Wire.endTransmission();
//Wire.beginTransmission(win3);
//Wire.send(255);
//Wire.endTransmission();
//Wire.beginTransmission(win4);
//Wire.send(255);
//Wire.endTransmission();

}
void loop()

{

for (int z=0; z<10; z++)

{

testfunc();

}

for (int z=0; z<10; z++)

{

testfunc2();

}

}

j'aimerai avec celui -ci effectuer mon teste de risque de court-circuit j'envois un état haut sur une broche de mon PCF8574 de nom de " win1" et je veux lire si j'ai cet état haut la se trouve aussi sur une des autres broches du PCF8574.qui normalement devais être à zéro

mais, j'arrive pas !

Merci ! de m'aider .

Faudrait jeter un coup d'oeil à la doc quand même Wire - Arduino Reference.
Il n'y a pas de méthode receive() associée à la classe Wire.
Après tu demandes la lecture de 7 octets dans win3 mais de ce que j'ai vu dans la doc du composant il n'y a qu'un octet à lire donc je ne vois pas l'intérêt.
Ensuite si on suit la doc, il faut utiliser la méthode available() pour voir s'il y a des octets à lire avec read().
Maintenant je ne peux pas t'aider plus je n'ai jamais utilisé la librairie Wire.

ok ! merci!

VOICI MON teste de continuité

#include "Wire.h"
#include <LiquidCrystal.h>

#define win1 0x20 // expandeur envoyeur

#define win2 0x22 //expandeur envoyeur

#define win3 0x21 //expandeur  envoyeur

#define win4 0x23 //expandeur  envoyeur

#define win5 0x24 //expandeur receveur

#define win6 0x25 // expandeur  receveur

#define win7 0x26 //expandeur  receveur

#define win8 0x27 //expandeur receveur


int dd=200; 
int val= 0;
int val1=0;
//int valwin2=255;

byte a;
byte b;
byte count;
int z;
int T[8];



// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


 void setup() {

Wire.begin();

Serial.begin(9600);
lcd.begin(16, 2);
  // Print a message to the LCD.
 
lcd.print(" test continuite");
//lcd.rightToLeft();

 //allOff(); // les valeurs par défaut PCF8574N à élevé, de sorte cette fonction désactive toutes les sorties hors

}

void testfunc2()

{  

for (int y=1; y<9; y ++)

{
   Serial.println ();
// mettre toutes les broches de win1 a l'état haut 
Wire.beginTransmission(win1);
Wire.send(val);
Wire.endTransmission();

// Lecture des valeurs 
Wire.requestFrom(win3, 1);
a = Wire.receive(); 
Serial.println(); 
Serial.print ("RECEVOIR 1-"); 
Serial.print(a,DEC);
delay(dd+500);


if (a!=0 || b!=0)
{   
   //lcd.begin(16, 2);
  lcd.print("pin");
  lcd.print(y);
  delay(200);
  lcd.print("coupure ");
  Serial.print (" pin");
  Serial.print(y);
   delay(200);
  Serial.print("coupure ");
}
for (int y=9; y<16; y ++)
{
  
// mettre toutes les broches de win2 a l'état haut 
Wire.beginTransmission(win2);
Wire.send(val);
Wire.endTransmission();
delay(dd+500);

// Lecture des valeurs 
Wire.requestFrom(win4, 1);
b = Wire.receive(); 
Serial.print ("RECEVOIR 2-"); 
Serial.print(b,BIN);
delay(dd+50);
//afficher la pin d'éffectueuse 
if (a!=0 || b!=0)
{ 

 Serial.print (" pin");
  Serial.print(y);
   delay(200);
  Serial.print("coupure ");
}  
}
}
for (int y=16; y<25; y ++)
{
  
   
// mettre toutes les broches de win2 a l'état haut 
Wire.beginTransmission(win);
Wire.send(val);
Wire.endTransmission();
delay(dd+500);

// Lecture des valeurs 
Wire.requestFrom(win4, 1);
c = Wire.receive(); 
Serial.print ("RECEVOIR 3-"); 
Serial.print(  c,BIN);
delay(dd+50);
//afficher la pin d'éffectueuse 
if (a!=0 || b!=0|| c!=0)
{ 

 Serial.print (" pin");
  Serial.print(y);
   delay(200);
  Serial.print("coupure ");
}
}




 
//void allOff()
//{

//Wire.beginTransmission(win1);
//Wire.send(255);
//Wire.endTransmission();
//Wire.beginTransmission(win2);
//Wire.send(255);
//Wire.endTransmission();
//Wire.beginTransmission(win3);
//Wire.send(255);
//Wire.endTransmission();
//Wire.beginTransmission(win4);
//Wire.send(255);
//Wire.endTransmission();

//}
void loop()

{
  
//for (int positionCounter = 0; positionCounter <16; positionCounter++) {
    
   // lcd.scrollDisplayRight(); 
    
    //delay(20);
  
   //delay(1000);

{

testfunc2();

}

}

j'aimerai réunir mes boucles mes je pense que c'est pas possible .
Cependant j'aimerai avoir vos avis .

Merci !

// mettre toutes les broches de win1 a l'état haut 
Wire.beginTransmission(win1);
Wire.send(val);
Wire.endTransmission();

A cet endroit que vaut val???? Je serais étonné que val contienne 255. D'ailleurs ce groupe de lignes est répété un peu plus loin avec le même effet.

if (a!=0 || b!=0)

aïe, aïe aïe, b n'est pas initialisé dans cette partie de la fonction.

j'ai déclaré" val" en int dont je pars juste a chaque fois changer la valeur mais comme c'est mon teste de continuité; donc val =0

et a, b sont déclarer au début en byte se sont les valeurs respectives des régistres de mes PCF receveurs.

Cependant, avec ce programme je n'arrive pas à faire afficher " y" seul lorsque " a ou b" ne sont pas égale a zéro.

lorsque "a " est différent de zero, ou lorsque mes receveurs lisent une valeur différente de val ?
alors, ils doivent afficher la pin défectueuse.

Mon soucis, est qu'il le fait mais il se met a incrémenté Y pas la suite ;ce qui est normal vue mon code mais, j'aimerai savoir s'il peux juste m'afficher la valeur de la pin défectueuse et s’arrête .

J'ai pensé a créer une interruption pour ca .

Mais, je ne suis pas très professionnel en programmation .

Merci de m'aider!

bonjour, à tous !

quelqu'un peut -il m'aidé ?

je cherche un expandeur semblable au PCF8575C mais , avec une autre façon de l'adresser un peut comme le PCF8574N et le PCF8574AN .

Merci ! de m'aider

Tu recherche un expandeur semblable au PCF8575C, pour une question de support si cet cella moi j'utilise des PCA 9555n en support DIP .
Ce sons aussi des 16 In/Out Sur bus I2C.

BONJOUR à Tous ,

il y a quelque temps je me suis inscrite sur ce site pour avoir de l'aide sur mon projet de TFE .

et j'ai eu plusieurs proposition qui m'ont aider jusqu'ici . J'ai même eu a y laissé mon cahier des charges sur ce topic pour parler des différents teste que je devais réaliser .

Aujourd’hui encore je vous demande de l'aide :frowning: pour mon dernier teste qui est : le teste de risque de croisements entre les 3pins d'une même paire audio sur un multicables-audio .

par exemple : une paire est constituer de ABC le teste consiste a dire si A est reliée à B ou C est reliée à B .

j'utilise des pcf8574 OU PCF8575 et j'ai pensé que je pourrai envoyer le code binaire 101 et si j'ai 011 ou 100 alors A ou C touche B .

je ne sais pas si c'est correct comme idée ou initiative .

Merci à tous de vouloir m'aide .

Cahier des charges.doc (297 KB)

bonjour,

j'ai des doute :~ sur ce programme j'aimerai savoir s' il est fiable ou non?

dans ce programme j'écris dans certains PCF et je lis dans d'autres que j'ai appelé" receveurs" .

Merci de me dire , si du moins j'ai bien programmer

#include "Wire.h"
#include <LiquidCrystal.h>

#define win1 0x20 // expandeur envoyeur

#define win2 0x22 //expandeur envoyeur

#define win3 0x21 //expandeur  envoyeur

#define win4 0x23 //expandeur  envoyeur

#define win5 0x24 //expandeur receveur

#define win6 0x25 // expandeur  receveur

#define win7 0x26 //expandeur  receveur

#define win8 0x27 //expandeur receveur

int dd=200; 
int val= 0;
byte a,b,c;
byte count;
int state = LOW;



// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


 void setup() {

Wire.begin();

Serial.begin(9600);
lcd.begin(16, 2);
lcd.print(" test continuite");
//allOff(); // les valeurs par défaut PCF8574N à élevé, de sorte cette fonction désactive toutes les sorties hors


}

void testcontinu2()

{  

for (int y=1; y<9; y ++)

{
   Serial.println ();
// mettre toutes les broches de win1 a l'état haut 
Wire.beginTransmission(win1);
Wire.send(val);
Wire.endTransmission();

// Lecture des valeurs 
Wire.requestFrom(win3, 1);
a = Wire.receive(); 
Serial.println(); 
Serial.print ("RECEVOIR-"); 
Serial.print(a,DEC);
delay(dd+500);


if (a!=0 || b!=0)
{   
   //lcd.begin(16, 2);
  lcd.print("pin");
  lcd.print(y);
  delay(200);
  lcd.print("coupure ");
  Serial.print (" pin");
  Serial.print(y);
   delay(200);
  Serial.print("coupure ");
}
y=1;
}
for (int y=9; y<16; y ++)
{
  
// mettre toutes les broches de win2 a l'état haut 
Wire.beginTransmission(win2);
Wire.send(val);
Wire.endTransmission();
delay(dd+500);

// Lecture des valeurs 
Wire.requestFrom(win4, 1);
b = Wire.receive(); 
Serial.print ("RECEVOIR 2-"); 
Serial.print(b,BIN);
delay(dd+50);
//afficher la pin d'éffectueuse 
if (a!=0 || b!=0)
{ 

 Serial.print (" pin");
  Serial.print(y);
   delay(200);
  Serial.print("coupure ");
}  
}

for (int y=16; y<25; y ++)
{
  
   
// mettre toutes les broches de win2 a l'état haut 
Wire.beginTransmission(win5);
Wire.send(val);
Wire.endTransmission();
delay(dd+500);

// Lecture des valeurs 
Wire.requestFrom(win4, 1);
c = Wire.receive(); 
Serial.print ("RECEVOIR 3-"); 
Serial.print(  c,BIN);
delay(dd+50);
//afficher la pin d'éffectueuse 
if (a!=0 || b!=0|| c!=0)
{ 

 Serial.print (" pin");
  Serial.print(y);
   delay(200);
  Serial.print("coupure ");
}*/

}

 void loop()


{

  testcontinu2();
  
}

Ca commence mal

int val= 0;

// mettre toutes les broches de win1 a l'état haut 
Wire.beginTransmission(win1);
Wire.send(val);
Wire.endTransmission();

La première fois que tu passe ici, val vaut 0, donc tu met les broches .... à 0 :wink:

Et puis indente ton code comme il faut qu'on puisse le lire.
Ce qui permettra aussi de corriger les erreurs puisqu'il ne se compile pas.

b : même fautes : tu teste la valeur avant de l'avoir lue.

Donc non ce code n'est pas fiable.

Eh!! Mathy faut lire les réponses que l'on te fait. Je t'avais déjà mis sur cette piste il y a 2 semaines.