Autor Tema: ADC fondo de escala  (Leído 22774 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
ADC fondo de escala
« en: 26 de Febrero de 2007, 16:52:52 »
Hola de nuevo foreros:

Tengo un problema con el ADC del pic 18f4552, resulta que tengo un potenciometro que tiene un rago de señal entre 0.12V y 4.75V, cuando lo conecto al pic, los 0.12V de la entrada corresponte a 00 y los 4.35V a los 255...es decir si os fijais en los datos el fondo de escala del potenciometro es mayor que el del ADC...no se supone que el ADC tendría un fonde de escala entre GND y VCC...porqué el ADC sólo me llega a 4.35V...se debe a la resolución de mi programa o porque el ADC es así...de ser así tendría que meter un operacional y bajar el fondo de escala imagino...o comprar un ADC externo de más portencia que el del pic y pasarele los datos...¿Qué pensaís sobre esto tan extraño?  :) :) :) :)

Aqui os dejo el programita para que le hecheis un vistazo, como podeis comprobar es muy sencillo y cortito:

#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)

#define use_portb_lcd TRUE         
#include <lcd.c>

void main(void) {

   int value=0;
   long value2=0;
     
   lcd_init();     

   
   ///////////////////////ADC//////////////////////////////////////////////////////////////
   //setup_port_a( ALL_ANALOG );
   #if defined(AN1)
   setup_adc_ports(AN1);
   #endif
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel(1);

   while (TRUE)
   {
      value = Read_ADC();
      value2= Read_ADC();
      delay_ms(5);
      printf(lcd_putc,"\f%LX    \n%LX",value,value2);
   }
}

Un saludete y como siempre muchas gracias a todos   :mrgreen: :mrgreen: :mrgreen:
« Última modificación: 26 de Febrero de 2007, 16:55:09 por c4_esp_VR »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ADC fondo de escala
« Respuesta #1 en: 26 de Febrero de 2007, 17:02:41 »
Estas seguro que lees el canal adecuado?  El primer canal es el AN0 no el AN1.

