Bonjour , je souhaite recopier l'entrée d'un composant I2C , sur un autre .
Je connai la trame I2C semble corecte .
Se programme réalise bien un compteur .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
============
je fait un segond test .
Si P0(entrée de U3 ) =1
Et P1 A P7 = 0
LED=1
Dans l'analise pas a pas , j'ai parfois donnée = 0xFF
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } } }
Je ne comprend pas pourquoi .
Voila , je met en fichier joint , la source et le fichier executable sur proteus . ( mon simulateur )
Merci d'avence .
Partager