Autor Tema: Comunicacion por I2C con dos PIcs Maestros  (Leído 2654 veces)

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

Desconectado Tavo

  • PIC10
  • *
  • Mensajes: 22
Comunicacion por I2C con dos PIcs Maestros
« en: 08 de Enero de 2013, 11:27:26 »
Hola, necesito diseñar un circuito 3 PICs (un maestro y dos esclavos) que se comuniquen por I2C.
El maestro y uno de los esclavos son 16F876A, el otro esclavo un 16F84A.
Para programar, utilizo CCS 4.104 y para la simulacion Proteus V7.7 SP2
Por lo que he leido, para la comunicacion por I2C hay un maestro y los demas son esclavos.
La transmision desde el maestro a los esclavos, la entendi.
El problema es con los esclavos, ya que ante un evento en cualquiera de los esclavos, deberia informar al maestro. En los ejemplos que estuve viendo, el maestro continuamente esta "preguntando" o pidiendole datos a los esclavos. En mi caso preferiria que el esclavo genere una interrupcion en el maestro y le envie los datos del evento al maestro.
Como se puede hacer esto ?
Se deberian invertir los roles cuando ocurre un evento en alguno de los esclavos, o sea el esclavo pasa a ser maestro y viceversa ? Como se hace ?

Desde ya muchas gracias por la ayuda.

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Comunicacion por I2C con dos PIcs Maestros
« Respuesta #1 en: 11 de Enero de 2013, 05:40:53 »
Eso es mas  un tema de la programación del firmware que de otra cosa. Debes programarte tu el nivel de enlace (es decir, la forma de acceso al medio). De tal forma que generes un protocolo mediante el cual no se tengan que sondear, si no que bajo demanda se produzcan eventos.
Saludos.

Desconectado Tavo

  • PIC10
  • *
  • Mensajes: 22
Re: Comunicacion por I2C con dos PIcs Maestros
« Respuesta #2 en: 11 de Enero de 2013, 09:57:24 »
Eso es mas  un tema de la programación del firmware que de otra cosa. Debes programarte tu el nivel de enlace (es decir, la forma de acceso al medio). De tal forma que generes un protocolo mediante el cual no se tengan que sondear, si no que bajo demanda se produzcan eventos.
Saludos.

Esta bien, pero como lo hago ?
La interrupcion #INT_SSP, por lo que entendi, se dispara en los esclavos cuando el master va a transmitir o le pide datos a los esclavos; pero desde los esclavos puedo generar una #INT_SSP en el master ?
La otra que pense, es que desde los esclavos se genere una interrupcion en los ports RB4-RB7 y segun el codigo de entrada en esos 4 bits, el maestro lea el esclavo que genero la int pero no se si es la mejor forma.
Si yo pudiera disparar la #INT_SSP en el maestro creo que seria la mejor solucion.
Gracias.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Comunicacion por I2C con dos PIcs Maestros
« Respuesta #3 en: 11 de Enero de 2013, 12:18:39 »
De entrada me atajo  :mrgreen: porque no tengo experiencia con I2C, pero en base a tus comentarios me animo a darte una idea de como hacer.

Tu sistema tiene un maestro y esclavos, no importa cuantos esclavos son, la idea del I2C es que haya un maestro, por lo general mas potente que los esclavos y es el que se encarga de realizar calculos para atender tu proceso, mientras que los esclavos son mas "bobos" y solo estan esperando que el maestro les pregunte como estan.

En base a ese resumen, yo pensaria la comunicación, es decir la trama de datos de la siguiente forma.

Primero el master pone en el bus la dirección del esclavo, luego pone un código que le pregunte al esclavo si le ha pasado algo, si así fuera el esclavo envia un eco con un código que indique que le pasó y el maestro en base a eso decide que hacer, por ejemplo en ese caso puede quedarse atendiendo a ese esclavo. Si al esclavo no le pasó nada devuelve un código que el maestro interpretará como que puede seguir preguntando a los demas esclavos.

Y la otra idea que se me ocurre, en el caso que tengas multi maestros, como podria imaginarme unos robots colaborativos, es que en ese caso todos son igual de potentes y quizas puedes diseñar tu programa, en cada maestro de forma tal que vaya pasando el mando, y al momento de pasar el mando él queda como esclavo, pero SIEMPRE existe un solo MAESTRO.

Si fuera de esta última forma, todos los dispositivos conectados al bus deberian tener la misma programacion con respectos a la comunicación, pero el resto del programa deberia ser diferente en base a su función específica.

Espero no haberte enredado, escribí lo que pienso.

Quizas si nos das un detalle de tu aplicación podemos ayudarte mas.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Tavo

  • PIC10
  • *
  • Mensajes: 22
Re: Comunicacion por I2C con dos PIcs Maestros
« Respuesta #4 en: 11 de Enero de 2013, 15:37:20 »
Quizas si nos das un detalle de tu aplicación podemos ayudarte mas.

Bien, adjunto todos los archivos del proyecto.
Empece con este ejemplo http://robotypic.blogspot.com.ar/2012/03/comunicacion-i2c-entre-tres-pics.html y lo fui adaptando.
El proyecto consiste basicamente en diseñar una alarma y aprovechar los sensores de la alarma para apagar las luces de las habitaciones que estan encendidas. Las luces se encienden desde los esclavos y al cabo de x min se apagan desde el esclavo. Si un sensor detecta que hay personas en una zona, informa al maestro y el maestro debe informar al correspondiente esclavo para que resetee el temporizador correspondiente y no apague la luz de esa habitacion a los x min como estaba previsto. Para ello necesito que el maestro le avise al esclavo correspondiente que se activo un sensor.
En el esclavo 1 va un teclado para la activacion, desactivacion y programacion de la alarma. En este caso el esclavo informa al maestro que la alarma se activo.
Si la alarma esta activada, el maestro debe informar a todos los esclavos para que apaguen las luces de las habitaciones.

Resumiendo:
- Maestro: hace las veces de central de alarma y en el van conectados los sensores de la misma. Ademas, informa a los esclavos de los eventos que se produzcan. Si se activa un sensor y la alarma esta activada, el maestro enciende una sirena o avisa al esclavo correspondiente para que la encienda.
- Esclavo 1: se conecta el teclado de la alarma y pulsadores para encender las luces de las habitaciones.
- Esclavo 2: se conectan los pulsadores para encender las luces de las habitaciones.

Consideraciones:
- Los circuitos de las luces no estan armados. Quiero resolver la comunicacion entre el master y los esclavos para seguir avanzando con los demas temas.
- Esclavo 2: pienso que se podria usar un 16F84A si es que se puede programar para usar I2C. Se puede ?
- Los display no son necesarios, solo los tengo para ir reportando el funcionamiento de los PICs. El teclado se podria conectar en el puerto B del Esclavo 1.
- El circuito, asi como esta, anda a medias. Si se activa el delay_ms(25) en la linea 103, el teclado anda bien pero el Esclavo 1 deja de recibir datos del Maestro. Si comento esta linea, la comunicacion por I2C anda bien, pero no anda el teclado.

Este es el resumen basico del proyecto y el limite esta dado por la imaginacion, pero para seguir avanzando necesito resolver la comunicacion entre los PICs.
Desde ya muchas gracias por la ayuda.



 

anything