TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado 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:
#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:
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
-
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:
#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:
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.
-
Veo q uno es serial 9600 y otro I2C a 100k :-)
-
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
-
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.
-
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 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)