In my case I am using PIC24F and dsPIC33F microcontrollers, but where is the on-state resistance of an IO port for a PIC stated in the datasheet? I cannot find it anywhere. And how does this apply for other processors - 16F/12F PICs, PIC32, MSP430's, AVR's etc.

The reason I ask this is because I am designing a sensitive circuit which changes the range of an ADC input by leaving a 10k resistor floating or grounded. If the on resistance is in the 100's of ohms, this will introduce a 1% or more error term.

  • 3
    \$\begingroup\$ Why the downvote... I thought it was a reasonable question? \$\endgroup\$
    – Thomas O
    May 15, 2011 at 11:11
  • \$\begingroup\$ Because the answer is obvious? \$\endgroup\$ May 15, 2011 at 11:22
  • \$\begingroup\$ @Leon Why would I ask an obvious question? For all I know it could be called something else, like "output impedance", not "on resistance." \$\endgroup\$
    – Thomas O
    May 15, 2011 at 11:24
  • \$\begingroup\$ What about my answer? Is it helpful? \$\endgroup\$ May 15, 2011 at 11:27
  • \$\begingroup\$ @Leon, it's helpful in explaining why it is not specified, but see my comment. \$\endgroup\$
    – Thomas O
    May 15, 2011 at 11:28

3 Answers 3


Short answer:
Assuming "regular cmos" IO driver structure value of the output resistance can be estimated indirectly. Most of the DS provide data for "DC IO characteristics" from which you can calculate this parameter. Most of the time following is given:
a) Supply voltage (Vcc)
b) Load current (Iload)
c) Voltage drop @ load current (Vdrop)

The static resistance is straight forward Vdrop/Iload

For example PIC24F on table 26-10 for Vcc=2V and Vdrop=0.4V manufacturer specifies Iload=3.5mA (worst case). This gives ~114 Ohm. Note that increasing supply voltage to 3.6V will increase Iload to 6.5mA at the same voltage drop giving ~62 Ohm.

Long answer:
I. First of all one need to check if in fact is dealing with "regular CMOS IO structure" which should be similar to following:
CMOS output driver

Unfortunately uC manufacturers rarely provide this info (it is provided if you are dealing with discrete gates - such as 74HC family). However I would claim this is most common structure and there are tell-tell signs if it is actually used (more on this later).

II. If above is true one cane observe that on resistance would be in fact "on resistance" of the NMOS. In this case the VGS would be equal to supply voltage, VDS the Vdrop voltage and ID the Iload current.

Now what is left is to establish if data provided in manufacturer DS are from linear region or from saturation region. If data from DS Are from linear region the "static resistance" calculated in very fist point is pretty good approximation and be also valid for much smaller current. If the data are from saturation region the calculated resistance will be too pessimistic for smaller currents.

Above is illustrated by this characteristics from Wikipedia. Also whole article on MOSFETs is worth checking.

When VGS > Vth and VDS < VGS - VTH the transistor is in linear region. It is pretty safe assumption that for CMOS technologies in which uC are manufactured the Vth is anywhere between 0.5V - 1.5V volts. So taking into account previous PIC24F example one can conclude with good probability that NMOS is in linear region -> VGS (2V) > VTH (~1.5V) and VDS (0.4) < VGS(2V)-VTH(1.5V).

Note: the MOS device even in so called "linear region" is non linear one. So quality of approximating it with linear device (resistor) will depend on the point where the approximation was taken (operating point). In the examples above approximation is taken at pretty large current so it will be not very accurate at very low currents (actually it sets upper boundary for resistance).

III. So what are tell-tell signs that you are dealing with regular CMOS IO circuitry?
a) If you are lucky - there will be equivalent output stage schematic in DS
b) If you are lucky - as in case of MSP430G2231 on page 20 one will find Vdrop versus iload characteristics that is awfully similar to NMOS ID versus VDS characteristic. And as a plus from this characteristic one directly get "static resistance" and tell if data provided by manufacturer are from linear or saturation region.
c) In other case one can bet this is a case. Your odds for correct bet rise if ones data show that driving current rises significantly with rising supply voltage.

  • \$\begingroup\$ @Thomas O - even in CMOS linear/triode region resistance is pretty much not linear so with calculation method above one is still on "pessimistic side" for very small current loads \$\endgroup\$ May 15, 2011 at 15:27
  • \$\begingroup\$ When you say pessimistic, do you mean that the resistance is estimated to be higher than the actual value? \$\endgroup\$
    – Thomas O
    May 15, 2011 at 15:32
  • \$\begingroup\$ @Thomas O - yes - on very small currents this could be significant difference \$\endgroup\$ May 15, 2011 at 15:37
  • \$\begingroup\$ you are answering the questions they way they should be answered. I put a quick answer in to help the user but did not have time to put alot of time into it, or your expertise. Thank you. \$\endgroup\$
    – Kortuk
    May 16, 2011 at 8:20

It's probably not specified because of the very wide range and variability with things like supply voltage and load.

For something critical like that I'd use an analogue switch. They have a well-defined low on-resistance. You might be able to use a MOSFET as a switch, if you are short of room.

  • \$\begingroup\$ Unfortunately, an 0603 resistor is about my limit in terms of components. I already use an analog mux in my design, but that's for generating on screen display graphics. It has a resistance of 2.5 ohms. The technology is similar (CMOS), which makes me wonder why an MCU doesn't have a stated resistance; could it be down to reasons of cost or yield? \$\endgroup\$
    – Thomas O
    May 15, 2011 at 11:26
  • \$\begingroup\$ I'd find a way to add it, I don't think that you have any other option! It's what most people would do. \$\endgroup\$ May 15, 2011 at 11:32

A typical CMOS output will not have a single measurable "resistance" value as such--instead it will behave as something resembling a constant current source/sink in series with a resistor, with another resistor in parallel. More accurately, it will behave as a parallel combination of a bunch of different current sources/sinks with different series resistors. Device manufacturers will typically supply some graphs which state the output voltage at different levels of output current, but I've never seen one specify that a device will actually meet the graphed behavior with any particular degree of accuracy. On the other hand, device manufacturers will frequently specify a guaranteed voltage for a lightly-loaded output. If the current drawn by your 10K resistor does not exceed the value listed for that spec, you can expect the output voltage to meet the indicated specification.

  • \$\begingroup\$ I do not think your description of the MOSFET transistor operation is correct. Any combination of linear elements (current sources and resistors) will not give non linear behavior, which is necessary to describe transistor. \$\endgroup\$ May 15, 2011 at 20:44
  • \$\begingroup\$ Note however that one often do the "trick" of transistor linearization to make calculations easier. Giving that assumption original rds on question make perfect sense and gives meaningful parameter. \$\endgroup\$ May 15, 2011 at 20:57
  • \$\begingroup\$ @mazurnification: A current source with a finite compliance voltage is a non-linear device. I think it's pretty self-explanatory that the compliance voltage of each constant-current source will be limited to VDD. \$\endgroup\$
    – supercat
    May 16, 2011 at 13:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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