Maker Pro
Maker Pro

Simplest way to propagate a digital pulse?

M

Max Moor

Hi All,

I want to propagate a digital pulse down a line of maybe 100 modules,
each separated by three inches or so. I want to apply a pulse to the first
module which will turn on and do its thing, then as it turns off, pass the
pulse to the next module, etc., etc.

Currently, each module has a D flip-flop with the propagating pulse on
each module's D input (Q out from the previous module), and a separate,
common clock line going to all the modules. As you can imagine, I'd really
like to not have to drive a 25 foot clock line with a 100 device fan out.

Of course, I could buffer it on each module, but I'd much rather be rid
of the clock line all together.

Each module needs to stay on for the same amount of time, though I'd
like to be able to adjust this, perhaps by varying the width of the applied
pulse. Of course, without a separate clock, I don't see how to accomplish
this.

This seems like the sort of thing that would have been solved already,
but I'm not finding what solutions might exist. Can anyone enlighten me at
all?

Thanks,
Max
 
M

Max Moor

I disagree with this method. All it takes is one edge getting "lost"
somewhere and everything stops.
What about changing your input from a pulse to a high. When a module
sees a high in,
it does its thing, and then propagates the high out. So: out = in and
done, in and not done = start

Dan

Hi Dan,

The down side of this is that the operation time of each module isn't
specified. There's no specific amount of time it takes to do anything. It
comes on and stays on until I want it off. That's why I was thinking of
using the pulse width to set the on time. Propagating the "on" isn't the
tough part. It's propagating the amount of on time.

Regards,
Max
 
M

Max Moor

Throw away the clock. Call the FF in each module, MyTurn. Run a wire
from that FF to the next module. On the falling edge of the input
signal, clock a 1 into the local MyTurn. When that module has finished
doing whatever it does, reset the FF. That falling edge will
start the next module.


Hi Hal,

The problem is that each module doesn't really have a finite set of
tasks it does before it can turn off. It is simply on or off. (I likely
wasn't clear about that.)

I just want only one on at a time in the chain. Further, I want to be
able to have the time on set by the pulse that starts the whole thing, and
have that "time on" period propagate as well.

Regards,
Max
 
J

Jasen Betts

Hi Hal,

The problem is that each module doesn't really have a finite set of
tasks it does before it can turn off. It is simply on or off. (I likely
wasn't clear about that.)

I just want only one on at a time in the chain. Further, I want to be
able to have the time on set by the pulse that starts the whole thing, and
have that "time on" period propagate as well.

If you want it to propogate you'll need to store it somehow so that it
can be passed on. Are the devices capable of that or will you have to
add this feature? how much accuracy do you need?

Aach stage could take in a high pulse and operate while measuring the
length of the pulse, and then when the pulse ends, emit a pulse of
equal length to the input of the next device pulse based on its measurement of that.

you say 100 stages so I'm guessing that you'll want 1% or better
precision in replicating the pulse-length.

this may be possible with an analogue circuit, but certainly
is possible using a cheap microcontroller. and at 100 pieces
a self contained microcontroller will probably win on price too.
 
R

Rich Grise

The down side of this is that the operation time of each module isn't
specified. There's no specific amount of time it takes to do anything. It
comes on and stays on until I want it off. That's why I was thinking of
using the pulse width to set the on time. Propagating the "on" isn't the
tough part. It's propagating the amount of on time.

Drive your 25-foot clock line with a decent (i.e., fast) rail-to-rail
opamp, and terminate it properly at the far end. Use CMOS inputs for all
of the modules' clock inputs, and you should be home free.

Have Fun!
Rich
 
W

whit3rd

        I want to propagate a digital pulse down a line of maybe 100 modules,
each separated by three inches or so.  I want to apply a pulse to the first
module which will turn on and do its thing, then as it turns off, pass the
pulse to the next module, etc., etc.

        Currently, each module has a D flip-flop with the propagating pulse on
each module's D input (Q out from the previous module), and a separate,
common clock line going to all the modules.  As you can imagine, I'd really
like to not have to drive a 25 foot clock line with a 100 device fan out.

You presumably also have a 'reset' line somewhere, so that this
bunch of modules will do the same thing all over again someday.

As far as long clock lines are concerned, a differential driver and
receiver can
do it fine (like AM26LS31 and AM26LS32). You can also
daisy-chain (each module receives the clock, buffers it, and
sends it to the next in ripple fashion).

If you really implement the 'wait till module N is done before
module N+1 starts' functionality, every single module is
a point-of-failure for all the rest. That can be made to work,
but this is a kind of control counter, and its state has
100 elements, so the problem is one of one hundred state
bits. If a central controller turns the modules on, the
problem is log_2(100), which is a seven bit state; this
is usually preferable because it is easier to troubleshoot.
 
M

Max Moor

You presumably also have a 'reset' line somewhere, so that this
bunch of modules will do the same thing all over again someday.

As far as long clock lines are concerned, a differential driver and
receiver can
do it fine (like AM26LS31 and AM26LS32). You can also
daisy-chain (each module receives the clock, buffers it, and
sends it to the next in ripple fashion).

If you really implement the 'wait till module N is done before
module N+1 starts' functionality, every single module is
a point-of-failure for all the rest. That can be made to work,
but this is a kind of control counter, and its state has
100 elements, so the problem is one of one hundred state
bits. If a central controller turns the modules on, the
problem is log_2(100), which is a seven bit state; this
is usually preferable because it is easier to troubleshoot.

I originally thought of using a 10-line ribbon (7 plus a few extra) cable to
run down the line with a decoder at each module for the very reasons you say.
I shied away from that, trading for fewer wires and parts. I'm still not
sure what I should do for sure. I guess that's where prototyping comes in.
 
Top