yay! i made some progress on my hex dohickey. i found enough mosfets in my junk box to drive the displays. these are needed because the 3-8 line decoder can only supply 30ma, where the 7 segment display can eat up to 300 ma. the mosfets i have can handle about 400ma, so a good margin of error. the line decoder turns 8 pins into 4 pins (or 3 pins if i want to keep one on at any given time, but i want to be able to turn them all off so i can tweak the duty cycle, to change brightness or reduce power consumption).
all my shift registers are now cascaded. in two banks, one for input using 4 74hc165 piso shift registers. these are simple and dont come with any latches. but input data need not be sampled quickly (though i may make it possible to record whats going on with the bus to an sd card). usually these will only need to be sampled relatively infrequently (on the order of ms), so as to update the display. though i could probibly do a high speed capture mode in software.
the other for outputs, 5 74hc595 sipo shift registers (with output latches), 4 for each port and one for the displays. for the 4 ports the output latches come in handy. when you load the shift register one bit at a time, these registers are invisible to the outside pins, they have their own flipflops (memory), so when i cycle one of the clocks, it copies the shift register to this memory, which means you can update all the pins simultaneously instead of one at a time instead of one at a time. this chip also has an output enable pin to put the outputs into a high impedance state, effectively disconnecting them. this provides a mechanism for switching the port from input to output mode. of course the output ports can be read while outputting data, so that data may be verified (yay another feature to write code for!). this will help debug any noise i may have on any bus i am analyzing.
these features aren't really used for the chip used to update the 7 segment displays. i simply tie the output enable to ground (its active low) so outpit is always on, and the latch enable shares a toggle with the other 4 chips and i can just update them all with one line. the outputs of this chip is connected to all the displays in parallel. the common annodes are connected to the source pin of a set of 8 n-channel mosfets, one for each display, and the drain pin is connected to my 5v line. and the gates are each hooked to a pin in the 3-8 line decoder. the value on the 3 input lines (a binary number from 0-7) determines which of the 8 transistors is switched on (and there is a 4th pin to turn them all off), and thus which display is getting power, and the data output on the shift register tells it what to display.
the mcu will spend most of its time shifting redundant data into and out of shift registers, and a little bit of time incrementing the value for the line decoder. i really dont need a lot of cpu power or memory for this task, so i want to use the cheapest and least powerful chip possible. not to say i dont want any other features. i was thinking about alternate functions for the thing. debugging busses is one thing but i can use it for general output tasks. i can output binary, decimal and hex data. i also worked out a way to display the english alphabet. though with some substitutions, as some characters cant be displayed on a 7 segment display, like 'k' or 'x' (youd need an alphanumeric display for that), so i use different symbols to represent those letters. i cant do caps and lowercase, so it will be a jumble of whatever will work. also a small set of punctuation characters and brackets and the like. it would need to be a scrolling marquee type display to display more than a couple words.