Skip to main content
replaced http://electronics.stackexchange.com/ with https://electronics.stackexchange.com/
Source Link

With help from efox29efox29 I worked out to control the MAX5483, 10-bit digital potentiometer (data sheet here) with an arduino using SPI. Now how can I trigger more than one value?

I tried to do that with a simple for-loop, but it doesn't work. To be precise it produces a strange resistance value (68 Ohm). And even just putting a delay seems to cause the same issues..

For example

digitalPotWrite(197); //  
delay(10000); 
digitalPotWrite(60); //  
delay(10000); 

Should change the resistance between 2.1k Ohm and 688 Ohm. I assume that, since by putting just

digitalPotWrite(197);

or

digitalPotWrite(60); 

alone without delay(10000); I can measure this values with my multimeter between the pin 10 and 11 of MAX5483. But by putting it all together like I tried above, I strangely measure only 65-68 Ohm. This doesn't change by only putting the following lines:

digitalPotWrite(197); //  
delay(10000);

Here the measured value (between pin 10 and 11) is still 68 Ohm.. Here is the complete code:

#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);
}

With help from efox29 I worked out to control the MAX5483, 10-bit digital potentiometer (data sheet here) with an arduino using SPI. Now how can I trigger more than one value?

I tried to do that with a simple for-loop, but it doesn't work. To be precise it produces a strange resistance value (68 Ohm). And even just putting a delay seems to cause the same issues..

For example

digitalPotWrite(197); //  
delay(10000); 
digitalPotWrite(60); //  
delay(10000); 

Should change the resistance between 2.1k Ohm and 688 Ohm. I assume that, since by putting just

digitalPotWrite(197);

or

digitalPotWrite(60); 

alone without delay(10000); I can measure this values with my multimeter between the pin 10 and 11 of MAX5483. But by putting it all together like I tried above, I strangely measure only 65-68 Ohm. This doesn't change by only putting the following lines:

digitalPotWrite(197); //  
delay(10000);

Here the measured value (between pin 10 and 11) is still 68 Ohm.. Here is the complete code:

#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);
}

With help from efox29 I worked out to control the MAX5483, 10-bit digital potentiometer (data sheet here) with an arduino using SPI. Now how can I trigger more than one value?

I tried to do that with a simple for-loop, but it doesn't work. To be precise it produces a strange resistance value (68 Ohm). And even just putting a delay seems to cause the same issues..

For example

digitalPotWrite(197); //  
delay(10000); 
digitalPotWrite(60); //  
delay(10000); 

Should change the resistance between 2.1k Ohm and 688 Ohm. I assume that, since by putting just

digitalPotWrite(197);

or

digitalPotWrite(60); 

alone without delay(10000); I can measure this values with my multimeter between the pin 10 and 11 of MAX5483. But by putting it all together like I tried above, I strangely measure only 65-68 Ohm. This doesn't change by only putting the following lines:

digitalPotWrite(197); //  
delay(10000);

Here the measured value (between pin 10 and 11) is still 68 Ohm.. Here is the complete code:

#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);
}
added 78 characters in body
Source Link

With help from efox29 I worked out to control the MAX5483, 10-bit digital potentiometer (data sheet here) with an arduino using SPI. Now how can I trigger more than one value?

I tried to do that with a simple for-loop, but it doesn't work. To be precise it produces a strange resistance value (68 Ohm). And even just putting a delay seems to cause the same issues..

For example

digitalPotWrite(197); //  
delay(10000); 
digitalPotWrite(60); //  
delay(10000); 

Should change the resistance between 2.1k Ohm and 688 Ohm. I assume that, since by putting just

digitalPotWrite(197);

or

digitalPotWrite(60); 

alone without delay(10000); I can measure this values with my multimeter between the pin 10 and 11 of MAX5483. But by putting it all together like I tried above, I strangely measure only 65-68 Ohm. This doesn't change by only putting the following lines:

digitalPotWrite(197); //  
delay(10000);

Here the measured value (between pin 10 and 11) is still 68 Ohm.. Here is the complete code:

#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);
}

