TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: GARAY.OMAR en 28 de Febrero de 2013, 02:37:12
-
HOLA, TENGO OTRO CODIGO QUE NO PUEDO SOLUCIONAR, TAMBIEN ES BASTANTE SENCILLO PERO NO PUEDO HAERLO FUNCIONAR, SOLO ES ENCENDER UN LED MEDIANTE UN BOTON PULSADOR, PERO AL MOMENTO DE ENCENDER EL MICRO SE ENCIENDE EL LED Y NO ME RESPETA EL BTFSC Y NO SE QUE HACER.
EL CODIGO ES EL SIGUIENTE:
include<P12F683.inc>
CBLOCK
ENDC
ORG 00H
goto inicio
inicio
banksel GPIO
clrf GPIO
movlw b'00000111'
movwf CMCON0
banksel ANSEL
clrf ANSEL
clrf TRISIO
banksel GPIO
clrf GPIO
apagar btfsc GPIO,0
goto apagar
banksel GPIO
bsf GPIO,0
tu
goto tu
END
DE ANTEMANO GRACIAS POR SU TIEMPO Y AYUDA.
-
Hola,
al inicio del progragrama antes del include, ¿no te falta la declaracion del pic usado con la directiva list= Pxxxxxxx(el que sea).
¿tampoco veo la declaracion de los fuses..
Puedes ver ejemplos de como confecionar el programa aqui: http://www.todopic.com.ar/foros/index.php?topic=12345.msg69623#msg69623
Un par de cosas mas:
- Por favor no escribas todo en mayusculas.
- Lee las reglas del foro
- Tampoco repitas los mensajes ya que has puesto la misma pregunta en 2 sitios y no por ello se te responderá mas rapido. eso origina perdida de tiempo a los que lemos los post.
F
-
Tienes configurado el pin GPIO,0 como salida, por eso no te atiende al pulsador.
Al final ese "goto tu" no esta bien se queda ahi indefinidamente, mandalo a chequear el pulsador otra vez "goto apagar".
Bajate este programa para generar las DEMORAS:
http://www.todopic.com.ar/foros/index.php?topic=5968.0
Echale un ojo a este curso, aqui tienes casi todo lo que necesitat para empezar:
http://www.todopic.com.ar/foros/index.php?topic=24720.0
-
Hoooo tienes toda la razón, no me había dado cuenta de eso, te lo agradezco mil millones.
Gracias.
-
Hola de nuevo, fijate que ya cambie el error que me habias comentado y lo deje asi:
include<P12F683.inc>
CBLOCK 20H
d1
ENDC
ORG 00H
goto inicio
;==========SUBRUTINA PWM==========
PWM
movlw b'00001100'
banksel CCP1CON
movwf CCP1CON
movlw b'01010101'
banksel CCPR1L
movwf CCPR1L
movlw b'00000100'
banksel T2CON
movwf T2CON
movlw b'10011010'
banksel PR2
movwf PR2
return
;==========SUBRUTINA DELAY==========
Delay
;151 cycles
movlw 0x32
movwf d1
Delay_0
decfsz d1, f
goto Delay_0
;4 cycles (including call)
return
;==========PROGRAMA PRINCIPAL Y CONFIGURACION DE PUERTOS==========
inicio
;==========CONFIGURACION DEL OSCILADOR INTERNO A 31 KHZ==========
movlw b'00000011'
banksel OSCCON
movwf OSCCON
movlw b'00010000'
banksel OSCTUNE
movwf OSCTUNE
;==========CONFIGURACION DEL PUERTOS==========
banksel GPIO
clrf GPIO
movlw b'00000111'
movwf CMCON0
banksel ANSEL
clrf ANSEL
movlw b'00000001'
movwf TRISIO
clrf GPIO
;==========VERIFICACION DEL PIN 0 DEL GPIO==========
checar
banksel GPIO
btfsc GPIO,0
goto checar
call Delay
call PWM
goto checar
END
pero ahora cuando conecto el pic enciende el LED y se apaga, pero no responde al botonazo, encuentras algún otro error??
Gracias.
-
Hola, comienza con simplemente apagar y prender el led...
En tu programa, al pulsar, lo mandas a pwm... pero nunca lo mandas a apagar...
y dependiendo como este conectado el led... o queda siempre apagado, o siempre prendido.... :mrgreen:
-
Hola, mira lo que estoy tratando de hacer es que el led permnezca apagado si no pulso el botón y al pulsar el botón que este encienda y ya no se apague, el LED lo tengo conectado el positivo con una resistencia directo de la salida del pin del micro y el negativo directo a tierra, como comento he trabajado mucho con el 18F4550, pero el 12F683 me a costado mucho trabajo poder programarlo.
Ya probe la forma que tu me dices, son solo prenderlo y con solo apagarlo, pero no me respeta el "BTFSC" ni el "BTFSS" simplemente no responde.
Gracias por tu respuesta.
-
Te lo esta diciendo Norberto (Todopic):
En tu programa, al pulsar, lo mandas a pwm... pero nunca lo mandas a apagar...
Aqui:
btfsc GPIO,0
goto checar ;aqui lo tienes que mandar apagar, si con 0 enciende con 1 apaga.
call Delay
call PWM
-
Ok, pero no se supone que al no recibir el botonazo se enclava??
checar
banksel GPIO
btfsc GPIO,0 ; verifica si presione el botón o no.
goto checar ;aquí se regresa a la etiqueta "CHECAR" si no he pulsado el botón (se enclava) y no configura el PWM por tanto la salida del PWM debe mantener el LED apagado.
call Delay ; Delay para el botón.
call PWM ;aquí me configura el PWM y enciende el LED
goto checar ;Se enclava manteniendo el LED encendido.
Es que la fomra que ustedes me comentan ya lo hice y tampoco funciona, solo me acepta la instrucción después del "BTFSC".
Gracias.
-
Tienes GPIO,0 como salida, porque haces lo siguiente:
;==========CONFIGURACION DEL PUERTOS==========
banksel GPIO
clrf GPIO
movlw b'00000111'
movwf CMCON0
banksel ANSEL
clrf ANSEL
movlw b'00000001'
movwf TRISIO ;aqui lo pones como entrada
clrf GPIO ;y aqui lo vuelves a poner como salida, porque estas en banco TRISIO
Tienes que cambiar ahi de banco, esto simulando en el MPLAB se ve prefecto.
-
Hola, mira ya cambie todo esto y ahora ya no hace nada, el LED siempre se queda apagado, nunca enciende, ya estoy bien desesperado hjahjahjajhajhajhajha.
include<P12F683.inc>
CBLOCK 20H
d1
ENDC
ORG 00H
goto inicio
;==========SUBRUTINA PWM==========
PWM
movlw b'00001100'
banksel CCP1CON
movwf CCP1CON
movlw b'01010101'
banksel CCPR1L
movwf CCPR1L
movlw b'00000100'
banksel T2CON
movwf T2CON
movlw b'10011010'
banksel PR2
movwf PR2
return
;==========SUBRUTINA DELAY==========
Delay
;151 cycles
movlw 0x32
movwf d1
Delay_0
decfsz d1, f
goto Delay_0
;4 cycles (including call)
return
;==========PROGRAMA PRINCIPAL Y CONFIGURACION DE PUERTOS==========
inicio
;==========CONFIGURACION DEL OSCILADOR INTERNO A 31 KHZ==========
movlw b'00000011'
banksel OSCCON
movwf OSCCON
movlw b'00010000'
banksel OSCTUNE
movwf OSCTUNE
;==========CONFIGURACION DEL PUERTOS==========
banksel GPIO
clrf GPIO
movlw b'00000111'
movwf CMCON0
banksel ANSEL
clrf ANSEL
movlw b'00000001'
movwf TRISIO
;==========VERIFICACION DEL PIN 0 DEL GPIO==========
checar
banksel GPIO
btfsc GPIO,0
goto checar
call Delay
call PWM
goto checar
END
Disculpa tanta molestia y gracias por tu ayuda.
-
Hola, mira ya cambie todo esto y ahora ya no hace nada, el LED siempre se queda apagado, nunca enciende, ya estoy bien desesperado hjahjahjajhajhajhajha.
Pues en el MPLAB si funciona "mas o menos" :lol: es decir, enciende cuando pulsador=0, hace el PWM por GPIO,2 con un perodo de 155uS y un dutty de 84uS, lo que NO hace es apagarse, porque sigues sin mandarle apagar. Revisa el hardware, a lo mejor cambiaste algo, se te desconecto algo o se estropeo algo.
¿Ese Delay es un antirrebotes? porque si lo es esta mal hecho, es de 155uS (demasiado corto, debe ser en torno a 20mS) y despues del Delay hay que chequear otra vez el pulsador para verificar su estado.
-
Hola, mil gracias, yo creo que si es el Hardware, por que hice el mismo programa pero para un 18F4550 y me hace lo mismo, entonces si debe ser algún componente, hoy voy a comprar componentes nuevos haber si eso me funciona.
Te agradezco tu tiempo y estamos en contacto para decirles cual era el error.
Gracias.
-
!!!LISTO!!!
Era el maldito Protoboard, cambie el micro de lugar y funciono.
Te agradezco por todo tu tiempo y ayuda y gracias al foro por tener gente tan amable y dispuesta a ayudar a la comunidad en problemas.
Gracias una vez mas.
-
:-/ :-/ :-/ :-/ :-/
acuerdate de mandarlo a APAGAR.
Sludos.