CAN P87C592 Project

8031 timeline

CAN was being promoted as an industrial grade network with many useful features that would have been useful in previous projects (built-in protocol, well defined buffers, priorities, etc.) The elusive low-cost “pick-by-light” solution for thousands of displays in large warehouses prompted several attempts at addressing other common industrial needs. Driving outputs at some remote location with a serial port obviously saves on cabling besides the discrete outputs on an expensive host.

Interface vendors (RS-485 devices) were out of touch with pricing and often there was a worldwide shortage with lead times stretching out several months. Going down to 3V was another problem which caused a price spike. CAN in automotive quantities would hopefully resolve this (the bus turn-around of RS-485 was a never ending problem as the UART would report a transmit buffer empty before the data was fully clocked out of the transmitter shift register). The best way to find out would be to build a reasonably sized CAN network.


CAN 87C592 board

There are 16×8 outputs (573 latches which can sink 24mA). Each output would be able to drive a pair of 7-segment displays by taking the extra output to a PNP and NPN transistor. When the one display was on, the other would be off. For blank displays, just don't sink current through any of the other seven outputs of the 573. This board would then be able to drive 16 pairs of displays (up to 99 items for picking per pair of 7-segment LEDs). There was not much cheaper than a 573 to drive LEDs (also being able to latch them). The end-user was not too pleased as they would have to clamp the housing on the underside of the shelves rather than along the front in strips.


There were several reasons for not taking the CAN network further; the four layer board was more than an equivalent 680008 on two layers and the 128 output two sided ’273 latch board; protocol analyzers were expensive; the 8051-core was too small to be useful for quick projects that did not need to squeeze the last byte out of code, and finally, we made a mistake in the package pinouts as shown here.