Go Down

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

mathy

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!

fdufnews

Quote
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.

Artouste

bonjour
comme expliqué ici ou ailleurs  :smiley-mr-green:
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" ?   :smiley-roll: ) , il doit bien être figé ? avec ses contraintes listées et/ou deduites ?


mathy


mathy

bonjour  à tous !

voici mon cahier des charges.


mathy

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

voici mon code
Code: [Select]
#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 .

fdufnews

Faudrait jeter un coup d'oeil à la doc quand même http://arduino.cc/en/Reference/Wire.
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.


mathy

VOICI MON teste de continuité
Code: [Select]
#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 !

fdufnews

Code: [Select]
// 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.

Code: [Select]
if (a!=0 || b!=0)

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

mathy

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!



mathy

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

albertrand

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.
« Ungibus et Rostro » (De bec et d'ongles)

mathy

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  :( 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 .

mathy

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
Code: [Select]


#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();
 
}




Go Up