PDA

View Full Version : ADval*/Quanta Question



Tom@Nottingham
- 6th May 2009, 19:33
Hello

In the formulae ADCIN0,Adval 'read ch0 into Adval
&Adval=Adval*/Quanta (using 18f4550)
where Quanta=1251 for 0-5v input
Adval returns 0-499 ie 4.99

However for a 10 bit result I require Aval to return 0-1023.
This appears to be about right when Quanta=2600

Question: Does anyone know what the correct value of Quanta should be or the formulae to calculate it accurately.

Thanks
Tom

Darrel Taylor
- 6th May 2009, 21:08
Take VDD divided by the MAX A/D reading, and multiply times 256.

5 / 1023 * 256 = 1.251

Scale that up to however many decimal places you want.
For 3 decimal places, multiply by 1000.

= 1251

So your current number is correct for 10-bit A/D with 3 decimals. (0-4999)

If you only want 2 decimals as indicated in your post, use 125 instead. (0-499)
Or you can calculate to 3 decimals, then add 5 and divide by 10 and you'll get a rounded number. (0-500)

4999 + 5 = 5004, /10 = 500
<br>

Tom@Nottingham
- 6th May 2009, 23:19
Thanks Darrel for your formulae. Substituting 1023 for the 5 I get
1023/1023*256 *10=2560(Quanta). I was using 2600,now from Pic this gives true 10bit number(1023) at full scale that is sent to pc to be scaled,damped,averaged etc.

Tom

Darrel Taylor
- 6th May 2009, 23:43
What?

That's completely self defeating. The A/D converter already put's out 0-1023.

1023/1023*256 *10=2560
With the */ operator, all your formula does is multiply it times 2560 and divide by 256, which is the same as just saying ADval * 10.

So you would actually be sending 10230.
I don't think that's what you wanted.

If you want to send 0-1023 to the PC, just send the ADval.
<br>

Tom@Nottingham
- 7th May 2009, 13:04
Thanks Darrel

Now I understand, Adval by itself returns 102? and when Adval=Adval*10 it returns 1023 which is what I am using.

Thanks again.

Tom

Darrel Taylor
- 7th May 2009, 20:03
Don't thank me yet.
Cuz it looks like there's still some misunderstandings.

With the Analog to Digital converters, you have two choices (8-bit or 10-bit).
8-bit returns values from 0-255.
10-bit values are from 0-1023.

Those numbers come straight from the converter without any additional math needed.

Without seeing your code, I can only guess at what's happening.
My guess is that before sending to the PC, you are breaking the numbers down with the DIG operator.

DIG starts at 0, with 0 indicating the rightmost digit.
If ADval was holding the value 1023, (ADval DIG 0) would be 3.

DIG 3210
1023
If you're thinking the rightmost digit is 1, and you used DIG 1 thru 4, it would return 0102.
Multiplying *10 first would make DIG 1 thru 4 return 1023, although the actual value is 10230.

Are you using DIG?
<br>

Tom@Nottingham
- 8th May 2009, 12:58
Yes you are right Darrel, I am using DIG 1-4 as you thought. I have now simplified program, since adval does = 1023 directly and using DIG 0-3 to send to PC. All 8 temperature readings now work well.

Thanks again

Tom

Charles Linquis
- 8th May 2009, 13:22
Maybe this isn't the right thread, but when A/Ds are mentioned, everyone thinks in terms of 8 or 10 bit resolution. Some chips (8723 for example) return a 12 bit value. That has screwed me up more than once.