With help from efox29 I worked out to control the MAX5483, 10-bit digital potentiometer (data sheet here) with an arduino using SPI. Now how can I trigger more than one value?

I tried to do that with a simple for-loop, but it doesn't work. And even putting a delay seems to cause issues..

For example

digitalPotWrite(197); //  
delay(10000); 
digitalPotWrite(60); //  
delay(10000); 

Should change the resistance between 2.1k Ohm and 688 Ohm. I assume that, since by putting just

digitalPotWrite(197);

or

digitalPotWrite(60); 

alone without delay(10000); I can measure this values with my multimeter between the pin 10 and 11 of MAX5483. But by putting it all together like I tried above, I strangely measure only 65-68 Ohm. This doesn't change by only putting the following lines:

digitalPotWrite(197); //  
delay(10000);

Here the measured value (between pin 10 and 11) is still 68 Ohm.. Here is the complete code:

#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);
}

With help from efox29 I worked out to control the MAX5483, 10-bit digital potentiometer (data sheet here) with an arduino using SPI. Now how can I trigger more than one value?

I tried to do that with a simple for-loop, but it doesn't work. To be precise it produces a strange resistance value (68 Ohm). And even just putting a delay seems to cause the same issues..

For example

digitalPotWrite(197); //  
delay(10000); 
digitalPotWrite(60); //  
delay(10000); 

Should change the resistance between 2.1k Ohm and 688 Ohm. I assume that, since by putting just

digitalPotWrite(197);

or

digitalPotWrite(60); 

alone without delay(10000); I can measure this values with my multimeter between the pin 10 and 11 of MAX5483. But by putting it all together like I tried above, I strangely measure only 65-68 Ohm. This doesn't change by only putting the following lines:

digitalPotWrite(197); //  
delay(10000);

Here the measured value (between pin 10 and 11) is still 68 Ohm.. Here is the complete code:

#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);
}
added 684 characters in body
Source Link

With help from efox29 I worked out to control the MAX5483, 10-bit digital potentiometer (data sheet here) with an arduino using SPI. Now how can I trigger more than one value?

I tried to do that with a simple for-loop, but it doesn't work. And even putting a delay seems to cause issues..

For example

digitalPotWrite(197); //  
delay(10000); 
digitalPotWrite(60); //  
delay(10000); 

Should change the resistance between 2.1k Ohm and 688 Ohm. I assume that, since by putting just

digitalPotWrite(197);

or

digitalPotWrite(60); 

alone without delay(10000); I can measure this values with my multimeter between the pin 10 and 11 of MAX5483. But by putting it all together like I tried above, I strangely measure only 65-68 Ohm. This doesn't change by only putting the following lines:

digitalPotWrite(197); //  
delay(10000);

Here the measured value (between pin 10 and 11) is still 68 Ohm.. Here is the complete code:

#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);
}

With help from efox29 I worked out to control the MAX5483, 10-bit digital potentiometer (data sheet here) with an arduino using SPI. Now how can I trigger more than one value?

I tried to do that with a simple for-loop, but it doesn't work. And even putting a delay seems to cause issues..

#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);
}

With help from efox29 I worked out to control the MAX5483, 10-bit digital potentiometer (data sheet here) with an arduino using SPI. Now how can I trigger more than one value?

I tried to do that with a simple for-loop, but it doesn't work. And even putting a delay seems to cause issues..

For example

digitalPotWrite(197); //  
delay(10000); 
digitalPotWrite(60); //  
delay(10000); 

Should change the resistance between 2.1k Ohm and 688 Ohm. I assume that, since by putting just

digitalPotWrite(197);

or

digitalPotWrite(60); 

alone without delay(10000); I can measure this values with my multimeter between the pin 10 and 11 of MAX5483. But by putting it all together like I tried above, I strangely measure only 65-68 Ohm. This doesn't change by only putting the following lines:

digitalPotWrite(197); //  
delay(10000);

Here the measured value (between pin 10 and 11) is still 68 Ohm.. Here is the complete code:

#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);
}
edited tags
Link
Loading
Source Link
Loading