Class CMCP23017

La classe CMCP23017 est dédiée au support par la librairie cpp2835 des composants MICROCHIP MCP23017 pour des entrées et sorties numériques. Cette classe hérite de la classe CI2CDevice.


Cette classe ne supporte qu'un ensemble limitée de fonctionnalités du composant pour simplement lire et écrire sur les ports numériques.

Exemple d'utilisation

Cet extrait de code est un pseudo code, il regroupe dans un même flot des opérations normalement disséminées dans diverses parties d'un programme.


// Déclaration des objets requis sous forme de pointeurs
C2835Driver* m_pDriver;
CI2CBus* m_pI2CBus;
CMCP23017* m_pMCP23017;

// Initialisation des pointeurs vers les objets requis à un pointeur nul
m_pDriver = nullptr;
m_pI2CBus = nullptr;
m_pMCP23017 = nullptr;

// Création et vérification de création des objets requis
if((m_pDriver = new C2835Driver()) == nullptr) return false;
if((m_pI2CBus = new CI2CBus(m_pDriver)) == nullptr) return false;
if((m_pMCP23017 = new CMCP23017(m_pI2CBus, MCP23017_ADR_0X20)) == nullptr) return false;

// Initialisation de la librairie et ouverture du bus I2C
if(!m_pDriver->Initialize()) return false;
if(!m_pI2CBus->Open(I2C_CLOCK_DIVIDER_65536)) false;

// Initialisation du MCP23017 : Port 0 en sortie, Port 1 en entrée avec pull up
if(!m_pMCP23017->Initialize()) return false;
if(!m_pMCP23017->ConfigurePort(MCP23017_PORT_0, MCP23017_PORT_DIR_OUTPUT)) return false;
if(!m_pMCP23017->ConfigurePort(MCP23017_PORT_1, MCP23017_PORT_DIR_INPUT)) return false;
if(!m_pMCP23017->ConfigureInputPortPullUp(MCP23017_PORT_1, 0xFF)) return false;

// Ecriture sur port 0 pour passer tous les buts à 1
if(!m_pMCP23017->WritePort(MCP23017_PORT_0, &0xFF)) return false;

// Lecture port 1
int nPort1Value;
if(!m_pMCP23017->ReadPort(MCP23017_PORT_1, &nPort1Value)) return false;

// En fin de programme, arrêt du MCP23017, fermeture du bus I2C et arrêt de la librairie
if(!m_pMCP23017->Shutdown()) return false;
if(m_pI2CBus != nullptr) m_pI2CBus->Close();
if(m_pDriver != nullptr) m_pDriver->Terminate();

// En fin de programme, effacement des objets utilisés
if(m_pMCP23017 != nullptr) delete m_pMCP23017;
if(m_pI2CBus != nullptr) delete m_pI2CBus;
if(m_pDriver != nullptr) delete m_pDriver;

Fonctions publiques

CMCP23017(CI2CBus* pI2CBus, const MCP23017_ADR& Address)
boolConfigureInputPortPolarity(const MCP23017_PORT& Port, const unsigned& Polarity)
boolConfigureInputPortPullUp(const MCP23017_PORT& Port, const unsigned& Pullup)
boolConfigurePort(const MCP23017_PORT& Port, const MCP23017_PORT_DIR& Direction)
boolInitialize()
boolReadPort(const MCP23017_PORT& Port, int* pValue)
boolShutdown()
boolWritePort(const MCP23017_PORT& Port, const unsigned& Value)


CMCP23017::CMCP23017(CI2CBus* pI2CBus, const MCP23017_ADR& Address)

Description : Contructeur. Instancie un objet de la classe CMCP23017.


Paramètre : pI2CBus - type CI2CBus* - Pointeur vers l'objet CI2CBus auquel est connecté ce composant. L'objet pI2CBus aura été instancié et ouvert en amont de cet appel.

Paramètre : Address - type MCP23017_ADR& - Adresse du composant sur le bus I2C.



bool CMCP23017::ConfigureInputPortPolarity(const MCP23017_PORT& Port, const unsigned& Polarity)

Description : Configure la polarité d'un port configuré en entrées numériques. Le paramètre Polarity est un masque sur les 8 bits du port. Chaque bit de ce masque s'applique à chaque bit du port. Si le bit est à 1, la polarité est positive, s'il est à 0 la polarité est négative.


Paramètre : Port - type MCP23017_PORT& - Désigne le port auquel ce masque de polarité doit être appliqué.

Paramètre : Polarity - unsigned& - Masque de définition des polarités pour chaque bit du port d'entrées.


Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.



bool CMCP23017::ConfigureInputPortPullUp(const MCP23017_PORT& Port, const unsigned& Pullup)

Description : Configure la résistance de pull up ou pull down d'un port configuré en entrées numériques. Le paramètre Pullup est un masque sur les 8 bits du port. Chaque bit de ce masque s'applique à chaque bit du port. Si le bit est à 1, la résistance est un pull up, s'il est à 0 la résistance est un pull down.


Paramètre : Port - type MCP23017_PORT& - Désigne le port auquel ce masque de pull up/pull down doit être appliqué.

Paramètre : Pullup - unsigned& - Masque de définition des résistances de pull up ou pull down pour chaque bit du port d'entrées.


Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.



bool CMCP23017::ConfigurePort(const MCP23017_PORT& Port, const MCP23017_PORT_DIR& Direction)

Description : Configure un port en entrée ou en sortie.


Paramètre : Port - type MCP23017_PORT& - Désigne le port à configurer.

Paramètre : Direction - type MCP23017_PORT_DIR& - Direction en entrée ou sortie du port.

Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.



bool CMCP23017::Initialize()

Description : Initialisation et mise en service du composant MCP23017.


Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.



bool CMCP23017::ReadPort(const MCP23017_PORT& Port, int* pValue)

Description : Lecture de l'état d'un port configuré en entrée.


Paramètre : Port - type MCP23017_PORT& - Désigne le port à lire.

Paramètre : pValue - int* - En sortie de fonction, pointeur vers la donnée contenant l'état lu sur le port d'entrées.

Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.



bool CMCP23017::Shutdown()

Description : Arrêt du composant MCP23017.


Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.



bool CMCP23017::WritePort(const MCP23017_PORT& Port,const unsigned& Value)

Description : Ecriture sur un port configuré en sortie.


Paramètre : Port - type MCP23017_PORT& - Désigne le port à écrire.

Paramètre : Value - unsigned& - Valeur à écrire sur le port.


Valeur de retour : Booléen indiquant le succès (true) ou l'échec (false) de la fonction.