I am attempting to recreate the 'cheap SPAD' experiment detailed here, which uses reversed LEDs as Single-Photon Avalanche Detectors. However I am running into a persistent issue when it comes to using an LM311 comparator to digitize my signal.

For context: The 276-041 LED has a low breakdown voltage, around 22.5 V. By applying a reverse biased voltage across this LED slightly above 22.5 V, it begins to act like an SPAD. For example, setting up a circuit as shown in the first picture (the red and grey wires lead to a power supply supplying 23.2 V) leads to an output on the osciiloscope as shown in the second picture. Each pulse ideally represents one photon striking the LED.

enter image description here enter image description here

The next step is to convert this raw signal into a usable digital signal that is 3.3 V when a pulse occurs and 0 V anytime else. For this, the linked lab guide suggested using a microcontroller, LM311 comparator and potentiometer as shown below:

enter image description here

So I set it up on the breadboards:

enter image description here

However, for some reason, even when the potentiometer is turned down so the voltage at the inverting input is sufficiently low , the reading from the LM311 either remains at 0 all the time or constant at 3.3V when I switch to DC coupling.

enter image description here

I have tested the comparator by connecting potentiometers to both inputs and fiddling around - it definitely works as intended in that case. Where am I going wrong here?

Edit: So it turns out I forgot to connect pins 1 and 4 of the LM311 to ground. That didn't fix the problem, though. The output is still hovering around zero, now for both AC and DC coupling.

Here is a close up of the circuit around the LM311. I did place a pull-up resistor parallel to the input, though I am not sure if this is the proper way to do it.

enter image description here

Edit 2: In light of the comments, I connected a battery in reverse to the ground pin of the LM311, inputting a voltage of around -1V as shown. enter image description here

The voltage at the inverting input compared to the signal at the non-inverting input is shown below. enter image description here

Now the output of the comparator (on DC coupling) has fixed itself at the positive supply voltage of 3.3 V, and is still not changing according the signal. enter image description here

  • 1
    \$\begingroup\$ Please show pin 2, 3 and 7 of the comparator in your scope. Also, elephant in the room, why are you using an LED as a photodetector? \$\endgroup\$
    – winny
    Commented Apr 3, 2023 at 13:36
  • 2
    \$\begingroup\$ @winny the whole thing is about using reversed LEDs. From the cited paper: "Students can use these reverse-biased LEDs to directly observe the current pulses generated by avalanche detectors, without having to deal with the high voltages associated with a Geiger tube." \$\endgroup\$
    – jonathanjo
    Commented Apr 3, 2023 at 13:41
  • 1
    \$\begingroup\$ I see an output pull-up on your schematic, but I don't see one on the breadboard. Also, I don't see any decoupling caps. Can't tell if the emitter (pin 1) is grounded either. \$\endgroup\$
    – John D
    Commented Apr 3, 2023 at 13:44
  • \$\begingroup\$ I see. Please post oscillograms. At ~1 us rise time, you want decoupling capacitor(s). \$\endgroup\$
    – winny
    Commented Apr 3, 2023 at 14:05
  • 3
    \$\begingroup\$ I think the voltage that you are trying to detect is too low. I suppose you are setting the threshold to say 50mV. At such low common mode voltage, the LM311 does not work as per my understanding from the data sheet. You need to set atleast 500mV above -VCC. In your case -VCC is 0V. So, try using a +/-3V supply for the LM311 so that you will be allowed to use threshold of 50mV \$\endgroup\$
    – sai
    Commented Apr 3, 2023 at 16:01

1 Answer 1


Solution according to the OP, Sanskar Jain:

The problem was with the input signal, which actually had a positive DC offset of over 10 V that I missed due to having channel 1 on AC coupling. Using a high-pass filter to remove the offset fixed the problem.

(Reposted in accordance with CC BY-SA 4.0, copied from revision 5 of the question.)

(The question was reported solved by the OP in an edit to the question (now reversed). However no answer stating the solution was written and accepted to make this clear. Therefore I have copied the solution (according to the OP) into this actual answer. I have applied the approach explained here to post someone else's content as an answer, and I have set the answer to "Community wiki" so that I don't earn any points from upvotes on this answer, as it isn't my solution.)


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.