Autor Tema: encender leds uno a uno  (Leído 7242 veces)

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

Desconectado aprendiz_pic

  • PIC10
  • *
  • Mensajes: 15
encender leds uno a uno
« en: 18 de Agosto de 2015, 23:14:12 »
Saludos compañeros de foro recurro nuevamente por ayuda. Tengo el siguiente código:

Código: [Seleccionar]
                       ;definicion de directivas para microcontrolador
__CONFIG _CP_ON & _WDT_OFF & _PWRTE_ON & _XT_OSC

list p=16f84a
#include<p16f84a.inc>

cblock 0x0c
;definicion de constantes para retardo del boton
d1
d2
endc

push1 equ d'0' ;identifica a RA0
cont                  equ     d'0'    ;indica el led a encender

;se configura el microcontrolador
org 0
bsf STATUS,RP0 ;cambiamos a BANCO1
clrf         PORTB ;establece PORTB como salida
movlw b'11111111' ;establece PORTA como entrada
movwf PORTA
bcf STATUS,RP0 ;cambiamos a BANCO0
clrf         PORTB ;estado inicial de PORTB (leds apagados)

;aqui inicia el programa del microcontrolador
push         btfss         PORTA,push1 ;testea si se ha pulsado el boton
goto         push
call         retardo ;ejecuta a retardo hasta que se estabilice la señal
                        incf           cont,f
                        bsf            PORTB,cont
goto          push


;subrutina de retardo que evita rebote al pulsar boton (20 milisegundos)
retardo
movlw    0x9E
movwf    d1
movlw    0x10
                movwf    d2
retardo_0
decfsz    d1,f
goto            $+2
decfsz    d2,f
goto            retardo_0
goto            $+1
nop
return

end

la idea es que cuando yo presione un push button conectado al RA0 en modo pull up, se incremente "cont" y con este ultimo señale el led a encender en PORTB. El circuito lo simule en proteus version 8.0 SP1 pero al correr el programa me enciende el primer led conectado en RB0 pero al presionar nuevamente los demas no los enciende. En total los leds a encender son 5, y ya lo simule varias veces y eso pero solo me enciende el primer led. Pense que a lo mejor el retardo para evitar rebote en el boton no tenie el tiempo suficiente asi que intente llamar nuevamente a la subrutina "retardo" nuevamente de tal manera que en el códifo quedara asi:

Código: [Seleccionar]
;aqui inicia el programa del microcontrolador
push btfss PORTA,push1 ;testea si se ha pulsado el boton
        goto push
call retardo ;ejecuta a retardo hasta que se estabilice la señal
                call    retardo
                incf    cont,f
                bsf     PORTB,cont
goto push

pero al simular en el proteus me sale estos mensajes (les adjunto la imagen).

No se que estoy haciendo mal, si el programa de simulación le faltan configuraciones, o es en el MPLAB, etc. Tambien cuando quise cambiar el retardo por otra para un tiempo de 35 milisegundos y eso al momento de simular me aparece que la dirección tal es ignorada.

Los retardos los genere con una pagina que me pasaron la direccion es esta: http://www.piclist.com/techref/piclist/codegen/delay.htm

Tambien estaba pensando en cargar el programa directamente en el micro y probarlo en la protoboard pero temo que pueda dañarse si es que hay un error de configuracion o de las direcciones de memoria, pero segun yo no ya que cuando generl el .HEX no me indican estos mensajes de error.

Como les comento de nuevo me dan ganas de cargar el programa en el micro y probar en el proto pero ignoro si esto sea contraproducente ¿podrian orientarme?






Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: encender leds uno a uno
« Respuesta #1 en: 18 de Agosto de 2015, 23:44:10 »
esto deberia funcionar:

