I'm reviving this thread because I've been doing a lot of research into spinners recently and have some thoughts on how to adjust pulse output.
Basically These devices are a simple digital "counters" (sort-of) imagine 1 signal wire "A" is the first binary digit and the second signal wire "B" is the second binary digit.
rotating clockwise will give you this:
-> 00 -> 01 -> 11 -> 10 -> 00 -> 01 -> 11 -> 10 ->
rotating counterclockwise will give you this:
<- 00 <- 01 <- 11 <- 10 <- 00 <- 01 <- 11 <- 10 <-
notice that it's not actually counting binary but more like "doing the wave" with just 2 people. like this: -> _ _ -> | _ -> | | -> _| -> _ _
Much like you can tell if a wave changes direction so to does this pattern allow you to determine direction from one signal to the next.
Because of this I don't think it's possible to simply divide the pulses and call it a day. because if the signal goes from 00 -> 11 then all of a sudden it's counting out of order and the hardware decoding the system doesn't know if it's a clockwise or counter clockwise pulse. 00 -> 11, 01 -> 10, 11 -> 00, and 10 -> 01 are all invalid pulse sequences and any of those can easily occur with simple pulse division.
if you're always traveling in one direction then pulse dividing could work, but as soon as you add the ability to reverse directions pulse diving stops functioning and you start getting weird results.
Looking at this like it's a Truth Table and how we can decode the spinner output into simple positive and negative pulse directions requires that you know the output state from the previous pulse:
if A becomes 1 and B is 1 then +
if A becomes 1 and B is 0 then -
if A becomes 0 and B is 1 then -
if A becomes 0 and B is 0 then +
so if A changes state then xnor(A, B) = direction
if A is 1 and B becomes 1 then -
if A is 1 and B becomes 0 then +
if A is 0 and B becomes 1 then +
if A is 0 and B becomes 0 then -
so if B changes state then xor(A, B) = direction
If we wanted to add a divider then the cleanest method would be some logic that perform the above calculations and then adds it to a counter and simulates the binary "wave" output of the original device.
So if we're going to say divide the output by 4 then we'd create a counter that goes from -4 to +4 and starts at 0. We run the above xor/xnor calculations then add or subtract from that counter. then when it reaches +4 we reset the counter back to 0 and output a "positive signal change", alternatively if the counter reaches -4 we reset it back to 0 and output a "negative signal change".
we would need to track our current output state and then issue positive or negative changes in line with the original pulse pattern:
rotating clockwise:
-> 00 -> 01 -> 11 -> 10 -> 00 -> 01 -> 11 -> 10 ->
rotating counterclockwise:
<- 00 <- 01 <- 11 <- 10 <- 00 <- 01 <- 11 <- 10 <-
This could probably be handled with a PIC chip or ATiny. Maybe it's possible with some flip flops (for storing last input and output states) and some logic ICs but I think the circuit might be a bit bulky.
Basically These devices are a simple digital "counters" (sort-of) imagine 1 signal wire "A" is the first binary digit and the second signal wire "B" is the second binary digit.
rotating clockwise will give you this:
-> 00 -> 01 -> 11 -> 10 -> 00 -> 01 -> 11 -> 10 ->
rotating counterclockwise will give you this:
<- 00 <- 01 <- 11 <- 10 <- 00 <- 01 <- 11 <- 10 <-
notice that it's not actually counting binary but more like "doing the wave" with just 2 people. like this: -> _ _ -> | _ -> | | -> _| -> _ _
Much like you can tell if a wave changes direction so to does this pattern allow you to determine direction from one signal to the next.
Because of this I don't think it's possible to simply divide the pulses and call it a day. because if the signal goes from 00 -> 11 then all of a sudden it's counting out of order and the hardware decoding the system doesn't know if it's a clockwise or counter clockwise pulse. 00 -> 11, 01 -> 10, 11 -> 00, and 10 -> 01 are all invalid pulse sequences and any of those can easily occur with simple pulse division.
if you're always traveling in one direction then pulse dividing could work, but as soon as you add the ability to reverse directions pulse diving stops functioning and you start getting weird results.
Looking at this like it's a Truth Table and how we can decode the spinner output into simple positive and negative pulse directions requires that you know the output state from the previous pulse:
if A becomes 1 and B is 1 then +
if A becomes 1 and B is 0 then -
if A becomes 0 and B is 1 then -
if A becomes 0 and B is 0 then +
so if A changes state then xnor(A, B) = direction
if A is 1 and B becomes 1 then -
if A is 1 and B becomes 0 then +
if A is 0 and B becomes 1 then +
if A is 0 and B becomes 0 then -
so if B changes state then xor(A, B) = direction
If we wanted to add a divider then the cleanest method would be some logic that perform the above calculations and then adds it to a counter and simulates the binary "wave" output of the original device.
So if we're going to say divide the output by 4 then we'd create a counter that goes from -4 to +4 and starts at 0. We run the above xor/xnor calculations then add or subtract from that counter. then when it reaches +4 we reset the counter back to 0 and output a "positive signal change", alternatively if the counter reaches -4 we reset it back to 0 and output a "negative signal change".
we would need to track our current output state and then issue positive or negative changes in line with the original pulse pattern:
rotating clockwise:
-> 00 -> 01 -> 11 -> 10 -> 00 -> 01 -> 11 -> 10 ->
rotating counterclockwise:
<- 00 <- 01 <- 11 <- 10 <- 00 <- 01 <- 11 <- 10 <-
This could probably be handled with a PIC chip or ATiny. Maybe it's possible with some flip flops (for storing last input and output states) and some logic ICs but I think the circuit might be a bit bulky.
Last edited: