Saludos:
Agradecido por tus líneas de antemano.
El cambio de PIC no lo tengo considerado, digamos que es un reto tratar de lograrlo en este modelito.
La tabla la requiero para dar los valores más exactos posibles respecto a la medición. Puedo arreglar tomar un número de muestras y promediarlas para sacar un valor más cercano al real ya que sería el método correcto como mencionaste, pero ese promedio se hace en funcion de un valor ya obtenido que represente el voltaje, me explico y aclaro respecto a tus lineas:
Obtener el valor doble es mucho más sencillo en 16 bit's para valores positivos exclusivamente , que afortunadamente es lo que necesito trabajar para una aplicación limitada, sencillamente hago una rotación a la izquierda en 16 bit's y obtengo exactamente el mismo resultado que me describistes con lo de las muestras y sin tanto rollo, (rotar a la izquierda en binario es multiplicar por dos) de hecho eso lo logré expresar. El problema que tengo es que el convertidor da salidas de 0 a 255, y esto debe servirme para representar rangos de 0 a 5 voltios. Si quiero ser exacto o lo más cercano posible al valor debo hacer una equivalencia correcta de esta lectura a o que está presente en la entrada analógica, pongo una pequeña tablita de muestra con tres decimales de precisión y dos también para que se note el detalle:
valor 3 dec 2 dec variación si fuera ideal
0 0,000 0,00 0,020
1 0,020 0,02 0,020
2 0,039 0,04 0,020
3 0,059 0,06 0,020
4 0,078 0,08 0,020
5 0,098 0,10 0,020
6 0,118 0,12 0,020
7 0,137 0,14 0,020
8 0,157 0,16 0,020
9 0,176 0,18 0,020
10 0,196 0,20 0,020
11 0,216 0,22 0,020
12 0,235 0,24 0,020
13 0,255 0,25 0,020
14 0,275 0,27 0,020
15 0,294 0,29 0,020
16 0,314 0,31 0,020
17 0,333 0,33 0,020
18 0,353 0,35 0,020
19 0,373 0,37 0,020
20 0,392 0,39 0,020
21 0,412 0,41 0,020
Si yo tomo variaciones exactas de 002 por cada valor del convertidor, al final cuando se llegue a 255, yo tendría una salida de 510 (255 x 2) que represento como 5,10 voltios pero eso es un error ya que la alimentación máxima del sistema será de 5,00, entonces, lo que pensé, fue hacer una tabla para almacenar los valores con dos decimales de precisión, ya que lo que puse de ejemplo arriba con dos decimales puedo devolverlo para un valor determinado del convertidor y así puedo darle algo exactitud a la representación de la medida (dentro de las imprecisiones de una resolución de 8 bit's).
Ejemplo: el convertidor entrega 15 como valor de lectura, yo llamo a la tabla y esta me devuelve como resultado un 029 (no un 30 como sería si multiplicara por 2, producto del error en los decimales) que convierto luego a bcd en 16 bit's y mando al display de 7 segmentos como un 0.29 Voltios. Nota: pareciera que la diferencia de 0.01 no se nota pero en valores altos el error al final es de 100mV y es imperdonable si queremos hacer las cosas como se debe aunque sea tedioso el uso de tablas.
Ese es un poco el asunto y por eso pensé en las tablas, obviamente debo almacenarlas en dos bancos ya que solo dispongo de 128 bytes por banco pero el problema es que no estoy claro en como llamar a una rutina que está en otro banco y luego regresarme para procesar la información de la manera correcta.
Espero no haberme extendido mucho con el planteamiento y mis disculpas si hubo alguna cosa que no comprendi en tu explicación...
Tuxfriend.