In a project I am using a 74LS05 to provide an ESP32 microcontroller with 6 open-collector outputs. Actually this is fine for 5 of the outputs, but for the remaining one I'd rather have a full push-pull driver, since the rise time I currently have is still too high (and I am already using a 470 ohm pull-up resistor).

I cannot use an ESP32 output directly since the output needs to be at +5V when high.

I'd like to keep the solution as simple as possible. I was thinking that maybe I could add an external BJT or MOSFET to "complement" the open-collector output but I have no idea of how to do that.

Any hints?

EDIT: Here's some additional info:

  • I don't want to add a 74xx04 for just one output, the other 5 outputs are fine open-collector-style.
  • I am using LS logic because the project is retrocomputing-related. I could switch to an HCT but would that change much?
  • I don't know the exact characteristics of the input I have to drive. it's the right mouse button input of the Amiga Paula custom chip, which is notoriously hard to drive.
  • I can take some measurements with a scope if that helps.
  • On a different project I am driving the same input straight from an output pin of an AVR microcontroller and in that case the signal rises "immediately".

EDIT2: Here's an old scope screenshot showing how slow the signal is rising (blue). It needs to be high before the following clock rising edge (yellow). I can't remember what pull-up value I was using when I took this screenshot though, maybe 1k or 820 ohm.

enter image description here

  • 1
    \$\begingroup\$ The ESP32 can't drive the 74LS05 directly.It might be simpler just to use 5 mosfets & resistors for the OC outputs and something like a 74HCT04 for the push-pull output. \$\endgroup\$
    – Kartman
    Commented Apr 18, 2021 at 12:48
  • \$\begingroup\$ You must define C load @ 470 =R and max rise time. No good reason to use LS TTL. \$\endgroup\$ Commented Apr 18, 2021 at 12:49
  • \$\begingroup\$ @Kartman What is the reason you say that ESP32 cannot drive a 74LS05 directly - I think it can, very well. \$\endgroup\$
    – Justme
    Commented Apr 18, 2021 at 12:56
  • 1
    \$\begingroup\$ Use a 74LS04? Why would you want anything other than the obvious solution? In other words, you need to be a lot more clear about your requirements and constraints. \$\endgroup\$
    – Dave Tweed
    Commented Apr 18, 2021 at 13:09
  • 1
    \$\begingroup\$ @TonyStewartEE75 I didn't have a 270 R so I tried with 220: did not work, looked like the line couldn't be pulled down. So I switched to 330 and things started to look better. Then I realized I could put 1k5 in parallel to get 270 and so I did. Now the signal gets to around 4V before the next clock edge, which seems to work fine and leave a decent margin. Here's a pic: dropbox.com/s/gvuk4us3aqka1z8/…, grey line is with 330, blue is 270. So thanks a lot for helping find the smallest pull-up value I could use. \$\endgroup\$
    – SukkoPera
    Commented Apr 22, 2021 at 21:00

3 Answers 3


You can convert a slow rising input signal to a fast rising output signal using the following circuit (in blue dotted box):enter image description here

Here are the input (green) and output (blue) waveforms:enter image description here

The circuit on the left is to simulate the slow rising input voltage. The capacitor on the right is just to show that it is able to drive the output high fast enough even with 50pF capacitive load.


Adding a MC74VHC1GT50 to an open-collector with pullup resistor output, will give a TTL level output which can source/sink 8mA. It is one 6 pin surface mount chip.

  • \$\begingroup\$ Thanks, this might be a way but I feel a bit dirty adding a SMT component to a 100% THT board. That's why I was looking for a way to do it with a discrete transitor. \$\endgroup\$
    – SukkoPera
    Commented Apr 18, 2021 at 20:58

The analog characteristics of logic are computed by the. Vol/Iol and Vil/Iil output and input low impedance ratios. All TTL families differed in speed and power yet maintained a 10:1 fan-out ratio. This applies to both current and resistance.

The 74LS05 is an inverting Open Collector with an output saturation resistance of 25 Ohms maximum ( 400 mVmax/16mA) and an input Vil Resistance if 250 Ohms minimum (400mV/1.6mAmax). the input voltage threshold for all TLL is two Vbe drops or 1.3 but for noise power immunity, the thresholds were defined safely as “0” = <= 0.8V and “1” = >2.0V.

Similarly impedance for 3.3V logic has been designed for 22 Ohm drivers @ 3.0V and this lowers slightly at 3.6V.

Thus you can get superior performance driving LS logic directly from 3.3 V CMOS logic such as the ESP32 family. If for any reason your wires are too inductive, and ringing causes logic errors, this can be well-damped pulses with same risetime by adding 50 to 150 series from 3.3V logic to drive say a 240 Ohm ribbon cable or twisted pairs.

For open collector outputs or switch contacts from the joystick, you just need any suitable pullup R’s.

Thus there is no need to add redundant interface circuitry to drive a TTL Joystick from 3.3 Logic.

  • \$\begingroup\$ Thanks for your effort, I appreciate it. Unfortunately, I probably didn't explain myself well enough, as this does not answer what I was asking. I can drive the direction and button 1 pins well enough, I have problems driving pin 9 when emulating a CD32 controller. This pin ends into an ADC built in Paula and has weird driving characteristics that make signals rise very slowly . Please see the question again, I have added a few details. \$\endgroup\$
    – SukkoPera
    Commented Apr 18, 2021 at 20:52
  • \$\begingroup\$ Not enough details . Can you use this to define which 📌 on here i.sstatic.net/eoqMp.png. there are shunt caps to intentionally slow down rise time. If you don’t explain the specs, how can anyone understand if what you expect is correct. Anyways the ESP32 has 22 ohm drivers so the rise time and fall time will be just as fast if that’s what you need. \$\endgroup\$ Commented Apr 18, 2021 at 21:18
  • \$\begingroup\$ Ignore the -1 lame. Vote \$\endgroup\$ Commented Apr 18, 2021 at 21:20
  • \$\begingroup\$ It's the POT0Y or POT1Y signals. The ESP32 cannot bear with the pull-ups to +5V that are inside the Amiga (Resistor Network R370), that's why we resorted to using a 7405. Please have a look at my project (and scope trace above) and suggest the simplest way to get a quicker rising signal, that's the only problem I have left. \$\endgroup\$
    – SukkoPera
    Commented Apr 18, 2021 at 21:22
  • 1
    \$\begingroup\$ Paula is a similarly contrived contraction of Ports, Audio, UART and Logic, and coincidentally the chip designer's girlfriend. The POT0Y and 1Y signals are from an analog pot with cap filter ,so you shouldn't be driving it with a pulse. It's Analog. \$\endgroup\$ Commented Apr 18, 2021 at 22:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.