Ir ao conteúdo
  • Cadastre-se

Comunicação I2C entre PICs por software


CeDahmer

Posts recomendados

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?

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...