Intento trabajar desesperadamente con un programa arduino para controlar el potenciómetro digital MAX5483 de 10 bits con SPI, pero algo no funciona. Obtengo algunos valores de resistencia, pero el protocolo está implementado incorrectamente, me temo ... ¿Por qué mi código arduino a continuación no funciona?
Aquí está el código arduino:
#include <SPI.h>
const int csPin = 3;
const int selPin = 2;
void setup() {
SPI.begin();
SPI.setBitOrder(MSBFIRST);
pinMode(csPin,OUTPUT);
digitalWrite(csPin, LOW);
pinMode(selPin,OUTPUT);
digitalWrite(selPin, HIGH);
}
void loop()
{
digitalPotWrite(250);
}
// When working
// 512 = 5070 Ohm
// 0 = 70 Ohm
// 1 = 80
// 1023 = 10070
void digitalPotWrite(int value) {
digitalWrite(csPin, LOW);
byte command=0x0;
SPI.transfer(command);
byte byte0 = (value >> int(value/255));
byte byte1 = ((value & B11) << 6);
SPI.transfer(byte0);
SPI.transfer(byte1);
digitalWrite(csPin, HIGH);
}
Aquí está la hoja de datos. Aquí hay un código para un PIC, que debería funcionar:
#include <main.h>
int16 count = 0;
int16 tmp;
void write_pot(int16 data)
{
output_high(PIN_C2); //chip select
output_high(PIN_C3); //clock
output_low(PIN_C4); //Data
delay_us(1);
output_low(PIN_C2); //chip select
delay_us(1);
for(tmp=0;tmp<24;tmp++)
{
if(tmp<8)
output_low(PIN_C4); //Data
else if (tmp<18)
{
if(data&(0x0001<<(9-(tmp-8))))
output_high(PIN_C4); //Data
else
output_low(PIN_C4); //Data
}
output_low(PIN_C3); //clock
delay_us(1);
output_high(PIN_C3); //clock
}
delay_us(1);
output_high(PIN_C2);
output_toggle(PIN_C1);
}
void main()
{
// spispi_write( )
while(TRUE)
{
if(count<200)
count++;
else
count = 50;
// printf("\n\r=%ld",count);
write_pot(count);
if(count==50)
delay_ms(100);
else
delay_us(10);
}
}