Rex Niven
EDN
It’s almost a corollary to Moore’s Law: Next year, microcomputers will have more features, and the software team will have bigger ideas. Unfortunately, though, the number of output pins will stay the same. Finding even one spare output for diagnostics, test, or even standard I/O can be a tussle.
Figure 1. | This single-pin “bus” can provide an unlimited number of parallel outputs with simple additional hardware. |
The single-pin “bus” in Figure 1 can provide an unlimited number of parallel outputs with simple additional hardware. A microcomputer output with an RC lowpass filter controls serial-to-parallel converter HC164. To enter data into the serial-to-parallel converter, each bit consists of a one-to-zero-to-one transition, which alters the length of the low state. If the low state is longer than the lowpass filter’s time constant, a zero shifts into the register. If the low state is short, then a one shifts into the register. The clock and data signals thus combine into one signal. A lowpass filter separates the clock and data signals (Figure 2).
Figure 2. | The clock and data signals combine into one signal. |
Listing 1, a simple “Whip” routine, performs the output function for eight bits. Assume that the RC time constant is 3 µsec, and the instruction time should be 1 µsec or less at a crystal frequency of 4 MHz or greater. The routine uses bitwise manipulation of output My_Bit of port My_Port.
Listing 1. Whip-routine output function for PIC microcontroller
Whip
MOVWF My_Data ; the data to transmit is in W {регистр W}
MOVLW 8
MOVWF Bit_Counter ; set up for eight bits
BSF My_Port, My_Bit ; ensure output is initially high
Bl:
RLF My_Data, F ; data to send is in CC
BTFSS STATUS, CC
BCF My_Port, My_Bit ; zero, so falling edge is early
CALL Delay_10us ; if a one, pin stays high for l0Ous
BCF My_Port, My_Bit ; if a one, edge falls here
NOP ; ensures output pin is low for 0.2us min
BSF My_Port, My_Bit ; rising edge here clocks data into HC164
DECFSZ Bit_Counter
GOTO Bl
RETURN
Figure 3. | This circuit uses another serial-in/parallel-out register, the MC14094, which has a strobe input to allow simultaneous updates of all outputs without temporary levels. |
Although the circuit in Figure 1 can control slow-reacting devices, such as relays or LCDs, using it with LEDs can give an annoying flicker when the HC164 is writing. To address that problem, the circuit in Figure 3 uses another serial-in/parallel-out register, the 4094, which has a strobe input to allow simultaneous updates of all outputs without temporary levels. A twin monostable circuit supplies the data and strobe signals. This circuit should be able to control parallel devices, such as display modules based on HD44780 devices.