Código: ASM
  1. ;definicion de directivas para microcontrolador
  2.         __CONFIG        _CP_ON & _WDT_OFF & _PWRTE_ON & _XT_OSC
  3.  
  4.         list p=16f84a
  5.         #include<p16f84a.inc>
  6.  
  7.         cblock  0x0c
  8.         ;definicion de constantes para retardo del boton
  9.         d1
  10.         d2
  11.         endc
  12.  
  13.         ;se configura el microcontrolador
  14.         org     0x00
  15.         bsf     STATUS,RP0              ;cambiamos a BANCO1
  16.         clrf    TRISB                   ;establece PORTB como salida
  17.         movlw   b'11111111'             ;establece PORTA como entrada
  18.         movwf   TRISA
  19.         bcf     STATUS,RP0              ;cambiamos a BANCO0
  20.         clrf    PORTB                   ;estado inicial de PORTB (leds apagados)
  21.         bsf     PORTB,0                 ;Comenzamos con el primero activo
  22.  
  23.         ;aqui inicia el programa del microcontrolador  
  24. push
  25.         btfss   PORTA,0                 ;testea si se ha pulsado el boton
  26.         goto    push
  27.         call    retardo                 ;ejecuta a retardo hasta que se estabilice la señal
  28. push2
  29.         btfsc   PORTA,0
  30.         goto    push2
  31.         rrl     PORTB,F
  32.         btfss   STATUS,C
  33.         goto    push
  34.         rrl     PORTB,F
  35.         goto    push
  36.                          
  37.  
  38.         ;subrutina de retardo que evita rebote al pulsar boton (20 milisegundos)
  39. retardo
  40.         movlw      0x9E
  41.         movwf      d1
  42.         movlw      0x10
  43.         movwf      d2
  44. retardo_0
  45.         decfsz     d1,f
  46.         goto               $+2
  47.         decfsz     d2,f
  48.         goto               retardo_0
  49.         goto               $+1
  50.         nop
  51.         return
  52.  
  53.         end

Ahora vamos a tu codigo. Cualquiera de eso:

Código: [Seleccionar]
push1 equ d'0' ;identifica a RA0
cont                  equ     d'0'    ;indica el led a encender

cblock 0x0c
;definicion de constantes para retardo del boton
d1
d2
endc

define constantes, nada mas, luego el compilador reemplaza la palabra por ese numero

Entonces si haces esto:

Código: [Seleccionar]
incf           cont,f
Se reemplazaria por esto:

incf           0,f

El registro 0x00 es el INDF, es a lo que apunta el registro FSR. En fin NO es lo que vos queres hacer. fijate en el datasheet sobre la memoria y vas a notar que el rango de los registros de proposito general comienzan en la direccion 0x0C para el PIC16F84A.
Por eso cuando usas el Cblock pones el 0x0C, ya que el equivalente de ese cblock es:

d1 equ 0x0C
d2 equ 0x0D

Entonces cuando se usan
movwf      d1
es igual a:
movwf      0x0C

es decir se guardan en esa direccion de memoria.

-------------------

Otro problema. como estaba tu programa, si se mantenia presionado el boton, a pesar que existia un retardo de 20ms, este se iba a ejecutar continuamente, entonces seria MUY rapido el cambio  y se veria casi como que todos estan prendidos a la vez.

-------------------

Aunque el programa corra correctamente tenes un error de concepto, los registros que modificas para indicar si son salidas/entradas son los TRISA / TRISB (que se encuentran en el banco 1) que curiosamente comparten la ""misma"" direccion que los PORTA / PORTB y que por eso te funciona. PERO tenes que tenerlo en cuenta. por eso yo lo corregi en todos los codigos

---------------------


Aca otra forma de hacer lo que hice arriba, pero masomenos como lo queres hacer vos:
(Observa que puse el cont dentro del cblock y luego de arreglar los pines como entrada/salida procedo a ponerlo a 0, esta en el banco 0 )

