Ir ao conteúdo
  • Cadastre-se
CeDahmer

Comunicação I2C entre PICs por software

Recommended Posts

Boa tarde...

 

Uso um PIC 18f4550, onde está conectado um 24C256 e um Ds1307 por I2C, pelos pinos B1 e b0, ou seja por software, pois os outros estavam ocupados, tudo funciona, mas agora ao adicionar um 16F877A, estou tendo sérios problemas, a comunicação até ocorre, mas as respostas não são as que eu solicito, e o funcionamento da memório e do RTC, são alteradas. A seguir o código usado nos PICs:

 

Linhas do I2C do escravo 16F877A

#use i2c(Slave, slow, SCL=PIN_b1, SDA=PIN_b0, address=0x80)#INT_SSPvoid ssp_interupt(){   int8 incoming, state;   state = i2c_isr_state();   if(state <= 0x80)                                //if Master está enviando dados   {      incoming = i2c_read();      if(state == 1) {address = incoming;}          //Primeira recepção é o byte de endereço               if(state == 2) {buffer[address] = incoming;}  //Segundo byte recebido é o dado   }   if(state == 0x80)                                //if master está requisitando dados   {      i2c_write (read_adc()); //enviar dados requisitados, neste caso a leitura do ADC   }   //output_d(buffer[address]);// liga os leds da porta D para testar a comunicação}

Linhas do I2C do mestre 18f4550

#use i2c(master, sda=PIN_b0, scl=PIN_b1, ADDRESS = 0X01, Slow)void Receber_I2c2()//Chamado pelo loop infinito{      i2c_start ();      i2c_write (0x80);      i2c_write (2);      i2c_write(result);      i2c_stop();      delay_ms(50);      i2c_start ();      i2c_write (0x81);      result = i2c_read(0);      i2c_stop ();}  

Existem pouco material sobre comunicação entre microcontroladores por este protocolo. Se alguém pudesse me ajudar com algumas dicas para o correto funcionamento.

 

Tenho algumas dúvidas também:

1- Onde é armazenado o byte enviado do mestre para o escravo?

2-Teria alguma forma de acessar a EEPROM do escravo?

3-Ao escrever os dados namemória o endereço é 16bits, e são mandados 4 comandos de escrita, um com o endereço +0, a parte alta do endereço, mais o byte baixo do endereço, e o dado a ser armazenado. Já no RTC, são enviados apenas 3 comandos, pois o endereço é de 8bits. Agora como tenho que enviar entre a comunicados dos PICs?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah... estou usando o CCS, desculpe não ter postado isso. Mas estou querendo saber mais sobre o protocolo, e indiferente o compilador o funcionamento deve ser semelhante. Se tiver alguma coisa acho que me ajudará muito, pois estou achando pouco material na internet, e não tráz nada específico, ou que possa me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×