Trying to interface my old Sharp PC-1403, with its 11-pin connector, with an ST Nucleo L053R8 board, with the aim of emulating an external disk drive. The board is a 3.3v but the Sharp PC is a 5v CMOS device, so I thought about introducing a bi-directional level converter in between, using one of this type: https://www.sparkfun.com/products/12009 (actually, one of the many clones).
Infact, the Nucleo board is 5v-input tolerant, but looks like its 3.3v output isn’t enough to drive the 5v input on the Sharp-PC.
After initially struggling to get the Sharp-PC properly communicate with the board, I found out that the level converter kept a high value on inputs, in spite of pull-down resistors, or pulling input down by software, e.g.:
// input ports
DigitalIn in_BUSY (D4);
InterruptIn irq_BUSY (D4);
DigitalIn in_D_OUT (D5);
InterruptIn irq_DOUT (D5);
DigitalIn in_X_OUT (D7);
InterruptIn irq_X_OUT (D7);
DigitalOut out_ACK (D9);
...
in_BUSY.mode(PullDown);
in_D_OUT.mode(PullDown);
in_X_OUT.mode(PullDown);
So, I left the level converted only on the ACK line, which is an output from board to Sharp-PC, removing it from the BUSY, DOUT and XOUT input lines, as per this schematics:
My issue now is that this configuration is fine for the initial handshake only, which is working, but for exchanging actual data, lines are expected to be bi-directional, so the level converter would be required on data lines too.
Any alternatives? Should I use different board pins for inputs and outputs and “merge” them externally? I hope there’s a simpler approach!
Btw - my code is at GitHub - ffxx68/Sharp_ce140f_emul