Pages: 1 ... 4 5 [6]   Go Down
Author Topic: aide en programmation testeur de court-circuit et pinnage  (Read 7450 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: May 26, 2012, 12:51:37 pm by nico34 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bnjour , barbudor

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

Code:
#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 );
}
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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 ?

Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Y'a presque une ligne de commentaire par ligne de code smiley-wink
Logged

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 ?

Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

oui mais je ne comprends toujours pas!

par exemple ce bout
Code:
#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];
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#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:
// 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:
// 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:
#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:
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:
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:
uint16_t ResChipIn[NBCHIP_IN];

Tableau de mémorisation des résultats de lecture des PCF d'entrée.
Logged

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 ?

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-cool
Voici le bon :

Code:
#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 );
}
Logged

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 ?

Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci bcp barbudor

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

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Un bit c'est un bit

BINARY ELEMENT

Ca vaut 0 ou 1

Un octet c'est un BYTE
Logged

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 ?

Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Pages: 1 ... 4 5 [6]   Go Up
Jump to: