Interface SPI E Arduino

Índice:

Interface SPI E Arduino
Interface SPI E Arduino

Vídeo: Interface SPI E Arduino

Vídeo: Interface SPI E Arduino
Vídeo: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Maio
Anonim

Estudamos a interface SPI e conectamos um shift register ao Arduino, que acessaremos usando este protocolo para controlar os LEDs.

Interface SPI
Interface SPI

Necessário

  • - Arduino;
  • - registrador de deslocamento 74HC595;
  • - 8 LEDs;
  • - 8 resistores de 220 Ohm.

Instruções

Passo 1

SPI - Serial Peripheral Interface ou "Serial Peripheral Interface" é um protocolo de transferência de dados síncrono para interface de um dispositivo mestre com dispositivos periféricos (escravo). O mestre geralmente é um microcontrolador. A comunicação entre os dispositivos é realizada por meio de quatro fios, razão pela qual o SPI às vezes é chamado de "interface de quatro fios". Esses pneus são:

MOSI (Master Out Slave In) - linha de transmissão de dados do mestre para os dispositivos escravos;

MISO (Master In Slave Out) - linha de transmissão do escravo para o mestre;

SCLK (Serial Clock) - pulsos do relógio de sincronização gerados pelo mestre;

SS (Slave Select) - linha de seleção do dispositivo escravo; quando na linha "0", o escravo "entende" que está sendo acessado.

Existem quatro modos de transferência de dados (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), devido à combinação da polaridade do pulso do relógio (trabalhamos no nível ALTO ou BAIXO), Polaridade do relógio, CPOL e a fase dos pulsos do relógio (sincronização na borda ascendente ou descendente do pulso de clock), Clock Phase, CPHA.

A figura mostra duas opções para conectar dispositivos usando o protocolo SPI: independente e em cascata. Quando conectado de forma independente ao barramento SPI, o mestre se comunica com cada escravo individualmente. Com uma cascata - os dispositivos escravos são acionados alternadamente, em cascata.

Tipos de conexões SPI
Tipos de conexões SPI

Passo 2

No Arduino, os barramentos SPI estão em portas específicas. Cada placa tem sua própria atribuição de pino. Por conveniência, os pinos são duplicados e colocados em um conector ICSP (In Circuit Serial Programming) separado. Observe que não há pino de seleção escravo no conector ICSP - SS, uma vez que presume-se que o Arduino será usado como mestre na rede. Mas, se necessário, você pode atribuir qualquer pino digital do Arduino como um SS.

A figura mostra a atribuição padrão dos pinos aos barramentos SPI para o Arduino UNO e o Nano.

Implementação de SPI no Arduino
Implementação de SPI no Arduino

etapa 3

Uma biblioteca especial foi escrita para o Arduino que implementa o protocolo SPI. Ele está conectado assim: no início do programa, adicione #include SPI.h

Para começar a trabalhar com o protocolo SPI, você precisa definir as configurações e inicializar o protocolo usando o procedimento SPI.beginTransaction (). Você pode fazer isso com uma instrução: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Isso significa que inicializamos o protocolo SPI na frequência de 14 MHz, a transferência de dados vai, a partir do MSB (bit mais significativo), no modo "0".

Após a inicialização, selecionamos o dispositivo escravo colocando o pino SS correspondente no estado LOW.

Em seguida, transferimos os dados para o dispositivo escravo com o comando SPI.transfer ().

Após a transmissão, retornamos SS ao estado ALTO.

O trabalho com o protocolo termina com o comando SPI.endTransaction (). É desejável minimizar o tempo de execução da transferência entre as instruções SPI.beginTransaction () e SPI.endTransaction () para que não haja sobreposição se outro dispositivo tentar inicializar a transferência de dados usando configurações diferentes.

Transmissão SPI
Transmissão SPI

Passo 4

Vamos considerar a aplicação prática da interface SPI. Acenderemos os LEDs controlando o registrador de deslocamento de 8 bits por meio do barramento SPI. Vamos conectar o registrador de deslocamento 74HC595 ao Arduino. Conectamos a cada uma das 8 saídas por meio de um LED (por meio de um resistor de limitação). O diagrama é mostrado na figura.

Conectando o registrador de deslocamento 74HC595 ao Arduino
Conectando o registrador de deslocamento 74HC595 ao Arduino

Etapa 5

Vamos escrever esse esboço.

Primeiro, vamos conectar a biblioteca SPI e inicializar a interface SPI. Vamos definir o pino 8 como o pino de seleção do escravo. Vamos limpar o registrador de deslocamento enviando o valor "0" para ele. Inicializamos a porta serial.

Para acender um LED específico usando um registrador de deslocamento, você precisa aplicar um número de 8 bits à sua entrada. Por exemplo, para que o primeiro LED acenda, alimentamos o número binário 00000001, para o segundo - 00000010, para o terceiro - 00000100, etc. Esses números binários em notação decimal formam a seguinte sequência: 1, 2, 4, 8, 16, 32, 64, 128 e são potências de dois de 0 a 7.

Consequentemente, no loop () pelo número de LEDs, recalculamos de 0 a 7. A função pow (base, grau) aumenta 2 à potência do contador de ciclos. Os microcontroladores não funcionam com muita precisão com números do tipo "duplo", portanto, para converter o resultado em um número inteiro, usamos a função round (). E transferimos o número resultante para o registrador de deslocamento. Para maior clareza, o monitor da porta serial exibe os valores obtidos durante esta operação: um percorre os dígitos - os LEDs acendem em uma onda.

Sketch para controlar o registro de deslocamento através do barramento SPI
Sketch para controlar o registro de deslocamento através do barramento SPI

Etapa 6

Os LEDs acendem por sua vez, e observamos uma "onda" de luzes em movimento. Os LEDs são controlados por meio de um registrador de deslocamento, ao qual nos conectamos por meio da interface SPI. Como resultado, apenas 3 pinos do Arduino são usados para acionar 8 LEDs.

Estudamos o exemplo mais simples de como um Arduino funciona com um barramento SPI. Consideraremos a conexão de registradores de deslocamento com mais detalhes em um artigo separado.

Recomendado: