Autor Tema: I2C entre 3 PICs  (Leído 2177 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
I2C entre 3 PICs
« en: 24 de Noviembre de 2004, 11:41:00 »
¿Alguién ha conseguido comunicar entre sí 3 PICs por ejemplo 16F876, uno como MASTER y los otros dos como SLAVES?

Por más que lo intento no hay manera. Si la comunicación es entre el MASTER y un SLAVE solo sin problemas, pero cuando añado el otro SLAVE ya no va.

El primer SLAVE recibe una vez bien, pero cuando le toca recibir al segundo, no recibe nunca y ahí se queda colgada la comunicación.

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: I2C entre 3 PICs
« Respuesta #1 en: 24 de Noviembre de 2004, 20:49:00 »
Estimado; no se si te sirva pero, segun mi modesta experiencia, tuve muchos problemas de comunicacion debido a que no tenia los filtros correspondientes en los reguladores del voltaje que usaba, estos son problemas puramente electricos y debido al ruido que producen estos dispositivos. Ademas tambien se coloca un filtro de 10nf por cada CI integrado basado en flip flop.
Es sorprendente la diferencia que hace utilizar los filtros correspondientes asegurate de esto primero, si tu diseño no lo contemplaba, para seguir solucionando tu problema

Salud2

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: I2C entre 3 PICs
« Respuesta #2 en: 25 de Noviembre de 2004, 00:01:00 »
Gracias Kruskal por los consejos.

Cuando se termina la comunicación (escritura) con un SLAVE y se va a comenzar con el otro SLAVE (también escritura) además de direccionar al 2º SLAVE hay que hacer algo con las líneas. He visto en el ejemplo de una memoria que al inicializar hace output_float(PIN_C3) y output_float(PIN_C4), esto ¿pá que es? También lo he probado pero "nay de nay".

En fin seguiremos probando.

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: I2C entre 3 PICs
« Respuesta #3 en: 25 de Noviembre de 2004, 11:43:00 »

   Hola. En comunicaciones i2c entra memorias y pics o pics y pics, es bastante problematico el tema de los tiempos. Supongo sabras que hay teoria acerca de un  arbitraje del bus y demas.

    Mi consejo es que pruebes con los tiempos y sincronizacion de las senales en el tema del arbitraje del bus.
    Un saludo.

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: I2C entre 3 PICs
« Respuesta #4 en: 25 de Noviembre de 2004, 11:44:00 »
A ciencia cierta lo que he podido aprender del I2C en una configuracion como la que tienes es lo siguiente:
1) Si tienes solo un maestro y un esclavo: El maestro cuando cuando quiere comunicarse con el esclavo, él genera los voltajes de reloj y de datos y el esclavo recibe este voltaje y por tanto la informacion. Cuando el esclavo dese comunicarle algo al maestro pues es él quien ahora genera los voltajes.
2) Si tienes un maestro y mas de un esclavo: Cuando el maestro quiere comunicarse con algun esclado, es él el que debe generar los voltajes de ambos pines (Reloj y Datos). Cuando un esclavo desea comunicarse con el maestro u otro esclavo, todo los esclavos y el master deben tener configurados los pines como entrada (o bien float pin) excepto el que desea transmitir, ahora éste esclavo es el que generará los voltajes en Reloj y datos y todos los demas los reciben. (pero ejecuta el que lleve la direccion, los demas hacen caso omiso a esta orden o dato).

Lo que te sucede es que todos estan generando voltaje y asi creas colisón.

gfp Sonrisa

Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: I2C entre 3 PICs
« Respuesta #5 en: 26 de Noviembre de 2004, 03:57:00 »
hola gente

a ver, una pregunta: las lineas SDA y SCL tienen una resistencia pull-up? Usas el I2C hardware de los PIC"s o lo haces por medio de otras patillas? Los esclavos tienen dos direcciones distintas? Como has escrito el programa?
Lo mas comun para la comunicacion es lo siguiente: Master lee un Slave

Start - Slave Address - R/W ( read = 1 ) - Acknowledge del Slave - Data del Slave - Acknowledge del Master - Data del Slave - not Acknowledge del Master - Stop

Tendrias que mostrar el circuito, para ver si no hay problemas. Espero que ayude, sino estoy a tu disposicion.

Aloha
Saludos desde Suiza, Pablo.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: I2C entre 3 PICs
« Respuesta #6 en: 26 de Noviembre de 2004, 05:52:00 »
OK, os dejo lo que tengo hecho, a ver si me podeis tirar un cable.

http://miarroba.com/foros/ver.php?foroid=348538&temaid=2568961

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: I2C entre 3 PICs
« Respuesta #7 en: 26 de Noviembre de 2004, 12:05:00 »
Pues macho... le he dado mil vueltas y nada...
he quitado el poll, la comparación que haces en cada slave de la dirección del dispositivo, lo de float.. yo que se.... y algunos cambios. Y nada.. igual.

Y la cosa es que si quitas uno de los slave, la cosa funciona perfecta.

Así que creo que es hora de que pases a la acción y dejes un poco de lado al proteus... que nunca se sabe. Yo ya me empiezo a aburrir de éste. Que si le complicas un poco la cosa...

Para no andar con tres puertos serie, que supongo no tendrás, mejor usa un simple led en cada slave, le envías un número que luego compare y encienda. Y en la siguiente vez que lo hagas en ese Slave, pues que lo apague...
Así igual con el otro. Un idea...

Ya te digo... pasa a la acción!!!

Un abrazo!!
Saludos desde Huelva (ESPAÑA)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: I2C entre 3 PICs
« Respuesta #8 en: 26 de Noviembre de 2004, 23:40:00 »
Ya, ya Alberto, gracias, lo que pasa es que ahora mismo no dispongo de las placas. A ver si un alma caritativa que las tenga puede hacer la prueba, aunque sea con LEDS.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: I2C entre 3 PICs
« Respuesta #9 en: 11 de Enero de 2005, 08:55:00 »
Hoy ha venido Miperrosellamaminué a mi casa porque tenía precisamente este mismo problema. No le funcionaba en proteus la comunicación entre tres pics.
Así que lo puse a montar en proto todo el cotarro este, pero con leds.
Funciona perfecto con los programas que trajo. Bueno, algunas cosillas le cambié, ya que lo tenía también hecho con los virtual estos del serie...

En fin, que todo funciona perfecto, tanto escritura como lectura.

Dejo todo comprimido en el mismo sitio donde lo dejó pocher anteriormente.
Como verán en el código hay cosillas que sobran (como la rs232 y la int del SSP en el master). Pero prefiero no tocar nada, ya que desmonté todo el tinglado de la proto.
Tal y como está funciona. Si alguien luego lo va a usar es cuestión de que borre lo que vaya viendo que no sirve de nada....

El funcionamiento es simple... se le envía un número que indica al esclavo que encienda o apague su led. Una vez el maestro ha realizado todos los envíos, enciende su led y se pone a leer de los esclavos, con lo que apagará y encenderá de nuevo su led. Si notan, en una de las escrituras envío un número que no hace nada. Era una mera comprobación a ver si picaba, jejeje. Pero nada.. no atiende a ese número que es lo que debe hacer.

Saludos!!
Saludos desde Huelva (ESPAÑA)