Duda Pic16f877a y su convertido A/D

Hola a todos, tengo una dudilla respecto al conversor analogico-digital del pic16f877a, más concretamente con las alineaciones.

He estado leyendo por el foro sobre alinear a la izda. o a la dere.
Según mis conclusiones y lo que he aprendido en este foro entiendo lo siguiente:
Hay dos registros, adresh y adresl los cuales son de 1 byte cada uno, con lo cual, entre los dos tenemos un word, hasta ahí bien, ahora, el conversor tiene una resolución de 10 bits, con lo cual nos dá unos valores de 0 a 1023.
Ahora bien, en un esquema que he montado para entenderlo mejor, he puesto el pic con una pantalla lcd de 4 lineas, las cuales me dán los siguientes valores:

1- Valor de la conversion de AN0 ( variable word )
2- Valor de la conversion de AN1 ( variable word )
3- Valor de adresh y adresl antes de leer an1 ( directamente a lcd )
4- Valor de adresh y adresl despues de leer an1 ( directamente a lcd )

Pues bien, la duda es la siguiente.
Introduciendo un voltage por AN0 y otro por AN1, por ejemplo 1v en AN0 y 2 en AN0, los valores de las conversiones en las lineas 1 y 2 del lcd me dá unos numeros del 0 al 1023 ( no los pongo porque son irrelevantes ) y las lineas 3 y 4 otros numeros que van de 0 a 253, bien, por ahora todo correcto, todo esto con alineación a la derecha ( registro ADCON1 = %10101000 ) con lo cual evito leer los LSB y así la lectura es más estable, pero si le pongo alineación a la izquierda ( registro ADCON1 = %00101000 ), se supone que lee los LSB y tendría más precisión aunque perdería estabilidad en la lectura.
Pues la pregunta es: ¿ en que o en donde o como debería de notar la diferencia entre las distintas alineaciones ? a mi me dan los mismos valores alineando a izquierda o a derecha refiriendome a adresh y adresl.

Pienso que debería de cambiar el regsitro adresl al rellenar los espacios con 0 tras especificarle el tipo de alineación pero no lo hace y no se porque.

El caso es que intento leer un lm35 en todo el rango ( desde -55 hasta +150 ºC ) con la máxima precisión posible, por ahora tengo una precisión variable que te indica cambios de 0,1 grados desde 0 ºC hasta 20ºC y ahí empieza a disminuir hasta quedarse en 0,2 a partir de unos 100 grados.
No se si me habeís entendido.

La precisión en temperatura negativa está entre 0,3 y 0,5 grados para un cambio :rolleyes:

El proyecto final es leer 4 lm35 de los cuales 2 tienen que ser lo más precisos posibles y los otros 2 son orentativos.

He estado estudiando la posibilidad de meterle un convertidor digital-analogico para controlar el Vref+ y Vref- del pic pero todavía no he dado con la formula para saber si necesito uno de 8,10,12 o 16 bit's de resolución, todo se verá.

Gracias y saludos!

P.D.: Cada día me sorprende más Proteus... capaz de simular hasta un disco duro ATA :aplauso::aplauso:
 
Segun lo que tengo entendido del pic, si lo alineas a la izquierda y solo lees los 8bits tendrias una lectura erronea. Si los alineas a la derecha puedes pasar a hexadecimal el valor de los 10bits del modulo facilmente, obteniendo la mejor lectura posible del pic.

Si usas el modulo PWM o comparacion puedes elegir la alineacion que mas te convenga.

Recuerdo que el profesor hablo de un "truco" para que el pic convierta de digital a analogico sin agregarle un hardware extra, pero no especifico como se hace y tampoco investigue ;)
 
Última edición:
Hola Orland0, no sé si la lectura es errónea o imprecisa, te pongo el ejemplo: ( utilizando Pic Simulator Ide )

Vref+=2.5v
Vref-=0v

Entrada a AN0 = 2.5v

Dim valor as word
( omito las configuraciones de adcon0 y adcon1)

adcin 0, valor

Entonces tenemos que valor=1023
con alineación a la derecha tendríamos:


adresH=00000011 ( 0x03 ) adresL=11111111 ( 0xFF )

y a la izquierda:

adresH:11111111 ( 0xFF ) adresL:11000000 ( 0x30 )



en los dos supuestos valor=1023 ¿ ... ?

supongo que con PWM o comparación si que se notará alguna diferencia en valor, tendré que probarlo.

Saludos!
 
Última edición:
en los dos casos el valor es el mismo, pero al usar los 10bits en los 3 modulos tienes la opcion de alinearlos.

Si lo escribes en ASM te daras cuenta de la facilidad de las alineaciones. Si lo tienes a la derecha y quieres pasar el word a una LCD (en ASM) te sera facil porque agrupas cada grupo de 4 y efectuas las operaciones.
11 11111111= 11 1111 1111= 3 F F
Pero si esta a la izquierda y quieres el word no puedes agruparlos porque tienes el bit0 y bit1 en un registro, y los demas en otro registro.
11111111 11= ??? Aqui no puedes agrupar de derecha a izquierda
Como usas un programacion de alto nivel estoy casi seguro que usando las 2 alineaciones y mandando el word a la LCD da lo mismo, las funciones del programa se encargarian de arreglarlo y mostrarlo.
 
Muchas gracias Orland0, ahora si que lo entiendo bien.
Todo el mundo me recomienda programar en ASM, lo intenté, de verdad que lo intenté, pero llevo el Basic dentro de mí desde 1988 ( época de los ZX Spectrum ) y para creo que para ir aprendiendo el mundo de los pic's es mejor para mí en Basic que ya lo tengo aprendido de sobra, a ASM que tendría que aprenderlo desde cero, de todas maneras no descarto la posibilidad de aprender alguna rutina.

Respecto a lo último que dices creo que tienes razón porque alineando a izda. o dere. el resultado del Word es el mismo.

Saludos!
 
jajajaja Orlando te diré yo los he utilizado la mayoría pic,avr,etc son inestables, por el precio que valen es nada más para que los compres no tendrás calidad te recomiendo uno externo, serial eso te quitaría ruido y no le batallas en cuanto al asm es bueno pero tiene muchas limitaciones y desventajas , uno de alto nivel ej (numerobits=numerobits<<2;) programacion en c obtienes programas mas complejos que en asm ademas las directivas de los lcd cambian mucho en los lcd para eso son las librerias de c ademas a nadie le interesa como lo hace si es asm o otro saludos .
(ING. COMUNICACIONES Y ELECTRONICA)
 
jajajaja Orlando te diré yo los he utilizado la mayoría pic,avr,etc son inestables, por el precio que valen es nada más para que los compres no tendrás calidad te recomiendo uno externo, serial eso te quitaría ruido y no le batallas en cuanto al asm es bueno pero tiene muchas limitaciones y desventajas , uno de alto nivel ej (numerobits=numerobits<<2;) programacion en c obtienes programas mas complejos que en asm ademas las directivas de los lcd cambian mucho en los lcd para eso son las librerias de c ademas a nadie le interesa como lo hace si es asm o otro saludos .
(ING. COMUNICACIONES Y ELECTRONICA)

Bueno para ese momento solo sabia ASM porque recien lo habia visto en la universidad. Despues me puse a estudiar por mi cuenta el C usando el PIC-Compiler, y vi lo facil que es.

Ahora no sabia que el A/D es inestable
 
Atrás
Arriba