Tutorial: Comunicação SPI (Serial Peripheral Interface) com Arduino

A Serial Peripheral Interface é um protocolo de dados seriais síncronos utilizado em microcontroladores para comunicação entre o microcontrolador e um ou mais periféricos. Também pode ser utilizado entre dois microcontroladores.

A comunicação SPI sempre tem um master. Isto é, sempre um será o master e o restante será slave. Por exemplo, o arduino é o master e os outros periféricos são slave. Esta comunicação contém 4 conexões:

  • MISO (Master IN Slave OUT) - Dados do Slave para Master;
  • MOSI (Master OUT Slave IN) - Dados do Master para Slave;
  • SCK (Serial Clock) - Clock de sincronização para transmissão de dados entre o Master e Slave;
  • SS (Slave Select) - Seleciona qual Slave receberá os dados.

Na figura acima mostra um exemplo de como funciona a comunicação SPI. Alguns periféricos são apenas Slave, por exemplo, cartão SD, memória flash e alguns sensores.

Geralmente estes periféricos contém a mesma pinagem que acima ou a pinagem abaixo:

  • SDI - Slave Data IN - Pino de dados de entrada;
  • SDO - Slave Data OUT - Pino de dados de saída;
  • CS - Seleção de Chip;
  • SCK - Clock de sincronização.

O arduino contém uma biblioteca pronta chamada SPI library. O qual você pode mandar dados para periféricos SPI.

Vamos pegar o exemplo "DigitalPotControl" disponível na IDE do Arduino para mostrar seu funcionamento. Para este exemplo vamos utilizar o AD5206. Este Circuito integrado é um potenciômetro digital. Primeiramente faça a seguinte ligação:

Agora abra a IDE do Arduino e abra o exemplo em "File/Examples/SPI/DigitalPotControl". A programação está mostrada abaixo:

/*
Digital Pot Control

This example controls an Analog Devices AD5206 digital potentiometer.
The AD5206 has 6 potentiometer channels. Each channel's pins are labeled
A - connect this to voltage
W - this is the pot's wiper, which changes when you set it
B - connect this to ground.

The AD5206 is SPI-compatible,and to command it, you send two bytes,
one with the channel number (0 - 5) and one with the resistance value for the
channel (0 - 255).

The circuit:
* All A pins of AD5206 connected to +5V
* All B pins of AD5206 connected to ground
* An LED and a 220-ohm resisor in series connected from each W pin to ground
* CS - to digital pin 10 (SS pin)
* SDI - to digital pin 11 (MOSI pin)
* CLK - to digital pin 13 (SCK pin)

created 10 Aug 2010
by Tom Igoe

Thanks to Heather Dewey-Hagborg for the original tutorial, 2005

*/


// inslude the SPI library:
#include <SPI.h>


// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;

void setup() {
// set the slaveSelectPin as an output:
pinMode (slaveSelectPin, OUTPUT);
// initialize SPI:
SPI.begin();
}

void loop() {
// go through the six channels of the digital pot:
for (int channel = 0; channel < 6; channel++) {
// change the resistance on this channel from min to max:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, level);
delay(10);
}
// wait a second at the top:
delay(100);
// change the resistance on this channel from max to min:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, 255 - level);
delay(10);
}
}

}

int digitalPotWrite(int address, int value) {
// take the SS pin low to select the chip:
digitalWrite(slaveSelectPin,LOW);
// send in the address and value via SPI:
SPI.transfer(address);
SPI.transfer(value);
// take the SS pin high to de-select the chip:
digitalWrite(slaveSelectPin,HIGH);
}

No primeiro "for" é escolhido o Led que acenderá e apagará. No segundo "for" aumenta a intensidade do Led. E no terceiro "for" diminui a intensidade do Led.

Conecte seu Arduino na porta USB do seu PC e selecione a versão do seu Arduino (UNO, Duemilanove, etc) em "Tools/Boards". Selecione a porta (COMx, ttyUSBx, ttyACMx, etc) em que seu Arduino está conectado em "Tools/Serial Port". Por fim, clique em UPLOAD.

Ao terminar de fazer o UPLOAD, cada Led acenderá e apagará devagar. 

E é isso! Esperamos que tenha gostado! Em caso de dúvidas, poste aqui neste blog! para sugestões de tutoriais, clique aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui, respectivamente! Até a próxima!

Referências:

http://arduino.cc/en/Tutorial/SPIDigitalPot

http://arduino.cc/en/Reference/SPI

Exibições: 2337

Tags: SPI, arduino, comunicacao, tutorial

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Publicidade

Convide um amigo para o Lab!

 Loja Lab de Garagem

Novo!

Garagino Rev1

Por: R$ 29,00

Ou em até 6x de

R$ 5,18 

Novo!

Estação de Solda

Temperatura Ajustável - 50W

Por: R$ 150,00

Ou em até 18x de

R$ 10,00

 

Exclusividade do LdG!

Android 4.0 Mini PC

Por: R$ 195,00

Ou em até 18x de

R$ 13,00

Osciloscópio Digital

(ADS1102C) - 100MHz - 2 Canais

Por: R$ 1920,00

Ou em até 18x de

R$ 127,96

© 2013   Criado por Marcelo Rodrigues.

Badges  |  Relatar um incidente  |  Termos de serviço