Autor Tema: Ayuda con el LCD del pic 16F874A (incluyo codigo)  (Leído 2285 veces)

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

Desconectado aprendiz_de_Pic

  • PIC10
  • *
  • Mensajes: 23
Ayuda con el LCD del pic 16F874A (incluyo codigo)
« en: 12 de Enero de 2005, 16:06:00 »
Saludos a todos en el foro:

Pues veran estoy realizando un identificador de colores, ya tengo mi acondicionador de señal que me da de 0-5V dependieendo del color, pero..
...tengo un problema con el ADC del Pic, despliego en el LCD el valor que lee el ADC y cuando no conecto nada a la entrada tengo un (ff) y cuando la entrada la pongo a tierra obtengo un (00). por un momento pense que esto era bueno, pero cuando conecto  una señal de entrada de .5 -4.5V sigo obteniendo  un (FF) como si no contara la señal de entrada. entonces revise con un multimetro el puerto RA0 con el Voltimetro y encontre una señal de 4.9V no importando el valor de la entrada  excepto cuando la conecto a tierra.  Aclaro que utilizo la misma fuente y probe una externa uniendo las tierras pero tampoco.  

Pienso que es problema en mi codigo.  por favor solicito su experiencia
para solucionar esto

 claro que tambien se aceptan consejos y opiniones acerca de este.

#include    <16F874A.H>
#device     *=16 ADC=8
#fuses      HS,NOWDT,NOPROTECT,NOLVP
#use        delay(clock=4000000)
#use        rs232(baud=9600)
#include    <LCDC2.C>
#include    <stdlib.h>



void main()
{
      int  value;
         LCD_Init();                                        
         LCD_PutCmd ( CLEAR_DISP );                        
         LCD_SetPosition ( LINE_1 + 0 );                  
         printf ( LCD_PutChar, "Identificador de " );      
         LCD_SetPosition ( LINE_2 + 5 );                  
         printf ( LCD_PutChar, "Colores" );                
         delay_ms(255);
         delay_ms(255);
         delay_ms(255);
         delay_ms(255);



         do {                                                 //ciclo (do )para refrescar lectura
            setup_port_a( ALL_ANALOG );                       //configuracion del ADC
            setup_adc( ADC_CLOCK_INTERNAL );
            set_adc_channel( 0 );                             //RA0 como entrada
            value = Read_ADC();                               //leyendo el ADC


               if (value>0xfc & value<=0xff)                  //rango para el color Blanco
                  {
                  LCD_PutCmd ( CLEAR_DISP );
                  LCD_SetPosition ( LINE_1 + 1 );
                  printf(LCD_PutChar,"A/D = %2x" , value);
                  LCD_SetPosition ( LINE_2 + 5 );
                  printf(LCD_PutChar,"Blanco"Giño;
                  delay_ms(255);                              //evitar parpadeo de la lectura
                  delay_ms(255);
                  delay_ms(255);
                  delay_ms(255);
                  }




              if (value>=0x00 & value<0x05)                  //rango para el color negro
                  {
                  LCD_PutCmd ( CLEAR_DISP );
                  LCD_SetPosition ( LINE_1 + 1 );
                  printf(LCD_PutChar,"A/D = %2x" , value);
                  LCD_SetPosition ( LINE_2 + 5 );
                  printf(LCD_PutChar,"Negro"Giño;
                  delay_ms(255);
                  delay_ms(255);
                  delay_ms(255);
                  delay_ms(255);
                  }



                if (value>=0x14 & value<0x32)                 // rango para el color azul
                  {
                  LCD_PutCmd ( CLEAR_DISP );
                  LCD_SetPosition ( LINE_1 + 1 );
                  printf(LCD_PutChar,"A/D = %2x" , value);
                  LCD_SetPosition ( LINE_2 + 5 );
                  printf(LCD_PutChar,"azul"Giño;
                  delay_ms(255);
                  delay_ms(255);
                  delay_ms(255);
                  delay_ms(255);
                  }




                if (value>=0x40 & value<0x70)                  //rango para el color cafe
                  {
                  LCD_PutCmd ( CLEAR_DISP );
                  LCD_SetPosition ( LINE_1 + 1 );
                  printf(LCD_PutChar,"A/D = %2x" , value);
                  LCD_SetPosition ( LINE_2 + 5 );
                  printf(LCD_PutChar,"Cafe"Giño;
                  delay_ms(255);
                  delay_ms(255);
                  delay_ms(255);
                  delay_ms(255);
                  }

            }
        while (TRUE) ;


}

Desconectado wqtrp

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 170
RE: Ayuda con el LCD del pic 16F874A (incluyo codigo)
« Respuesta #1 en: 12 de Enero de 2005, 17:15:00 »
bien, para empezar, vamos derecho a ....
1. deberias sacar del loop infinito las cosas q se necesitan se ejecuten solo una vez, tipo:
  setup_port_a( ALL_ANALOG ); //configuracion del ADC
  setup_adc( ADC_CLOCK_INTERNAL );
2. te aconsejo poner el pin del conversor como entrada, no recuerdo si es necesario, pero lo hago siempre.
3. luego de elejir el canal (set_adc_channel) debes esperar un cierto tiempo q es para q la señal se estabilice y se tome la muestra. (esto te falta), revisa el data sheet para confirmar estas cosas.

creeria q con esto deberia salir andando, el hecho q midas 4.9v casi seguro q es pq esta el pin como out.

Suerte y avisa q paso.

Desconectado aprendiz_de_Pic

  • PIC10
  • *
  • Mensajes: 23
RE: Ayuda con el LCD del pic 16F874A (incluyo codigo)
« Respuesta #2 en: 12 de Enero de 2005, 17:29:00 »
Te agradezco mucho tu consejo, ahora mismo estoy corrigiendo lo de la organizacion. Por cierto tambien habia pensado en lo el pin como salida pero...
...la verdad no se como especificar que es entrada el canal RA0.  
podrias decirme como se hace.

gracias

Desconectado aprendiz_de_Pic

  • PIC10
  • *
  • Mensajes: 23
RE: Ayuda con el LCD del pic 16F874A (incluyo codigo)
« Respuesta #3 en: 12 de Enero de 2005, 17:49:00 »
otra vez soy:

muchisimas gracias.
Andaba cansadon y no reflexione,  claro que se definir las entradas ajajjaja.
pero gracias con esto funciono correctamente.

ya me marca 0V

y gracias por los consejillos


David
saludos desde colima


 

anything