PD: además revisa si estas trabajando en 8 bits o 10 bits. 
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: ADC fondo de escala
« Respuesta #2 en: 26 de Febrero de 2007, 17:37:08 »
Estoy segurisimo que estoy usando el canal adecuado pues tengo un valor entre 00000 y 65472 cuando muevo el potenciometro y esto contesta a tu segunda pregunta...que es long (16bits) pues el ADC que uso es de 16 bits (#device adc=16).

El primer canal es el AN0 sino fijate en el datasheet del micro y en las librerias del CCS como bien dices, pero nosotros podemos usar el que mejor nos convenga...

P.D: maunix no duermes neng, siempre estas aqui  :shock: :shock: :shock:
« Última modificación: 26 de Febrero de 2007, 18:28:05 por c4_esp_VR »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ADC fondo de escala
« Respuesta #3 en: 26 de Febrero de 2007, 19:20:20 »
Estoy segurisimo que estoy usando el canal adecuado pues tengo un valor entre 00000 y 65472 cuando muevo el potenciometro y esto contesta a tu segunda pregunta...que es long (16bits) pues el ADC que uso es de 16 bits (#device adc=16).

El primer canal es el AN0 sino fijate en el datasheet del micro y en las librerias del CCS como bien dices, pero nosotros podemos usar el que mejor nos convenga...

P.D: maunix no duermes neng, siempre estas aqui  :shock: :shock: :shock:

Bueno, el pic que usan tiene un A/D de 10 bits.  No se qué variará que le hagan ADC=16 porque no uso el CCS pero supongo tal vez eso solo varié el prototipo de la función Read_ADC()

Si están seguros de medir AN1 entonces no digo nada.  Pero no vendría mal que nos indiquen cómo es el hardware.

Otra pregunta, luego de la configuración del A/D.  ¿Pueden conocer el estado de ADCON0 y ADCON1 y postearlo aquí?

Si uds obtienen valores entre 0 y 65535 es porque están usando el modo de justificación izquierda.  Este modo se usa gralmente cuando uno solo quiere 8 bits de precisión y toma nomás el valor del registro ADRESH.  Ahora cuando uno quiere precisión de 10 bits se suele usar justificación derecha ya que esto nos dará valores de 0 a 1023.

Con esto quiero ver qué referencia están usando , tal vez no sea la que uds esperan.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: ADC fondo de escala
« Respuesta #4 en: 27 de Febrero de 2007, 12:38:22 »
hola c4_esp_VR. tengo varias opiniones en base a lo ensayos que he hecho:

- colocando #device adc=16 ciertamente haces la justificación a la izquierda.

- ¿mediste la tensión de Vcc? ¿a cuanto llega? -

-  mide a Vcc y a Gnd.

- siempre he notado que el máximo valor obtenido del ADC (ó CAD) siempre está por debajo del valor del Vdd.

- porque en tu código mandas a leer 2 veces a CAD, ¿no deberias esperar un tiempo de adquisición mínimo entre lecturas?

- además al estar declarando a value como long tienes 2^16 = 65536 posibles valores, no haría falta llamar a valor2

Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: ADC fondo de escala
« Respuesta #5 en: 27 de Febrero de 2007, 13:48:47 »
Hola de nuevo, ya estoy aquí dandole al CAD...

Lo de la justificación no tengo ni idea...sólo se que me dá valores entre 0 y 65472 al poner un long con un CAD de 16 bits, lo del valor del int era para ver que me daba y me da un rango entre 0 y 255 que son 8 bits por ser int.

La tensión del PIC es la del USB, es decir me da 5.05V por tanto el CAD está por debajo de la alimentación (Vmax CAD = 4.2V)

Leo dos veces, una para el int y otra para el long...era sólo una prueba para ver que sacaba...

Lo de dejar tiempo entre dos adquisiciones de datos...pues tienes razón...pero de todas maneras funciona.

El código no es el problema pues este código (lo simplifico para no confindir) funciona perfectamente...lo que no funciona "bien" es el fondo de escala de CAD que debería de ser el de alimentación y no caer de los supuestos 5V a los 4.2 que dá como máximo.

#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)

#define use_portb_lcd TRUE         
#include <lcd.c>

void main(void) {

   long value2=0;
     
   lcd_init();     

   
   ///////////////////////ADC//////////////////////////////////////////////////////////////
   #if defined(AN1)
   setup_adc_ports(AN1);
   #endif
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel(1);

   while (TRUE)
   {
      value2= Read_ADC();
      delay_ms(5);
      printf(lcd_putc,"\f%LX",value2);
   }
}

Por lo que veo el fondo de escala no tiene solución...pues la Vref no puede ser mayor que la alimentación del pic pues por defecto coje como Vref la misma que la de la alimentación, así que hay que acondicionar la señal...

Con el divisor de tensión funciona a la perfección ajustando al máximo la señal...es decir, la señal max del CAD es de 4.2V y la max del encoder es de 4.7V pues decimos que sí:

Ventrada= 4.7V     Vsalida=4.2V       Vsalida = Ventrada (R2/R1+R2)...hechando cálculos uno de los posibles valores de las resistencias comerciales son R1=1K2 y R2=10K con lo que haciendo esto equiparamos la max tensión del encoder a la max tensión del CAD, con lo que en teoría es perfecto y en la práctica sale bien pero con un pequeño error pues las resistencias tienen un pequeño error

Otra posibilidad es poner un AO de ganancia menor que 1 pero como tambien jugamos con las resistencias...pues más sencillo hacer el divisor de tensión.

P.D: Mi pregunta en general era si existía alguna forma de subir el fondo de escala del CAD del micro...pero creo que no la hay...a no ser que alimentemos el micro a 6V...lo cual no es bueno  :D :D :D :D

P.D2: Ya de paso con la duda queda hecho un programita de un CAD de 16 bits que saca por el LCD dicha conversión.
Un saluedete
« Última modificación: 27 de Febrero de 2007, 14:01:24 por c4_esp_VR »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ADC fondo de escala
« Respuesta #6 en: 27 de Febrero de 2007, 14:36:25 »
c4_esp_VR , leo y releo tu post y no entiendo la relación que haces entre la tensión de alimentación del pic (que sería la Vref de tu A/D si es que lo configuran así) y la tensión del encoder y del valor ese 4.2 que no se de donde sacan.

Si tu referencia es de 5V , el que tengas 65472 sobre un máximo de 65535 solo indica estas sensando 4,99 voltios. 

Entonces no veo donde tienes el famoso problema que planteas.

Si puedes subir un esquemático, sería tanto más provechoso.


Saludos




- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: ADC fondo de escala
« Respuesta #7 en: 27 de Febrero de 2007, 14:59:15 »
puede que el problema sea en el hardware como dice Maunix, ¿de cuanto es ese potenciometro? recuerda que para una correcta conversión hay que tomar en cuenta la resistencia a la entrada del CAD.

Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: ADC fondo de escala
« Respuesta #8 en: 27 de Febrero de 2007, 18:48:30 »
Tan mal me explico... :( :( :( :(

Veamos el portenciometro es un encoder que me dá una tensión entre 0 y 4.7V.

El CAD pasa de 65472 a 0 cuando el encoder excede los 4.2V y queda constante hasta que el encoder da 0V, es decir para el CAD el intervalo entre 4.2V y 4.7V permenece en 65472 con lo que hay un error bastante grande...

Espero haberme expresado con claridad  :-) :-) :-) :-) :-)

Gracias a ambos por vuestro tiempo e interés

Desconectado dhmejia

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 260
Re: ADC fondo de escala
« Respuesta #9 en: 27 de Febrero de 2007, 19:51:57 »
No entiendo lo de la resolución del CAD de 16 bits, si el pic solo tiene 10 bits de resolución no es posible obtener 16 bits por mas que se configure asi en el ccs (eso creo).  Al configurar los supuestos 16 bits lo que se hace como dijo maunix es justificar a la izquierda, no he hecho la prueba pero creo que el incremento no es de uno en uno sino de 64 en 64 (por los 6 bits que quedan a la derecha y que no cambian), por lo tanto el dato de 65472 no va incrementando de 1 en 1 a medida que el voltaje aumenta sino que el próximo valor que se lea va a ser 65536 o sea el máximo.

Si tu referencia es de 5V , el que tengas 65472 sobre un máximo de 65535 solo indica estas sensando 4,99 voltios. 

Coincido con maunix, no veo ningún problema.

Yo aconsejaría configurar en el ccs resolucion de 10 bits para que sea mas fácil, se trabaja con valores de 0 a 1023 y no se presta para confusión.  Además que yo sepa (me corrigen por favor) no es posible aumentar la resolución del CAD por software.

saludos.
Pereira - Colombia

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ADC fondo de escala
« Respuesta #10 en: 27 de Febrero de 2007, 21:00:21 »
Veamos el portenciometro es un encoder que me dá una tensión entre 0 y 4.7V.

El CAD pasa de 65472 a 0 cuando el encoder excede los 4.2V y queda constante hasta que el encoder da 0V, es decir para el CAD el intervalo entre 4.2V y 4.7V permenece en 65472 con lo que hay un error bastante grande...

Espero haberme expresado con claridad  :-) :-) :-) :-) :-)


