TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: firewer en 22 de Marzo de 2010, 17:23:04
-
Hola a todos, habro este post porque tengo un problema con mi programa, me estoy iniciando en estos temas y estoy un poco verde.
El tema es el siguient:
Mi programa consiste en poder seleccionar mediante 2 pulsadores 4 velocidades, cada una de las velocidades "mueve" a la vez un motor dc y parpadee un led a una determinada velocidad.
Como ejemplo podrian ser:
100rpm y high 5: pause 500: low 5: pause 500
300rpm y high 5: pause 300: low 5: pause 300
500rpm y high 5: pause 100: low 5: pause 100
El problema esta en que cuando selecciono por ejemplo la velocidad 1, al intentar cambiar a la 2 el pulsador no responde, se queda como "colgado" si insisto a las 5, 6 pulsaciones consigo cambiar de velocidad. En el codigo solo e implementado el led, y me gustaria poder solucionar el tema cuelgues antes de implementar el pwm del motor DC y complicar el codigo con sensores y demas que tengo que añadir al codigo.
XTAL = 4
cont var word
cmcon=7
TRISB=0
TRISA=%00000011
PORTB=0
cont=1
inicio:
if PORTA.0=0 then
cont=cont*2
if cont>=16 then
cont=16
endif
pause 200
else
cont=cont
endif
if PORTA.1=0 then
cont=cont/2
if cont<=1 then
cont=1
endif
pause 200
else
cont=cont
endif
if cont = 1
High PORTB.7 ;Indicador led de circuito apagado
pause 30
high 5
pause 700
low 5
pause 700
else
low portb.7
endif
if cont = 2
High 0 ;Led velocidad 1
high 5
pause 500
low 5
pause 500
else
low portb.0
endif
if cont = 4
high 0
high 1 ;Led velocidad 2
high 5
pause 400
low 5
pause 400
else
low portb.1
endif
if cont = 8
high 0
high 1
high 2 ;Led velocidad 3
high 5
pause 200
low 5
pause 200
else
low portb.2
endif
if cont = 16
high 0
high 1
high 2
high 3 ;Led velocidad 4
high 5
pause 100
low 5
pause 100
else
low portb.3
endif
goto inicio
end
Tambien e probado haciendolo con subrutinas, pero el problema persiste. Utilizo un PIC16F628A
Saludos y gracias.
-
Por lo que cuentas puede ser un problema de los rebotes al accionarse el(os) pulsador(es).
me parece que deberias de implementar un retardo software entre cada lectura del pulsador y asi tener las señales estabilizadas.
Guardar el valor leido la primera vez y pasado el retardo volver a leer y ver si coinciden los estados y e funcion de eso actuar tu programa.
Del orden de 20msg seria suficiente.
De todas formas hay gente mas avanzada que yo que seguramente te podrá ayudar mejor, pero lo que te indico es un buen principio y notas para implementar en cada programa que trate de leer el estado de pulsadores, interrruptores,........
fer.
-
gracias Fer_TACA me pongo en ello a ver si lo consigo solucionar.
-
Ya nos cuentas................................... :mrgreen:
-
¿Por qué no intentas con SELECT CASE?
Al parecer sería mejor tomar esos dos bits, aislarlos y realizar un caso por combinación (solo para que el código quede mejor estructurado).
Tengo tiempo que no entro al foro, ni uso PBP, pero quizá eso ayude.
-
estoy en ello, de momento no e conseguido solucionarlo de ninguna de las maneras
-
creo ke lo ke te pasa es ke el programa va lellendo linea a linea y al tener retardo por medio cuando pulsas los botones el programa se encuentra en posiciones ke no ve ke has pulsado por eso te responde aveces cuando coincide ke pulsas en boton en el momento ke te escuha el programa. Yo lo haria con while y wend para cada situacion y un while wend general ke abarcara todo el programa en vez de usar el goto main.
Yo utilizo mikrobasic pro y no se si lo ke de digo es muy correcto para pbp.
otra cosa si lo estas prbando ya con los motores coloca condensadores de filtro y uno de almenos 10uf en las patillas del micro
a mi me pasaba ke los picos de los motores me reseteaban el micro
espero te sirva esto de algo y nos cuentas para seguir probando