TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: SergioMAZ en 20 de Febrero de 2023, 20:30:34

Título: Problema con comunicacion I2C entre PIC (MASTER) - ARDUINO (SLAVE)
Publicado por: SergioMAZ en 20 de Febrero de 2023, 20:30:34
Buenas tardes alguno de ustedes ha intentado hacer o utilizar la comunicacion i2c entre un Arduino y un PIC , anteriormente he podido hacer la comunicacion entre dos Arduinos, y entre dos PICs pero al momento de que intento utilizar la comunicacion entre pic y Arduino simplemente no me funciona.

El codigo del pic:

Código: [Seleccionar]
#USE I2C(multi_master,Fast=100000, SDA=pin_B0, SCL=pin_B1, force_sw)
void envioI2C() // OK
{
   bit_set(leda,0);
   i2c_start();
   i2c_write(0x09);
   i2c_write(0);
   i2c_write(0x0F);
   i2c_stop();
   delay_us(50);
   bit_clear(leda,0);
}

y este es el codigo del arduino:

Código: [Seleccionar]
void setup(void) {
  Wire.begin(9);
  Wire.onReceive(receiveEvent);
  Serial.begin(9600);
  u8g2.begin();
}
void receiveEvent(int num) {
  //Serial.println("entre");
  Serial.println("entre2");
  char c = Wire.read(); // lee el byte como caracter
  Serial.println(c);      // imprime el caracter
  datos = c;
  if (datos != "%"){
  cadena = cadena+c;
  }
  Serial.println(cadena);
  int x = Wire.read();    // lee el byte como un entero
  //Serial.println(x);      // imprime el entero
}

Ambos codigos me sirven si intento hacer la comunicacion ya sea PIC-PIC o Arduino-Arduino si alguno me puede ayudar a poder visualizar mi error mejor se los agradecería muchisimo
Título: Re:Problema con comunicacion I2C entre PIC (MASTER) - ARDUINO (SLAVE)
Publicado por: DominusDRR en 20 de Febrero de 2023, 22:13:48
Buenas tardes alguno de ustedes ha intentado hacer o utilizar la comunicacion i2c entre un Arduino y un PIC , anteriormente he podido hacer la comunicacion entre dos Arduinos, y entre dos PICs pero al momento de que intento utilizar la comunicacion entre pic y Arduino simplemente no me funciona.

El codigo del pic:

Código: [Seleccionar]
#USE I2C(multi_master,Fast=100000, SDA=pin_B0, SCL=pin_B1, force_sw)
void envioI2C() // OK
{
   bit_set(leda,0);
   i2c_start();
   i2c_write(0x09);
   i2c_write(0);
   i2c_write(0x0F);
   i2c_stop();
   delay_us(50);
   bit_clear(leda,0);
}

y este es el codigo del arduino:

Código: [Seleccionar]
void setup(void) {
  Wire.begin(9);
  Wire.onReceive(receiveEvent);
  Serial.begin(9600);
  u8g2.begin();
}
void receiveEvent(int num) {
  //Serial.println("entre");
  Serial.println("entre2");
  char c = Wire.read(); // lee el byte como caracter
  Serial.println(c);      // imprime el caracter
  datos = c;
  if (datos != "%"){
  cadena = cadena+c;
  }
  Serial.println(cadena);
  int x = Wire.read();    // lee el byte como un entero
  //Serial.println(x);      // imprime el entero
}

Ambos codigos me sirven si intento hacer la comunicacion ya sea PIC-PIC o Arduino-Arduino si alguno me puede ayudar a poder visualizar mi error mejor se los agradecería muchisimo

Tal vez deberías compartir el esquemático.
Título: Re:Problema con comunicacion I2C entre PIC (MASTER) - ARDUINO (SLAVE)
Publicado por: allennet en 20 de Febrero de 2023, 22:39:08
Veo q uno es serial 9600 y otro I2C a 100k  :-)
Título: Re:Problema con comunicacion I2C entre PIC (MASTER) - ARDUINO (SLAVE)
Publicado por: SergioMAZ en 21 de Febrero de 2023, 12:23:28
Conecto SDA (B0) Y SCL (B1) a A4 Y A5 del arduino con las resistencias de 10k puenteadas al voltaje y puenteo las tierras. Siento que no es tanto de esquemático si no de algo de programacion
La comunicacion Serial que ves ahi es debido a que mando lo que se supone que me deberia llegar por I2C al puerto Serial del pic para monitorear
Título: Re:Problema con comunicacion I2C entre PIC (MASTER) - ARDUINO (SLAVE)
Publicado por: DominusDRR en 21 de Febrero de 2023, 12:32:09
Conecto SDA (B0) Y SCL (B1) a A4 Y A5 del arduino con las resistencias de 10k puenteadas al voltaje y puenteo las tierras. Siento que no es tanto de esquemático si no de algo de programacion
La comunicacion Serial que ves ahi es debido a que mando lo que se supone que me deberia llegar por I2C al puerto Serial del pic para monitorear

10k parece un valor muy alto para las de pull-up, prueba con 1k.

Si tienes un osciloscopio , o mucho mejor un analizador lógico, podrías ver que está sucediendo realmente.

También es posible que sea una incorrecta sincronización (Diferentes velocidades de comunicación).

La distancia también entre dispositivos debe  ser lo más corta posible.
Título: Re:Problema con comunicacion I2C entre PIC (MASTER) - ARDUINO (SLAVE)
Publicado por: SergioMAZ en 21 de Febrero de 2023, 12:36:10
Si he pensado en las velocidades, igual mañana o pasado mañana tengo ya un osciloscopio para comparar y ver lo que realmente se esta enviando, cualquier resolucion que tenga la compartire
Título: Re:Problema con comunicacion I2C entre PIC (MASTER) - ARDUINO (SLAVE)
Publicado por: DominusDRR en 21 de Febrero de 2023, 13:41:30
Si he pensado en las velocidades, igual mañana o pasado mañana tengo ya un osciloscopio para comparar y ver lo que realmente se esta enviando, cualquier resolucion que tenga la compartire

Si puedes, también adquiere un analizado lógico, yo tengo uno de estos para proyectos caseros:

(http://dangerousprototypes.com/docs/images/4/46/Ols-cover.jpg)

http://dangerousprototypes.com/docs/File:Ols-cover.jpg (http://dangerousprototypes.com/docs/File:Ols-cover.jpg)


Siempre tengo problemas con la comunicación I2c o SPI, y el analizador es una buena herramienta, ya que no solo captura las formas de onda, también te indica los componentes de la trama, algo similar a esto:

(https://community.nxp.com/t5/image/serverpage/image-id/192005iDB7871D395F3DF05/image-size/large/is-moderation-mode/true?v=v2&px=999)