Código: ASM
  1. ;definicion de directivas para microcontrolador
  2.         __CONFIG        _CP_ON & _WDT_OFF & _PWRTE_ON & _XT_OSC
  3.  
  4.         list p=16f84a
  5.         #include<p16f84a.inc>
  6.  
  7.         cblock  0x0c
  8.         ;definicion de constantes para retardo del boton
  9.         d1
  10.         d2
  11.         cont
  12.         endc
  13.  
  14.         ;se configura el microcontrolador
  15.         org     0x00
  16.         bsf     STATUS,RP0              ;cambiamos a BANCO1
  17.         clrf    TRISB                   ;establece PORTB como salida
  18.         movlw   b'11111111'             ;establece PORTA como entrada
  19.         movwf   TRISA
  20.         bcf     STATUS,RP0              ;cambiamos a BANCO0
  21.         clrf    PORTB                   ;estado inicial de PORTB (leds apagados)
  22.         clrf    cont                    ;Comienzo de 0
  23.  
  24.         ;aqui inicia el programa del microcontrolador  
  25. push
  26.         btfss   PORTA,0                 ;testea si se ha pulsado el boton
  27.         goto    push
  28.         call    retardo                 ;ejecuta a retardo hasta que se estabilice la señal
  29. push2
  30.         btfsc   PORTA,0                 ;espero que suelte
  31.         goto    push2
  32.         movf    cont                    ;Muevo cont a W
  33.         call    tabla                   ;LLamo a la tabla
  34.         incf    cont,F                  ; Incremento cont
  35.         movwf   PORTB                   ; Lo que me devuelve la tabla (W) lo pongo en PORTB
  36.         sublw   0x80,W                  ; Me fijo si es el ultimo valor ( es decir 0x80 )
  37.         btfsc   STATUS,Z
  38.         clrf    cont                    ; Si lo es entonces reseteo cont a 0 para que comienze nuevamente.
  39.         goto    push
  40.  
  41. tabla
  42.         addwf   PCL,F
  43.         retlw   0x01
  44.         retlw   0x02
  45.         retlw   0x04
  46.         retlw   0x08
  47.         retlw   0x10
  48.         retlw   0x20
  49.         retlw   0x40
  50.         retlw   0x80   
  51.                          
  52.  
  53.         ;subrutina de retardo que evita rebote al pulsar boton (20 milisegundos)
  54. retardo
  55.         movlw      0x9E
  56.         movwf      d1
  57.         movlw      0x10
  58.         movwf      d2
  59. retardo_0
  60.         decfsz     d1,f
  61.         goto               $+2
  62.         decfsz     d2,f
  63.         goto               retardo_0
  64.         goto               $+1
  65.         nop
  66.         return
  67.  
  68.         end

Y si no la mas simple que seria sumar 1 como estuviste haciendo:

Código: ASM
  1. ;definicion de directivas para microcontrolador
  2.         __CONFIG        _CP_ON & _WDT_OFF & _PWRTE_ON & _XT_OSC
  3.  
  4.         list p=16f84a
  5.         #include<p16f84a.inc>
  6.  
  7.         cblock  0x0c
  8.         ;definicion de constantes para retardo del boton
  9.         d1
  10.         d2
  11.         endc
  12.  
  13.         ;se configura el microcontrolador
  14.         org     0x00
  15.         bsf     STATUS,RP0              ;cambiamos a BANCO1
  16.         clrf    TRISB                   ;establece PORTB como salida
  17.         movlw   b'11111111'             ;establece PORTA como entrada
  18.         movwf   TRISA
  19.         bcf     STATUS,RP0              ;cambiamos a BANCO0
  20.         clrf    PORTB                   ;estado inicial de PORTB (leds apagados)
  21.  
  22.         ;aqui inicia el programa del microcontrolador  
  23. push
  24.         btfss   PORTA,0                 ;testea si se ha pulsado el boton
  25.         goto    push
  26.         call    retardo                 ;ejecuta a retardo hasta que se estabilice la señal
  27. push2
  28.         btfsc   PORTA,0                 ;espero que suelte
  29.         goto    push2
  30.         incf    PORTB,F                 ;Incremento PORTB
  31.         goto    push
  32.  
  33.  
  34.                          
  35.  
  36.         ;subrutina de retardo que evita rebote al pulsar boton (20 milisegundos)
  37. retardo
  38.         movlw      0x9E
  39.         movwf      d1
  40.         movlw      0x10
  41.         movwf      d2
  42. retardo_0
  43.         decfsz     d1,f
  44.         goto               $+2
  45.         decfsz     d2,f
  46.         goto               retardo_0
  47.         goto               $+1
  48.         nop
  49.         return
  50.  
  51.         end
« Última modificación: 18 de Agosto de 2015, 23:49:06 por KILLERJC »

Desconectado aprendiz_pic

  • PIC10
  • *
  • Mensajes: 15
Re: encender leds uno a uno
« Respuesta #2 en: 19 de Agosto de 2015, 11:43:04 »
Citar
define constantes, nada mas, luego el compilador reemplaza la palabra por ese numero

