Encendido de un led mediante pulsador pic basic pro

Hola tengo este programa para poder encender un led mediante un pulsador con el pic 16f886 pero no me funciona simulado en proteus y mucho menos físicamente, quisiera saber si alguien podría decirme que estoy haciendo mal. de antemano muchas gracias.

ADCON1=%00000110
trisb=%11111111
trisa=%00000000
porta=0
portb=0
inicio:
if portb.0 = 1 then
high porta.0
pause 1000
low porta.0
goto inicio
endif
end
 
Hola tengo este programa para poder encender un led mediante un pulsador con el pic 16f886 pero no me funciona simulado en proteus y mucho menos físicamente, quisiera saber si alguien podría decirme que estoy haciendo mal. de antemano muchas gracias.
Saludos.
Omite ADCON1=%00000110 y agrega...
ANSEL = 0
ANSELH = 0

Haz tus pruebas con esos cambios agregados.

PD. Si declaras el puerto B como entradas, no tiene caso que hagas PORTB = 0 "Son entradas"
Adjunto el ejemplo por si acaso, ya que incluye la configuración de los fuses,
comentarios agregados y la simulación.

Suerte y hasta luego.
 

Adjuntos

  • LED_16F886.rar
    9.3 KB · Visitas: 168
Hey compañero muchas gracias, era ese mi error te lo agradezco mucho de verdad, no sabia eso de los ansel y anselh me sirvió mucho



Mmmm y tengo otra duda ¿como podría hacer para que después de determinado numero de pulsaciones encienda el led? por ejemplo quiero que encienda después de 3 pulsaciones, ojala me pudieras ayudar...gracias
 
Última edición:
Hey compañero muchas gracias, era ese mi error te lo agradezco mucho de verdad, no sabia eso de los ansel y anselh me sirvió mucho

Mmmm y tengo otra duda ¿como podría hacer para que después de determinado numero de pulsaciones encienda el led? por ejemplo quiero que encienda después de 3 pulsaciones, ojala me pudieras ayudar...gracias
Ok. Saludos
Que bien que te sirvió el ejemplo. Pero mira, ahora que te inicias en la programación en PBP
En este foro hay un curso de programación en PICBASIC PRO puedes ir leyéndolo para aprender más.
Lo que quieres realizar es bastante fácil, y se puede lograr de varias formas,
pero todo depende de la forma en que lo hagas, para ver los resultados finales.
Ya que pueden ocurrir resultados no esperados si no controlas el código correctamente.
Otra cosa que me gustaría que hicieras, sería que tu primero realizaras el código para que
intentes como podría ser, y así podrías aprender mejor. (Echando a perder se aprende) =)
Haz tu programa, y si no te funciona como lo esperabas, súbelo y entonces te ayudaremos.
Y te digo esto porque aquí existen reglas que te recomiendo que leas.
Reglas generales de uso del foro (Extended Version)

Bien pues, a seguir programando.

PD. Yo ya realice el ejemplo, pero si me gustaría ver como lo harías tu. ;)


Suerte y hasta luego. :apreton:
 
Después de varios intentos creo que pude hacer que se prendiera después de 2 intentos y lo simule en proteus para ver si funcionaba y parece que si pero creo que no es muy exacto. Aquí esta mi código:

ANSEL = 0
ANSELH = 0
TRISA = 0
TRISB = $FF
PORTA = 0
UNO:
IF PORTB.0 = 1 THEN
HIGH PORTA.0
IF PORTB.0 = 1 THEN
LOW PORTA.0
ENDIF
ENDIF
GOTO UNO
END
Ojala me pudieras decir como mejorar mi código o decirme en que estoy mal.
Gracias
 
Después de varios intentos creo que pude hacer que se prendiera después de 2 intentos y lo simule en proteus para ver si funcionaba y parece que si pero creo que no es muy exacto. Aquí esta mi código:

ANSEL = 0
ANSELH = 0
TRISA = 0
TRISB = $FF
PORTA = 0
UNO:
IF PORTB.0 = 1 THEN
HIGH PORTA.0
IF PORTB.0 = 1 THEN
LOW PORTA.0
ENDIF
ENDIF
GOTO UNO
END
Ojala me pudieras decir como mejorar mi código o decirme en que estoy mal.
Gracias
OK. Saludos. :apreton:
Quedamos en que al hacer tres pulsaciones en RB0 se encendiera un LED en RA0.
Bien, Para esto necesitamos una variable que se incremente en 1 cada pulsación.
Los programas son secuenciales, ejecutan una tarea, y pasan a la siguiente,
por lo tanto y como no hay retardos en el programa que hiciste, no alcanzarías a ver los cambios.
Y el LED se encendería desde la primera pulsación, se apagaría nuevamente y así por siempre,
mientras se mantenga pulsado RB0.
Te dejo aquí el código que realice para el propósito de encender un LED después de tres pulsaciones.
Analízalo y espero te sirva. Suerte y hasta luego.
 

Adjuntos

  • LED_16F886_(2).rar
    10.2 KB · Visitas: 399
Hey muchas gracias, con el contador es mucho mas exacto. También observe lo de las variables, son de mucha ayuda en programas como estos.
Ademas busque información sobre la instrucción BUTTON que utilizaste, y encontré que sirve para anti-rebote y auto-repetición de entrada en un pin, pero aun no comprendí muy bien para que utilizaste estos números y la variable B0 (0,1,255,255,B0,0,MainLoop).
Pero muchas gracias por ayudarme con esto, me pondré a revisar mas instrucciones para aprender mas.
 
Hey muchas gracias, con el contador es mucho mas exacto. También observe lo de las variables, son de mucha ayuda en programas como estos.
Ademas busque información sobre la instrucción BUTTON que utilizaste, y encontré que sirve para anti-rebote y auto-repetición de entrada en un pin, pero aun no comprendí muy bien para que utilizaste estos números y la variable B0 (0,1,255,255,B0,0,MainLoop).
Pero muchas gracias por ayudarme con esto, me pondré a revisar mas instrucciones para aprender mas.
Saludos. :apreton:
El porque use esos números esta descrito en el manual de PBP.
Dice así:

BUTTON Pin, Down, Delay, Rate, Bvar, Action, Etiqueta

Lee Pin y opcionalmente ejecuta anti-rebote y auto-repetición.
Pin automáticamente se toma como entrada.
Pin debe ser una constante, 0 - 15, o una variable que contenga un número 0 - 15 (p.ej. B0)
ó un número de pin (p.ej. PORTA.0)

Down Estado del pin cuando se oprime el pulsador (0-1)

Delay Contador de ciclos antes de que comience la auto-repetición (0-255).
Si es 0, no se efectua anti-rebote ni auto-repetición. Si es 255 se eliminan rebotes, pero no auto-repetición.

Rate Valor de auto-repetición (0-255)

Bvar Variable con tamaño de byte usada internamente para conteo de demoras y repeticiones.
Debe ser inicializada a 0 antes de ser usada y no ser usada en cualquier lugar del programa.

Action Estado del pulsador al ser actuado.

Etiqueta La ejecución comienza en esta etiqueta si es cierto Action.

OK. Esto viene en el manual de PICBASIC PRO en español. Buscalo te lo recomiendo.
 
Última edición:
Estoy utilizando lo que me enseñaste con los pulsadores y ahora estoy tratando de hacer funcionar 2 pulsadores a la vez pero solo me funciona el primero (el que esta en PORTB.0). Aqui esta el código que estoy realizando:

ANSEL = 0
ANSELH = 0
TRISA = %00000000
TRISB = $FF
; Variables
COUNTER VAR BYTE
COUNTER1 VAR BYTE
B0 VAR BYTE
B1 VAR BYTE
PORTA = 0


TUPATUPA:
BUTTON PORTB.0,1,255,255,B0,0,TUPATUPA
COUNTER = COUNTER + 1
IF COUNTER = 3 THEN
PORTA.0 = 1
PAUSE 1000
PORTA.0 = 0
COUNTER = 0
ENDIF
GOTO TUPATUPA

