TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado 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.
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.
-
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.
-
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.
-
Hola, yo uso uno de PEPPERl+FUCHS que puede funcionar por nivel alto o por nivel bajo, según que conexionado hagas de él.
-
y si mandas ese uno a una interrupcion?
-
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.