Duda super humillante para encender leds

Pues la verdad me da mucha pena este problema. Estoy intentando controlar tres diferentes grupos de leds (r,g,b) con un pic utilizando un sólo pulsador para cambiar de secuencia: encender un color y dejar apagados los otros dos.

No sé por qué mi programa no funciona. Lo único que hace es cambiar repetidamente de secuencia sin importar si uso o no el pulsador. Estoy en picbasic y no sé cuál es mi error.
¿Alguien podría ayudarme? Sé que el programa debe ser muy sencillo y eso es lo que me da pena :oops:

rojo:
TRISA=%00000000
TRISB=%11111111
low porta.0
high porta.2
high porta.1
IF portb.0=0 THEN azul
IF portb.0=1 THEN rojo
goto rojo

azul:
low porta.0
low porta.1
IF portb.0=0 THEN verde
IF portb.0=1 THEN azul
goto azul

verde:
low porta.1
high porta.0
IF portb.0=0 THEN rojo
IF portb.0=1 THEN verde
goto verde

END
 
Prueba de esta forma...
Código:
Rojo:
TRISA = 0
High    PortA.0
Low     PortA.1
Low     PortA.2
If  PortB.0 = 0 Then
Pause   250
GoTo    Azul
EndIf
GoTo    Rojo

Azul:
Low     PortA.0
High    PortA.1
Low     PortA.2
If PortB.0 = 0 Then
Pause   250
GoTo    Verde
EndIf
GoTo    Azul

Verde:
Low     Porta.0
Low     PortA.1
High    PortA.2
If  PortB.0=0 Then
Pause 250
GoTo Rojo
EndIf
GoTo Verde

End
Saludos.
 
Hola, D@rkbytes. Muchas gracias por la atención, pero el problema persiste. Continúa con los cambios automáticos de secuencia, ahora con un retardo de 250ms en cada una. No sé qué pasará, sigue sin tomar en cuenta el estado de mi pulsador
 
¿No será un problema de hardware? Igual se resetea por que en un momento dado la secuencia sobrecarga la fuente o cosas semejantes.
 
Umm, pues yo dudo que sea la fuente, ya que apenas estoy utilizando un solo led de cada color. Además de que mi fuente es de 1A. Comienzo a creer que es magia negra :cry:
 
¿Estas utilizando un resistor de pull-up en RB0?
Si no lo tienes, solo por eso debe estar haciendo las secuencias sin importar que no presiones el botón.
 
No no no, es un push-button. Ya lo reemplacé y hasta hice manualmente su función con unos cables pero es lo mismo. A lo sumo hace una pausa en la secuencia mientras lo acciono, pero solo en algunas ocasiones hace eso. Tal vez por aquí hay algun corto o algo así
 
No importa que no sea un push button.
Me refiero a esto.
pullup.png

Es importante que pongas resistencias de pull-up ó pull-down en cada pin que uses como entrada.
También lo puedes hacer si configuras el registro OPTION_REG con el bit 7 en 0
OPTION_REG.7 = 0 ; Esto habilita las resistencias de pull-up internas en el puerto B
 
No, quise decir que sí es push-button, solo que creí que con pull up te referías a algún tipo de pulsador de los que se enclavan. Ese era el problema, mi ignoriancia por las resistencias pull up. Solo tenía el pulsador a tierra y no la resistencia del diagrama, ya la agregué y problema resuelto. Ya funciona perfecto. Muchas gracias por el seguimiento :)
 
Bien, pues ahora configura el registro OPTION_REG como te mencione y veras que también funcionará.
Solo que ahora la resistencia de pull-up quedará interna en el PIC.

Suerte.
 
Amigo kooks, bueno pues el problema reside en el programa y se debe a que tu detectas el estado del pulsador para cambiar el LED encencido, siendo que deberias detectar el cambio de flanco.
Veamos en detalle, tu generas la sig. condicion en cada subrutina del programa, cada vez que portb.0=0, cambias el color de LEDs, ahora bien cuando se genera el salto a la sig. subrutina el pulsador aun sigue presionado y continua al sig. salto.
Otro detalle para mejorar, la linea de programa, cuando preguntas si portb.0=1, eliminala pues la sig. linea hace un goto en caso que el pulsador este en 1.
 
Última edición:
Atrás
Arriba