OINKOINK:
BUTTON PORTB.1,1,255,255,B1,0,OINKOINK
COUNTER1 = COUNTER1 + 1
IF COUNTER1 = 3 THEN
PORTA.0 = 1
PAUSE 1000
PORTA.0 = 0
COUNTER1 = 0
ENDIF
GOTO OINKOINK

No entiendo que es lo que no funciona, ojala pudieras darme una idea para corregirlo y continuar con mi proyecto...Gracias
 
Estoy utilizando lo que me enseñaste con los pulsadores y ahora estoy tratando de hacer funcionar 2 pulsadores a la vez pero solo me funciona el primero (el que esta en PORTB.0)

No entiendo que es lo que no funciona, ojala pudieras darme una idea para corregirlo y continuar con mi proyecto...Gracias
Saludos nuevamente isranator3
OK. Ahora verifica el código que adjunto para ver si es lo que deseabas hacer.
Hice algunos cambios y le cambie el nombre a esas etiquetas tan originales. :LOL:

Suerte y hasta luego.
 

Adjuntos

  • 2BTNS.rar
    15.8 KB · Visitas: 266
Si, eso era lo que quería saber.
Si vi mi error, solo era cuestión de acomodar bien las etiquetas en la instrucción BUTTON.
Ahora ya esta funcionando, muchas gracias.
Te pregunto todo esto porque estoy tratando de hacer una especie de "caja fuerte" sencilla. Y el led que enciende es una "alarma" y con esto que me dijiste seguro queda bien.
De nuevo gracias Darkbytes
 
Si, eso era lo que quería saber.
Si vi mi error, solo era cuestión de acomodar bien las etiquetas en la instrucción BUTTON.
Ahora ya esta funcionando.

De nuevo gracias Darkbytes
OK. De nada.
Bueno, aparte de acomodar las etiquetas, el principal error estaba en...
Código:
TUPATUPA:
    BUTTON PORTB.0,1,255,255,B0,0,TUPATUPA
    COUNTER = COUNTER + 1   
    IF COUNTER = 3 THEN     
    PORTA.0 = 1             
    PAUSE 1000              
    PORTA.0 = 0             
    COUNTER = 0
    ENDIF
    GOTO TUPATUPA ; <-- Este era el principal error.
; Al estar este GOTO ya no permitias que se ejecutara la siguiente parte del código.
 
OINKOINK:
    BUTTON PORTB.1,1,255,255,B1,0,OINKOINK
    COUNTER1 = COUNTER1 + 1   
    IF COUNTER1 = 3 THEN     
    PORTA.0 = 1             
    PAUSE 1000              
    PORTA.0 = 0             
    COUNTER1 = 0             
    ENDIF          
    GOTO OINKOINK
Suerte y hasta luego.
 
Ok, muchas gracias...
Y perdón por molestarte de nuevo pero... ahora estoy tratando de parar un motor con un pulsador, pero este no se detiene. Este es mi código en pbp:
Código:
'motor
ANSEL=0
ANSELH=0
TRISC=%11111111
TRISB=%00000000
PORTB=0
	HIGH PORTB.0
	IF PORTC.0 = 0 THEN
	LOW PORTB.0
	ENDIF
	END
Según yo, esto es todo lo que necesito para poder detener el motor pero aun no logro que funcione... y gracias por tu interés y tu ayuda



En el programa anterior el PORTB.0 controla el motorreductor y el PORTC.0 es el push botton que hara que se detenga
 
Última edición:
Ok, muchas gracias...
Y perdón por molestarte de nuevo pero... ahora estoy tratando de parar un motor con un pulsador, pero este no se detiene. Este es mi código en pbp:
Código:
'motor
ANSEL=0
ANSELH=0
TRISC=%11111111
TRISB=%00000000
PORTB=0
	HIGH PORTB.0
	IF PORTC.0 = 0 THEN
	LOW PORTB.0
	ENDIF
	END
Según yo, esto es todo lo que necesito para poder detener el motor pero aun no logro que funcione... y gracias por tu interés y tu ayuda



En el programa anterior el PORTB.0 controla el motorreductor y el PORTC.0 es el push botton que hara que se detenga


