Autor Tema: DUDA: Sobre entrada analogica 10 bits - 1024  (Leído 5181 veces)

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

Desconectado rroque

  • PIC12
  • **
  • Mensajes: 68
DUDA: Sobre entrada analogica 10 bits - 1024
« en: 07 de Marzo de 2011, 19:09:02 »
Hola a toda la gente del foro
Les cuento, desde ayer que me puse a jugar con la entrada analogica del 16f873a simulando una entrada analoga con un potenciometro de 10k a 5Vdc.
La entrada esta configurada para un resolucion de 10 bits. Al principio no podia ver datos claros, existia mucho ruido, por lo que utilice los Vref para colocarle 0V a vref- y 5V a vref+, con eso se normalizo y se vieron datos, despues me percate que cuando la entrada era 0V no displayaba 0 sino que el dato se perdia o aparecia otro numero, por lo que le puse una resistencia bien baja 1ohm a la entrada analogica, con eso ia pude ver el valor minino.
Despues para poder ver el valor 1023 que equivale a 5Vdc era imposible ya que cuando tenia 4.9V me displayaba 999 y cuando pasaba a mas voltage me da cualquier valor. Mi pregunta es por que no llego a ver el valor maximo del escalamiento.
Este es el programa, como ven es muy sencillo, espero que me puedan ayudar con esto, lo probe en proteus y normal llego a visualizar 1023 a 5vdc, pero en el pcb nada :S

#include <16F873A.h>
#device adc=10
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT,NODEBUG
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7, bits=8)

void main(void)

{
   int16 value;
   setup_adc_ports(AN0_VREF_VREF);
   setup_adc(ADC_CLOCK_DIV_32);
   set_adc_channel(0);
      delay_us(20);
   set_tris_c(0);

   do
   {
      delay_ms(10);
      value=1023.00*read_adc()/1023;
      printf("ADC:%LU \r",value);
      delay_ms(150);

   }while(TRUE);
}   

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #1 en: 07 de Marzo de 2011, 20:03:33 »

prueba asi...
value=read_adc();
yo loque hago muchas veces con las entradas analogicas es leer varias veces el valor analogico del pin y calcular la media...

ejemplo....

void lectura_adc()
{
  long valor;
  int calculo;
  for(calculo=0;calculo<=10;++calculo){
      valor=valor+read_adc();
  }   
  valor=valor/10;
}

de esta forma tambien evitaras mejor el ruido... un saludo
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #2 en: 07 de Marzo de 2011, 20:18:37 »
Hola rroque, creo que hay algo de sobra en tu fórmula:
Citar
value=1023.00*read_adc()/1023;
Si solamente quieres ver el número capturado puedes poner:
Citar
value = read_adc();
O si lo que quieres es ver el voltaje, entonces:
Citar
value=((float)read_adc()/1023.0)*5.0;

Saludos!

Edito: Veo que ya te había mencionado algo de esto ppyote.  En el último caso que te menciono, la variable value debería ser de tipo float.
« Última modificación: 07 de Marzo de 2011, 20:23:13 por bmb »

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #3 en: 07 de Marzo de 2011, 20:31:58 »
Hola paisa.

No te hagas problemas, lo que yo hago es leer cada 250ms el adc (para la prueba usa un pote de 1K).

int16 lectura_adc;
set_adc_channel(0);
while(true){
////genera una pausa de 250 ms
lectura_adc = read_adc() * 0.00489;
printf("ADC: %3.2f",lectura_adc);
}

El  0.00489 sale de dividir 5/1024

La pausa que menciono la genero con una interrupcion del pic, es decir ejecuto la lectura del adc cada 250ms utilizando un flag y asi mi pic no se queda "inoperativo", y durante ese tiempo puedo hacer otras cosas.

Menciono el pote de 1k ya que segun lei se debe poner baja impedancia a la entrada del pic, lo cual tambien consigues con un opamp en configuracion seguidor de voltaje.

saludos
« Última modificación: 07 de Marzo de 2011, 20:41:43 por KALLITOS »
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado rroque

  • PIC12
  • **
  • Mensajes: 68
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #4 en: 10 de Marzo de 2011, 10:26:41 »
Gracias a todos por responder, Primero bmb si tienes razon value=1023.00*read_adc()/1023; esto si es esta demas solo lo coloque para probar para ver si producia un cambio y me olvide d cambiarlo al momento de copiarlo aqui, desde un principio lo probé de esa manera value = read_adc(); pero nunca llego a ver los 1024 datos.
Segundo ppyoye, tambien probe tu solucion pero aun asi no llego a ver mas 1000 en la resolucion de 1024, la unica parte que no probe fue la kallitos colocando un opamp en seguidor de voltaje, tambien en la parte de colocar un potencionetro de 1k yo le puse uno de 10, voy a buscar un opamp no encuentro jijiji. Gracias x sus respuesta en cuanto lo solucione les cuento lo que sucediooooooooooooooo


