I have an existing third party system that has a HD44870 compatible display used for output.
This third party system cannot be changed (for a variety of reasons), and I need to retrofit a device to it, that among other things, 'takes over' the display at times, and returns control to the original circuit at other times.
The display lives on a separate board, connected to the main board with a ribbon cable, and this is my only real option for intercepting the display.
The retrofitted device is an Arduino (Arduino Pro, specifically).
Initially, I was planning to experiment with intercepting the data lines from the original circuit on the Arduino, and passing through the data as appropriate. After some research, I found that this was difficult to achieve reliably while allowing time for other tasks in the code to run.
My current approach has been to have the Arduino permanently connected to the data/control lines of the HD44870 display, and then have the data/control lines from the circuit routed to these via a 74HC367 (tri-state) buffer device, effectively 'cutting off' the original circuit on demand. The Arduino would decide when to return control (by it's connection to the 'output enable' pins of the buffers), and would reconfigure its outputs to be high impedance inputs when releasing control, so as not to pull the data lines up or down while it was not in control. The opposite is also true - while the Arduino is in control, the 74HC637 output enable lines are not active, meaning that they are in a high impedance state.
Unfortunately this has been unsuccessful, with only the Arduino able to control the display. Connections have been confirmed as correct. The Arduino has been using the LiquidCrystal library in 4 bit mode.
A quick-and-dirty fallback would be to use an array of signal relays to switch between the two controllers, but I don't think this is the correct approach for this issue.
For reference, my retrofitted system has no need to know what the original system sent to the display.
So, this leaves me with a few questions:
- Should the approach described above be effective in performing switching?
- Are there any existing devices designed to achieve this?
- Are there any Arduino libraries that may achieve this?
- Could the switching cause issues with respect to corruption of commands?