// Define Connections to 74HC165
#define S1_CLOCK_ENABLE_CE A3
#define S1_DATA_IN_Q7 A2
#define S1_LOAD_PL A1
#define S1_CLOCK_IN_CP A0
#define S2_CLOCK_ENABLE_CE A7
#define S2_DATA_IN_Q7 A6
#define S2_LOAD_PL A5
#define S2_CLOCK_IN_CP A4
void setup()
{
// Setup Serial Monitor
Serial.begin(115200);
// Setup 74HC165 connections
pinMode(S1_CLOCK_ENABLE_CE, OUTPUT);
pinMode(S1_DATA_IN_Q7, INPUT);
pinMode(S1_LOAD_PL, OUTPUT);
pinMode(S1_CLOCK_IN_CP, OUTPUT);
pinMode(S2_CLOCK_ENABLE_CE, OUTPUT);
pinMode(S2_DATA_IN_Q7, INPUT);
pinMode(S2_LOAD_PL, OUTPUT);
pinMode(S2_CLOCK_IN_CP, OUTPUT);
}
void printBin(byte data) {
for (int i = 0; i < 8; i++) {
Serial.print((data >> i) & 0x01);
}
Serial.println();
}
void readShiftRegister(
const char *shift_name,
int8_t CLOCK_ENABLE_CE,
int8_t DATA_IN_Q7,
int8_t LOAD_PL,
int8_t CLOCK_IN_CP
){
// Write pulse to load pin
digitalWrite(LOAD_PL, LOW);
delayMicroseconds(5);
digitalWrite(LOAD_PL, HIGH);
delayMicroseconds(5);
// Get data from 74HC165
digitalWrite(CLOCK_IN_CP, HIGH);
digitalWrite(CLOCK_ENABLE_CE, LOW);
byte incoming = shiftIn(DATA_IN_Q7, CLOCK_IN_CP, MSBFIRST);
digitalWrite(CLOCK_ENABLE_CE, HIGH);
// Print to serial monitor
Serial.print(shift_name);
Serial.print(" - Pin States:\n");
printBin(incoming);
}
void loop()
{
readShiftRegister(
"original",
S1_CLOCK_ENABLE_CE,
S1_DATA_IN_Q7,
S1_LOAD_PL,
S1_CLOCK_IN_CP
);
readShiftRegister(
"emulated",
S2_CLOCK_ENABLE_CE,
S2_DATA_IN_Q7,
S2_LOAD_PL,
S2_CLOCK_IN_CP
);
delay(500);
}
Loading
st-nucleo-l031k6
st-nucleo-l031k6