Go Down

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

nico34

#75
May 26, 2012, 07:47 pm Last Edit: May 26, 2012, 07:51 pm by nico34 Reason: 1
Retour du jardin

je pense qu'il veut dire qu'il n'en a pas reçu cette fois-ci.

vui c'est ce qu'il a voulu dire  :smiley-mr-green:
et j'ai bien clic sur notify (ouverture de Are you sure you wish to enable notification of new replies for this topic? et ok)

cela a des fois marché, des fois non, mais je ne saurais dire le % - je surveille pas beaucoup de sujets...mais je lis avec plaisir.
vos 2 réponses n'ont rien donné dans ma boite mel, un jour sans, probablement...

édit: un doute, une fois que l'on surveille, on a un mel à chaque nouvelle réponse, ou bien il faut faire un notify à chaque fois ?
dsl p't-être question de noob...

A plus

mathy

Bnjour , barbudor

quand, je compile le programme que voici il me met certaines érreurs
j'aimerai savoir pourquoi? svp!

Code: [Select]
#include <Wire.h>

// enlever le commentaire pour un PCF 16 bit
//#define PCF8575       1

#ifdef PCF8575
#define BITS_PER_CHIP 16
#else
#define BITS_PER_CHIP 8
#endif

#define NBCHIP_OUT    1
#define NBCHIP_IN     1

uint8_t AdrChipOut[NBCHIP_OUT] = { 0x20 };
uint8_t AdrChipIn[NBCHIP_IN]   = { 0x24 };

uint16_t MemChipOut[NBCHIP_OUT];
uint16_t ResChipIn[NBCHIP_IN];

