¿Arduino SPI usa un temporizador?

0

Planeo usar un Atebega168 barebones ejecutando un croquis de Arduino para impulsar dos motores paso a paso y un calentador. Para interactuar con los motores paso a paso y el calentador, quiero usar 4 pines PWM. También tendré una conexión SPI a un controlador host para que el host pueda solicitar una cierta cantidad de pasos a una velocidad determinada o exija que el calentador se caliente a una temperatura determinada. Para llevar a cabo la acción paso a paso necesitaré una interrupción cada 100 microsegundos más o menos.

Ahora para hacer esto, probablemente necesitaré y abriré el canal del temporizador (o me equivoco), sé que mis 4 pines PWM utilizarán 4 de los 6 canales de temporizador disponibles, pero ¿SPI utilizará alguno y posiblemente cause algunos problemas?

    
pregunta Gerharddc

2 respuestas

3

El módulo SPI tiene su propio generador de velocidad en baudios, por lo que no consume ninguno de los temporizadores. Y el generador de velocidad en baudios solo se utiliza en el modo maestro SPI. En modo esclavo, se sincroniza con el reloj del maestro externo. El único problema que puede tener con SPI es tratar con el byte de datos en un momento oportuno, ya que no es posible que un esclavo retrase SPI como lo es con I2C.

    
respondido por el alex.forencich
3

No es necesario preocuparse de que el módulo SPI use un temporizador. Un problema mayor es que la mayoría de los periféricos esclavos del controlador no están diseñados para hacer que se comporten de la manera en que funcionan la mayoría de los dispositivos esclavos sin procesador. En una conexión SPI bidireccional que utiliza un periférico esclavo típico, el tiempo entre el momento en que el maestro libera / CS y cuando lo reafirma, el tiempo entre cuando afirma / CS y cuándo comienza a registrar los datos, y el tiempo entre cuando el maestro termina marcando un byte y cuando comienza para marcar el siguiente byte, debe ser mayor que el peor de los casos para que el controlador del esclavo responda a esos eventos. No hay forma de que el maestro averigüe cuándo el esclavo está listo para algo; en cambio, el maestro debe esperar ciegamente un tiempo, y siempre debe manejar cada evento dentro de ese marco de tiempo.

Debido a estos requisitos de tiempo, el diseño de dispositivos esclavos SPI confiables es a menudo molesto. Si otras interrupciones tienen prioridad sobre las interrupciones relacionadas con SPI (incluidas la detección de flanco ascendente y de flanco descendente en / CS), puede ser difícil garantizar que los eventos SPI siempre se manejen lo suficientemente rápido para cumplir con la restricción de temporización del peor de los casos. Si las interrupciones SPI tienen prioridad, puede ser difícil evitar que las comunicaciones SPI causen fluctuaciones de tiempo en esas otras interrupciones.

Personalmente, no creo que haya ninguna razón particular por la que los proveedores de chips no puedan diseñar periféricos SPI que permitan al maestro preguntar a en cualquier momento si un esclavo estaba listo para más comunicaciones , sin necesidad de demoras ciegas, pero no conozco ninguna que lo haga.

    
respondido por el supercat

Lea otras preguntas en las etiquetas