Entonces si haces esto:

Código:

incf           cont,f


Se reemplazaria por esto:

incf           0,f

El registro 0x00 es el INDF, es a lo que apunta el registro FSR. En fin NO es lo que vos queres hacer. fijate en el datasheet sobre la memoria y vas a notar que el rango de los registros de proposito general comienzan en la direccion 0x0C para el PIC16F84A.
Por eso cuando usas el Cblock pones el 0x0C, ya que el equivalente de ese cblock es:

d1 equ 0x0C
d2 equ 0x0D

Entonces cuando se usan
movwf      d1
es igual a:
movwf      0x0C

es decir se guardan en esa direccion de memoria.

Buena observacion compañero de foro, es cierto lo que dices y revisando la hoja de datos del PIC veo el direccionamiento indirecto para la dirección 0x00 en ambos bancos.

Citar
Otro problema. como estaba tu programa, si se mantenia presionado el boton, a pesar que existia un retardo de 20ms, este se iba a ejecutar continuamente, entonces seria MUY rapido el cambio  y se veria casi como que todos estan prendidos a la vez.

Eso tambien no lo tenia en cuenta, solo estaba considerando que se presionava una o varias veces y que asi, los leds se irian encendiendo uno a uno jejejeje.

Citar
Aunque el programa corra correctamente tenes un error de concepto, los registros que modificas para indicar si son salidas/entradas son los TRISA / TRISB (que se encuentran en el banco 1) que curiosamente comparten la ""misma"" direccion que los PORTA / PORTB y que por eso te funciona. PERO tenes que tenerlo en cuenta. por eso yo lo corregi en todos los codigos.

Lo habia echo asi, es decir, para evitar los mensajes de warning de que no se estaba en el banco correcto, al configurar los TRISA y TRISB y utilizar los PORTA y PORTB, en el momento de generar el archivo .HEX me marcaba estos warnings y pues por lo que lei asi podia evitarlos, entonces, tengo entendido que estos warnings no afectan en el funcionamiento normal del programa quemado en el pic, ¿Es esto cierto o solo es un mensaje a modo de advertencia sobre el cuidado que se debe de tener en el programa?.



Veo que aun me queda mucho por practicr y aprender. Gracias por la ayuda brindada, en verdad, no sabes cuanto lo agradesco. Hoy regresando del trabajo intentare nuevamente simular el programa con las observaciones que me haz dado, y tambien el fijarme más en la RAM y bancos de memoria del PIC. :)

Por cierto, algo que se me paso preguntar es sobre el código para cuando se deja pulsado el boton y se espera a que se suelte:
Citar
push2
   btfsc   PORTA,0         ;espero que suelte
   goto   push2
   incf   PORTB,F         ;Incremento PORTB
   goto   push

cuando se suelta el boton y salta hacia el incf   PORTB,F   ¿aqui no deberia de llemar tambien un retardo contra el rebote o solo aplica para cuando se cierra (presiona) un push button?
« Última modificación: 19 de Agosto de 2015, 11:57:52 por aprendiz_pic »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: encender leds uno a uno
« Respuesta #3 en: 19 de Agosto de 2015, 11:58:21 »
En realidad no es un error ni un warning, es solo un mensaje.

Message[302] xxxx.asm 52: Register in operand not in bank 0. Ensure that bank bits are correct
Warning[205] xxxx.asm 4 : Found directive in column 1.
Error[113] xxxx.asm 525 : Symbol not previously defined (PCLATH)


Ahi tenes los 3 tipos de mensajes que podes recibir. Luego de compilarlo.
Un error es claramente algo que evita que se pueda compilar. Asi que si tenes un error tenes que solucionarlo
Un warning tambien, normalmente evita que se pueda compilar, un caso seria el de poner un END en la columna 1 donde irian las banderas.
Finalmente lo que recibis vos es un mensaje, es un "recordatorio"  para que sepas que no estas en el banco 0 , y estas en el banco 1. Otro mensajes de estos suele aparecer cuando haces un INCF d1  sin poner a donde va destinado, y en el mensaje te "recuerda" que no esta definido y que se va a tomar como si fuera un INCF d1,F .

Si queres evitar ese "mensaje" pone al comienzo del programa:

