Bonjour à vous!
Je viens vers vous car j'essais de réaliser une liaison I2C entre deux PIC (l'un étant le maître et aurra la fonction "d'interrupteur", et l'autre sera l'escalve et allumera des leds en fonction des ordres du maître)
Mon problème est que sa ne marche pas! Et pourtant j'ai pris exemple sur la doc de CCS!
Je travail sous MPLAB avec CCS en C. Voici mes codes:
Maître :
#include <18F4685.h>
#use delay(clock=20000000)
#fuses H4,NOWDT,NOPROTECT,NOLVP
#use I2C(master, sda=PIN_C4, scl=PIN_C3,FORCE_HW)
void main()
{
unsigned int1 tmp=1;
output_a(0x00);
output_b(0x00);
output_c(0x00);
output_d(0x00);
while (1)
{
if(input_state(PIN_A4) == 1)
{
output_bit(PIN_A1,1);
i2c_start(); // Start condition
i2c_write(0xa0);// Device address
i2c_write(0x22); //ON
i2c_stop(); // Stop condition
output_bit(PIN_A1,0);
}
else{
if(input_state(PIN_A5) == 1)
{
output_bit(PIN_A2,1);
i2c_start(); // Start condition
i2c_write(0xa0);// Device address
i2c_write(0x33); //OFF
i2c_stop(); // Stop condition
output_bit(PIN_A2,0);
}
}
if(input_state(PIN_B4) == 1)
{
output_bit(PIN_A0,tmp);
delay_ms(300);
tmp = !tmp;
}
}
}
Esclave :
#include <16F887.h>
#use delay (clock = 20000000)
#use I2C(slave,sda=PIN_C4,scl=PIN_C 3,address=0xa0,FORCE_HW,RESTAR T_WDT)
#fuses HS,NOWDT,NOPROTECT,NOLVP
unsigned char data1=0x00,state;
void main() {
unsigned int1 etat2=1,etat3=0;
output_a(0x00);
output_b(0x00);
output_c(0x00);
output_d(0x00);
while(1){
output_bit(PIN_A0,1);
i2c_start();
i2c_write(0xa1);//aquitement mais je ne sais pas ou le gérer
data1 = i2c_read();
i2c_stop();
if(data1 == 0x22)
{
output_bit(PIN_A1,1);
output_bit(PIN_A2,1);
delay_ms(100);
}
else if(data1 == 0x33)
{
output_bit(PIN_A1,0);
delay_ms(100);
}
else if(data1 == 0x00)
{
output_bit(PIN_A1,1);
output_bit(PIN_A2,1);
delay_ms(100);
}
}
}
A première vu, ce code est-il correct?
Je vous remerci d'avance pour vos réponse, et j'esper vraiment pouvoir trouver une solution à mon problème!
-----