Con la ayuda de efox29 trabajé para controlar el MAX5483, potenciómetro digital de 10 bits (hoja de datos < a href="http://datasheets.maximintegrated.com/en/ds/MAX5481-MAX5484.pdf"> here ) con un arduino utilizando SPI. Ahora, ¿cómo puedo activar más de un valor?
Traté de hacer eso con un simple bucle for, pero no funciona. Para ser precisos produce un valor de resistencia extraño (68 Ohm). E incluso solo poner un retraso parece causar los mismos problemas ...
Por ejemplo
digitalPotWrite(197); //
delay(10000);
digitalPotWrite(60); //
delay(10000);
Debería cambiar la resistencia entre 2.1k Ohm y 688 Ohm. Asumo que, ya que al poner solo
digitalPotWrite(197);
o
digitalPotWrite(60);
solo sin demora (10000); Puedo medir estos valores con mi multímetro entre el pin 10 y el 11 de MAX5483. Pero al juntarlo todo como lo intenté arriba, extrañamente mido solo 65-68 Ohm. Esto no cambia al poner solo las siguientes líneas:
digitalPotWrite(197); //
delay(10000);
Aquí el valor medido (entre el pin 10 y el 11) todavía es de 68 Ohm. Aquí está el código completo:
#include <SPI.h>
const int csPin = 3;
const int selPin = 2;
void setup() {
SPI.begin();
SPI.setBitOrder(MSBFIRST); //We know this from the Data Sheet
SPI.setDataMode(SPI_MODE2);
pinMode(csPin,OUTPUT);
digitalWrite(csPin, LOW);
pinMode(selPin,OUTPUT);
digitalWrite(selPin, HIGH);
}
void loop()
{
//"sweep" small range (from 1.7 to 2.1 KOhm)
// 158 to 197
//
// for (int i=158; i < 211; i++){
// delay(1000);
// digitalPotWrite(i); //
// }
digitalPotWrite(197); //
delay(100); // seems to cause issues.. without this line it works
}
void digitalPotWrite(int value) {
digitalWrite(csPin, LOW);
delay(1);
byte command=0x0;
byte byte0 = (value & 0x03) << 6;
byte byte1 = (value & 0x3FC) >> 2;
SPI.transfer(command);
SPI.transfer(byte1);
SPI.transfer(byte0);
delay(1);
digitalWrite(csPin, HIGH);
}