c4_esp_VR, releo y releo y sigo sin entender...  :shock:

Tu te refieres cuando el encoder DESCIENDE de los 4.2V ? Porque para mi "excede los 4.2V significa que "es mayor que".

Como verás estoy tratando de unificar terminología.

¿Tan difícil es poner un esquemático de tu circuito?   :?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: ADC fondo de escala
« Respuesta #11 en: 27 de Febrero de 2007, 21:54:17 »
Yo coincido con dhmejia, es imposible tratar de obligar un conversor AD que es de 10 bits a trabajar a 16. Ese debe ser el error, no puedes iterpretar numeros de mas de 1023. El pic no da para mas. Bueno hay unos nuevos que ya traen ADc de 12bits. pero no mas.

No te estaras confundiendo con

#device *=16

un poquito de lo que encuentras en la ayuda de CCS.

#DEVICE ADC=xx                 
Configures the read_adc return size. For example, using a PIC with a 10 bit A/D you can use 8 or 10 for xx- 8 will return the most significant byte, 10 will return the full A/D reading of 10 bits.




Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: ADC fondo de escala
« Respuesta #12 en: 27 de Febrero de 2007, 22:01:02 »
Bueno, Pues a pesar de que no entiendo como es posible por software obligar al hardware a converrtir a 16 bits.

Este es tu problema.

If the device had a 10bit ADC module,  value will range between 0-3FF.

#DEVICE ADC=8 will yield0-FF

#DEVICE ADC=16 will yield 0-FFC0

Y pues con esto te dicen que aunque el ADC esta trabajando a 16 bits lo maximo que obtienes a 5V es FFC0 =65472. y no 65535.

Tienes mal la escala. arregla eso y ya esta.




PERO Como es posible obligar al hardware????? :z)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ADC fondo de escala
« Respuesta #13 en: 27 de Febrero de 2007, 23:10:24 »
PERO Como es posible obligar al hardware????? :z)

No se obliga a nadie.  Simplemente el PIC puede justifica a izquierda o derecha un resultado de 10 bits entre los 2 registros que cuenta

Imaginate el máximo valor:



Trabajando en binario.

         
ADvalue =  00000011 11111111;  // 10 bits en 1

Si usamos justificación izquierda.

            ADRESH    ADRESL
ADvalue =  11111111  11000000

El valor irá de 0 a 65472dec ó FFC0h


Si usamos justificación derecha

            ADRESH    ADRESL
ADvalue =  00000011  11111111


El valor irá de 0 a 1023dec ó 03FFh



Eso de usar el ADC=16 es una definición del CCS, nada más, que nada tiene que ver con el PIC.

Slaudos
« Última modificación: 27 de Febrero de 2007, 23:14:33 por maunix »
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: ADC fondo de escala
« Respuesta #14 en: 28 de Febrero de 2007, 10:45:20 »
Realmente se habla de 16 bits por lo que tratas el resultado del ADC en 2 registros de 8 bits, Aunque no se usan los 6 bits de menos peso cuando se justifica a la izquierda.

Pues en la realidad son un poco insignificantes y no cambia de a mucho el resultado, pero en la realida en conversor siempre sera de 10 bits.

Entonces en realidad obtendras la misma resolucion si trabajas a 10 que a supuesto 16 bits.

Gracias maunix por la explicacion y aclararme este embrollo que se me formo.

Saludos!


 

anything