Update...
So, I can get the LSB if I brute-force the method as below..
But I would rather use the SPI library, as I suspect that it is more efficient than this approach.
BTW, as you can see, this is just a quick test with the Pot addrs and cmd hard coded into the commandbits parameter.
Serial.println("***********readWiper1 brut force******************");
//set pin modes
pinMode(DIGIPOT1_CS, OUTPUT);
pinMode(DATAOUT, OUTPUT);
pinMode(DATAIN, INPUT);
pinMode(SPICLOCK, OUTPUT);
//disable device to start with
digitalWrite(DIGIPOT1_CS,HIGH);
digitalWrite(DATAOUT,LOW);
digitalWrite(SPICLOCK,LOW);
digitalWrite(DIGIPOT1_CS,LOW); //Enable Pot1
byte commandbits = B00011100; //command bits - XXXX address, YY cmd, ZZ Error & data
for (int i=7; i>=0; i--){
digitalWrite(DATAOUT,(unsigned int)commandbits>>i);
//cycle clock
digitalWrite(SPICLOCK,HIGH);
digitalWrite(SPICLOCK,LOW);
}
byte ReadPotValue = 0b00000000;
for (int i=7; i>=0; i--){
ReadPotValue += digitalRead(DATAIN)<<i;
//cycle clock
digitalWrite(SPICLOCK,HIGH);
digitalWrite(SPICLOCK,LOW);
}
Serial.print("ReadPotValue = ");
Serial.println(ReadPotValue, BIN);
Serial.print("ReadPotValue = ");
Serial.println(ReadPotValue);
But, I would still like to know why SPI.transfer() return parameter returns a value that is shifted right 1 bit and removes the LSB.
Any thoughts?
Thanks,