How to adjust values to a new range


Closed Thread
Results 1 to 27 of 27

Hybrid View

  1. #1
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,175


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    Since you have done it in PBP and if you don't mind, could you post the code you tested please?

    Maybe there is a way to overcome the Long need using functions of 32 bit like DIV32?

    Ioannis

    P.S. Test it in Excel and I think there is a mistake on the B3 function. My output result on B13 is always equal to B11.
    Last edited by Ioannis; - 15th August 2024 at 13:16.

  2. #2
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,175


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    There is a mistake on B13, it should be MIN(B12;B7)

    Ioannis

  3. #3
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,626


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

    Default Re: How to adjust values to a new range

    As I turn the pot, the formula should convert from 0 all the way to 1023, to a new range of 100 to 235
    Code:
    OutputValue = 100 + (InputValue */ 34)

  4. #4
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,175


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    Many ways to skin a cat but Henriks is the best!

    Fast and simple!

    Ioannis

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


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    Quote Originally Posted by HenrikOlsson View Post
    Code:
    OutputValue = 100 + (InputValue */ 34)
    That's awesome Henrik. It works like a charm.

    Can you explain how you got 34? It's not jumping out at me.

    "A simple way to think about '*/' is that it shifts the result 8 places to the right,
    resulting in an automatic division by 256.
    "

    I'm just not sure how you went about figuring that out.

    I'd like to convert 34 into a formula for future use when I have to use a different range (cause I'm sure to have that need - several Flight Sim variables use pots and have their own range of values).
    Last edited by Demon; - 15th August 2024 at 20:16.
    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,172


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    Quote Originally Posted by Ioannis View Post
    There is a mistake on B13, it should be MIN(B12;B7)

    Ioannis
    Good eye.

    I had corrected the formula in B13, but had somehow missed the text in C13 (it's just text to show what goes on in the real cells in B column).
    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
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    3,172


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    Quote Originally Posted by Ioannis View Post
    Since you have done it in PBP and if you don't mind, could you post the code you tested please?

    Maybe there is a way to overcome the Long need using functions of 32 bit like DIV32?

    Ioannis

    P.S. Test it in Excel and I think there is a mistake on the B3 function. My output result on B13 is always equal to B11.

    I divided by 4 first, then ran it through the formula.

    "EDIT: Hmmm, what if I divide my input by 4, and adjust my input range accordingly..."
    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!

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


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    Quote Originally Posted by Ioannis View Post
    Since you have done it in PBP and if you don't mind, could you post the code you tested please? ....

    Sure thing:

    Code:
    ADCinput    var WORD
    ADCcalc     var WORD
    ADCinLow    con 0
    ADCinHigh   con 255
    ADCoutLow   con 100
    ADCoutHigh  con 235
            ADCcalc = ADCinput / 4          ' reduce to 0-255 to avoid WORD overflow
            ADCcalc = (ADCcalc MAX ADCinlow) - adcinlow ' adjust 0 - 255 range
            ADCcalc = ADCcalc * (ADCouthigh - adcoutlow)'   to 100 - 235 range
            ADCcalc = ADCcalc / (adcinhigh - adcinlow)
            ADCcalc = ADCcalc + ADCoutlow
            ADCcontrast = ADCcalc MIN ADCouthigh
    I just kept things simple and did things one step at a time, just like Jerson explained it. And women say men can't follow instructions.

    I know I can shrink this, but I'm just researching all the different bits of code I will need first, and documenting with comments what the code does and why.
    Last edited by Demon; - 15th August 2024 at 20:23.
    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!

  9. #9
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,626


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

    Default Re: How to adjust values to a new range

    This has been covered many many times on the forum so why not one more time...

    Basically we want multiply the ADC value by 135/1023=0.132 so in comes the */ operator.... 0.132*256=34 (rounded up).

    1023*34/256=135
    512*34/256=68
    128*34/256=17

    When the value you want to multiply by is <1 you can get more precision with the ** operator (same thing but inherent division by 65536). In this case it doesn't matter though because the output value range is so small.

    Do note that there's no expensive division going on here, all it does is discard the bottom 8 bits (in the case of */) of the multiplication.

    /Henrik.

  10. #10
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,175


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    If for any reason the input may have a value over 1023 then there would be a problem with the simple equation. But since the that value comes from a specific 10 bits ADC module it defines the upper limit of 1023.

    If you want to use it in other cases, a MIN/MAX would be needed.

    In any case Henrik's solution is neat and fast.

    Ioannis

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


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    Quote Originally Posted by HenrikOlsson View Post
    This has been covered many many times on the forum so why not one more time...
    You've explained it, using my own problem as example, and I still don't completely understand it. My eyes sort of gloss over when I've read these explanations on the forum. And it's not getting better as I get older.


    I really do appreciate you holding my hand while you pound this into my skull.
    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!

  12. #12
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,626


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

    Default Re: How to adjust values to a new range

    Allright...

    [1] I believe you're with me for the 135/1023=0.132 part, right?

    [2] IF the description for the */ operator WOULD have said "....resulting in an automatic division by 1000" then I think you'd see that the solultion WOULD be OutputValue = 100 + (InputValue */ 132), because 0.132*1000=132, correct?

    [3] But since the */ operator "....resulting in an automatic division by 256" we must multiply 0.132 by 256 instead of 1000. Hence the value 34.

    Makes sense? If not, which step?

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


    Did you find this post helpful? Yes | No

    Default Re: How to adjust values to a new range

    I follow. I just could not have thought of this by myself.
    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
    Nov 2003
    Location
    Greece
    Posts
    4,175


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

    Default Re: How to adjust values to a new range

    Or maybe use a formula

    X=135*256/1023

    where X is the number you wan to use in the */

    135 is the max scale value

    1023 is the max ADC value

    Ioannis

  15. #15


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

    Default Re: How to adjust values to a new range

    error posting
    Last edited by amgen; - 19th August 2024 at 20:29.

Similar Threads

  1. Simple way to adjust interrupt speed in DT_INTS-14 ?
    By CuriousOne in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 8th January 2015, 13:01
  2. Use a pot to adjust COUNT value
    By Sam in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 20th November 2011, 16:56
  3. Select Case range of values
    By kenif in forum PBP Wish List
    Replies: 3
    Last Post: - 25th June 2009, 14:27
  4. Replies: 9
    Last Post: - 31st July 2008, 09:56
  5. If Then Range
    By DynamoBen in forum mel PIC BASIC Pro
    Replies: 11
    Last Post: - 29th June 2005, 15:33

Members who have read this thread : 1

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