el codigo esta incompleto, usa la instruccion IF ELSE, goto y veras que funciona
 
Última edición:
Ok, muchas gracias...
Y perdón por molestarte de nuevo pero... ahora estoy tratando de parar un motor con un pulsador, pero este no se detiene.

Según yo, esto es todo lo que necesito para poder detener el motor pero aun no logro que funcione... y gracias por tu interés y tu ayuda

En el programa anterior el PORTB.0 controla el motorreductor y el PORTC.0 es el push botton que hara que se detenga
Saludos.
Lo que hace falta aparte del Else, es una Etiqueta de control.
Recuerda que los programas son consecutivos.

Aqui adjunto el código.

Suerte.
 

Adjuntos

  • Motor.rar
    18.6 KB · Visitas: 109
Última edición:
Gracias por su ayuda a los dos, ya me funciono.
Después de observar que no me quedaba con IF lo intente con la instrucción WHILE y de igual manera funciono
Aquí dejo el codigo:
Código:
'motor
ANSEL=0
ANSELH=0
TRISC=%11111111
TRISB=%00000000
PORTB=0
INICIO:
	WHILE PORTC.0 = 1
	HIGH PORTB.0
	WEND
	LOW PORTB.0
	GOTO INICIO
	END
Gracias por su auda Darkbytes e Ipnavy
 
hola amigos ante todo saludos desde venezuela
quisiera que me ayudaran con un star/stop quiero encender algo con un pulsador y con ese mismo pulsador apagarlo, la idea es controlar un arranque de motor de un carro, de verdad espero que me ayuden...
 
hola amigos ante todo saludos desde venezuela
quisiera que me ayudaran con un star/stop quiero encender algo con un pulsador y con ese mismo pulsador apagarlo, la idea es controlar un arranque de motor de un carro, de verdad espero que me ayuden...
Saludos gerardo35
Date una vuelta por este post. Instrucciones TOGGLE y BUTTON en PBP
Recientemente tratamos sobre eso que quieres. Ya lo he tratado en otras ocasiones,
pero ese post esta dentro del tema Curso de programación de PIC en PICBASIC PRO

Suerte y hasta luego.
 
Hola a todo de nuevo, y disculpen pero vengo otra vez con una duda.
Estoy tratando ahora de apagar un led después de accionar 3 veces un pulsador, pero no logro hacer que funcione y no entiendo porque, según yo solo es cambiar el estado del puerto después de que se cuenten las 3 veces. Ojala me puedan ayudar a corregir mi error. Dejo el código.
Código:
ANSEL = 0                   
ANSELH = 0                  
TRISC = %11111111			
TRISB = %00000000				
Counter VAR BYTE            
C0 VAR BYTE             
PORTB = 0                                    

INICIO:
    BUTTON PORTC.0,0,255,255,C0,1,INICIO
    Counter = Counter + 1   
    IF Counter = 3 THEN     
    PORTB.0 = 0             
    ELSE      
    PORTB.0 = 1           
    Counter = 0            
    ENDIF
    GOTO INICIO           
    END
 
Hola a todo de nuevo, y disculpen pero vengo otra vez con una duda.
Estoy tratando ahora de apagar un led después de accionar 3 veces un pulsador, pero no logro hacer que funcione y no entiendo porque, según yo solo es cambiar el estado del puerto después de que se cuenten las 3 veces. Ojala me puedan ayudar a corregir mi error.
Saludos nuevamente isranator3
Prueba con este código ahora.
Código:
ANSEL = 0                   
ANSELH = 0                  
TRISC = $FF            
TRISB = 0                
Counter VAR BYTE            
C0 VAR BYTE             
PORTB = 1
Counter = 1                                   

INICIO:
    BUTTON PORTC.0,1,255,255,C0,0,INICIO  
    IF Counter = 3 THEN     
    PORTB.0 = 0
    Counter = 0             
    ELSE      
    PORTB.0 = 1
    Counter = Counter + 1                       
    ENDIF
    GOTO INICIO           
    END
Suerte.
 
Atrás
Arriba