Código: ASM
  1. errorlevel -302

Esto va a evitar que te aparezca el mensaje dejandote a vos el trabajo de asegurarte que no intentar cambiar un registro en el banco equivocado.

Desconectado aprendiz_pic

  • PIC10
  • *
  • Mensajes: 15
Re: encender leds uno a uno
« Respuesta #4 en: 19 de Agosto de 2015, 22:20:33 »
En realidad no es un error ni un warning, es solo un mensaje.

Message[302] xxxx.asm 52: Register in operand not in bank 0. Ensure that bank bits are correct
Warning[205] xxxx.asm 4 : Found directive in column 1.
Error[113] xxxx.asm 525 : Symbol not previously defined (PCLATH)


Ahi tenes los 3 tipos de mensajes que podes recibir. Luego de compilarlo.
Un error es claramente algo que evita que se pueda compilar. Asi que si tenes un error tenes que solucionarlo
Un warning tambien, normalmente evita que se pueda compilar, un caso seria el de poner un END en la columna 1 donde irian las banderas.
Finalmente lo que recibis vos es un mensaje, es un "recordatorio"  para que sepas que no estas en el banco 0 , y estas en el banco 1. Otro mensajes de estos suele aparecer cuando haces un INCF d1  sin poner a donde va destinado, y en el mensaje te "recuerda" que no esta definido y que se va a tomar como si fuera un INCF d1,F .

Si queres evitar ese "mensaje" pone al comienzo del programa:

Código: ASM
  1. errorlevel -302

Esto va a evitar que te aparezca el mensaje dejandote a vos el trabajo de asegurarte que no intentar cambiar un registro en el banco equivocado.

OK ahora lo entiendo un poco mejor esto de los mensajes de notificación, advertencia y errores que el programa me muestra.

Acabo de probar el programa con las modificaciónes en los códigos que me mostraste y ahora si me funciona. Al precionar el boton se van encendiendo los leds y como se van incrementando en el PORTB los leds encendidos corresponden a números decimales pero en formato binario.

Muchas gracias por la gran ayuda brindada.

Ahora tratare de hacer que se enciendan los leds uno a uno en forma secuencial. :)

Desconectado aprendiz_pic

  • PIC10
  • *
  • Mensajes: 15
Re: encender leds uno a uno
« Respuesta #5 en: 19 de Agosto de 2015, 23:50:33 »
Y bueno, tal vez no sea parte del port o si tenga que abrir un nuevo hilo pero con la ayuda de los códigos y picandole un poquito a los mnemónicos, saque una practica que me propuse a mi mismo, como ya les habia mencionado la de ir encendiendo los leds uno a uno en forma secuencial. Les comparto el código:

Citar
;definicion de directivas para microcontrolador
         __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

         list p=16f84a
         #include<p16f84a.inc>

         cblock   0x0c
         ;definicion de constantes para retardo del boton
         d1
         d2
                        leds
         endc
boton                equ           RA0

         ;se configura el microcontrolador
         org      0
         bsf      STATUS,RP0      ;cambiamos a BANCO1
         clrf           TRISB         ;establece PORTB como salida
         movlw   b'11111111'      ;establece PORTA como entrada
         movwf   TRISA
         bcf      STATUS,RP0      ;cambiamos a BANCO0
         clrf           PORTB         ;estado inicial de PORTB (leds apagados)
                        clrf           PORTA                      ;estado inicial del PORTB (entradas a 0)

         ;aqui inicia el programa del microcontrolador   
push1      btfss           PORTA,boton      ;testea si se ha pulsado el boton
         goto           push1
         call           retardo         ;ejecuta a retardo hasta que se estabilice la señal
push2               btfsc         PORTA,boton              ;en caso de que se deje presionado el boton
                        goto         push2                        ;espera a que este se deje de pulsar
                        call          retardo
                        call          encendido_leds
         goto          push1
         

;subrutina de retardo que evita rebote al pulsar boton (20 milisegundos)
retardo
         movlw      0x9E
         movwf      d1
         movlw      0x10
                   movwf      d2
retardo_0
         decfsz      d1,f
         goto              $+2
         decfsz      d2,f
         goto              retardo_0
         goto              $+1
         nop
         return

