1 pièce(s) jointe(s)
[I2C PIC] Probléme lors de la simulation . Compilateur CCS
Bonjour , je souhaite recopier l'entrée d'un composant I2C , sur un autre .
Je connai la trame I2C semble corecte .
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <16f877.h>
#fuses XT, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT, NOLVP
#use delay (clock=4000000)
#define LED pin_B0
#use I2C(master, sda=PIN_C4, scl=PIN_C3)//declaration de I2C ( Maitre , Donnée sur BO et Horloge B1 )
int8 donnee;
Void puti2C(int8 addresse, int8 Donnee)//envoi
{
i2c_start();
i2c_write(addresse);
i2c_write(Donnee);
i2c_stop();
}
int8 lect_i2c(int8 addresse)//lecture
{
int8 donnee;
i2c_start();
i2c_write(addresse);
donnee=I2C_READ();
i2c_stop();
return donnee;
}
void main()
{
donnee=0x01;
while(1)
{
//donnee=lect_i2c(0x41);
puti2C(0x42,donnee);
donnee++;
delay_ms(100);
}
} |
Se programme réalise bien un compteur .
============
je fait un segond test .
Si P0(entrée de U3 ) =1
Et P1 A P7 = 0
LED=1
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| void main()
{
/*Recopier le debut , seul main change */
while(1)
{
donnee=lect_i2c(0x41);
//puti2C(0x42,donnee);
if(donnee==0x01)
{
output_high(LED);
}
else
{
output_low(LED);
}
}
} |
Dans l'analise pas a pas , j'ai parfois donnée = 0xFF
Je ne comprend pas pourquoi .
Voila , je met en fichier joint , la source et le fichier executable sur proteus . ( mon simulateur )
Merci d'avence .