TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: alluzin en 29 de Noviembre de 2011, 02:38:40

Título: Ayuda con un sensor infrarrojo y PIC
Publicado por: alluzin en 29 de Noviembre de 2011, 02:38:40
Hola   q tal?
 Estoy   atorado con mi  proyecto de  titulación  ya que un  sensor infrarrojo no es  detectado a tiempo por un pic 18f4550, el sensor  si  funciona y  si manda la  señal al pic  esto ya lo verifique. Este  sensor es el que  me  da  entrada a una  rutina  mediante un  función  IF. si  el  sensor  manda  un  1 debería de entrar de inmediato a la  rutina, pero  esto no es  así, ya que  después  de  unos  segundos   de  estar interrumpiendo la señal el  pic  ejecuta  esta  rutina y yo  quiero  que  entre  de inmediato  al interrumpirse la señal del   sensor.
Les   dejo  mi programa  a ver  si me pueden  ayudar  a resolver mi problema, El  programa  toma  muestras  del  ADC y  después las manda  a la pc por  USB CDC a una aplicación en Labview, la  cual  genera un registro  de los valores  tomados por  ADC del  pic.
Código: [Seleccionar]
do{
                     
                     
                      dato=usb_cdc_getc();                     //espera a recibir un datos por el puerto cdc_usb
                                         
                      switch(dato) {                           // compara el dato para ejecutar accion
                 
                     
                                                                                           
                                 
                      case 'a':                             
                     
                                if(input(PIN_A1) == 1)
                                  {
                                       
                                    set_adc_channel(0);
                                    ref2=algoritmo();
                                    peso=(ref2-ref)*factor;
                                    bajo=make8(peso,0);
                                    alto=make8(peso,1);
                                    printf(usb_cdc_putc,"%c",set);
                                    delay_ms(5);
                                    printf(usb_cdc_putc,"%c",bajo);
                                    delay_ms(5);
                                    printf(usb_cdc_putc,"%c\n",alto);
                                    lcd_gotoxy(1,1);
                                    lcd_putc('\f');
                                    printf(lcd_putc,"Peso= %lu gramos",peso);
                                     delay_ms(1000);
                                                                                                             
                                 }
                                                           
                                  else
     {
     printf(lcd_putc,"Esperando");
                                     delay_ms(3000);
     }
                                   
                                break;                               
                                }
                             
       }while (TRUE); // bucle infinito.
 
Título: Re: Ayuda con un sensor infrarrojo y PIC
Publicado por: NoSepComo en 29 de Noviembre de 2011, 04:50:18
Hola, cuando el pic no atiende a los procesos del main suele ser porque alguna interrupción esté acaparando su atención, vigila que no esté pasando eso. Lo que puedes hacer para asegurarte es comentar el código que vaya asociado a las interrupciones y probar sencillamente si el PIC atiende bien la entrada del sensor.
Si no vuelve a algo más básico y simplemente hazte un programita para encender un led cuando se active el sensor, parece una tontería, pero seguro que si vas añadiendo cosas desde ahí lo solucionas o por lo menos averiguas que es lo que casca.
Título: Re: Ayuda con un sensor infrarrojo y PIC
Publicado por: tapi8 en 29 de Noviembre de 2011, 06:07:10
Citar
si  el  sensor  manda  un  1 debería de entrar de inmediato a la  rutina

Yo todos los sensores infrarrojos que use (PIR) funcionan por 0, estan dando un 1 continuamente y cuando detectan presencia se ponen a 0, miralo por si acaso.

Título: Re: Ayuda con un sensor infrarrojo y PIC
Publicado por: NoSepComo en 29 de Noviembre de 2011, 06:20:51
Hola, yo uso uno de PEPPERl+FUCHS que puede funcionar por nivel alto o por nivel bajo, según que conexionado hagas de él.
Título: Re: Ayuda con un sensor infrarrojo y PIC
Publicado por: Vtronic en 29 de Noviembre de 2011, 13:25:17
y si mandas ese uno a una interrupcion?
Título: Re: Ayuda con un sensor infrarrojo y PIC
Publicado por: Geo en 29 de Noviembre de 2011, 15:54:07
Dos cosas, si la función usb_cdc_getc() espera a recibir datos, ahí estará ocupado el PIC un tiempo y por eso no detecta de inmediato el cambio de estado del pin al que está conectado el detector.
Segunda, si no hay señal del detector, haces un retardo de 3000 ms, por lo que en el mejor de los casos, una vez que no hay detección, esperarás 3 seg para poder detectar la activación del detector, el cual, si tienes suerte se activará exactamente cuando en tu programa estés verificando el estado del pin, de lo contrario, esperarás otros 3 s. Ese retardo es demasiado y creo que es la causa de tus problemas.