Bonjour à tous,
Voici le soucis que je rencontre à l'heure actuelle:
J'ai deux switchs branchés sur P0 et P1 de mon PCF8574 et de P2 à P7 ce sont des LEDs qui sont branchées.
Mon lien I2C fonctionne mais dès que je fais passer mon switch P0 à 1 alors le programme se fige et reste bloqué....
Voici mon code:
main
Mes fonctions read and write du PCF8574Code:int main() { int essai=0; InitModuleI2C(); I2CEnable(MODULE_I2C1, TRUE); EcriturePCF(0x40, 0xC0); while(1) { Nop(); essai = LecturePCF(0x40, 0x03); Nop(); if((essai & 0x03) == 0x00) EcriturePCF(0x40, 0xFF); if((essai & 0x03) == 0x01) EcriturePCF(0x40, 0x7F); if((essai & 0x03) == 0x02) EcriturePCF(0x40, 0xBF); if((essai & 0x03) == 0x03) EcriturePCF(0x40, 0xDF); } return 0; }
Si quelqu'un a une idée, je suis preneurCode:void InitModuleI2C() { I2CSetFrequency(MODULE_I2C1, GetPeripheralClock(), I2C_CLOCK_FREQ); } int LecturePCF(BYTE adressPCF,BYTE configPCF) { int i2cByte = 0x00; I2CStart(MODULE_I2C1); while ( !(I2CGetStatus(MODULE_I2C1) & I2C_START) ); I2CSendByte(MODULE_I2C1, (adressPCF + 0x01)); while(!I2CTransmissionHasCompleted(MODULE_I2C1)); if(I2CByteWasAcknowledged(MODULE_I2C1) && I2CReceiverEnable(MODULE_I2C1, TRUE) != I2C_RECEIVE_OVERFLOW) { while(!I2CReceivedDataIsAvailable(MODULE_I2C1)); I2CAcknowledgeByte (MODULE_I2C1, TRUE); i2cByte = I2CGetByte(MODULE_I2C1); while( !I2CAcknowledgeHasCompleted(MODULE_I2C1)); } else i2cByte = 0xff; I2CStop(MODULE_I2C1); DelayMs(10); EcriturePCF(adressPCF, (i2cByte | configPCF)); I2CStart(MODULE_I2C1); while ( !(I2CGetStatus(MODULE_I2C1) & I2C_START) ); I2CSendByte(MODULE_I2C1, (adressPCF + 0x01)); while(!I2CTransmissionHasCompleted(MODULE_I2C1)); if(I2CByteWasAcknowledged(MODULE_I2C1) && I2CReceiverEnable(MODULE_I2C1, TRUE) != I2C_RECEIVE_OVERFLOW) { while(!I2CReceivedDataIsAvailable(MODULE_I2C1));//Le programme reste bloqué dans cette boucle lorsque seul switch P0 est actif I2CAcknowledgeByte (MODULE_I2C1, TRUE); i2cByte = I2CGetByte(MODULE_I2C1); while( !I2CAcknowledgeHasCompleted(MODULE_I2C1)); } else i2cByte = 0xff; I2CStop(MODULE_I2C1); DelayMs(10); return i2cByte; } void EcriturePCF(BYTE adressPCF, BYTE data) { I2CStart(MODULE_I2C1); while ( !(I2CGetStatus(MODULE_I2C1) & I2C_START) ); I2CSendByte(MODULE_I2C1, adressPCF); while(!I2CTransmissionHasCompleted(MODULE_I2C1)); if(I2CByteWasAcknowledged(MODULE_I2C1)) { I2CSendByte(MODULE_I2C1, data); while( !I2CAcknowledgeHasCompleted(MODULE_I2C1)); } I2CStop(MODULE_I2C1); DelayMs(10); }
Cordialement,
Jean
-----