Second shift register in chain outputs lower voltage

What should I do?

  • Change resistor values and/or add/remove resistors

    Votes: 0 0.0%
  • Change capacitor values and/or number of capacitors

    Votes: 0 0.0%
  • Ditch all 74HC164's and buy new 74HCT164s

    Votes: 0 0.0%

  • Total voters
    0

Thread Starter

testuserabcdef

Joined Jul 12, 2016
127
I have a circuit in which two 74HC164 shift registers connected as follows:

VCC to +5VDC
GND connected to 0V
Pin 13 (QH) of the first shift register connected to pins 1 and 2 of the second to create a chain.
Pins 1 and 2 (data) of the first connected to VCC through a 4.7K resistor
Both Pin 8's (clock of each register) connected to VCC through a 4.7K resistor

I then used a voltmeter to test each outputs after presenting random logic to the clock and the data inputs at slowish-speed. The outputs of the second shift register (that the first one connects to) all have lower voltages. The meter showed 0.1v for a logic low and 1.85v for a logic high. On the first register, the logic high value shown is 4.2v and logic low value was under 1v. The VCC is 5VDC.

I remember in the past getting things to work by replacing 74HC164 with 74HCT164, but because the price of 74HCT164 (along with the need to desolder and solder again) is higher (yes I checked ebay), I'm looking for other solutions to this problem.

I did try methods suggested at various sources online.

I tried adding 100uF and a 47nF coupling capacitors not more than 4cm away from the IC and it made no difference.

I tried adding a pull-up resistor of 4.7K at the output of the first shift register, and that made voltage readings worse on the second chip. I tried making that resistor a pull-down instead and that also did not help.

I even tried replacing the "bad" 74HC164 with a new 74HC164 and I still get the same results.

The chips on the circuit board are no more than 3/4 inch apart and the traces are 10mil wide, and the power traces are at least 15mil wide.

In all tests, nothing overheated nor burned.

Is replacing 74HC164 with 74HCT164 my only option or is there another way to make a second shift register work?
 

dl324

Joined Mar 30, 2015
18,330
Welcome to AAC!

Most members prefer a schematic for circuit discussions. It avoids confusion by clearly presenting how components are connected.
 

LesJones

Joined Jan 8, 2017
4,511
With the negative of your meter on pin 7 of the first shift register measure the voltage on pin 7 and pin 14 of the second shift register.I suspect a break or high resistance path on the +5 or ground to the second shift register. Most likely the +5 I have seen ICs partly working when they have managed to power themselves from some logic inputs in the high state.

Les.
 

Alec_t

Joined Sep 17, 2013
15,119
Agree with Les. If the circuit is on a breadboard then you could have a poor (high resistance) connection somewhere.
 

dl324

Joined Mar 30, 2015
18,330
You also haven't described how the clear inputs are connected or what is connected to the outputs.

Regarding HCT working "better" than HC; the main difference between HC and HCT is that HCT has TTL compatible inputs. The substitution you mention would have no affect on the output levels of the second shift register.

The low voltage you're measuring for the first shift register are out of specs. LO should be much less than 1V unless you're sinking too much current.

Do us all a favor and post a schematic showing all connections.
 

Thread Starter

testuserabcdef

Joined Jul 12, 2016
127
With the negative of your meter on pin 7 of the first shift register measure the voltage on pin 7 and pin 14 of the second shift register.I suspect a break or high resistance path on the +5 or ground to the second shift register. Most likely the +5 I have seen ICs partly working when they have managed to power themselves from some logic inputs in the high state.

Les.
I did and for both registers, the value is the same. 4.08V. There is no break, and I doubt the resistance is high since I have a solid track about 1 inch in length and 15 mils in width connecting the two VCCs and the ground connection is at least 30mils in width and in some spots I run a ground plane.
 

Thread Starter

testuserabcdef

Joined Jul 12, 2016
127
You also haven't described how the clear inputs are connected or what is connected to the outputs.

Regarding HCT working "better" than HC; the main difference between HC and HCT is that HCT has TTL compatible inputs. The substitution you mention would have no affect on the output levels of the second shift register.

The low voltage you're measuring for the first shift register are out of specs. LO should be much less than 1V unless you're sinking too much current.

