Dear Community,
I have a cascade of 9 PISO (74HC165) shift registers connected to an Arduino Micro.
I would like to read 9 bytes of inputs.
Using the shiftIn() function, I was only able to read the data of the first 4.
Using SPI, I can reliably read the first 8. Unfortunately, the data of the 9th shift register only appears 8 times at the beginning, than it shows "0" for the rest of the time.
If I reupload the code, it shows "0"-s right from the beginning (for the 9th one only, while displaying valid data from the first 8).
Here is my code:
#include <SPI.h>
// Define Connections to 74HC165 -- Switch INPUTS shift register cascade
byte ssPinButtons = 10; //Load for 74HC165 shift regs.
// Define other variables of the code
byte switchStates[9];
void setup() {
// Setup Serial Monitor
Serial.begin(9600);
// Setup 74HC165 slave select
pinMode(ssPinButtons, OUTPUT);
SPI.begin(); // default settings: 4 MHz clock, MSBFirst
}
void loop() {
// Get data from 74HC165
digitalWrite (ssPinButtons, LOW);
digitalWrite (ssPinButtons, HIGH); // capture data
SPI.transfer(&switchStates,9); // read in 9 bytes
// Print to serial monitor
Serial.print("Pin States -- 1 -- 1-8:\r\n");
Serial.println(switchStates[0], BIN);
Serial.print("Pin States -- 2 -- 9-16:\r\n");
Serial.println(switchStates[1], BIN);
Serial.print("Pin States -- 3 -- 17-24:\r\n");
Serial.println(switchStates[2], BIN);
Serial.print("Pin States -- 4 -- 25-32:\r\n");
Serial.println(switchStates[3], BIN);
Serial.print("Pin States -- 5 -- 33-40:\r\n");
Serial.println(switchStates[4], BIN);
Serial.print("Pin States -- 6 -- 41-48:\r\n");
Serial.println(switchStates[5], BIN);
Serial.print("Pin States -- 7 -- 49-56:\r\n");
Serial.println(switchStates[6], BIN);
Serial.print("Pin States -- 8 -- 57-64:\r\n");
Serial.println(switchStates[7], BIN);
Serial.print("Pin States -- 9 -- 65-72:\r\n");
Serial.println(switchStates[8], BIN);
Serial.print("\r\n\r\n");
delay(500);
}
If I unplug and replug my Arduino to the PC, I get the following output on the serial monitor:
- Zeros
- Mostly "1"-s, but not everywhere - this part is also a bit different (seems random) for every try
- Two times of semi-valid data (shift registers 6-9 give "0"-s only)
- Perfectly valid data for 8 times!
- Valid data for the first 8 shift registers only; "0"-s for the 9th one, from here on...
...
Pin States -- 1 -- 1-8:
0
Pin States -- 2 -- 9-16:
0
Pin States -- 3 -- 17-24:
0
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
0
Pin States -- 6 -- 41-48:
0
Pin States -- 7 -- 49-56:
0
Pin States -- 8 -- 57-64:
0
Pin States -- 9 -- 65-72:
0
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
11111111
Pin States -- 3 -- 17-24:
11111111
Pin States -- 4 -- 25-32:
11111111
Pin States -- 5 -- 33-40:
11111111
Pin States -- 6 -- 41-48:
11111111
Pin States -- 7 -- 49-56:
11111111
Pin States -- 8 -- 57-64:
11111111
Pin States -- 9 -- 65-72:
11111111
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10000000
Pin States -- 6 -- 41-48:
0
Pin States -- 7 -- 49-56:
0
Pin States -- 8 -- 57-64:
0
Pin States -- 9 -- 65-72:
0
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
0
Pin States -- 7 -- 49-56:
0
Pin States -- 8 -- 57-64:
0
Pin States -- 9 -- 65-72:
0
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
11111
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
11111
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
11111
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
11111
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
11111
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
11111
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
11111
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
11111
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
0
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
0
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
0
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
0
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
0
...
This is what I'm expecting to see continuously (without modifying my buttons' states):
...
Pin States -- 1 -- 1-8:
101000
Pin States -- 2 -- 9-16:
10111110
Pin States -- 3 -- 17-24:
11111110
Pin States -- 4 -- 25-32:
0
Pin States -- 5 -- 33-40:
10100000
Pin States -- 6 -- 41-48:
11110
Pin States -- 7 -- 49-56:
1
Pin States -- 8 -- 57-64:
10111111
Pin States -- 9 -- 65-72:
11111
...
Please can anyone help me? I've been looking for solutions in several forums but could not find anything helpful yet.