Expander MCP23008

Salut les bidouilleurs

J'ai essayé ce weekend la librairie ADAFRUIT MCP23008.
Très déçu. Pas foutue d'offrir une gestion des interruptions de l'expander. C'est pourtant basique.
Ces c**s ont déclaré leur méthodes read8 et write8 en private, la propriété i2caddr également. Impossible de dériver leur classe proprement, donc.
A croire qu'ils ne connaissent pas "protected".

class MyMCP23008 : public Adafruit_MCP23008
{
  protected:
    void write8(uint8_t addr, uint8_t data);
    uint8_t i2caddr;

  public:  
    void enableInterrupts(uint8_t data);
};

void MyMCP23008::write8(uint8_t addr, uint8_t data)
{
  Wire.beginTransmission(MCP23008_ADDRESS | i2caddr);
#if ARDUINO >= 100
  Wire.write((byte)addr);
  Wire.write((byte)data);
#else
  Wire.send(addr);  
  Wire.send(data);
#endif
  Wire.endTransmission();
}

void MyMCP23008::enableInterrupts(uint8_t data)
{
  this->write8(MCP23008_GPINTEN, data);
}

Ce que j'ai fait, en attendant de réécrire la totalité.

@+

Allons allons - c’est déjà bien d’avoir un bout de code même mal fichu - d’ailleurs si vous avez lu le readme de leur github ils disent:

This is very much beta, it seems to work fine but its not optimized and doesn't currently suport the interrupt capability of the chip

Currently it can do: setting pin directions, inputs and outputs and turning on/off the pull-up resistors
.....
Enjoy and send pull requests!

Donc voilà - suffit de leur envoyer des PULL :slight_smile: les noms d’oiseaux c’est un peu exagéré non ?

Ok. Mauvais réflexe de ma part, surtout de la part d'un développeur.

C'est corrigé. Je leur ai posté une "issue". Mais je me fais peu d'illusions.
Leur dernier commit dans ce GitHub date de 3 ans.
Leur code sert avant tout à vendre des cartes et des composants.

@+

oui c'est sûr qu'ils ont besoin de faire tourner leur boîte et que si un composant ne se vend pas bien, ils mettent les resources pour développer les librairies sur d'autres projets sans doute.

Leur code sert avant tout à vendre des cartes et des composants.

Exact.
Tant que cela se vend en l'état on ne n’améliore rien.
Néanmoins leurs bibliothèques ont le mérite d'exister.

Pour avoir des bibliothèques "aux petits oignons" il est préférable de chercher des forks réalisés par des passionnés ( à condition de disposer d'une documentation "décente".

En ce moment je m'intéresse aussi à ce produit mais dans sa version SPI: MCP23S17 (*)
Elle est assez spéciale vu qu'en mode SPI elle utilise la même adresse que l'I2C, je ne savais pas que cela existait.

Nota : je l'utilise avec STM32F103 et Mbed avec une bibliothèque trouvée sur MBed, hélas pas documentée.
Ce circuit est riche en mode de fonctionnement, c’eût été mieux si le mode choisi avait été clairement précisé.

Lors de mes tous premiers essais basiques j'ai câblé deux Dels, une sur chaque port.
J'ai mis 230 ohms en série avec les Dels (rouge et verte, phi 3mm, achetée sur Ebay) ce qui donne un courant autour de 4 mA --> au passage elles éclairent parfaitement, pas la peine de mettre plus de courant.

Les mesures "sur l'exemplaire en test " montrent que les Rdson des transistors de sortie du MCP23X17 sont de l'ordre
Mode sink ~100 ohms
Mode Source ~ 50 ohms

La datasheet donne une limite max de courant de 25 mA (source ou sink)
--> ok le produit résiste a un courant de 25 mA mais avec 100 ohms de Rdson il est inutilisable a 25 mA.
A 4 mA la sortie ne délivre déjà plus que 2,8V / 2,9V au lieu de 3,3V à vide.

Edit/Complément : la pin Reset n'est pas stable, elle doit impérativement être connectée à 3,3V (dans tout les cas une raz automatique se produit à la mise sous tension)

(*) Je prévois de la distance entre le micro et le MCP23S17, je sais que je ne saurais pas adapter la ligne en I2C, en SPI avec des liaisons unidirectionnelles je pense pouvoir y arriver.