anticipating carriage success
I finally rebuilt the entire mechanism using the fixes that worked in the partial test jigs, as described in the September 30th and October 30th posts.
Success! Here's a video that shows it correctly adding 5678 from the digit wheels to 0322 on the carriage, which produces 6000 by executing one direct carry and a two-level chain of anticipated carries. It's running at 500 milliseconds per time unit.
Well, I shouldn't call it a success yet, since it's not reliable. There are marginal clearances and motion stutters that have to be tracked down and fixed before it meets that bar. It will get a passing grade only when I can reliably compute an arbitrarily long sequence of Fibonacci numbers.
Addition takes 18 time units. Here is the microprogram for it, which currently runs in a microprocessor and controls stepper motors, but eventually would run from the Babbage-style program barrel and control cams and rods to create the same lifting and rotating motions.
{"add", (const char *[]) { // add the number on A1 to F in 18 time units
// assume "keepers top" and "keepers down" at the start
"finger A1; mesh FC; mesh MPC A1; keepers up; unlock F delay; unlock A1 delay; unlock FP delay;",
"giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A",
"lock A1; lock FP delay;", // sequential locking
"lock F; nofinger a; unmesh FC; unmesh MPC; carrywarn up;", // raise carry sector wheels
"giveoff A; keepers bottom;", // support carry sector wheels
"carrywarn down; unlock F delay;", // get wires out of the way and prepare to carry
"carry add;", // do the carries, which may create additional warns
"keepers top; lock F; setcarry nowarn;", // prepare to lower carry sectors, and reset all warns
"keepers down; setcarry 9;", // force carry sectors to disengage, and restore wires to "add" pos'n
"carry sub;", // restore carry sector position
NULL } }
// assume "keepers top" and "keepers down" at the start
"finger A1; mesh FC; mesh MPC A1; keepers up; unlock F delay; unlock A1 delay; unlock FP delay;",
"giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A", "giveoff A",
"lock A1; lock FP delay;", // sequential locking
"lock F; nofinger a; unmesh FC; unmesh MPC; carrywarn up;", // raise carry sector wheels
"giveoff A; keepers bottom;", // support carry sector wheels
"carrywarn down; unlock F delay;", // get wires out of the way and prepare to carry
"carry add;", // do the carries, which may create additional warns
"keepers top; lock F; setcarry nowarn;", // prepare to lower carry sectors, and reset all warns
"keepers down; setcarry 9;", // force carry sectors to disengage, and restore wires to "add" pos'n
"carry sub;", // restore carry sector position
NULL } }
Comments
Post a Comment