Arduino é um quadro de desenvolvimento eletrônico que é executado usando um microcontrolador. Ele processa instruções e gera a saída desejada. A comunicação desempenha um papel importante durante o processamento do código Arduino. Para fazer isso, Arduino tem vários protocolos de comunicação como USART, I2C e SPI. Para ler mais sobre os protocolos de comunicação em detalhes, clique aqui. Hoje discutiremos como o SPI (interface periférica em série) é usada em Arduino.
Interface periférica em série (SPI)
A interface periférica em série (SPI) é um protocolo de dados serial síncronos usado por microcontroladores de arduino para fins de comunicação com um ou mais dispositivos periféricos rapidamente a distâncias curtas. Também pode ser usado para comunicação entre dois microcontroladores.
SPI é uma comunicação duplex completa, o que significa que pode enviar e ler dados ao mesmo tempo. Entre os três protocolos de comunicação (USART, SPI e I2C) em Arduino SPI é mais rápido. O SPI possui aplicativos onde é necessária alta taxa de dados, como exibir texto nas telas ou escrever dados no cartão SD.
SPI funciona usando quatro linhas:
Atualizar: De acordo com a documentação oficial do Arduino, o SPI em Arduino não suporta mais essas terminologias. Abaixo da tabela mostra as novas terminologias:
Mestre/Escravo (velho) | Controlador/periférico (novo) |
Mestre em Slave Out (Miso) | Controlador em, Periférico Out (CIPO) |
Mestre escravo em (Mosi) | Controlador fora periférico em (copi) |
Pino de seleção de escravos (SS) | Chip Select Pin (CS) |
Pinagem spi em arduino uno
O protocolo SPI é suportado por várias placas Arduino aqui, discutimos o suporte do Arduino Uno para o SPI. A seguir estão os pinos usados por Arduino Uno para comunicação periférica em série.
Linha spi | Gpio | PIN do cabeçalho do ICSP |
Sck | 13 | 3 |
MISSÔ | 12 | 1 |
Mosi | 11 | 4 |
Ss | 10 | - |
SPI na configuração de escravos mestre
Conectar um dispositivo mestre ao escravo único é simples, apenas temos que conectar os dois com o mesmo pino. Uma vez que o dispositivo mestre e escravo esteja conectado como mostrado na imagem abaixo. Primeiro, temos que definir o SS (linha de seleção de escravos) no dispositivo mestre como baixo. Permanecerá baixo durante a transmissão de dados. Linha SS baixa prepare escravo para enviar ou receber dados. Depois que o SS é baixo, o dispositivo pode enviar dados usando a linha MOSI e pode produzir sinais de relógio para comunicação síncrona usando o pino SCLK.
SPI na configuração de escravo múltiplo mestre único
O SPI também suporta vários dispositivos de escravos, uma linha SS separada (seleção de escravos) é usada para cada escravo. Ao contrário de um único escravo aqui, o mestre precisa de uma linha SS separada para cada escravo. O trabalho de configuração de dispositivos escravos únicos e múltiplos é de alguma forma semelhante. Dispositivo mestre puxe a linha SS de escravo em particular para baixo, que informa o dispositivo escravo que o mestre vai enviar ou receber dados desse escravo.
A imagem a seguir ilustra a configuração de dispositivo escravo múltiplo mestre único.
A configuração da cadeia da margara é outra maneira de conectar vários dispositivos escravos. Onde o mestre não precisa de múltiplas linhas SS para cada escravo, na verdade, uma única linha SS está conectada ao primeiro dispositivo de escravo. Depois que o dispositivo mestre puxa a linha SS para baixo, ele envia sinais para todo o dispositivo escravo para estar pronto para comunicação no Pin Mosi. Em seguida, o dispositivo mestre envie dados para Mosi Pin do primeiro dispositivo escravo.
Ao mesmo tempo, o mestre envia um sinal de relógio no pino SCK. Os dados são enviados de um escravo para outro e o pino SS é definido tão baixo durante essa duração. O mestre deve enviar sinal de relógio suficiente para alcançá -lo até o último dispositivo de escravo. Os dados recebidos de um dispositivo escravo específico serão recebidos pelo mestre em seu pino miso.
A imagem a seguir ilustra a configuração da cadeia de margaridas.
Como programar a comunicação Arduino para SPI
Agora vamos pegar duas pranchas de Arduino e passar uma corda de uma placa Arduino, que é mestre para o segundo Arduino, que está atuando como escravo. Lembre -se de abrir duas janelas separadas do Arduino IDE antes de enviar o código, caso contrário, há uma grande chance de enviar o mesmo código em ambos os Arduino.
Antes de fazer o upload do código, selecione a porta COM na qual o Arduino está conectado. Ambos os Arduino devem ser conectados em portas COM separadas.
O circuito
Conecte duas placas Arduino, como mostradas no circuito abaixo. Certifique -se de conectar as duas placas ao GND e conectar todos os outros quatro pinos SPI do pino 10 a 13 dos dois Arduino.
Hardware
Abaixo está a imagem de hardware de duas placas Arduino conectadas ao PC usando o cabo USB.
Código mestre
/*Código mestre Arduino*/
#include /*biblioteca SPI incluída* /
Void Setup ()
Serial.começar (115200); /*Taxa de transmissão definida para comunicação serial*/
DigitalWrite (SS, alto); /*(SS) Selecionar linha de seleção desativada*/
Spi.começar(); /*A comunicação SPI começa*/
Spi.setClockDivider (spi_clock_div8); /*Relógio dividido por 8*/
Void Loop ()
char char_str; /*Variável definida para enviar dados*/
DigitalWrite (SS, baixo); /*(SS) Selecionar escravo ativado*/
para (const char * p = "linuxhint.Com \ r "; char_str =*p; p ++) /*string de teste enviado* /
Spi.transferência (char_str); /*Transferência spi começam*/
Serial.impressão (char_str); /*String é impressa*/
DigitalWrite (SS, alto);
Atraso (2000);
Aqui no código acima, incluímos a Biblioteca SPI para comunicação. Em seguida, começamos definindo a taxa de transmissão para ver a produção na linha de seleção de escravos do monitor serial está desativada usando a gravação digital. Para começar a comunicação SPI Spi.começar() é usado.
Na parte do loop do código, uma variável de char é definida para armazenar a string que vamos enviar escravos Arduino. Em seguida, uma string “Linuxhint.Com ” é definido que é transferido para o escravo Arduino usando o SPI.transferir(). Para ver a sequência de entrada no monitor serial Serial.imprimir() função é usada.
Código de escravos
/*Código de Arduino de escravos*/
#include /*biblioteca SPI incluída* /
buffer de char [50]; /*Buffer definido para armazenar string recebida de mestre*/
Índice de bytes volátil; /*Salvar dados da string*/
processo booleano volátil;
Void Setup ()
Serial.começar (115200);
pinmode (miso, saída); /*Miso definido como saída para enviar dados para master*/
Spcr | = _bv (spe); /*Spi no modo escravo ativo*/
índice = 0; /*Buffer vazio*/
processo = false;
Spi.anexinterrupt (); /*Ligue a interrupção*/
Isr (spi_stc_vect) /*rotina de interrupção spi* /
byte char_str = spdr; /*Leia o byte do SPI Data Register*/
if (índice < sizeof buffer)
buffer [index ++] = char_str; /*Dados salvos no índice de Buff de matriz*/
if (char_str == '\ r') /*verifique se a string termina* /
processo = true;
Void Loop ()
if (processo)
processo = false; /*Redefinição do processo*/
Serial.println (buffer); /*Matriz recebida impressa no monitor serial*/
índice = 0; /*Redefinir botão para zero*/
O código acima é carregado para escravos Arduino, onde começamos definindo três variáveis buffer, índice e processo. A variável buffer armazenará a sequência de entrada do mestre Arduino, enquanto o índice procurará o índice de elementos dentro da string e assim que toda a string for impressa, o processo interromperá o programa e reiniciará para zero. Depois disso, o escravo começará a receber dados do Master Arduino e será impresso no monitor serial.
Saída
A saída pode ser vista em duas janelas diferentes do Arduino IDE. A saída do mestre e do escravo Arduino é impresso no monitor serial.
Conclusão
A interface periférica em série é um importante protocolo de comunicação usado na programação Arduino que ajuda os usuários a controlar vários dispositivos usando uma única placa Arduino. O SPI é mais rápido que o USART e o protocolo I2C. Ele pode ser implementado em duas configurações diferentes mestre com escravo único ou múltiplos escravos. Este artigo fornece uma visão de como o Arduino pode ser conectado para comunicação SPI.