Using VREF pins for pots that don't reach ADC=0 or 255


+ Reply to Thread
Results 1 to 27 of 27

Hybrid View

  1. #1
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154

    Default Using VREF pins for pots that don't reach ADC=0 or 255

    If my pots don't go quite down to 0V or up to 5V, can I just use the VREF pins and tweak what the ADC uses as lower and upper limits with 2 voltage dividers?

    (sorry, never done this stuff before)

    It seems to me that trying to fudge the ADC values in software is not the best approach; especially if it can be fixed with 4 resistors.
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  2. #2
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,604


    1 out of 1 members found this post helpful. Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    Bloody hell, you're making it complicated for some user input knobs :-)

    But to answer you question,yes. The datasheet has the answers, one part MAY differ from another so best to check but using the 25K22 as an example VRef- van range from 0.3 below Vss uo whatever voltage is applied to VRef+ which in turn can range Vdd/2 to Vss+0.3V.

    Using voltage dividers for VRef provides a high(ish) impedance voltage source at the VRef inputs, which will be suspectable to noise. 20mV noise on any of the Vref pins is the same as 20mV noise on the ADC input pin (about 4 counts @5V).

    I think we've been over this but I might have missed something....
    Sample the input 16 times, sum all values and divide by 4. Now you have a somewhat filtered 12bit result. Use this value to apply offset and gain formula to get the final value to what you want. For example, lets say the 12bit value ranges from 17 to 3996.

    Code:
    Value = Value - 17   ' Value is now 0-3979
    If value > 32000 then Value = 0    ' Make sure to not underflow in case start value is <17
    Value = Value **16850   ' Value is now 0-1023

  3. #3
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    16F18855 at 5VDC

    Yeah, you get what you pay for in pots:

    B5K pots:
    4.70K <--- ADC reading goes 2 - 254
    4.84K
    4.98K
    5.01K
    5.06K
    5.15K

    B5K pots with switch:
    4.96K
    4.98K
    5.01K
    5.06K
    5.07K
    5.11K

    (the others go from 0 - 255)


    I was thinking of bumping up VREF- to 0.5V with 470R/30R voltage divider.

    I'm already using FVR 4x at 4.096V, so thinking of leaving that AS-IS.


    I'm really liking your idea:

    Sample the input 16 times, sum all values and divide by 4. Now you have a somewhat filtered 12bit result
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  4. #4
    Join Date
    May 2013
    Location
    australia
    Posts
    2,631


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    1. Would a lower resistance pot (like 1K-2K) be easier/cheaper to get tighter tolerances?
    define tolerance its not a general parameter for pot ratings, resistance should not be relevant


    Resistance:
    The total resistance of the potentiometer, measured from one terminal to the other
    Rated power :
    The maximum amount of power the potentiometer can handle without overheating or failing
    Resolution :
    The accuracy of the potentiometer's resistance changes
    Expressed as a percentage of the total resistance
    Temperature coefficient :
    How the resistance of the potentiometer changes with temperature
    Mechanical life:
    The expected lifespan of the potentiometer
    Usually expressed as the number of cycles it can endure
    Taper :
    The relationship between the mechanical position and resistance ratio
    The most common types are linear and logarithmic


    2. Is there a physical work-around for "weak" pots? (hardware trick)
    what is a weak pot


    3. Would lower resistance pots actually be "better" for ADC? I remember Richard saying a 1K pot could "in theory" have 1 ohm resolution at 10 bits (or something to that effect).
    only that acquisition time is lower, a 10k pot could have 10 ohm resolution
    in order to have "stable" 10bit result from a 10 bit ADC you would need 16 times over sampling.




    This flight simulator really wants a range of 0 to 1023 to be able to use the full range of motion on a control (imagine a choke that's always partially ON, or a flap, not good).
    to begin with you would need 16 times over sampling or use a 12 bit adc.
    are you using 10 turn pots? i cannot see how 0.25 degree resolution is useful for a 270 degree pot, most humans would be lucky to move it accurately in 2.00 degree increments


    It seems to me that trying to fudge the ADC values in software is not the best approach; especially if it can be fixed with 4 resistors.
    how is that going to work if the pots are not all identical, i have not encountered a pot that has a wiper that doesn't read 0 ohms to an end terminals at extreme rotation on my multimeter low ohms scale. how badly off are these pots . it would be easier to get better stock


    in c i usually use a map function to get desired result range from an expected input range, about 1000 times easier and vastly more flexible than any hardware solution

    int16_t map(int16_t x, int16_t in_min, int16_t in_max, int16_t out_min, int16_t out_max)
    {
    return (long) (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    }
    Last edited by richard; - 28th February 2025 at 22:51.
    Warning I'm not a teacher

  5. #5
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    [QUOTE=richard;157122]define tolerance its not a general parameter for pot ratings, resistance should not be relevant... [/[QUOTE]

    I meant would a 1K or 2K pot be "generally" better for ADC on a 16F18855.


    [QUOTE]...Resistance:
    The total resistance of the potentiometer, measured from one terminal to the other... [/[QUOTE]

    5K, linear


    [QUOTE]...Rated power :
    The maximum amount of power the potentiometer can handle without overheating or failing...[/[QUOTE]

    Rated power: 0.05W
    Switch rated power: 12 VDC at 1.0A max


    [QUOTE]...Resolution :
    The accuracy of the potentiometer's resistance changes
    Expressed as a percentage of the total resistance...[/[QUOTE]

    I don't see this spec in the datasheet


    [QUOTE]...Temperature coefficient :
    How the resistance of the potentiometer changes with temperature...[/[QUOTE]

    20℃-75℃:△R/R≤±5%
    -25℃-20℃:△R/R≤±4.5%


    [QUOTE]...Mechanical life:
    The expected lifespan of the potentiometer
    Usually expressed as the number of cycles it can endure...[/[QUOTE]

    10,000 Cycles min.


    [QUOTE]...Taper :
    The relationship between the mechanical position and resistance ratio
    The most common types are linear and logarithmic...[/[QUOTE]

    Linear, (1B);B1 on Bourns pot specs


    [QUOTE]...what is a weak pot...[/[QUOTE]

    A noisy piece of crap that doesn't go anywhere near the full range of 0-5000ohms.


    [QUOTE]...only that acquisition time is lower, a 10k pot could have 10 ohm resolution
    in order to have "stable" 10bit result from a 10 bit ADC you would need 16 times over sampling.

    to begin with you would need 16 times over sampling or use a 12 bit adc.
    are you using 10 turn pots?...[/[QUOTE]

    1 turn, 300 degrees


    [QUOTE]...i cannot see how 0.25 degree resolution is useful for a 270 degree pot, most humans would be lucky to move it accurately in 2.00 degree increments

    how is that going to work if the pots are not all identical, i have not encountered a pot that has a wiper that doesn't read 0 ohms to an end terminals at extreme rotation on my multimeter low ohms scale. how badly off are these pots . it would be easier to get better stock...[/[QUOTE]

    I'm solo in this venture, so money is not unlimited, unfortunately.


    ...in c i usually use a map function to get desired result range from an expected input range, about 1000 times easier and vastly more flexible than any hardware solution

    int16_t map(int16_t x, int16_t in_min, int16_t in_max, int16_t out_min, int16_t out_max)
    {
    return (long) (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    }
    1. I could have a QC test and fail any pot below a certain spec.

    2. I could add code to calibrate each pot after assembly, and store a "conversion formula" in memory.

    3. I'm hoping a combination of:

    - raising VREF- to 0.5V,
    - FVRx4,
    - Henrik's idea in previous post can produce acceptable results.



    There's only so much you can do on a limited budget.
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  6. #6
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    AAAH CRAP!

    My end quotes are whacked ( [/[QUOTE]), and it won't let me edit the post...
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  7. #7
    Join Date
    May 2013
    Location
    australia
    Posts
    2,631


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    whether your pot is 4.7k or 5.2k should make zero difference , an adc reading of a pot is ratio metric
    if both pots are at 50% reading is vdd/2 no matter what the resistance is
    Warning I'm not a teacher

  8. #8
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,648


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    It would be nice to see the electrical scheme of your test circuit ...

    pics lead me to think it's a hardware / wiring problem ... as Richard nailed it

    Alain
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  9. #9
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    I'll try the batteries tomorrow.

    Here's a view of the breadboard. I removed a 2nd pot with switch, and left just the essentials.

    Name:  5 Circuit.jpg
Views: 3215
Size:  504.7 KB


    I still don't understand how 15mV at VREF- is not able/sufficient to deal with 1.5mV at the pot...?
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  10. #10
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    ADC still only goes down to 12 even when battery-powered and other breadboard disconnected (3 new alcaline 1.5V).

    Vref- of 15mV still connected.




    I always thought battery-power was essentially noise-free (in a "clean" environment); either a straight line going up when charged, or slowly down when powering a circuit, or even much slower down over time when disconnected.

    I don't get it.
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  11. #11
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,648


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    @ first, I do not see the " magic " decoupling caps that have to be located just close to the µP ...
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  12. #12
    Join Date
    May 2013
    Location
    australia
    Posts
    2,631


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    I still don't understand how 15mV at VREF- is not able/sufficient to deal with 1.5mV at the pot...?

    15mV pales into insignificance with respect to 0.234 volts of noise
    Warning I'm not a teacher

  13. #13
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    I will add 2 other caps now.

    EDIT: 0.1uF, 0.01uF and 0.001uF right at the pin, no difference, ADC stops at 12.
    Last edited by Demon; - 12th March 2025 at 17:26.
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  14. #14
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    Oh god..... (smacks-face)

    I cleaned up the WPU, I think I had one on ADC.

    Code:
    WPUA = %11111010                        ' Pin A2 = Vref-
                                            ' Pin A0 = ADC (B5K)
    WPUB = %11111111
    WPUC = %00111111                        ' Pin C7 = RX
                                            ' Pin C6 = TX
    ANSELA = %00000101                      ' Pin A2 = Vref-
                                            ' Pin A0 = ADC (B5K)
    ANSELB = %00000000
    ANSELC = %00000000
    I just tried again with the batteries and it went down to ADC=0.

    Arrrgggghhhhh.......
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  15. #15
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    I've removed all caps, and this pot works perfect. The TPS56637 circuit is that clean when it comes to noise.

    WPU was fighting with the ADCin pin, trying to pull it up.

    Now the slider pots might still be a problem; I'll test those later. But right now I'm putting back the 2nd pot with switch.




    I'll probably put several of those caps back on, I'll see (like at ADCin pin).

    Unfreakingreal... :bangheadinwall:


    EDIT: Oh yeah, definitely had to put the caps back on. The 2nd ADCin started affecting the 1st.

    I put all the caps back in, everything is stable.
    Last edited by Demon; - 12th March 2025 at 18:51.
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

  16. #16
    Join Date
    May 2013
    Location
    australia
    Posts
    2,631


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    I cleaned up the WPU, I think I had one on ADC.
    more proof that blindly setting pin registers is bad practice and serves no purpose .
    the safe setting is to leave them as default unless you need them to be different

    if you use mcc its perfectly clear how each pin is set and self documenting
    Name:  Untitled.jpg
Views: 3307
Size:  244.8 KB
    Warning I'm not a teacher

  17. #17
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,154


    Did you find this post helpful? Yes | No

    Default Re: Using VREF pins for pots that don't reach ADC=0 or 255

    I'm still using MCS+.

    Can we use MCC standalone? Or do we have to "create a project" and do the entire process within MPLAB?

    I have both the MeLabs USB programmer and PK4. I suppose I could set up an older PC with MCS+ and Melabs pgmer, and use PK4 with MPLAB on this more powerful PC.
    My Creality Ender 3 S1 Plus is a giant paperweight that can't even be used as a boat anchor, cause I'd be fined for polluting our waterways with electronic devices.

    Not as dumb as yesterday, but stupider than tomorrow!

Similar Threads

  1. ADC problem on 18F46K22 device using all 28 ADC pins
    By JimAvanti in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 23rd February 2012, 20:22
  2. MPXA4115A ADC vref set_up
    By iw2fvo in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 5th August 2009, 19:04
  3. ADC Vref+ on PIC16F88
    By kblim in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 3rd December 2008, 10:14
  4. ADC Vref
    By srob in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 9th April 2008, 18:07
  5. 16F819 ADC 8bit=127, Not 255?Help!
    By Accelerator in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 24th June 2006, 17:34

Members who have read this thread : 15

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts