Approved Reseller
Approved Reseller
Entre los protocolos de comunicación más populares para conectar perifericos a un microcontrolador está el protocolo SPI. Se trata de un protocolo serial mediante el cual puedes transferir información entre un dispositivo maestro y uno esclavo de forma rápida y eficaz.
Resumen: En este tutorial aprenderás a comunicar un Arduino Uno con un registro de corrimiento de 8 bits mediante comunicación SPI, para mostrar los datos en 8 LEDs.
SPI significa Serial Peripherial Interface o Interfaz de Perifericos Seriales, este tipo de protocolo permite establecer una comunicación de alta velocidad entre uno o varios dispositivos. La transmisión de datos se realiza de manera sincrona, es decir, los datos se envían cada pulso de una señal de reloj. Este tipo de comunicación permite enviar y recibir datos de manera simultánea, aunque solo permite que un dispositivo sea el maestro.
Para hacer funcionar este protocolo tenemos 4 lineas principales: CLK , MISO, MOSI y CS. CLK es la señal de reloj que administra los datos, MOSI es la salida del maestro hacia el esclavo y MISO es la entrada del maestro desde el esclavo para recibir los datos. CS es la salida del maestro que permite seleccionar el dispositivo esclavo al que mandará los datos. La desventaja de este protocolo es que se requiere una salida por cada dispositivo a manejar.
La comunicación lleva el siguiente proceso:
Veamos el código en Arduino para ver la implementación. Para usar el protocolo es necesario incluir la libreria SPI.h y en este caso declaramos un pin de selección de esclavo, el pin 2. Lo configuramos como salida, establecemos la comunicación y dentro del loop mandamos los datos al registro SPI.
#include int slaveSelect = 2; //Este pin selecciona el esclavo a manejar int delayTime = 250; //Pausa entre cada transferencia de datos void setup() { pinMode(slaveSelect, OUTPUT); //configuramos el selector como salida SPI.begin(); //iniciamos la comunicación SPI.setBitOrder(LSBFIRST); //el orden de transferencia manda primero //el bit de menor valor } //MSBFIRST manda el de mayor peso primero void loop() { for (int i; i < 256; i++) { digitalWrite(slaveSelect, LOW); SPI.transfer(i); digitalWrite(slaveSelect, HIGH); delay(delayTime); } }
Este es un diagrama del cableado que tenemos que realizar. Usaremos el shift register 74HC595. Como se puede observar los pines SCK y MOSI para el Arduino UNO siempre serán los pines 13 y 11, respectivamente. Dado que no recibimos datos del dispositivo esclavo no usamos MISO, pero ese corresponde al pin 12 del Arduino UNO.
Si todo salió en orden deberías poder observar los LEDs encendiéndose y apagándose de manera incremental, acorde a un conteo binario. En este caso el LED rojo es el de menor peso, por lo que debería parpadear más rápido. Si cambias el formato por MSBFIRST el primer LED verde será ahora el de mejor peso.
Busca aquí el código que acabamos de utilizar: Repositorio
Y con esto concluimos el tutorial, este ejemplo sirvió para entender de forma rápida el protocolo de comunicación e implementar una aplicación rápida, pero puede utilizar cualquier dispositivo SPI, basta con seguir la misma secuencia de pasos.
Referencias: