Interfaz SPI Y Arduino

Tabla de contenido:

Interfaz SPI Y Arduino
Interfaz SPI Y Arduino

Video: Interfaz SPI Y Arduino

Video: Interfaz SPI Y Arduino
Video: arduino spi 2024, Mayo
Anonim

Estudiamos la interfaz SPI y conectamos un registro de desplazamiento al Arduino, al que accederemos utilizando este protocolo para controlar los LED.

Interfaz SPI
Interfaz SPI

Necesario

  • - Arduino;
  • - registro de desplazamiento 74HC595;
  • - 8 LED;
  • - 8 resistencias de 220 Ohm.

Instrucciones

Paso 1

SPI - Interfaz de periféricos en serie o "Interfaz de periféricos en serie" es un protocolo de transferencia de datos sincrónica para conectar un dispositivo maestro con dispositivos periféricos (esclavos). El maestro suele ser un microcontrolador. La comunicación entre dispositivos se realiza a través de cuatro cables, por lo que a veces se hace referencia a SPI como "interfaz de cuatro cables". Estos neumáticos son:

MOSI (Master Out Slave In) - línea de transmisión de datos desde el maestro a los dispositivos esclavos;

MISO (Master In Slave Out) - línea de transmisión del esclavo al maestro;

SCLK (reloj en serie): pulsos de reloj de sincronización generados por el maestro;

SS (Selección de esclavo) - línea de selección de dispositivo esclavo; cuando está en la línea "0", el esclavo "comprende" que se está accediendo.

Hay cuatro modos de transferencia de datos (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), debido a la combinación de la polaridad del pulso del reloj (trabajamos en el nivel ALTO o BAJO), Polaridad del reloj, CPOL y la fase de los pulsos del reloj (sincronización en el flanco ascendente o descendente del pulso de reloj), Fase de reloj, CPHA.

La figura muestra dos opciones para conectar dispositivos usando el protocolo SPI: independiente y en cascada. Cuando se conecta de forma independiente al bus SPI, el maestro se comunica con cada esclavo individualmente. Con una cascada: los dispositivos esclavos se activan alternativamente, en cascada.

Tipos de conexiones SPI
Tipos de conexiones SPI

Paso 2

En Arduino, los buses SPI están en puertos específicos. Cada placa tiene su propia asignación de pines. Para mayor comodidad, los pines se duplican y se colocan en un conector ICSP (Programación en serie en circuito) separado. Tenga en cuenta que no hay un pin de selección esclavo en el conector ICSP - SS, ya que se supone que el Arduino se utilizará como maestro en la red. Pero si es necesario, puede asignar cualquier pin digital del Arduino como SS.

La figura muestra la asignación estándar de los pines a los buses SPI para Arduino UNO y Nano.

Implementación de SPI en Arduino
Implementación de SPI en Arduino

Paso 3

Se ha escrito una biblioteca especial para Arduino que implementa el protocolo SPI. Está conectado así: al comienzo del programa, agregue #include SPI.h

Para comenzar a trabajar con el protocolo SPI, debe establecer la configuración y luego inicializar el protocolo mediante el procedimiento SPI.beginTransaction (). Puede hacer esto con una instrucción: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Esto significa que inicializamos el protocolo SPI a una frecuencia de 14 MHz, la transferencia de datos va, comenzando desde MSB (bit más significativo), en el modo "0".

Después de la inicialización, seleccionamos el dispositivo esclavo poniendo el pin SS correspondiente en el estado BAJO.

Luego transferimos los datos al dispositivo esclavo con el comando SPI.transfer ().

Después de la transmisión, volvemos SS al estado ALTO.

Trabajar con el protocolo termina con el comando SPI.endTransaction (). Es deseable minimizar el tiempo de ejecución de la transferencia entre las instrucciones SPI.beginTransaction () y SPI.endTransaction () para que no haya superposición si otro dispositivo intenta inicializar la transferencia de datos usando diferentes configuraciones.

Transmisión SPI
Transmisión SPI

Paso 4

Consideremos la aplicación práctica de la interfaz SPI. Iluminaremos los LED controlando el registro de desplazamiento de 8 bits a través del bus SPI. Conectemos el registro de desplazamiento 74HC595 al Arduino. Nos conectamos a cada una de las 8 salidas mediante un LED (mediante una resistencia limitadora). El diagrama se muestra en la figura.

Conexión del registro de cambio 74HC595 a Arduino
Conexión del registro de cambio 74HC595 a Arduino

Paso 5

Escribamos ese boceto.

Primero, conectemos la biblioteca SPI e inicialicemos la interfaz SPI. Definamos el pin 8 como el pin de selección de esclavo. Limpiemos el registro de desplazamiento enviándole el valor "0". Inicializamos el puerto serie.

Para encender un LED específico usando un registro de desplazamiento, debe aplicar un número de 8 bits a su entrada. Por ejemplo, para que se encienda el primer LED, alimentamos el número binario 00000001, para el segundo - 00000010, para el tercero - 00000100, etc. Estos números binarios en notación decimal forman la siguiente secuencia: 1, 2, 4, 8, 16, 32, 64, 128 y son potencias de dos de 0 a 7.

En consecuencia, en el bucle () por el número de LED, recalculamos de 0 a 7. La función pow (base, grado) eleva 2 a la potencia del contador de ciclos. Los microcontroladores no funcionan con mucha precisión con números del tipo "doble", por lo que para convertir el resultado a un número entero, usamos la función round (). Y transferimos el número resultante al registro de desplazamiento. Para mayor claridad, el monitor del puerto serie muestra los valores que se obtienen durante esta operación: uno recorre los dígitos, los LED se iluminan en una onda.

Esquema para controlar el registro de desplazamiento a través del bus SPI
Esquema para controlar el registro de desplazamiento a través del bus SPI

Paso 6

Los LED se encienden a su vez y observamos una "ola" de luces que viaja. Los LED se controlan mediante un registro de desplazamiento, al que nos conectamos a través de la interfaz SPI. Como resultado, solo se utilizan 3 pines Arduino para impulsar 8 LED.

Hemos estudiado el ejemplo más simple de cómo funciona un Arduino con un bus SPI. Consideraremos la conexión de los registros de turno con más detalle en un artículo separado.

Recomendado: