I made a simple circuit with an Arduino Nano ESP32, where I have connected a 74HC595 8-bit shift register chip, as well as a 7 segment display with a 100 ohm resistor on common (cathode) to show the shift register's state.
Expected Behavior
Seven segment display shows binary counting from 0-255.
Observed Behavior
The seven segment display continuously shows 8.
, which basically means the state of the shift register is 0b11111111
.
When I use 5V (VBUS) instead of 3.3V for VCC of the IC, the shift register shows all zeros instead of all ones.
Attempts at Debugging
I have checked all input cables with my multimeter to check for any broken connections and everything seems to be fine. I also replaced the chip itself multiple times, same results. I tried replacing the resistor at the common of the seven segment display to something like 1,000 ohm, then back. Same results. I also used different sketches for testing, same results.
Resources
I made the current version of my circuit and code as a WOKWI (emulator) project: https://wokwi.com/projects/396140725340271617 [OUTDATED (also wont update for some reason)]
It features about the same exact connections I have on my breadboard.
Here is a screenshot of the circuit:
And the code, just in case wokwi might cease to exist in the future..
//**************************************************************//
// Name : shiftOutCode, Hello World
// Author : Carlyn Maw,Tom Igoe, David A. Mellis
// Date : 25 Oct, 2006
// Modified: 23 Mar 2010
// Version : 2.0
// Notes : Code for using a 74HC595 Shift Register //
// : to count from 0 to 255
//****************************************************************
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;
void setup() {
//set pins to output so you can control the shift register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
// count from 0 to 255 ankKomd display the number
// on the LEDs
for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
// take the latchPin low so
// the LEDs don't change while you're sending in bits:
digitalWrite(latchPin, LOW);
// shift out the bits:
shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);
//take the latch pin high so the LEDs will light up:
digitalWrite(latchPin, HIGH);
// pause before next value:
delay(500);
}
}