如何用模拟值控制Mcp41010游标位置

时间:2016-05-01 04:34:41

标签: arduino microchip arduino-ide

我正在使用Mcp41010数字电位器芯片,我想知道如何使用我可以调节的模拟输入电压来改变芯片的游标位置,如果电压超过,我需要一种减小( - )游标位置的方法某个点并将芯片的游标位置递增(++)回到正常位置这是我发现的一些代码,只是上下淡化雨刮器位置我需要一种控制它的方法。我仍然对arduino很新,很抱歉,如果我的解释很清楚的话。

int CS_signal = 12;                      // Chip Select signal onsul pin 2 of Arduino
int CLK_signal = 52;                     // Clock signal on pin 4 of Arduino
int MOSI_signal = 51;                    // MOSI signal on pin 5 of Arduino
byte cmd_byte2 = B00010001 ;            // Command byte
int initial_value = 100;                // Setting up the initial value

void initialize() {                     // send the command byte of value 100 (initial value)
spi_out(CS_signal, cmd_byte2, initial_value);
}

void spi_out(int CS, byte cmd_byte, byte data_byte){                         // we need this function to send command byte and data byte to the chip

digitalWrite (CS, LOW);                                                 //  to start the transmission, the chip select must be low
spi_transfer(cmd_byte); // invio il COMMAND BYTE
delay(2);
spi_transfer(data_byte); // invio il DATA BYTE
delay(2);
digitalWrite(CS, HIGH);                                                 //     to stop the transmission, the chip select must be high
}

void spi_transfer(byte working) {
for(int i = 1; i <= 8; i++) {                                           //      Set up a loop of 8 iterations (8 bits in a byte)
if (working > 127) { 
digitalWrite (MOSI_signal,HIGH) ;                                    // If the MSB is a 1 then set MOSI high
} else { 
digitalWrite (MOSI_signal, LOW) ; }                                  // If the MSB is a 0 then set MOSI low                                           

digitalWrite (CLK_signal,HIGH) ;                                        //  Pulse the CLK_signal high
working = working << 1 ;                                                // Bit-shift the working byte
digitalWrite(CLK_signal,LOW) ;                                          // Pulse the CLK_signal low
}
}

void setup() {
pinMode (CS_signal, OUTPUT);
pinMode (CLK_signal, OUTPUT);
pinMode (MOSI_signal, OUTPUT);

initialize();

Serial.begin(9600);                                                     // setting the serial speed
Serial.println("ready!");
}

void loop() {
for (int i = 0; i < 255; i++) {
spi_out(CS_signal, cmd_byte2, i); 
Serial.println(i); delay(10); 
}
for (int i = 255; i > 0; --i) {
spi_out(CS_signal, cmd_byte2, i);
Serial.println(i);
delay(10);
}
}

1 个答案:

答案 0 :(得分:0)

int CS_signal = 12;                      // Chip Select signal onsul pin 2     of Arduino
int CLK_signal = 52;                     // Clock signal on pin 4 of Arduino
int MOSI_signal = 51;                    // MOSI signal on pin 5 of Arduino
byte cmd_byte2 = B00010001 ;            // Command byte
int initial_value = 100;                // Setting up the initial value

void initialize() {                     // send the command byte of value 100 (initial value)
spi_out(CS_signal, cmd_byte2, initial_value);

}

void spi_out(int CS, byte cmd_byte, byte data_byte){                        // we need this function to send command byte and data byte to the chip

digitalWrite (CS, LOW);                                                 // to start the transmission, the chip select must be low
spi_transfer(cmd_byte); // invio il COMMAND BYTE
delay(2);
spi_transfer(data_byte); // invio il DATA BYTE
delay(2);
digitalWrite(CS, HIGH);                                                 // to stop the transmission, the chip select must be high
}

void spi_transfer(byte working) {
for(int i = 1; i <= 8; i++) {                                           // Set up a loop of 8 iterations (8 bits in a byte)
 if (working > 127) { 
   digitalWrite (MOSI_signal,HIGH) ;                                    //  If the MSB is a 1 then set MOSI high
 } else { 
   digitalWrite (MOSI_signal, LOW) ; }                                  // If the MSB is a 0 then set MOSI low                                           

digitalWrite (CLK_signal,HIGH) ;                                        // Pulse the CLK_signal high
working = working << 1 ;                                                // Bit-shift the working byte
digitalWrite(CLK_signal,LOW) ;                                          // Pulse the CLK_signal low
}
}

void setup() {
pinMode (CS_signal, OUTPUT);
pinMode (CLK_signal, OUTPUT);
pinMode (MOSI_signal, OUTPUT);

initialize();

Serial.begin(9600);                                                     // setting the serial speed
Serial.println("ready!");
}

  void loop() {
  //  read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  if(sensorValue <= 200){
  //  Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
   float voltage = sensorValue * (5.0 / 1023.0);
   //   print out the value you read:
   Serial.println(voltage);

    int i = sensorValue;{
    spi_out(CS_signal, cmd_byte2, i); 
    Serial.println(i); 

   }
   }

   }