encendido_leds
                        incfsz           leds,f      ;señala los leds a iluminar al incrementarse

;mediante una resta se determina el led a iluminar
;si el resultado de la resta es 0 se ilumina el led
;en caso contrario se salta si se testean los demas
;leds con el fin de iluminarlos uno a uno en forma
;secuencial
led1                  movlw          d'1'
                        subwf           leds,w
                        btfss            STATUS,Z
                        goto             led2       
                        bsf               PORTB,RB0
                        goto             fin
;-------------------------------------------------------------------
led2                  movlw          d'2'
                        subwf           leds,w
                        btfss            STATUS,Z
                        goto             led3
                        bsf               PORTB,RB1
                        goto             fin
;-------------------------------------------------------------------
led3                  movlw          d'3'
                        subwf           leds,w
                        btfss            STATUS,Z
                        goto             led4
                        bsf               PORTB,RB2
                        goto             fin
;-------------------------------------------------------------------
led4                  movlw          d'4'
                        subwf           leds,w
                        btfss            STATUS,Z
                        goto             led5
                        bsf               PORTB,RB3
                        goto             fin
;-------------------------------------------------------------------
led5                  movlw          d'5'
                        subwf           leds,w
                        btfss            STATUS,Z
                        goto             fin
                        bsf               PORTB,RB4
                        goto       fin

fin                    return

         end

Al principio tube unos problemitas al tratar de definir un contador y que mediante este al momento de aumentar en 1 su valor, pasar esta etiqueta al PORTB a modo de que señalase el led a encender. Queria aplicar algo parecido a como en Arduino jejejeje. Al final y viendo la tabla de mnemónicos opte por el uso de restas y testeos del bit Z del STATUS para poder determinar el led a encender.

Adjunto tambien una imagen del circuito simulado en proteus.

Nuevamente doy las gracias al compañero KILLERJC  por la ayuda brindada asi como las ovservaciones en los códigos originales de este post. :)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: encender leds uno a uno
« Respuesta #6 en: 20 de Agosto de 2015, 03:05:16 »
Con los codigos que te pase, especialmente el primero va a funcionar como queres.

Mi primer codigo pone al PORTB en 0000 0001
Y cada ves que se presiona, lo roto hacia la izquierda.
0000 0010
0000 0100
0000 1000
...
...
1000 0000
0000 0000  Carry=1

Cuando detecta que es 1 el carry entonces rota una ves mas dejandolo en 0000 0001 nuevamente.
------------

En mi otro codigo hice algo parecido a lo que hiciste, pero esta ves en ves de hacer una resta a cada rato, directamente use una tabla, cargo el valor en W ( el indice ) y me devuelve el valor en W

Código: ASM
  1. tabla
  2.         addwf   PCL,F
  3.         retlw   0x01         ;Indice en 0, W = 0x01
  4.         retlw   0x02       ;1
  5.         retlw   0x04   ;2 , W = 0x04
  6.         retlw   0x08  ;3
  7.         retlw   0x10  ;4
  8.         retlw   0x20  ;5 , W = 0x20
  9.         retlw   0x40  ;6
  10.         retlw   0x80     ;7

Esto apra no hacer la resta una y otra ves como tenes y usando tu programa se resumiria a un

Código: ASM
  1. MOVF leds ; Muevo el valor de leds
  2. CALL tabla ; llamo a la tabla y me devuelve el valor que corresponde en W
  3. MOVWF PORTB ; Lo que me devolvio la tabla lo pongo en PORTB
  4. INCF leds,F  ; Incremento leds
  5. GOTO push_1  ; Vuelvo a preguntar por el boton.


-------------------------------


Tu programa tiene 2 errores.

Usar un :  incfsz

No tiene sentido ya que cuando sea 0 va a saltar la proxima instruccion (movlw  d'1'), no creo que busques eso, sino que solamente incremente, asi que seria un INCF

La otra es que cuando llega a 5 y se compara, no vuelve a 0 a leds. Si no que este se va a seguir incremetnando hasta 255, va a producirse el overflow a 0 y recien ahi va a volver a ejecutar tus leds. Asi que solo los primeras 5 veces va a moverse el led y despues quedaria estatico hasta que presiones 250 veces mas y recien ahi volveria a comenzar.