Gracias a todos muchachos xD

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #5 en: 10 de Marzo de 2011, 11:26:46 »
Los reguladores de tensión de 5 Vcc rara ves dan 5 volts exactos, por lo tanto yo en mis equipos o uso una referencia de tensión estable o leo con un multimetro la tensión que entrega el regulador y uso ese valor en el calculo.
De otro modo el error es importante...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado rroque

  • PIC12
  • **
  • Mensajes: 68
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #6 en: 10 de Marzo de 2011, 16:11:29 »
Para MGLSOFT la tension que vota mi regulador es 5.02 voltios, el cual tmb esta conectado a mi Vref+, cuando yo muevo el potenciometro y me acerco a los 5 voltios osea 4.90 el dato ya no es 1000 sino que aparece otro y en el voltimetro aparece 5 voltios exactos.

Ya encontre un opamp el LM324, lo pruebo ahora y les comento como me fue XD



Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #7 en: 10 de Marzo de 2011, 17:47:57 »
  ¿Del punto medio del pote ingresas directamente al PIC? De ser así, probá poniendo una resistencia en seria de 1K.

  ¿Podrías subir el circuito que estás utilizando?

 
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #8 en: 10 de Marzo de 2011, 17:48:54 »
Hola rroque, por que no haces el ensayo quitando el voltaje de referencia y configurando la entrada análoga así:

Código: C
  1. setup_adc_ports(AN0);
  2.    setup_adc(ADC_CLOCK_INTERNAL);
  3.    .
  4.    .
  5.    .
  6.    value = read_adc();
  7.    .
  8.    .
  9.    .

Y le conectas directamente a V+ en AN0?  Asi te debería leer 1023 (o muy cerca) en value.  De no ser asi, lo más seguro es que tienes un problema de hardware.

Saludos!

Desconectado rroque

  • PIC12
  • **
  • Mensajes: 68
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #9 en: 11 de Marzo de 2011, 11:55:36 »
BMP, acabo de realizar tu sugerencia, sale el mismo error no llevo a ver 1024, me displaya lo mismo aunque este o no este el VREF activado. Les voy adjuntar el esquemático del PCB que hice para realizar las pruebas. como lo verán es muy sencillo.

Kallitos:
También coloque el opamp  en modo seguidor, pero nada, siguen saliendo los mismos valores no pasan de 999 a 4.90V :S

Espero que sea algo de hardware para ya solucionar el problema.

Saludos

Desconectado rroque

  • PIC12
  • **
  • Mensajes: 68
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #10 en: 11 de Marzo de 2011, 11:58:09 »
AngelGris:
Si estoy conectando el punto medio del potenciometro a la entrada del ADC 0, tambien le coloque una resistencia en serie pero bien baja 2 ohmios, pero nada sigue con ese bendito error :S

Desconectado rroque

  • PIC12
  • **
  • Mensajes: 68
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #11 en: 11 de Marzo de 2011, 12:04:05 »
el circuito que utilice con el opamp es el que propuso Gonzalo_BlackHawk

enlace : http://www.todopic.com.ar/foros/index.php?topic=24047.0

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #12 en: 11 de Marzo de 2011, 12:05:30 »
AngelGris:
Si estoy conectando el punto medio del potenciometro a la entrada del ADC 0, tambien le coloque una resistencia en serie pero bien baja 2 ohmios, pero nada sigue con ese bendito error :S

  Por eso te decía una R de 1K, tal vez al ser muy baja y al estar cercano a la fuente circule mucha corriente hacia el capacitor interno del ADC y genere un error en la medición. También debes asegurarte de tener bien escogida la velocidad del ADC ya que sino también provoca errores en la conversión.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado rroque

  • PIC12
  • **
  • Mensajes: 68
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #13 en: 11 de Marzo de 2011, 12:12:04 »


  Por eso te decía una R de 1K, tal vez al ser muy baja y al estar cercano a la fuente circule mucha corriente hacia el capacitor interno del ADC y genere un error en la medición. También debes asegurarte de tener bien escogida la velocidad del ADC ya que sino también provoca errores en la conversión.
[/quote]

Acabo de colocarle la resistencia en serie y no pasa nada es lo mismoo wuaaaa me vuelve loco un problema asi. De esta manera lo estoy ejecutando. sin vref.

#include <16F873A.h>
#device adc=10
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT,NODEBUG
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7, bits=8)

void main(void)

{
   int16 value;
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
    delay_us(20);
   set_tris_c(0);

   do
   {
      //delay_ms(250);
      value=read_adc();
      printf("ADC: %LU   \r",value);
      delay_ms(250);

   }while(TRUE);

Desconectado Maxtronic

  • PIC10
  • *
  • Mensajes: 27
Re: DUDA: Sobre entrada analogica 10 bits - 1024
« Respuesta #14 en: 11 de Marzo de 2011, 13:39:23 »
Yo no tengo problemas del adc con un pot de  5k funciona bien seguro lo estarás haciendo en un protoboard en eso tienes que tener muchas conexiones a tierra no basta con 2 cables que comunique  de lado a lado
« Última modificación: 11 de Marzo de 2011, 19:29:45 por Maxtronic »