Go Down

Topic: PCF8574 sur I2C (Read 3751 times) previous topic - next topic

barbudor

Tu as plusieurs chips à essayer ?
Problème de câblage ? Une p'tite photo ?
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 ?

rhum187

#16
May 10, 2012, 10:17 am Last Edit: May 10, 2012, 10:19 am by rhum187 Reason: 1
Problème résolu !

Un PCF grillé relié par l'intermédiaire d'un autre carte... je ne l'avais pas vu...

Merci à tous de votre aide !

EDIT : Question annexe : Vous pensez que ,dans le cadre d'un robot à plusieurs modules contenant 1 pcb/module, le bus I2C était le mieux adapté pour communiquer ?

skywodd


EDIT : Question annexe : Vous pensez que ,dans le cadre d'un robot à plusieurs modules contenant 1 pcb/module, le bus I2C était le mieux adapté pour communiquer ?

Sur des distances inférieur à 1m et dans le cadre d'une communication entre modules w/ adresses, le tout à "basse" vitesse, l'I2C est le choix le plus approprié.

Phillips n'as pas inventé l'I2C et ne la pas intégré dans ses téléviseurs pour rien ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

megamario

Bonjour à tous,

Le post est un peu vieux mais je souhaitais utilisé des PF8574. Mes 1er essaie était vraiment concluant mais la distance était relativement faible entre l'arduino et les 2 modules qui pilotait une carte avec 16 relais.

Mon problème: Sur un projet de gestion d'un aquarium, j'aimerais mette un arduino dans la rampe d'éclairage. Ge gere la rampe d'éclairage LED bien sur mais j'aimerais gérer tout le reste se trouvant lui sous l'aquarium. D'où l'utilisation des PCF8574. Seulement j'ai peur aux interférences au vous avez aussi évoqué.  Surtout que les cartes électroniques étant rudimentaire ne sont pas forcement ce qu'il y a de mieux au niveau blindage.

J'aurais donc effectivement plus d'un mettre de câble I2C sur cordon type RJ11. J'ai donc peur du resultat.

J'avais pensé aussi à utiliser 2 arduino MEGA. L'un dans la rampe avec l'écran et l'autre sous le bac, autonome, mais récupérant les info du 1er pour se paramétrer et donner les mesures, en I2C aussi mais avec un contrôle par checksum par exemple pour limiter les erreurs. Mais ne serait t'il pas plus judicieux de le faire dans ce cas par un port série, peut être plus robuste. Surtout si l'on ajoute des MAX232 entre chaque.

Une idée

B@tto

Tkt pas pour les interférences ... J'ai déjà fait des montages à plusieurs mettre d'écart en i2c, avec les pull up interne de l'Atmega de surcroît. Donc avec des "vraies" résistance de pull up à 1m tu ne devrais pas avoir de soucis, surtout que de base l'Arduino travaille en i2c "mode lent" donc on est immunisé contre pas mal de chose
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

megamario

Merci pour ces informations.

Pascal71

Bonjour

A toutes fins utiles, si vous avez un doute sur l'adresse du composant, vous pouvez utiliser un "sniffer" qui joint successivement plusieurs adresses et renvoie celle(s) qui répond(ent).

Un exemple :
Code: [Select]


#include <Wire.h>


void setup()
{
  delay(5000);
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 254; address++ ){
     Serial.print("Scaning address 0x");
     Serial.print("0");
     Serial.println(address,HEX);
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0){
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }else if (error==4){
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX); 
    }

   
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

Serial.println("--------------------------");
  delay(10000);           // wait 5 seconds for next scan
}


Go Up