Está en la página 1de 1

#include <SPI.

h>

void setup()
{
pinMode(53,OUTPUT); //Si tienes mas de 1 esclavo en SPI, se necesita siempre el
pin 53 de SS mas cualquier otro.
pinMode(10,OUTPUT); //En este caso utilizo el pin 10 como segundo selector de
esclavo.
SPI.beginTransaction(SPISettings(500000,MSBFIRST,SPI_MODE0)); //Configuro la
velocidad de transmision y el modo SPI
digitalWrite(53,LOW); //Selecciono el esclavo asociado al pin 53, en este caso el
MCP6S22
SPI.transfer(0x40); //Accedo al registro de ganancias
SPI.transfer(0x01); //Pongo una ganancia de +2 en el canal 0 (predeterminado)
digitalWrite(53,HIGH); //Corto la comunicacion con el esclavo
delay(1000); //Doy un tiempo para que se realice la medida necesaria a la salida
del MCP
digitalWrite(53,LOW); //Selecciono el esclavo
SPI.transfer(0x41); //Accedo al registro de canales
SPI.transfer(0x01); //Selecciono el canal 1 como entrada al integrado
digitalWrite(53,HIGH); //Corto la comunicacion
digitalWrite(53,LOW); //Selecciono el esclavo
SPI.transfer(0x40); //Accedo al registro de ganancias
SPI.transfer(0x04); //Pongo una ganancia de +8 (Siendo el canal 1 mi entrada, la
cual he seleccionado previamente)
digitalWrite(53,HIGH); //Corto la comunicacion
delay(1000); //Doy un tiempo para que se realice la medida necesaria a la salida
del MCP
SPI.beginTransaction(SPISettings(8000000,MSBFIRST,SPI_MODE0)); //Configuro la
velocidad de transmision y el modo SPI para el segundo integrado
}

void loop()
{
for(int i = 0; i<4096;i+=32)
{
salida(i); //Este for dibujara el diente de sierra mediante una variable que
crece en forma de rampa y al llegar a un valor maximo vuelve a cero y empieza a
crecer de nuevo
}
}

void salida (unsigned int valor)


{
byte LSB = valor & 0xFF; //La variable valor que varia entre 0 y 4096 ocupa dos
bytes, por lo que se debe dividir en dos partes
byte MSB = (valor >> 8 & 0xFF)|0x10; //Con el 0x10 me aseguro que el bit
correspondiente a SHDN esta a 1, es decir, en modo activo (p.22 del datasheet)
digitalWrite(10,LOW); //Selecciono al esclavo
SPI.transfer(MSB); //Le envio los MSB de la variable valor
SPI.transfer(LSB); //Le envio los LSB de la variable valor
digitalWrite(10,HIGH); //Deselecciono el esclavo
}

También podría gustarte