Autor Tema: ping-pong 16f84a  (Leído 6903 veces)

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

Desconectado yojan11

  • PIC10
  • *
  • Mensajes: 4
ping-pong 16f84a
« en: 03 de Diciembre de 2005, 20:32:00 »
que tal, estoy tratando de hacer un ping-pong con el pic16f84a- se trata de lo siguiente. usar 11 leds y dos pushbottons=(s1ys2)
el led uno este del lado de s1 y el led 11 del lado de s2. entonces empezara un corrimiento de encendido de leds del 1 al 11. cuando el led 11 se encienda se debe aplastar s2 para que regrese la secuencia de encendido hasta llegar al led 1
cuando el led 1 se prenda aplastar s1 para volver a regresar la secuencia y asi sucesivamente.
el chiste de esto es que mientras s1 y s2 se presionen a tiempo vaya aumentado el corrimiento de encendido de los leds hasta que uno de los pushbottons no sea presionado a tiempo.

mi problema es no saber como implementar esa decrementacion para que el ritmo de encendido vaya aumentando. y como es que los pushbottons iran implementados dentro del programa.

estoy usando mplab lenguaje ensamblador

se los agradecere mucho si me pudieran ayudar

saludos

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: ping-pong 16f84a
« Respuesta #1 en: 04 de Diciembre de 2005, 20:13:00 »
Hola, la idea es que para cada encendido, tienes que llamar a una demora de tiempo...
y necesitas tener un registro que se decremente cada vez que aciertan al pulsador, el valor de este registro es el que se carga cada vez que se llame a la demora, con lo cual, el tiempo sera cada vez menor...

coloca tu programa para que lo corrijamos ok?Sonrisa Gigante

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado yojan11

  • PIC10
  • *
  • Mensajes: 4
RE: ping-pong 16f84a
« Respuesta #2 en: 04 de Diciembre de 2005, 21:45:00 »
gracias por tu respuesta. mira en cuanto a la secuencia de corrimiento de leds no hay problema.
yo creo que debo mandar leer el estado en que se encuentra el pushbotton cuando tenga que ser presionado. es decir cuando se encienda el led 11 leer la entrada del pushbotton2 y cuando el led 1 se encienda leer la entra del pushbotton1.
como dices tu hacer una decrementacion para que el corrimiento vaya mas rapido siempre y cuando pushbotton 1 y pushbotton 2 se accionados a tiempo. la verdad no se hacer esa decrementacion. tambien de no saber como leer esas entradas ( pushbottons 1 y 2). bueno aqui pongo el codigo que llevo hasta el momento. no me esta dejando anexarlo porlo que voy a pegarlo aqui. muchas gracias por tu interes
--------------------------------------------------------------
reg1     equ      0x20
reg2     equ      0x21


   ORG 0x00
   goto main
   
      ORG 0x100

main    
               bsf STATUS,RP0
       clrf TRISB
       bcf STATUS,RP0

                bsf STATUS,RP0
       clrf TRISA
       bcf STATUS,RP0
CICLO
       
                bsf PORTB,0
       call delay05
       bcf PORTB,0

                   bsf PORTB,1
       call delay05
      bcf PORTB,1

                                bsf PORTB,2
      call delay05
      bcf PORTB,2

      bsf PORTB,3
       call delay05
      bcf PORTB,3

      bsf PORTB,4
      call delay05
      bcf PORTB,4

      bsf PORTB,5
      call delay05
      bcf PORTB,5

                                bsf PORTB,6
      call delay05
      bcf PORTB,6

                                bsf PORTB,7
      call delay05
      bcf PORTB,7

                               bsf PORTB,6
      call delay05
      bcf PORTB,6

                                bsf PORTB,5
      call delay05
      bcf PORTB,5

                    bsf PORTB,4
      call delay05
      bcf PORTB,4

                   bsf PORTB,3
       call delay05
      bcf PORTB,3

                                bsf PORTB,2
       call delay05
      bcf PORTB,2

                    bsf PORTB,1
       call delay05
      bcf PORTB,1

       
                               bsf PORTB,0
       call delay05
      bcf PORTB,0


                                bsf PORTA,0
       call delay05
      bcf PORTA,0

       
                               bsf PORTA,1
       call delay05
      bcf PORTA,1

       call delay05

      goto CICLO

      ORG 0x150
delay05   movlw   0x45
      movwf   reg1
sig2   movlw   0x45
      movwf   reg2
      decfsz   reg1
      goto   sig
      return
sig      decfsz   reg2
      goto   sig3
      goto   sig2
sig3                   nop
      nop
      nop
      goto   sig
      

                        nop
         nop
         nop
      return   

   end
   

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: ping-pong 16f84a
« Respuesta #3 en: 05 de Diciembre de 2005, 21:08:00 »
Hola, leyendo el programa, te recomiendo que los led, los conecter invertidos, es decir, tu ahora los conectarias del pin del pic, con una resistencia a negativo...
tendras que colocar de positivo, la resistencia y el catodo del led al pin del micro... y lo disparas o enciendes con BCF (le envias un cero ) y lo apagas con BSF..

asi estara por absorcion de corriente, y no tendras problema con el port a....
para verificar si esta pulsado, suponiendo que el pulsador tiene una resistencia a positivo, seria

btfss portX,pulsador
goto pulsado

X es el puerto a o b  y pulsador el numero de pin donde esta el pushbuton

