problema al mostrar en display

#1
la pregunta es porque al mostrar en el display el valor no me muestra lo que deberia..
estoy trabajando con PBP, el codigo de interes es muy sencillo aca lo anexo, asumiendo que A es igual a 21, el resultado de X en decimal seria aproximadamente 8, pero en el display cuando lo veo en proteus me sale es 255, y asi varie el valor de A me sigue mostrando el valor de 255 en realidad no se que esta pasando.. :confused:

BUCLE:
adcin 0, A
CONT = A
X = ((4681/10000)*CONT)-(17739/10000)
LCDOUT $fe,2,"Disparo a "
lcdout $fe,$c0, " ",DEC X, " "
goto BUCLE
 
#2
Si se considera que el PBP no trabaja con valores decimales y solo con enteros, se tiene:

4681/10000 = 0.46, PBP no redondea nada, el resultado es cero.
17739/10000 = 1.7, PBP no redondea nada, rel resultado es uno.

El resultado de tal operación es -1 y como tampoco puede representar valores negativos... -1 es $FF, por eso al mostrar en el LCD siempre es 255.

Cambia tu método o descarga la librería para trabajar con números de punto flotante en Melabs, página de PBP, Ojo que puede ocupar mucha memoria.

PD: PBP3 no se si tenga alguna novedad respecto a eso.
 
#4
Abre la calculadora de Windows, cambialo a modo Programador... ese modo es como computa normalmente el PBP... intenta dividir esos números y veráz que el resultado no es para nada decimal, tampoco redondea...

4681/10000 = 0 en calculadora y PBP
17739/10000 = 1 en calculadora y PBP

X = ((0)*CONT)-(1) ' Sea cual sea el valor de CONT, el resultado es -1 o para el PBP es 255.
 
#6
Podrias hacer una tabla en Excel con todos los posibles valores del ADC que correspondan al resultado que buscas. Por ejemplo.

ADC - Resultado
20 - 8
25 - 9
etc...

Utilizar los valores de 10 en 10 por ejemplo de la tabla y colocar en PBP... con LookUp por ejemplo, cada vez que se lee el ADC se puede comparar y buscar con LookUp el más aproximado...

Es un forma, igual no se que intentas hacer y tal vez se puede recurrir a otros métodos a nivel matemático y solo trabajando con enteros... bueno...

Saludos.
 
Arriba