TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Cryn en 12 de Octubre de 2007, 14:51:31

Título: Problema con teclado analogico - ahora problema rebotes
Publicado por: Cryn en 12 de Octubre de 2007, 14:51:31
bueno dado que en este (http://www.todopic.com.ar/foros/index.php?topic=18911.0) hilo estan conversando mucho sobre el tema, y casi nadie se ha fijado en mi problema (http://www.todopic.com.ar/foros/index.php?topic=18911.msg133336#msg133336), me tome la libertad de crear un nuevo hilo para preguntar sobre mi problema, espero no se molesten

sucede que he calculado esos valores de resistencia (solo necesito usar tres pulsadores, pero en la misma linea e entrada), y pues si lo pruebo independientemente (sin conectar al micro) los valores calculados de tension salen muy bien, pero cuando llevo el mismo esquema a la entrada RA0 de un pic 16f877a tanto en simulacion como en la realidad no entrega esos valores, y nose porque sucede eso, he visto el teclado que hizo nocturno en su pagina y tiene una simualcion la cual da perfecta, asi que he copiado mi esquema a su teclado, y lo he conectado al RA0 y sucede lo mismo, los valores de tension se bajan hasta 0.17 0.06 0.03 y yo necesito 4, 3 y 2 V, no comprendo que es lo uqe sucede, talvez hice algo mal en el codigo para la configuracion del ADC? o que sucede?

aca la configuracion que use:

Código: [Seleccionar]
#include <16F877a.h>
#device adc=8
#fuses XT,NOWDT,PUT,NOPROTECT,NOLVP,NOCPD,NOBROWNOUT,NODEBUG
#use delay(clock=4000000)
#byte port_b=6

void main()
{
   setup_adc_ports(RA0_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_timer_0(RTCC_DIV_64|RTCC_INTERNAL);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // con div 4 se tiene un segundo
   enable_interrupts(GLOBAL);
   set_tris_a(0xff);
   set_tris_b(0x01);
   set_tris_c(0xc0);
   output_a(0);
   output_b(0);
   output_c(0);
   while(true)
   {
      set_adc_channel(0);      // selecciona el canal 0
      delay_us(20);            // Retardo para carga del cap. de muestreo
      value=read_adc();        // Lee el resultado de la conversion
      if(value>63 && value<127)
      {
         select++;
         if(select>3)
            select=0;
      }
... y sigue el programa

nocturno en el hilo del teclado me dijo que le coloqeu un condensador en la entrada del ADC para filtrar ruidos, un consensador en paralelo? de que valor?, la fuente es estable, y por si acaso tiene condensadores de 10u y 100nf (104)
Título: Re: Porblema con teclado analogico
Publicado por: jfh900 en 12 de Octubre de 2007, 18:33:59
¿Puedes medir mediante un polímetro la tensión que le llega a la entrada del ADC?

Un saludo
Título: Re: Porblema con teclado analogico
Publicado por: Cryn en 12 de Octubre de 2007, 18:57:58
Gracias por la respuesta jfh900, en la simulacion paso eso:

0.17 0.06 0.03 y yo necesito 4, 3 y 2 V, no comprendo que es lo uqe sucede, talvez hice algo mal en el codigo para la configuracion del ADC? o que sucede?

eso es lo que da en la simulacion, y armando encontre valores pequeños tb 0.8 mas o menos, pero valores que no deberian salir, no creen, por eso mostre mi esquematico, en el post anterior, y la configuaracion del ADC que use, y no encuentro una respuesta a ello.
Título: Re: Porblema con teclado analogico
Publicado por: jfh900 en 12 de Octubre de 2007, 21:46:04
Acabo de probar la simulación y me da los valores correctos. ¿Has puesto el valor Vcc al terminal de tensión?

Un saludo
Título: Re: Porblema con teclado analogico
Publicado por: Cryn en 12 de Octubre de 2007, 22:43:01
ok mira para que te convensas te adjunto el esquematico (http://www.4shared.com/file/26322319/44d36ecb/Contador.html?dirPwdVerified=30556cb7) de la simulacion qeu hago, y checalo tu, y mira lo que hice para solucionarlo, ya que las resistencias no hacen su trabajo cuando esta conectado al ADC del micro (RA0), talvez falta algo en el codigo, nose, puedes darle una mirada a ambos??

muchas gracais por la ayuda, un saludo
Título: Re: Porblema con teclado analogico
Publicado por: jfh900 en 12 de Octubre de 2007, 22:56:21
Bueno, ya está solucionado:

Código: C++
  1. void main()
  2. {
  3.    setup_adc_ports(RA0_ANALOG);
  4.    setup_adc(ADC_CLOCK_INTERNAL);
  5.    setup_timer_0(RTCC_DIV_64|RTCC_INTERNAL);
  6.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // con div 4 se tiene un segundo
  7.    enable_interrupts(GLOBAL);
  8.    set_tris_a(0xff);
  9.    set_tris_b(0x01);
  10.    set_tris_c(0xc0);
  11.    // output_a(0); // Hay que comentar esta linea
  12.    output_b(0);
  13.    output_c(0);
  14.    while(true)

Tienes que comentar la línea indicada, ya que estas poniendo A0 como salida y a valor bajo.

Un saludo
Título: Re: Porblema con teclado analogico
Publicado por: Cryn en 12 de Octubre de 2007, 23:12:54
ok, gracias por la ayuda, no creo que hubiera dado con el error hasta un muy buen tiempo, que mala pata se me olivdo colocar el fast_io , y bueno ese output era una inicializacion, jeje

muchas gracias de verdad, sos grande.

pd. crees que se haya dañado esa entrada de mi micro por hacer eso???
Título: Re: Porblema con teclado analogico
Publicado por: jfh900 en 12 de Octubre de 2007, 23:15:11
No creo, son muy duros. Aunque la mejor forma de salir de dudas es probarlo como entrada y como salida.

Un saludo
Título: Re: Problema con teclado analogico (solucionado)
Publicado por: Nocturno en 13 de Octubre de 2007, 02:02:26
Brillante la solución, Jesús.

Cryn, menos mal que sacaste el post del otro hilo, porque nos ha ido la olla de una manera...  :D
Título: Re: Problema con teclado analogico (solucionado)
Publicado por: Cryn en 14 de Octubre de 2007, 00:25:33
jaja, sin duda, pues vi qeu solo me diste una respondida y despues todo mundo posteaba sobre el tema en si, y no el problema que yo tenia, entonces pense que mejor me podria ir fuera del anterior post y crear otro tema, para que sai me prestne un poco de atencion, jejeje, y pues dio resultado  :-/

un saludo

y gracias
Título: Re: Problema con teclado analogico - ahora problema rebotes
Publicado por: Cryn en 14 de Octubre de 2007, 03:31:48
ahora tengo problemas con los rebotes, que puedo hacer? ya intente introducir un retardo de 50 ms despues de capturar el valor del adc, pero interfiere demasiado con la multilexacion de los displays y se ve muy mal, que me sugieren??
Título: Re: Problema con teclado analogico - ahora problema rebotes
Publicado por: Nocturno en 14 de Octubre de 2007, 03:37:39
Puedes meter un contador que se incremente con cada iteración de tu bucle principal y comparas con un valor.

 if (contador++==20) {
     contador=0;
     value=read_adc();
...


Así sólo leerás el teclado una de cada 20 veces y será igual que un retardo, pero sin parar al micro.
Título: Re: Problema con teclado analogico - ahora problema rebotes
Publicado por: Cryn en 14 de Octubre de 2007, 03:55:51
umm tratare con ello despues, pasa qeu no tengo el circuito en mis manos, jeje, pero en la simulacion parecia que capturaba 2 veces el mismo pulsador y pues ahora colocando la sentencia parecida a la q pusiste en el codigo (depues de la lectura del ADC) de tu teclado nocturno:

if(value && value!=value_ant)

parece que esta mejor, lo vere en circuito en una horas, vale?

gracias por la rapida respuesta, un saludo
Título: Re: Problema con teclado analogico - ahora problema rebotes
Publicado por: Cryn en 14 de Octubre de 2007, 21:32:12
no resulto muy bien con la anterior sentencia, pero le he agregado el contador qeu mencionas y ha resultado de maravilla, gracias, un saludo
Título: Re: Problema con teclado analogico - ahora problema rebotes
Publicado por: Nocturno en 15 de Octubre de 2007, 01:42:53
Me alegro que lo consiguieras