// // SPI_write void SPI_write (byte registerByte, byte commandByte) { digitalWrite(CSB, LOW); //turn on device // 6 bits register address for (int i=5; i>=0; i--){ // write bit if (int(1<<i & registerByte) == 0) digitalWrite(DATAOUT, LOW); else digitalWrite(DATAOUT, HIGH); // cycle clock digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); } digitalWrite(DATAOUT, HIGH); // Indicate that we are Writing digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); digitalWrite(DATAOUT, LOW); // LOW digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); // write 8 bits register content for (int i=7; i>=0; i--){ // write bit if (int(1<<i & commandByte) == 0) digitalWrite(DATAOUT, LOW); else digitalWrite(DATAOUT, HIGH); // cycle clock digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); } digitalWrite(CSB, HIGH); //turn off device } // // SPI_read8 int SPI_read8 (byte registerByte) { digitalWrite(CSB, LOW); //turn on device // 6 bits register address for (int i=5; i>=0; i--){ // write bit if (int(1<<i & registerByte) == 0) digitalWrite(DATAOUT, LOW); else digitalWrite(DATAOUT, HIGH); // cycle clock digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); } digitalWrite(DATAOUT, LOW); // Indicate that we are Reading digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); // read 8 bits register content int returnValue = 0; for (int i=7; i>=0; i--){ // read bit returnValue += digitalRead (DATAIN) << i; // cycle clock digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); } digitalWrite(CSB, HIGH); //turn off device return returnValue; } // // SPI_read16 int SPI_read16 (byte registerByte) { digitalWrite(CSB, LOW); //turn on device // 6 bits register address for (int i=5; i>=0; i--){ // write bit if (int(1<<i & registerByte) == 0) digitalWrite(DATAOUT, LOW); else digitalWrite(DATAOUT, HIGH); // cycle clock digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); } digitalWrite(DATAOUT, LOW); // Indicate that we are Reading digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); // read 8 bits register content int returnValue = 0; for (int i=15; i>=0; i--){ // read bit returnValue += digitalRead (DATAIN) << i; // cycle clock digitalWrite(SCKCLOCK, HIGH); digitalWrite(SCKCLOCK, LOW); } digitalWrite(CSB, HIGH); //turn off device return returnValue; }