void pcfWriteOutWord( uint8_t idOut, uint16_t val )
{
  MemChipOut[idOut] = val;
  Wire.beginTransmission(AdrChipOut[idOut]);
  Wire.write(val);
#ifdef PCF8575 
  Wire.write(val >> ;   
#endif
  Wire.endTransmission(); 
}

void pcfWriteInWord( uint8_t idIn, uint16_t val )
{
  Wire.beginTransmission(AdrChipIn[idIn]);
  Wire.write(val);
#ifdef PCF8575 
  Wire.write(val >> ;   
#endif
  Wire.endTransmission(); 
}

uint16_t pcfReadInWord( uint8_t idIn )
{
  uint16_t val;
  Wire.requestFrom( AdrChipIn[idIn], (uint8_t)(BITS_PER_CHIP/8) );
  val = Wire.read();
#ifdef PCF8575 
  val = (val <<  | Wire.read();
#endif
  return val;
}

void pcfWriteOutBit( uint8_t bit, uint8_t val )
{
  uint8_t idOut = bit / BITS_PER_CHIP;
  bit = bit & (BITS_PER_CHIP-1);

  if ( val )
    MemChipOut[idOut] |= _BV(bit);
   else
    MemChipOut[idOut] &= ~_BV(bit);
 
  Wire.beginTransmission(AdrChipOut[idOut]);
  Wire.write(MemChipOut[idOut]);
#ifdef PCF8575 
  Wire.write(MemChipOut[idOut] >> ;   
#endif
  Wire.endTransmission(); 
}



void setup()
{
  Serial.begin( 9600 );
  Wire.begin();
 
  // initialiser les Out à 1 :
  int id;
  for ( id = 0 ; id < NBCHIP_OUT ; ++id )
    pcfWriteOutWord( id, 0xFFFF );
  // initialiser les in à 1 (mode entrée)
  for ( id = 0 ; id < NBCHIP_OUT ; ++id )
    pcfWriteInWord( id, 0XFFFF );
}

void loop()
{
  int bit;
  int in;
  Serial.println( "--- Debut de test ------------------" );
 
  // On va tester en allumant tous les bits de sortie 1 par 1
  for ( bit = 0 ; bit < (NBCHIP_OUT * BITS_PER_CHIP) ; ++bit )
  {
    // Mettre le bit a 0
    pcfWriteOutBit( bit, 0 );
    // lisons les entrées
    for ( in = 0 ; in < NBCHIP_IN ; ++in )
      ResChipIn[in] = pcfReadInWord( in );
    // Mettre le bit a 1
    pcfWriteOutBit( bit, 1 );
     
    // Afficher le résultat
    Serial.print( "Bit#" );
    Serial.print( bit );
    Serial.print( " :" );
    for ( in = 0 ; in < NBCHIP_IN ; ++in )
    {
      Serial.print( " " );
      Serial.print( ResChipIn[in], BIN );
    }
    Serial.println();
  }
 
  delay( 5000 );
}

barbudor

Aucune erreur chez moi.
Je suis en IDE 1.0.x

En IDE 22 ou < il faut :
- remplacer les .write( .. ) par .send((uint8_t) ... );
- remplacer les .read() par .receive()

Mais le mieux est de passer à la dernière version.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

mathy

Okay! merci

je viens de télécharger la nouvelle version et ça compile bien !
maintenant, j' essaye de comprendre ce  code mais je n'arrive pas à cerné ce qu'il est sensé faire car, il y a pas assez de commentaire dedans

Merci!

barbudor

Y'a presque une ligne de commentaire par ligne de code ;)
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

mathy

oui mais je ne comprends toujours pas!

par exemple ce bout
Code: [Select]

#ifdef PCF8575
#define BITS_PER_CHIP 16
#else
#define BITS_PER_CHIP 16
#endif

#define NBCHIP_OUT    1
#define NBCHIP_IN     1

uint8_t AdrChipOut[NBCHIP_OUT] = { 0x20 }; // ardresse des PCF de sortie
uint8_t AdrChipIn[NBCHIP_IN]   = { 0x23};  // adresse des PCF d'entrée

uint16_t MemChipOut[NBCHIP_OUT];
uint16_t ResChipIn[NBCHIP_IN];

barbudor

Code: [Select]
#ifdef PCF8575
#define BITS_PER_CHIP 16
#else
#define BITS_PER_CHIP 16
#endif


Déjà tu as changé le code. A l'origine c'est :
Code: [Select]
// enlever le commentaire pour un PCF 16 bit
//#define PCF8575       1

#ifdef PCF8575
#define BITS_PER_CHIP 16
#else
#define BITS_PER_CHIP 8
#endif


J'ai fait le code et je l'ai testé avec un PCF8574 qui est 8 bit
Le but c'est que si le define au dessus est actif, le code est bon pour du PFC8574 qui est 16 Bits
Si le define est en commentaire (comme dans mon cas), le code est pour des PCF8574
Pour toi, il faut enlever le commentaire :

Code: [Select]
// enlever le commentaire pour un PCF 16 bit
#define PCF8575       1

#ifdef PCF8575
#define BITS_PER_CHIP 16
#else
#define BITS_PER_CHIP 8
#endif



Ensuite :

Code: [Select]
#define NBCHIP_OUT    1
#define NBCHIP_IN     1


Define qui définisse le nombre de chip d'entrée et le nombre de chip de sortie.
Moi j'en ai qu'un de chaque mais le code s'adapte automatiquement


Code: [Select]
uint8_t AdrChipOut[NBCHIP_OUT] = { 0x20 }; // ardresse des PCF de sortie
uint8_t AdrChipIn[NBCHIP_IN]   = { 0x23};  // adresse des PCF d'entrée


Adresses des chip de sortie et des chip d'entrée. J'en ai qu'un de chaque.


Code: [Select]
uint16_t MemChipOut[NBCHIP_OUT];
Tu as regardé le code de pcfWriteOutBit() et pcfWriteOutWord() ?
Ca sert a mémoriser la dernière valeur écrite dans chaque PCF de sortie.
Sinon, on la fonction pcfWriteOutBit() ne peut pas marcher.

Code: [Select]
uint16_t ResChipIn[NBCHIP_IN];

Tableau de mémorisation des résultats de lecture des PCF d'entrée.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

barbudor

Mathy

Le code a été abimé par l'utilisation de balise quote au lieu de code
Tous les "8 )" se sont transformés en smiley 8)
Voici le bon :

Code: [Select]
#include <Wire.h>

// enlever le commentaire pour un PCF 16 bit
//#define PCF8575       1

#ifdef PCF8575
#define BITS_PER_CHIP 16
#else
#define BITS_PER_CHIP 8
#endif

#define NBCHIP_OUT    1
#define NBCHIP_IN     1

uint8_t AdrChipOut[NBCHIP_OUT] = { 0x20 };
uint8_t AdrChipIn[NBCHIP_IN]   = { 0x24 };

uint16_t MemChipOut[NBCHIP_OUT];
uint16_t ResChipIn[NBCHIP_IN];

void pcfWriteOutWord( uint8_t idOut, uint16_t val )
{
  MemChipOut[idOut] = val;
  Wire.beginTransmission(AdrChipOut[idOut]);
  Wire.write(val);
#ifdef PCF8575 
  Wire.write( val >> 8 ) ;   
#endif
  Wire.endTransmission(); 
}

void pcfWriteInWord( uint8_t idIn, uint16_t val )
{
  Wire.beginTransmission(AdrChipIn[idIn]);
  Wire.write(val);
#ifdef PCF8575 
  Wire.write(val >> 8 ) ;   
#endif
  Wire.endTransmission(); 
}

uint16_t pcfReadInWord( uint8_t idIn )
{
  uint16_t val;
  Wire.requestFrom( AdrChipIn[idIn], (uint8_t)(BITS_PER_CHIP/8) );
  val = Wire.read();
#ifdef PCF8575 
  val = ( val << 8 ) | Wire.read();
#endif
  return val;
}

void pcfWriteOutBit( uint8_t bit, uint8_t val )
{
  uint8_t idOut = bit / BITS_PER_CHIP;
  bit = bit & (BITS_PER_CHIP-1);

  if ( val )
    MemChipOut[idOut] |= _BV(bit);
   else
    MemChipOut[idOut] &= ~_BV(bit);
 
  Wire.beginTransmission(AdrChipOut[idOut]);
  Wire.write(MemChipOut[idOut]);
#ifdef PCF8575 
  Wire.write(MemChipOut[idOut] >> 8 ) ;   
#endif
  Wire.endTransmission(); 
}



void setup()
{
  Serial.begin( 9600 );
  Wire.begin();
 
  // initialiser les Out à 1 :
  int id;
  for ( id = 0 ; id < NBCHIP_OUT ; ++id )
    pcfWriteOutWord( id, 0xFFFF );
  // initialiser les in à 1 (mode entrée)
  for ( id = 0 ; id < NBCHIP_OUT ; ++id )
    pcfWriteInWord( id, 0XFFFF );
}

void loop()
{
  int bit;
  int in;
  Serial.println( "--- Debut de test ------------------" );
 
  // On va tester en allumant tous les bits de sortie 1 par 1
  for ( bit = 0 ; bit < (NBCHIP_OUT * BITS_PER_CHIP) ; ++bit )
  {
    // Mettre le bit a 0
    pcfWriteOutBit( bit, 0 );
    // lisons les entrées
    for ( in = 0 ; in < NBCHIP_IN ; ++in )
      ResChipIn[in] = pcfReadInWord( in );
    // Mettre le bit a 1
    pcfWriteOutBit( bit, 1 );
     
    // Afficher le résultat
    Serial.print( "Bit#" );
    Serial.print( bit );
    Serial.print( " :" );
    for ( in = 0 ; in < NBCHIP_IN ; ++in )
    {
      Serial.print( " " );
      Serial.print( ResChipIn[in], BIN );
    }
    Serial.println();
  }
 
  delay( 5000 );
}
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

mathy

merci bcp barbudor

mais" bit" représente quoi?  moi je crois que ca représente l'octet

barbudor

Un bit c'est un bit

BINARY ELEMENT

Ca vaut 0 ou 1

Un octet c'est un BYTE
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

mathy

Bonjour , barbudor

je sais se que vaut un "bit" , mais je croyais juste que tu là utilisé dans ce code là comme appellation d'une variable donc, donc pour moi en entrée de mon pcf d'entré je dois me rassuré que j'ai bel et bien . Les 0 ou des 1 et lorsque j'ai des 1 c'est que la "in" correspondante est en bon état ou non!

Merci!

Go Up