¿Se puede usar I2C con sensores momentáneos?

1

[editar: aclarar la pregunta] ¿Es posible ver eventos en esclavos I2C o un equivalente funcional?

Estoy pensando en un nuevo proyecto. Estoy usando un ESP-12F como una placa lógica principal para controlar y recibir la entrada de varios módulos conectados (por ejemplo, botón pulsador, sensor de haz, válvula solenoide, disparador del obturador) Cada módulo (esclavo) está basado en PIC y se comunica con el ESP 12 (master) utilizando I2C. El envío de comandos para válvulas y disparadores a través de I2C es sencillo. Sin embargo, no estoy seguro de cómo utilizar I2C para eventos momentáneos desencadenados por esclavos.

¿Debo seguir enviando solicitudes de estado a esos módulos y buscar cambios de esa manera? También estoy considerando usar la lógica XOR para cambiar el nivel de otra línea, que puedo detectar mediante interrupción para activar la solicitud de estado.

Mi dispositivo es sensible al tiempo, me gustaría obtener una respuesta a un disparador de aproximadamente 50 a 100 microsegundos.

Soy nuevo en todo esto, así que siéntete libre de corregirme en cualquier cosa fundamental que me falte.

    
pregunta David Woods

4 respuestas

3

Los términos de la técnica aquí son Sondeo , es decir, se revisan repetidamente los cambios en el sensor, en lugar de Interrumpir , se alerta a petición de un cambio.

No, I2C no proporciona un protocolo de interrupción directamente. Un subconjunto de I2C, llamado SMBUS, sí. Tiene el número SMBALERT, en el que el dispositivo Host tiene un solo pin de Interrupción al que se pueden conectar todos los dispositivos esclavos, y cuando se activa, el Host leerá la Dirección de Respuesta de Alerta especial (0001 100x), y cualquier esclavo que tenga una alerta pendiente escribirá su dirección específica. El anfitrión entonces lee directamente de él. Si hay más de una pendiente de alerta, se realizará el arbitraje y el Anfitrión tendrá que leer el ARA varias veces.

Buen truco, puedes omitir el pin de interrupción y hacer una encuesta desde el ARA de todos modos, y solo si obtienes una dirección válida intentas leer desde el esclavo. Esto puede reducir el número de veces que intenta realizar una encuesta, si tiene varios dispositivos esclavos.

Por supuesto, puede implementar esto en I2C con bastante facilidad, si puede programar los dispositivos esclavos y el dispositivo host.

Alternativamente , puede hacer que todos los microcontroladores sean maestros y esclavos, implementando una configuración I2C Multi-Master . Haz que los módulos se conviertan en maestros y escriban en tu dispositivo principal. Luego, su dispositivo principal cambia al modo maestro, para volver a leer.

O simplemente deje su dispositivo principal como esclavo y haga que los módulos como maestros lo escriban a pedido según sea necesario.

    
respondido por el Passerby
3

El bus I 2 C per se no tiene la capacidad de un esclavo para alertar al maestro de forma asíncrona.

Puede sondear al esclavo, si se ajusta a sus requisitos (latencia, por ejemplo).

Puede agregar líneas separadas para que los dispositivos esclavos alerten al maestro de forma asíncrona. Estas líneas estarían fuera de banda con respecto al bus I 2 C (no forma parte del bus I 2 C). Para ver un ejemplo, aquí hay un expansor de E / S I2C estándar bog-estándar, que tiene una salida de alerta .

    
respondido por el Nick Alexeev
2

Para una línea de interrupción / solicitud, no usaría XOR, ya que se cancelarían dos solicitudes simultáneas. Si desea tener una línea de interrupción / solicitud común, use wired-OR: haga que los controladores se desaguen con un pull-up (al igual que las líneas I2C) alimentados a una entrada de interrupción activa-baja en su MCU. De esta manera, cuando alguno de tus esclavos se desvanece, tu maestro sabe que debe encuestar a todos.

    
respondido por el DoxyLover
1

Un chip como el PCF8575 proporciona expansión de entrada y salida I2C con funcionalidad de interrupción incorporada.

    
respondido por el Richard Crowley

Lea otras preguntas en las etiquetas