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:
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:
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:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
Por: R$ 29,00
Ou em até 6x de
R$ 5,18
Por: R$ 150,00
Ou em até 18x de
R$ 10,00
Por: R$ 195,00
Ou em até 18x de
R$ 13,00
(ADS1102C) - 100MHz - 2 Canais
Por: R$ 1920,00
Ou em até 18x de
R$ 127,96
© 2013 Criado por Marcelo Rodrigues.
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)