dentro de esta rutina, si acierta justo, le das  decf tiempo,f
donde tiempo seria la variable que empleas en el temporizador

delay05
movlw 0x45
movwf reg1
sig2 movlw 0x45
movwf reg2
decfsz reg1
goto sig
return
sig decfsz reg2
goto sig3
goto sig2
sig3
nop
nop
nop
goto sig
nop
nop
nop
 return
 end

esta rutina de tiempo, la veo muy alocada... loco

busca en el almacen de asembler un generador de temporizaciones...
o esta rutina

DEMORA   
   movf  tiempo,w        ;MOVLW   .250 ; escribir aqui el numero de milisegundos
   MOVWF   TIEMPO1
OTRO2
   MOVLW   .110
   MOVWF    TIEMPO2
OTRO
   NOP
   NOP
   NOP
   NOP
   NOP
   NOP
   DECFSZ   TIEMPO2,F
   GOTO    OTRO
   DECFSZ    TIEMPO1,F
   GOTO    OTRO2
   RETURN   


Norberto


Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado yojan11

  • PIC10
  • *
  • Mensajes: 4
RE: ping-pong 16f84a
« Respuesta #4 en: 06 de Diciembre de 2005, 04:25:00 »
ok, gracias por tu interes realmente te lo agradesco.

mira ando perdido con unos detalles que me escribiste

no es por ti, si no por mi inexperiencia

1  lo de invertir los leds
y conectar el catodo del led al pin micro eso si lo entiendo

2  el retraseo que yo tenia originalmente no hay problema en
cambiarlo como dices tu esta medio alocada.


donde te digo que me pierdo es en lo siguiente:

cuando quiera verificar mi pushbotton lo hare como dices

btfss portX,pulsador
goto pulsado

X es el puerto a o b y pulsador el numero de pin donde esta el pushbuton


aqui en especial goto pulsado, ahi debo tener alguna funcion de nombre
pulsado? en especial que haria esta funcion al dirigirme a ella?

se te fijas al encender yo cada led mando llamar mi rutina de tiempo
alocada jejeje. ahora que la cambie,por DEMORA
¿la sustituyo por lo que vos me facilitaste. al momento de mandar
encender cada led, asi como esta en el programa original? en pocas palabras
en vez de mandar delay05, mando DEMORA?

otra cosita que queria preguntarte. ¿cuando empieze la secuencia
1,2,3,4,5,6,7,8,9,10,11 ahi en 11 es cuando debo leer:

btfss portX,pulsador
goto pulsado

y luego

11,10,9,8,7,6,5,4,3,2,1

btfss portX,pulsador
goto pulsado

y asi sucesivamente verdad. ?

entonces lo que yo me imagino es que lee el puerto
y me dirige a pulsado que yo creo que seria una funcion que empezaria
a decrementar cada vez que se accediera a ella, como por ejemplo
la que pusiste tu DEMORA

te molesto nada mas que me indiques en donde colocar por ejemplo PULSADO y en
que parte del programa se leeria el pulsador. ¿esta bien lo que pienso respecto
a leerlo cada vez que el led de los extremos encienda dependiendo el lado ya sea
pushbotton1 o pushbotton2?

Bueno Norberto
perdoname por tanto escrito, es que estoy re-apurado
con este proyectito que es para el proximo Jueves y apenas
como que quiere agarrar forma

muchas gracias por todo
saludosSonrisa

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: ping-pong 16f84a
« Respuesta #5 en: 06 de Diciembre de 2005, 08:42:00 »
Ok, esta correcta tu idea, tienes que sensar cada pulsador en los extremos.... pero esto traera como problema si lo mantienes pulsado.... tambien realizara el rebote...

asi que me parece la solucion mas simple, realizar 2 rutinas diferentes de retardos...

para los led del medio, dentro de la misma rutina, quitar los NOP, y alli leer los pulsadores, por si son pulsados antes de tiempo
alli tendras que decidir que hacer.... si pierde el juego, o si sigue saliendo en el mismo sentido.... no se.... eso sera parte del juego ok?

y el otro temporizador, tambien sensara a ambos pulsadores, pero actuaran haciendo el cambio de velocidad que tu propones...

creo que si no es pulsado a tiempo, tendria que pasar de largo... es decir, seguir saliendo en la misma direccion....

como no tengo claro como lo quieres implementar, podria ser, que mientras pulsen de manera correcta, se mantenga el tiempo, y si le erra, se le acelere en esa direccion.....

PULSADO, seria una etiqueta, donde se desvia el programa si se acciono el pulsador.... alli tendrias que hacer el programa correspondiente....


yo el programita de demora te lo coloque a modo de ejemplo, creo que es mas simple, y ademas, si te fijas, con esa disposicion, te da el tiempo directamente en milisegundos segun el dato que cargues en TIEMPO1

Sonrisa Gigante

espero se entienda Giño loco

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado yojan11

  • PIC10
  • *
  • Mensajes: 4
RE: ping-pong 16f84a
« Respuesta #6 en: 06 de Diciembre de 2005, 11:09:00 »
Que tal, ok gracias por aclarar mis dudas, y por tu interes como ya mencione.

el chiste del programa es que si los pulsadores son presionados a tiempo
en su momento especifico cada uno entonces vaya aumentando el
ritmo de corrimiento.

si no es aplastado a tiempo, o si se aplasto antes de tiempo, entonces
volver a empezar del lado contrario otra vez con un ritmo lento de encendidos/


bueno gracias ya te platicare que paso

saludos


 

anything