2016-03-14 4 views
1

J'ai un projet qui consiste à parler à des puces OneWire (DS2431) à travers un commutateur I2C (PCA9548). Ce que je veux faire est de configurer le commutateur correctement (il suffit d'écrire un octet dans son registre d'état), puis utiliser la broche SDA mbed pour la communication OneWire. Le commutateur ne se soucie pas de la ligne SDA (il peut même passer DC dans les deux sens) et je l'ai testé avec OneWire avec succès. Le problème est de passer du logiciel de I2C à OneWire sur la même broche.
Je l'ai essayé en toute simplicité: créer une instance I2C globale, puis une instance OneWire, mais la dernière bouscule toujours la précédente pour que je puisse utiliser I2C ou OneWire. Existe-t-il un moyen de détruire une instance et de la créer à nouveau?Comment puis-je passer de I2C à OneWire sur la même broche sur mbed?

+0

instanciation une autre instance I2C, doit configurer les nouveau broches du constructeur. Je ne pense pas que la destruction est nécessaire (ou même mise en œuvre pour régler la chose à la configuration précédente) – xvan

Répondre

0

Vous pouvez le faire de plusieurs façons, mais l'une des façons les plus simples est de déclarer l'instance I2C et OneWire à l'intérieur de votre fonction principale.

Si vous devez accéder à l'instance OneWire en dehors de la zone principale, vous pouvez l'affecter à un pointeur.

Voici quelques pseudo-code:

OneWire *oneWireGlobal; 

void func1() { 
    oneWireGlobal->writeBit(0xFF); 
} 

void main() { 
    I2C i2c(I2C_SDA, I2C_SCL); 

    [I2C operations here...] 

    OneWire oneWire(I2C_SDA); 
    oneWireGlobal = &oneWire; // Be sure to do this before accessing "oneWireGlobal" 

    [oneWire operations here...] 

    func1(); 
}