Autor Tema: Pulsador On/Off LED  (Leído 3557 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Albertuky

  • PIC10
  • *
  • Mensajes: 10
Pulsador On/Off LED
« en: 12 de Abril de 2005, 15:42:00 »
hola amigos!
soy nuevo en esto y me gustaria saber como se hace para k con una pulsacion un led se encienda y con otra pulsacion en el mismo se apage.
yo e logrado algo aki expongo el codigo para ver como lo podemos arreglar...



__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST      P=16F84A
INCLUDE  <P16F84A.INC>
CBLOCK  0x0C
   Contador         ; El contador a visualizar.
ENDC
#DEFINE   Pulsador   PORTA,4   ; Pulsador conectado a RA4.
#DEFINE   Salida0      PORTB,0
On   EQU   b"00000001"         ;Definimos que Led"s se encenderan
Off   EQU   b"00000000"         ;Definimos que Led"s se apagaran

; Source Code **************************************************************************

   ORG   0         ; El programa comienza en la dirección 0.
Inicio
     bsf   STATUS,RP0      ; Acceso al Banco 1.
   clrf   PORTB         ; Estas líneas configuradas como salidas.
   bsf   Pulsador      ; Línea del pulsador configurada como entrada.
   bcf   STATUS,RP0      ; Acceso al Banco 0.
Function_Off
   btfss   PORTB,0
   movlw   Off
   movwf   PORTB
Principal
   btfsc   Pulsador      ; ¿Esta el pulsador presionado?
   goto   Principal      ; ¿No?Pues vuelve a leerlo
   call   Retardo_20ms      ; Retardo para que se estabilizen los rebotes de tension
   btfsc   Pulsador      ; Comprueba si era un rebote
   goto   Principal      ; Era un rebote y sale fuera.
   goto   Estado         ;No era un rebote y pasa a la siguiente funcion
FON   
   btfsc   PORTB,0
   movlw   On
   movwf   PORTB
   goto   Principal
   INCLUDE <RETARDOS.INC>   ; Subrutinas de retardo.
   END            ; Fin del programa.

Gracias a todos por la ayuda
Salu2Rebotado

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Pulsador On/Off LED
« Respuesta #1 en: 12 de Abril de 2005, 17:52:00 »
Buenas albertuky.

Vamos a ver, porque tienes varios fallos.

Antes de nada supongo, por tu programa, que el pulsador es activo en estado bajo, esto es, cuando lo pulsas la entrada PORTA,4 esta a cero. Bien:

; Source Code **************

Principal
btfsc Pulsador ; ¿Esta el pulsador presionado?
goto Principal ; ¿No?Pues vuelve a leerlo
call Retardo_20ms ; Retardo para que se estabilizen los rebotes de tension
btfsc Pulsador ; Comprueba si era un rebote
goto Principal ; Era un rebote y sale fuera.
goto Estado ;No era un rebote y pasa a la siguiente funcion

****************

No veo la etiqueta estao por ningun lado, supongo que quieres decir "goto FON"

Seguimos:

****************

FON
btfsc PORTB,0
movlw On
movwf PORTB
goto Principal

****************

Este trozo hace los siguiente: si la salida esta a cero, mueve el contenido de "w" al puerto B(y el registro "w" no tiene nada concreto por lo que no sabemos si apagará encenderá o que?). Si la salida esta a uno, mueve al "w" el número uno y lo pasa al puerto B, por lo que el LED seguirá encendido.

Siguo en el siguiente mensaje

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Pulsador On/Off LED
« Respuesta #2 en: 12 de Abril de 2005, 18:04:00 »
Hola de nuevo.

Para que cambies de un estado a otro la salida, priemro se comprueba en que estado está y se salta a una rutina que le cambie el estado. Un ejemplo:


FON
btfsc PORTB,0
goto pasa_a_cero
goto pasa_a_uno

pasa_a_uno
movlw On
movwf PORTB
goto Principal
 
pasa_a_cero
movlw Off
movwf PORTB
goto Principal

Otra forma mucho mas rápida es hacer lo siguiente:

FON
movlw b"00000001"
xorwf PORTB
goto Principal

(Con la orden xorwf cambias el estado de todos los bits que hayas puesto a uno en el "w").

Otro problema que te vas a encontrar es que cuando cambies el estado de la salida, si saltas directamente al bucle principal, el programa detectará que el boton sigue pulsado y volverá a cambiar el estado de la salida y asi hasta que sueltes el boton. Para evitar esto, pon lo siguiente:

FON
movlw b"00000001"
xorwf PORTB
bucle
btfss entrada
goto bucle
goto Principal

De esta forma hasta que no sueltes el pulsador no vas al principal.

Bueno, suerte con los PICs que veo que estas en los primeros pasos.

Cualquier otra cosa no dudes en consultarnos.

Desconectado Meybel

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 60
RE: Pulsador On/Off LED
« Respuesta #3 en: 13 de Abril de 2005, 02:37:00 »
Completando lo expuesto te copio ambas soluciones completas:

Solución 1:

Codigo:
; Cada vez que presiona el pulsador conectado a la línea RA4 conmutará el estado
; de un LED conectado a la línea RB0.
;
; ZONA DE DATOS **********************************************************************

   LIST      P=16F84A
   INCLUDE  <P16F84A.INC>
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
   
   CBLOCK 0x0C
   ENDC

#DEFINE Pulsador   PORTA,4   ; Pulsador conectado a RA4.
#DEFINE LED PORTB,0   ; Línea donde se conecta el diodo LED.

; ZONA DE CÓDIGOS ********************************************************************

   ORG   0      ; El programa comienza en la dirección 0.
Inicio
    bsf   STATUS,RP0   ; Acceso al Banco 1.
   bsf   Pulsador      ; La línea RA4 se configura como entrada.
   bcf   LED      ; Se configura como salida.
   bcf   STATUS,RP0   ; Acceso al Banco 0.
   bcf   LED      ; En principio diodo LED apagado.
Principal
   btfsc   Pulsador      ; ¿Pulsador presionado?, ¿(Pulsador)=0?
   goto   Fin      ; No. Vuelve a leerlo.
   call   Retardo_20ms   ; Espera que se estabilicen los niveles de tensión.
   btfsc   Pulsador      ; Comprueba si es un rebote.
   goto   Fin      ; Era un rebote y sale fuera.
   btfsc   LED      ; Testea el último estado del LED.
    goto   EstabaEncendido
EstabaApagado
   bsf   LED      ; Estaba apagado y lo enciende.
   goto   EsperaDejePulsar
EstabaEncendido
   bcf   LED      ; Estaba encendido y lo apaga.
EsperaDejePulsar
   btfss   Pulsador      ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
   goto   EsperaDejePulsar   ; No. Espera que deje de pulsar.
Fin
   goto   Principal

   INCLUDE <RETARDOS.INC>
   END


Solución 2:

Codigo:
; Cada vez que presiona el pulsador conectado a la línea RA4 conmutará el estado
; de un LED conectado a la línea RB0. La complementación se realiza con ayuda de una
; función XOR.
;
; ZONA DE DATOS **********************************************************************

   LIST      P=16F84A
   INCLUDE  <P16F84A.INC>
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
   
   CBLOCK 0x0C
   ENDC

#DEFINE Pulsador   PORTA,4   ; Pulsador conectado a RA4.

; ZONA DE CÓDIGOS ********************************************************************

   ORG   0      ; El programa comienza en la dirección 0.
Inicio
    bsf   STATUS,RP0   ; Acceso al Banco 1.
   bsf   Pulsador      ; La línea RA4 como entrada.
   clrf   PORTB      ; Se configura como salida.
   bcf   STATUS,RP0   ; Acceso al Banco 0.
   clrf   PORTB      ; En principio diodo LED apagado.
Principal
   btfsc   Pulsador      ; ¿Pulsador presionado?, ¿(Pulsador)=0?
   goto   Fin      ; No. Vuelve a leerlo.
   call   Retardo_20ms   ; Espera que se estabilicen los niveles de tensión.
   btfsc   Pulsador      ; Comprueba si es un rebote.
   goto   Fin      ; Era un rebote y sale fuera.
   movlw   b"00000001"   ; Se hace una XOR para complementar.
   xorwf   PORTB,F
EsperaDejePulsar
   btfss   Pulsador      ; ¿Dejó de pulsar?. ¿(Pulsador)=1?
   goto   EsperaDejePulsar   ; No. Espera que deje de pulsar.
Fin
   goto   Principal

   INCLUDE <RETARDOS.INC>
   END


Suerte.

Desconectado leobiofa

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 371
RE: Pulsador On/Off LED
« Respuesta #4 en: 13 de Abril de 2005, 07:20:00 »
hola

no se la razon por la  cual lo estas hacieno con pic pero es mas facil hacerlo con electronica digital ya que un pic solo para esa labor queda subutilizado.
simplemente haciendo un latch con negadores haces lo que necesitas.

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Pulsador On/Off LED
« Respuesta #5 en: 13 de Abril de 2005, 12:19:00 »
Se supone que esto es tipico proyecto de "HOLA MUNDO" para iniciarse con los PICs.

Estamos de acuerdo que el PIC va fumandose un puroSonrisa Gigante con este programa.

Desconectado Micom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 783
RE: Pulsador On/Off LED
« Respuesta #6 en: 13 de Abril de 2005, 23:32:00 »
Pues se supone que estas simples rutinas son parte de una tarea mas grande que deva realizar el pic ya que para obtener ese mismo resultrado se puede lograr facilmente y economico con compuertas pero si tines planeado algo mas grande con el pic esta es la solucion, en mi caso tube que implementar una rutina parecida a estas para hacerme un generador de barras puntos y cuadros para TV seleccionables atra vez de un solo pulsador asi que es muy bueno seguir con este tema. Hasta pronto
El programador GTP USB PLUS es un super programador
GRACIAS dobles amigo SISPIC

Tan solo queda seguir sobreviviendo


 

anything