Do us all a favor and post a schematic showing all connections.

If I showed a complete schematic then it would be confusing but I'll see what I can come up with
 

Thread Starter

testuserabcdef

Joined Jul 12, 2016
127
circuit.png

Here is where the issue in my circuit lies. I'm trying to read data from a AT28C256 using shift registers to put onto an LCD display but the high byte isn't working yet (output voltage of high shift register incorrect) I program everything correctly with a microcontroller. The datain and clockin are connected to GPIO pins of a microcontroller and TOLCDRS connects to the RS pin of the LCD.
 

dl324

Joined Mar 30, 2015
18,330
Don't see any obvious issues with the shift registers. It would be good if you could swap the chips to see if the problem changes (sockets would make repair/troubleshooting easier).

Is your microcontroller operating at 5V?

It would be convenient if the CLR on the two chips weren't tied directly to VCC. Are you able to force both registers to clear and check for valid LOW logic levels?
 

dl324

Joined Mar 30, 2015
18,330
What I dont get is how people have success with HCT chips instead of HC for memory applications including one making an eeprom programmer.
The logic family isn't the problem. There's something wrong with your circuit.

You say VCC is 5V, but you measure 4.08V on the VCC pins of the shift registers. Fix that problem first.

Put patterns in the shift registers and make sure each output has the correct voltage. Then invert the pattern and check again. Something is wrong and it's not the circuit (as shown) or the logic family.
 

Thread Starter

testuserabcdef

Joined Jul 12, 2016
127
The logic family isn't the problem. There's something wrong with your circuit.

You say VCC is 5V, but you measure 4.08V on the VCC pins of the shift registers. Fix that problem first.

Put patterns in the shift registers and make sure each output has the correct voltage. Then invert the pattern and check again. Something is wrong and it's not the circuit (as shown) or the logic family.
5V is the goal but I was running the circuit on decent batteries through a voltage regulator
 

dannyf

Joined Sep 13, 2015
2,197
Here is where the issue in my circuit lies.
the design makes zero sense to me. 164 turns the serial input into parallel output, onto the IC1's pins and then A0 has the ability to receive all of the serial data. So a much better design would have been to simply receive the serial data directly (onto A0) and then IC1 can decode that data and present them on A1..14.

Do you by any chance want to use a parallel in/serial out shift register instead?

(output voltage of high shift register incorrect)
we are talking about digital circuitry here, right?
 

Thread Starter

testuserabcdef

Joined Jul 12, 2016
127
the design makes zero sense to me. 164 turns the serial input into parallel output, onto the IC1's pins and then A0 has the ability to receive all of the serial data. So a much better design would have been to simply receive the serial data directly (onto A0) and then IC1 can decode that data and present them on A1..14.

Do you by any chance want to use a parallel in/serial out shift register instead?



we are talking about digital circuitry here, right?
Yes its digital.

The At28c256 is a 32K EEPROM. It accepts a 15-bit address (A0-A14). I use two serial-in parallel-out registers to allow me to manipulate the address with just 1 data pin. The remaining output line goes to the LCD RS pin. I wired the lines up in an unconventional order to make it easier for me to produce a PCB
 

dannyf

Joined Sep 13, 2015
2,197
in that case,

1) write a routine so that you can transmit 8-bit correctly;
2) write a routine so that you can transmit 16-bit correctly, using the routine from 1)
3) write a routine so that you can transmit A0..14 data correctly, using the routine from 2. you will need a translation routine here.

for example, if hc164_send8(uint8_t) sends 8 bits,

Code:
//send 16 bits
void hc164_send16(uint16_t dat16) {
  hc164_send8(dat16>>8);  //send the high byte
  hc164_send8(dat16);  //send the low byte
}

//translate to A0..14 to 16 bits
//specific to the particular wiring
uint16_t a14todat16(uint16_t a14) {
  return ((a14 & 0xff00) | ((a14&0x01)?0x8000:0) | ((a14>>1) & 0x7f);
}
so whenever you want to send something to the eeprom,
Code:
  hc164_send16(a14todat16(data)); //send data to eeprom
if your wiring changes in the future, just update a14todat16() accordingly.
 
Top