Read analog values without an ADC using PIC12F675 microcontroller

Digital electronics and Analog electronics doesn’t mix easily. A Microcontroller can’t get analog values unless an Analog-to-Digital converter is used, however, you may find a little complicated the use of an ADC and it need lots of Input/Output ports.


Some Microcontrollers, like the small 8-pin Microchip PIC 12F675, do have an ADC integrated, but it is expensier than a PIC without ADC. A simple solution is to use a RC circuit to measure the resistance or capacitance.


Basically, a RC circuit is just a capacitor and a resistor. The circuit labeled A shows the most common RC circuit used. I like to use the B circuit, I get better results.

RC Circuit

You can replace the resistor and use a thermistor to measure temperature (PTC or NTC), also a photoresistor can be used to measure light. Any kind of resistive sensor can replace the resistor. If you are using a capacitive sensor, just replace the capacitor instead of the resistor.


How it works:

Just connect the RC circuit directly to an I/O pin of the microcontroller. You can use a 33pf capacitor and 1k resistor.


  • First, make the I/O pin as OUTPUT.
  • Second, make the pin POSITIVE (+) for one milisecond. (Using a PIC at 4mhz, a 255-cycles loop will be enough).
  • Third, Make the I/O pin as INPUT and measure how long stays as POSITIVE (+).An good application of this technique is my “One wire keypad”:

The PIC will measure the RC value of the I/O pin. If the time measured is too long, that means; there is no key pressed. Precision resistors and Mylar capacitor is required to get exact values.

You can see my ” Security Keypad ” uses a similar technique.

For more detail: Read analog values without an ADC using PIC12F675 microcontroller