TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: arcadi en 28 de Marzo de 2008, 15:25:19

Título: Resolucion A/D
Publicado por: arcadi en 28 de Marzo de 2008, 15:25:19
Hola a todos;

Tengo un problema con el conversor A/D de 10 bits del 16f876a. El problema que tengo es que no me muestra bien el resultador por la pantalla LCD.
Quiero mostrar la temperatura de un LM35 de un rango de 0ºC a 75ºC.

Caracteristicas del A/D:

Vref=0.75v
10 bits


Vresolucion=0.75/2^10=0.000732421875

Vfactor=vresolucion*100=0.0732421875


------------------------------Programa--------------------------------------

int16 adcValue;
float temper;


Void main (void)
{

....

      printf(lcd_putc,"\f") ;
      adcValue=read_adc();   
      delay_us(20);
      x=1;y=2;
      lcd_gotoxy(x,y);
      temper=adcValue*0.07324218;
      printf(lcd_putc,"%1.2f C",temper) ;

...

}

Me gustaria que fuese si puede ser:

Analogica: 0.23v           Salida: 23.00ºC


Me sale:

Analogica: 0.23v           Salida: 3.36ºC




Muchas gracias
Título: Re: Resolucion A/D
Publicado por: sander en 28 de Marzo de 2008, 20:32:43
Estas definiendo que vas a trabajar con 10 bits?
Título: Re: Resolucion A/D
Publicado por: migsantiago en 28 de Marzo de 2008, 22:58:41
MMhhh

Si dices que Vref es 0.75V, considero que Vref+ = 0.75V y Vref- = 0V. El rango es de 0.75V, entonces...

0.75V es a 1023bits

pero 0.75V es a 75°C y a su vez es a 1023 bits, según la hoja de características del LM35.

1023 bits -> 75°C
x -> TempC

Lo que desconocemos es TempC, despejando...

TempC = (x * 75)/1023

donde x es la lectura en binario. Traducido a tu programa...

temper=(float)(adcValue*75)/1023; //con casting para forzar el resultado en flotante

Título: Re: Resolucion A/D
Publicado por: pocher en 29 de Marzo de 2008, 06:44:56
Creo que los cálculos los tiene bien hechos!

MigSantiago según la fórmula de la resolución de un convertidor creo que es 1024 y no 1023.

Arcadi como has hecho en el programa para programar la VREF (setup_adc_ports ...)?

Pón el programa completo.
Título: Re: Resolucion A/D
Publicado por: arcadi en 29 de Marzo de 2008, 09:09:58
Perdonen por el retraso, he tenido problemas con el PC.

He puesto en el micro Vref=0.75v i -Vref=0v.

Ahora culego el programa con la simulacion del Proteus. Es un reloj alarma con sensor de temperatura.

Muchas gracias
Título: Re: Resolucion A/D
Publicado por: arcadi en 29 de Marzo de 2008, 09:20:54
Sí, utilizo una conversion de 10 bits.

Cuando tenga el trabajo terminado, ya lo colgare como ejemplo de programar. Es que me falta tastear el tiempo de los segundos y todo esto...
Título: Re: Resolucion A/D
Publicado por: migsantiago en 29 de Marzo de 2008, 12:28:53
Hola Pocher

Si cuando tiene 0V tiene 0bits, entonces 0.75V es a 1023 bits, porque 1024 requeriría de un conversor de 11 bits de resolución... (10 000 000 000 en binario).

Si el ADC fuera de 8 bits, entonces 0.75V sería a 255 (2^8-1).
Título: Re: Resolucion A/D
Publicado por: arcadi en 29 de Marzo de 2008, 12:52:51
Puede ser, ya que al final nunca conseguire el Vref. Igualmente, tengo que poner un divisor de tension despues del LM35 para configurarlo bien.
Título: Re: Resolucion A/D
Publicado por: arcadi en 29 de Marzo de 2008, 12:56:24
Ahora he visto que no se habia colgado bien...
ya esta puesto bien.

Gracias
Título: Re: Resolucion A/D
Publicado por: pocher en 29 de Marzo de 2008, 15:12:38
Hola Arcadi.

Arcadi te falla porque te falta lo que te comentaba más arriba:

setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);

Otra cosilla: Has elegido un voltímetro a.c., cámbialo por uno d.c.

Hola MigSantiago.

Este dilema entre el 1024 y el 1023 ya lo tuve hace mucho tiempo con un componente del FORO y al final cada uno nos quedamos con lo nuestro, támpoco apareció nadie a opinar al respecto.

Yo me baso simplemente en la fórmula de un conversor A/D ó D/A que es:

VRES=VREF/2^n -----> Si n=10, pues 2^n=1024

Un saludo a ambos.
Título: Re: Resolucion A/D
Publicado por: arcadi en 29 de Marzo de 2008, 15:23:28
Muchas gracias!!!! Ahora lo puebo en el Proteus.

La semana que viene me voy a Barcelona a comprar los componentes que me faltan y lo montare. Seguramente retocare alguna cosilla y despues lo colgare aqui para si alguien le interesa para proyectos futuros.


Muchas gracias a todos.
Título: Re: Resolucion A/D
Publicado por: migsantiago en 29 de Marzo de 2008, 19:43:13
Hola MigSantiago.

Este dilema entre el 1024 y el 1023 ya lo tuve hace mucho tiempo con un componente del FORO y al final cada uno nos quedamos con lo nuestro, támpoco apareció nadie a opinar al respecto.

jejeje pues que le vamos a hacer... un bit a final de cuentas no afecta  :D
Título: Re: Resolucion A/D
Publicado por: migsantiago en 29 de Marzo de 2008, 19:59:39
Hola de nuevo

