comunicaci贸n con el bus spi con arduino creatividad codificada

Comunicaci贸n con el bus SPI en Arduino

Arduino

La comunicaci贸n con el bus SPI con Arduino es muy 煤til para la transferencia de datos entre perif茅ricos, esta comunicaci贸n es serial, s铆ncrona y Full-Duplex, est谩 pensada para la transferencia de informaci贸n de alta velocidad en distancia cortas.

Esta comunicaci贸n trabaja con un maestro y uno o varios esclavos, el maestro gestiona e inicia la comunicaci贸n mediante se帽ales de reloj.

驴C贸mo funciona el bus SPI en Arduino?

La comunicaci贸n con el bus SPI no establece un tama帽o fijo de bits para los paquetes de datos, generalmente se usan paquetes de datos de 8 bits enviando y recibiendo datos de bit a bit, que es sincronizada con los pulsos de reloj en los registros del Maestro y esclavo, con esto la polaridad nos muestra si se inici贸 en flanco de bajada o de subida y la fase actualizara los datos,  esta comunicaci贸n puede ser entre Maestro-esclavo o esclavo-Maestro por esta raz贸n se dice que es una comunicaci贸n full-duplex.

Lineas de comunicaci贸n de Arduino para el bus SPI

Para realizar alguna comunicaci贸n con este protocolo de comunicaci贸n necesitamos 4 l铆neas que se帽al.

MISO (Master In Slave Out). – Esta se帽al es usada para enviar datos desde el esclavo hacia el maestro.

MOSI (Master Out Slave In).- Al contrario de la anterior l铆nea esta es usada para enviar datos del maestro al esclavo.

SCK (Serial Clock).- Esta l铆nea es sumamente importante para realizar la sincronizaci贸n de los datos que transmitimos, esta se configura en el maestro.

SS (Slave Select).- Con esta l铆nea podemos habilitar o deshabilitar desde el maestro los perif茅ricos que conectemos al maestro, cuando el pin SS est谩 en bajo logramos comunicarnos con el maestro y cuando est谩 en alto lo que hace es ignorar al maestro.

Tipos de conexi贸n para el bus SPI en Arduino

Existe dos tipos de conexi贸n para la comunicaci贸n con el bus SPI en Arduino que se muestra a en los siguientes gr谩ficos.

Conexi贸n paralela a varios dispositivos con el bus SPI

Comunicaci贸n con el bus SPI

Conexi贸n en cascada con el bus SPI

 SPI en serie

Modos del bus SPI en Arduino

Estos modos de funcionamiento est谩n determinadas en las hojas de datos de nuestro microcontrolador y son b谩sicamente la combinaci贸n entre la polaridad (CPOL) del reloj y la fase (CPHA), en total existen 4 modos y para config煤ralo hacemos uso de los bits de control que es una condici贸n para ser usada, a continuaci贸n se muestra una imagen extra铆da de la hoja de datos de un ATmega328P para poder saber las posibles combinaciones para seleccionar el modo que usemos.

Configuraci贸n de la librer铆a SPI para Arduino

Esta librer铆a es oficial de proyecto de Arduino y esta preinstalada en el IDE de Arduino, solo debemos incluirlo escribiendo la instrucci贸n #include <SPI.h> en nuestro c贸digo fuente, como cualquier librer铆a tiene sus propias funciones que a continuaci贸n se detalla. 

SPISettings()

Este objeto se usa para la configuraci贸n del puerto SPI, donde presenta tres par谩metros, el primero es la velocidad m谩xima de frecuencia del reloj, en el segundo par谩metro se coloca el orden de datos, es decir, debemos se帽alar que bit ser谩 el primero en desplazarse en el registro, si deseamos que sea el bit m谩s significativo (MSB) usaremos la palabra reservada MSBFIRST y si deseamos que inicie con el bit menos significativo (LSB) usamos LSBFIRST, y el tercer par谩metro declaramos el modo SPI_MODE0, SPI_MODE1, SPI_MODE2 o SPI_MODE3, este objeto debe estar dentro la funci贸n SPI.beginTransaction() como par谩metro.

Al ser un objeto podemos crearlo con un nombre propio y hacerla m谩s din谩mica cambiando los par谩metros en el tiempo de ejecuci贸n. 

SPI.begin()

Esta funci贸n pone MOSI, SCK en bajo y SS en alto, esta funci贸n no tiene par谩metros y no devuelve ning煤n valor, pero es necesario para iniciar la libreria.

SPI.end()

Con esta funci贸n b谩sicamente lo que hacemos es terminar o inhabilitar nuestra comunicaci贸n en el bus SPI.

SPI.beginTransaction()

Esta funci贸n tambi茅n permite inicializar nuestra comunicaci贸n en el bus SPI pero realizando algunos ajustes con el objeto SPISettings, su sintaxis seria "SPI.beginTransaction(SPISettings(velocidad max, orden de bits, Modo))".

SPI.endTransaction()

Nos permite terminar el bus SPI.

SPI.setBitOrder()

Anteriormente se usaba para determinar el orden de los datos de los bit de desplazamiento, tiene un par谩metro que puede ser LSBFIRST o MSBFIRST, si bien se la puede usar, se recomienda usar SPISettings para determinar el orden de datos.

SPI.setClockDivider()

Con esta funci贸n podemos dividir la frecuencia del reloj con los divisores 2, 4, 8, 16, 32, 64 y 128, esta funci贸n tiene un par谩metro que pueden ser:

  • SPI_CLOCK_DIV2
  • SPI_CLOCK_DIV4
  • SPI_CLOCK_DIV8
  • SPI_CLOCK_DIV16
  • SPI_CLOCK_DIV32
  • SPI_CLOCK_DIV64
  • SPI_CLOCK_DIV128

SPI.transfer(), SPI.transfer16()

Esta funci贸n est谩 encargada del env铆o y recepci贸n de datos de 8 y 16 bits, si es de 8 bits usaremos SPI.transfer() y si es de 16 bits SPI.transfer16(), esta funci贸n pude trabajar con uno o dos par谩metros, si solo usamos un par谩metro estaremos declarando el valor del dato que deseemos hacer el envi贸 o recepci贸n de la misma, pero existe una alternativa para trabajar con el buffer y su sintaxis es sencilla SPI.transfer(buffer, tama帽o).

SPI.usingInterrupt()

Esta funci贸n es muy 煤til cuando estamos trabajando con interrupciones, esta funci贸n nos protege en posibles conflictos de programaci贸n, esta funci贸n tiene un par谩metro en la cual debemos detallar el n煤mero de interrupci贸n que estemos usando.

Pines para trabajar con el bus SPI en Arduino

Pines habilitados SPi

1 comentario sobre “Comunicaci贸n con el bus SPI en Arduino

驴Qu茅 te pareci贸 el art铆culo?

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

  * He le铆do y acepto la pol铆tica de privacidad

驴Qu茅 hacemos con tus datos?

Creatividad Codificada como responsable tratar谩 tus datos con la finalidad de gestionar tu participaci贸n en nuestro blog informativo. Puedes acceder, rectificar y suprimir tus datos, as铆 como ejercer otros derechos consultando la informaci贸n adicional y detallada sobre protecci贸n de datos en nuestra Pol铆tica de Privacidad