I kinda suspected that this was your application. I'd rewrite your formula like this. This way you'll get rid of all those nasty negative numbers.
adve(kg.) = ((adval-c0)*(yuk-sifir)/(c1-c0)) + sifir
You could realize this formula like this.
dummy VAR WORD
dummy1 VAR WORD
dummy2 VAR WORD
dummy3 VAR WORD
adve VAR WORD
adval VAR WORD
yuk VAR WORD
sifir VAR WORD
c0 VAR WORD
c1 VAR WORD
dummy1 = adval - c0
dummy2 = yuk - sifir
dummy3 = c1 - c0
dummy = dummy1 * dummy2
adve = DIV32 dummy3
adve = adve + sifir
Bummer, just remembered that DIV32 actually can't candle more than 31/15 bits. No big deal, we just need to divide by 2 in a couple of places.
dummy1 = (adval - c0) > 1
dummy2 = yuk - sifir
dummy3 = (c1 - c0) > 1
dummy = dummy1 * dummy2
adve = DIV32 dummy3
adve = adve + sifir
If you decide to use anything less than 16 bits ADC you don't need to do this last step.
You can probably save some memory by reusing some of the variables inside your calculation. I'll leave that task to you.
cheers
/Ingvar




Bookmarks