Adquira componentes na Loja do Lab de Garagem
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:
Comentar
Usando dois HEF4094 com SPI :
Olá galera!
tenho um arduino uno, uma wifi shield e um datalogger arduino.
https://www.arduino.cc/en/Main/ArduinoWiFiShield
https://www.adafruit.com/product/1141
Quando ponho no arduino a wifi shield+datalogger shield, a wifi shield deixa de ser reconhecida.... ambas usam o protocolo SPI, a wifi shield tem com SS o pino 10 e a data logger o pino 5. Se mantiver a data logger acoplada no arduino mas remover o cartao já reconhece, mas assim nao posso guardar dados :/ Não consigo por ambas a funcionar em conjunto com o arduino...
Alguma ideia do que poderá ser?
Obrigado!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)