I'd like to create an input module for arduino, which should read 64 digital inputs using (chained) PISO shift registers. My system voltage is 24V, so the best way will be any PISO shift register (with integrated isolation) which should be able to "read 24V inputs directly" and protect arduino from overvoltage on that inputs.

I found the only way - K847PH with CD4021, but this will make my scheme much more complicated and it will rapidly increase number of used parts and pcb size, so I am looking for (near)single-chip solution.

Thank you.

  • \$\begingroup\$ 2 resistors per pin in a divider will reduce 24V to whatever you want. Using SND these can be tiny. \$\endgroup\$
    – Russell McMahon
    Commented Mar 21, 2017 at 20:43

2 Answers 2


Convert 24V to a lower voltage using a simple voltage divider, this needs 2 resistors per input. Values can be quite high, so the input resistor will double as R for the RC lowpass filter and ESD protection. Add a capacitor across the lower resistor for filtering.

These feed the inputs of your PISO shift registers, which of course run on 5V from a regulator powered from the 24V side.

Now, add isolators on the serial link. You will need 2-3 isolators only, instead of one isolator per input.


You set quite a challenge in wanting a near single chip solution.
One piece of information missing in your description is whether you want to read the 24 V digital input synchronously or asynchronously. If you want to measure synchronously then your idea of a parallel to serial shift register works. But if you can tolerate asynchronous reading then it may be much easier to offer a solution where you use a SR to select the bit(s) to read.

This could be based on the Microchip High voltage shift register series, and though they do make 64 bit SR chips, none of them are really suitable for this application since they are push-pull FET outputs.
I'd suggest you could use two Microchip HV5530PG, which are 32 bit shift registers with Open Drain 80 V FET's and use them to select which digital input is being sensed. Since it's a High/low digital input signal I am assuming the divider ratios may be quite flexible.

The HV 32 bit serial register looks like this:

enter image description here

Obviously you need two HV5530's to service 64 bits of input.
The Polarity* allow you to invert the outputs so a circulating 1 or 0 in the shift register would turn on/off the output FETs. I'd suggest Polarity* is hardwired low. The Blanking* allows you to turn on all the output FETs.
Data input for chip one, and Clock for both shift registers allow you to setup both HV5530 shift registers (64 bits long). Data output from shift register one goes to Data input of shift register two building a single 64 bit register.
Latch Enable is hard wired low.

Blanking, Data input, and Clock would need to be optically isolated from your microprocessor to the sense board. You could use the H11L1M I showed below, they are an excellent opto-isolator.

I'd suggest a simple optically isolated monitor for each 32 bits of the 24v state would be arranged as so:


simulate this circuit – Schematic created using CircuitLab
Here the H11L1 provides an optically coupled single bit feedback for each 32 bit shift register to your microprocessor. If you have two circulating 0 or 1's (one in each register) then you can read two bits at a time. (you could make do with just one input bit, but would need to adjust the protection mechanism)
The diodes provide a 32 bit OR gate and the HV SR FETs clamp the inputs low. Q1 is a simple current protection for the H11L1M since at times (during startup and initialization) there may be multiple inputs selected and this limits the current through the LED to < 3 mA or so.

The logic for driving the HV5530 is as follows:

  1. Set Blanking* low to turn on all the HV output FET's
  2. Clock 0x8000000080000000 into the SR
  3. Set Blanking* hi, so now one input is sensed on each 32 bit SR
  4. Clock 0x0000000000000000 into the SR reading a single bit from each of the 32 bit SR's via the two H11L1M's

Not quite a single chip solution, but it certainly would not take a lot of board space. I left out the 5 V you need for the HV5530, so you'd need to design a 5 V supply capable of about 200 mA from on your 24 V side.

Hope this makes sense to you as a potential option.

  • \$\begingroup\$ Isolating serial buses instead of isolating every digital input is a great idea! Talking about synchronous/asynchronous reading - honestly I don't know if I need synchronous reading at all. "Sinking" shift registers used as "input selector" should be also the way to go, but I will take a look how much simplification will provide direct connection of inputs (through voltage dividers) directly into PISO at first and then I'll look to "selector" scheme. Thank you. \$\endgroup\$
    – dusanmsk
    Commented Mar 22, 2017 at 11:12

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.