Me llegó una idea de cómo demostrar lo de la resolución. Si tuviéramos un ADC de 2 bits de resolución tendríamos los posibles datos entregados siguientes...

00, 01, 10 y 11

y si Vref+ fuera 5V...

5V / (2^2 - 1) = 5V / 3 = 1.66V

00 -> 0V
01 -> 1.66V
10 -> 3.33V
11 -> 5V

Pero si hiciéramos la división...

5V / 2^2 = 5V / 4 = 1.25

entonces la tabla estaría forzada a ser así...

00 -> 0V
01 -> 1.25V
10 -> 2.5V
11 -> 3.75V !!!

Hablando ya en 10 bits... tendría que hacerse con 2^10 - 1.

¿Qué opinas Pocher?  :mrgreen:
Título: Re: Resolucion A/D
Publicado por: pocher en 30 de Marzo de 2008, 02:23:01
Pués sí, con ese ejemplito te lo voy a demostrar fácilmente. Je, je.

Para valores de entrada Vi mayores ó iguales que 0 pero menores que 1,25V se codifican todos ellos como 00. Con números:

0V <= Vi < 1,25V    -----> 00

1,25V <= Vi < 2,5V -----> 01

2,5V <= Vi < 3,75V -----> 10

3,75V <= Vi < 5V    -----> 11

El valor 5V recibe el nombre de valor a fondo de escala (VFS) y suele coincidir casi siempre (salvo el caso de un convertidor de resistencias ponderadas que es un escalón menos) con el valor de referencia (VREF). En el caso del PIC creo que usa un convertidor A/D interno de aproximaciones sucesivas (el más usado) y sí que VFS=VREF)

Un saludo

Título: Re: Resolucion A/D
Publicado por: Modulay en 30 de Marzo de 2008, 03:09:17
Yo creo que es como explica pocher,aunque poniéndonos tiquismiquis, ¿qué pasa con los 5V?
Título: Re: Resolucion A/D
Publicado por: pocher en 30 de Marzo de 2008, 03:27:06
La forma expresada más arriba es el modo de cuantificar (trocear) los escalones. En la cuantificación el Valor a Fondo de Scala (VFS) es un valor que no se alcanza nunca.

Si se alcanzara ¿qué pasaría? ... que se codificaría como 11. Igual para valores de entrada mayores que 5V
Título: Re: Resolucion A/D
Publicado por: Modulay en 30 de Marzo de 2008, 03:46:28
efectivamente

http://html.rincondelvago.com/convertidores-a-d.html (http://html.rincondelvago.com/convertidores-a-d.html)

O sea que el valor digital lo daría:

x = (Vin - 1LSB) / 1LSB = (Vin - (VFS/2^n)) / (VFS/2^n)

Y truncando el resultado
Título: Re: Resolucion A/D
Publicado por: Modulay en 30 de Marzo de 2008, 04:19:33
Erré en las cuentas,para variar  :mrgreen:

Sería en todo caso truncando,pero sin restar 1LSB a Vin:

x = Vin / 1LSB = Vin*2^n / VFS
Título: Re: Resolucion A/D
Publicado por: pocher en 30 de Marzo de 2008, 05:21:48
Ahora sí.

Esas son las 2 fórmulas que yo uso en los convertidores:

a) VRES=VFS/2^n=VREF/2^n [ para convertidor D/A interno R/2R ][ Para convertidor D/A interno de resistencias ponderadas sería VRES=VREF/(2^n -1) ]

b)VRES=Vi/nº de escalones ; Vi tensión de entrada analógica (conversor A/D)

   VRES=Vo/nº de escalones ; Vo tensión de salida analógica (conversor D/A)

Utilizando la fórmula instantánea [ fórmula del apartado b) ] se deben truncar los decimales para hallar el valor digital buscado:

Valor digital = nº de escalones = Vi / VRES
Título: Re: Resolucion A/D
Publicado por: arcadi en 30 de Marzo de 2008, 06:20:54
Vref=5v
8 bits

5V / (2^8 - 1) =    [19.6 19.61]mv     ---------->rango de error


Digital:
00000000------------->0v
11111111-------------> [4.998   5.00055]v


------------------------------------------------------------------------

Vref=5v
8 bits

5V / (2^8) =    19.53mv  ----------------> sale un numero mas redondo


Digital:
00000000------------->0v
11111111-------------> 4.98015v

-----------------------------------------------------------------------------------


Conclusiones:

Hay poca diferencia. Cuando mas bits tenga el convertidor, menos error habrá. Teniendo en cuenta que con los A/D que hay al mercado (8bits, 10 bits, 14 bits, etc) ninguno es perfecto, pues habrá el error de diseño anterior mas error en perdidas de tensión y todo estas cosas.


Haber si me he explicado bien XD.

Gracias y suerte.





Título: Re: Resolucion A/D
Publicado por: migsantiago en 30 de Marzo de 2008, 12:42:50
Entendido y anotado Pocher, estoy de acuerdo contigo  :D

Nada como discutir amistosamente un dilema  8)
Título: Re: Resolucion A/D
Publicado por: stk500 en 30 de Marzo de 2008, 16:26:45
MigSantiago yo estaba pensando como tu y al leer los datos de nuestros Amigos me di cuenta , aqui aprendi algo nuevo que tenia Dudas yo tambien
Gracias a todos  :mrgreen:
Título: Re: Resolucion A/D
Publicado por: pocher en 31 de Marzo de 2008, 02:32:49
Me alegro de haber servido para algo. Eso me desoxida y rejuvenece  :D