Autor Tema: Seleccionar una opción entre varias  (Leído 5891 veces)

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

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Seleccionar una opción entre varias
« en: 08 de Octubre de 2007, 23:16:53 »
Hola a todos !

Estoy tratando de terminar un trabajo, pero ya la cabeza (léase los conocimientos) no me dán más.
No es que esté trabado, ni que me esté costando de más .... no.
No sé hacer lo que debiera hacer en ASM, motivo por el cuál les pido si alguien fuese tan amable de ayudarme con algo de código.

Tal vez sea "muy fácil" o "muy sencillo y elemental" pero la cabeza no me dá más.
 
El planteamiento del problema es el siguiente:

Tengo un programa ya "casi" listo en ASM que está estructurado de la siguiente manera:

Inicio correcto
Primera parte del programa
OPCIÓN
Segunda parte del programa
Loop al inicio y funcionamiento indefinido.

El "casi", lo forma la OPCIÓN.
Cuando el programa llega a esa parte, "debiera leer" un pulsador ubicado en RA4 para ser exacto, y a través de él, ir seleccionando entre OPCIÖN  1, OPCIÓN 2, OPCIÓN 3 ....... hasta OPCIÓN 6.

La selección de OPCIÓN, puede estar en cualquier parte del programa, en la primera, en la segunda .... en cualquier lado.

Al iniciar el programa, debiera encaramarse el mismo en la secuencia:

Inicio correcto
Primera parte del programa
OPCIÓN 1
Segunda parte del programa
Loop al inicio y funcionamiento indefinido con OPCIÓN 1.

Si en algún momento se pulsara RA4, debiera el programa, pasar a trabajar con OPCIÓN 2, quedando funcionando de ésta forma :

Inicio correcto
Primera parte del programa
OPCIÓN 2
Segunda parte del programa
Loop al inicio y funcionamiento indefinido con OPCIÓN 2.

Naturalmente, luego de llegar a OPCIÓN 6, pulsando RA4 pasar a OPCIÓN 1.

Eso es lo que "no sé hacer", el mecanismo de elección y trabajo con la porción de programa seleccionada.

Yo coloco en el programa, cualquiera de las 6 opciones y el programa funciona perfecto, pero con ésa sóla opción.

Podría armar todo en 6 programas individuales y con las instrucciones BTFSS y BTFSC armar una situación para que "salte" a otro segmento de programa y quede en un lazo de subprograma completo con la opción, pero esos 6 "subprogramas" no alcanzan a entrar en la memoria disponible y tampoco sería una salida muy elegante que digamos ....   :(

Me doy cuenta que debiera crear un registro de nombre OPCIÓN, que debo ir incrementando  (INCF) de a una unidad cada vez que se pulse RA4, y de ésa forma indicarle al programa por que número de OPCIÓN debe pasar en cada vuelta del loop, ........ "pero no sé armarla a ésa idea" !

En éste momento el programa está armado así:

Inicio correcto
Primera parte del programa
ESPACIO PARA LA OPCIÓN
Segunda parte del programa
Loop al inicio y funcionamiento indefinido con la OPCIÓN seleccionada.

OPCIÓN 1
OPCIÓN 2
OPCIÓN 3
OPCIÓN 4
OPCIÓN 5
OPCIÓN 6

Cualquiera de las opciones que coloque en espacio destinado a ellas, hace que el programa funcione perfectamente.

Cómo llegué a armar el resto del programa? Con un programa que tenía, de manera más elemental, y repitiendo los subprogramas, que al ser más elementales, entraban todos en un 16F84A.

Si alguien pudiera ayudarme se lo voy a agradecer.
Espero haber sido claro con lo que estoy necesitando.

Saludos a todos.
Mario

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Seleccionar una opción entre varias
« Respuesta #1 en: 08 de Octubre de 2007, 23:21:51 »
HOLA MARIO!!!!  :-/

Bueno pos si me toca transnochar, Lo hacemos pero esto lo sacamos hoy  :-/

Tienes una pantalla LCD????, Estas simulando en Proteus??? Pasame el archivo y le hacemos juntos!!

METETE AL MSN SI QUIERES  8)

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Seleccionar una opción entre varias
« Respuesta #2 en: 08 de Octubre de 2007, 23:38:41 »
Hola Ernesto !!!  :)

Que pobre lo mío ... no tengo MSN  :(

Respecto a la simulación no. Es un programa que no podría simularse en Proteus, requiere de manejos de los tiempos en forma muy estricta en el lazo principal y trabaja con un PIC a 20 Mhz.

Al momento de pulsar para seleccionar otra opción, todo se "resincronizaría" en menos de 100 milisegundos por lo que allí no hay problema de extensión de código.

Respecto a colgar el código es imposible por lo extenso del mismo ...  :(

De todas formas te agradeceré mucho cualquier ayuda que puedas darme.

Saludos y Gracias por ser tan atento siempre.
Mario

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Seleccionar una opción entre varias
« Respuesta #3 en: 08 de Octubre de 2007, 23:41:55 »
Cual PIC USAS???


Tu lo que necesitas es:

con un pulsador pasar de OPCION en OPCION desde la 1 hasta la 6 y luego empezar nuevamente y ya???

Lo de la simulacion, seria solo para esto del Menu,, ya andando tu le metes las funciones que ya tienes para que haga lo que debe hacer.

... Mas rapido mas rapido... Es que soy un poco Hiperactivo cuando me propongo algo...  :D
« Última modificación: 08 de Octubre de 2007, 23:44:16 por PICmouse »

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Seleccionar una opción entre varias
« Respuesta #4 en: 08 de Octubre de 2007, 23:53:10 »
... Mas rapido mas rapido... Es que soy un poco Hiperactivo cuando me propongo algo...  :D

 :D  :D  :D

La idea es tal cómo la planteo en el post

Inicio correcto
Primera parte del programa
OPCIÓN 1
Segunda parte del programa
Loop al inicio y funcionamiento indefinido con OPCIÓN 1.

Accióno pulsador  conectado en RA4 ....

Inicio correcto
Primera parte del programa
OPCIÓN 2
Segunda parte del programa
Loop al inicio y funcionamiento indefinido con OPCIÓN 2.

Accióno pulsador  conectado en RA4 ....

Inicio correcto
Primera parte del programa
OPCIÓN 3
Segunda parte del programa
Loop al inicio y funcionamiento indefinido con OPCIÓN 3 .......

y así hasta la opción 6 para volver a iniciar por la opción 1 nuevamente.

Tal cómo si viéramos fotos una a una, observándo cada una el tiempo que quiéramos.
Cuando queremos ver otra .... pulsamos para cambiar.

Espero se entienda.

Uso un 16F628A @ 20Mhz.

No necesitamos menú.
Sólo es un pulsador, que vá transformando el programa original en otro y en otro hasta en 6 opciones.

Espero no enredar mucho la explicación.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Seleccionar una opción entre varias
« Respuesta #5 en: 08 de Octubre de 2007, 23:58:15 »
YA ENTENDI LO QUE QUIERES!!!!

OK OK, otra pregunta, puedes pasar el pulsador de RA4 a RB0???

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Seleccionar una opción entre varias
« Respuesta #6 en: 09 de Octubre de 2007, 00:01:03 »
RA3  :)

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Seleccionar una opción entre varias
« Respuesta #7 en: 09 de Octubre de 2007, 00:03:34 »
Mira, lo que pasa es que para poder hacer 2 cosas al tiempo y con los tiempos tan preciso que necesitas, creo que debemos meterle la interrupcion por cambio en RB0.

En el momento que se presiona el pulsador...PLASH  nos vamos para el cambio de OPCIOn para el siguiente arranque.
Mientras no se presiona, pos no se pierde tiempo preguntando.. Claro que si no usas un TIMER podemos usarlo para hacer preguntas periodicas por el pulsador.

SALUDOS!!!

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Seleccionar una opción entre varias
« Respuesta #8 en: 09 de Octubre de 2007, 00:06:40 »
No puedes meter RA3 como salida para hacer el trabajo que esta haciendo RB0???


Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Seleccionar una opción entre varias
« Respuesta #9 en: 09 de Octubre de 2007, 00:07:55 »
Cuando dices INICIO CORRECTO

Te refieres a que el PIC se "resetea" o que seguido a pulsar la tecla RA4, te regresas a Inicializar una LCD por decir algo..

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Seleccionar una opción entre varias
« Respuesta #10 en: 09 de Octubre de 2007, 00:18:21 »
Código: [Seleccionar]
RESTART CALL INICIO_CORRECTO
CALL PRIMERA_PARTE

PREGUNTAS
;Preguntamos si la variable OPCIOn es 0
MOVLW 0X00
SUBWF OPCION,W
BTFSC STATS,Z
GOTO OPCION_0

;Preguntamos si la variable OPCIOn es 1
MOVLW 0X01
SUBWF OPCION,W
BTFSC STATS,Z
GOTO OPCION_1

;Preguntamos si la variable OPCIOn es 2
MOVLW 0X02
SUBWF OPCION,W
BTFSC STATS,Z
GOTO OPCION_2

;Preguntamos si la variable OPCIOn es 3
MOVLW 0X03
SUBWF OPCION,W
BTFSC STATS,Z
GOTO OPCION_3

;Preguntamos si la variable OPCIOn es 4
MOVLW 0X04
SUBWF OPCION,W
BTFSC STATS,Z
GOTO OPCION_4

;Preguntamos si la variable OPCIOn es 5
MOVLW 0X05
SUBWF OPCION,W
BTFSC STATS,Z
GOTO OPCION_5

;Preguntamos si la variable OPCIOn es 6
MOVLW 0X06
SUBWF OPCION,W
BTFSC STATS,Z
GOTO OPCION_6

OPCION1 ;HACES TODO LO QUE DEBAS HACER
GOTO PREGUNTAR_PULSADOR

OPCION2 ;HACES TODO LO QUE DEBAS HACER
GOTO PREGUNTAR_PULSADOR

OPCION3 ;HACES TODO LO QUE DEBAS HACER
GOTO PREGUNTAR_PULSADOR

OPCION4 ;HACES TODO LO QUE DEBAS HACER
GOTO PREGUNTAR_PULSADOR

OPCION5 ;HACES TODO LO QUE DEBAS HACER
GOTO PREGUNTAR_PULSADOR

OPCION6 ;HACES TODO LO QUE DEBAS HACER
GOTO PREGUNTAR_PULSADOR



PREGUNTAR_PULSADOR
BTFSC PORTA,3
GOTO RESTART         ;SI NO SE HA PRESIONADO EL PULSADOR, ARRANCA EL CICLO DESDE CERO
PRESIONADO INCF OPCION,F ;INCREMENTAMOS LA VARIABLE OPCION
MOVLW 0X07   ;PREGUNTAMOS SI OPCION LLEGO A 7
SUBWF OPCION,W
BTFSS STATUS,Z
GOTO RESTART ;SI NO LLEGO A CERO, POS VAMOS A RESTAR DE UNA
CLRF OPCION ;SI LLEGO A 7 DEBEMOS PASAR A 0 NUEVAMENTE
GOTO RESTART
« Última modificación: 09 de Octubre de 2007, 00:22:36 por PICmouse »

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Seleccionar una opción entre varias
« Respuesta #11 en: 09 de Octubre de 2007, 00:20:57 »
RB0 ya está ocupada por otras partes del diseño  :(

Tenemos RA3 "dedicada" a conectarle el pulsador. Yo había puesto RA4 por ejemplificarlo en algo genérico, pero lo "real" es que vá conectado a RA3 el pulsador.

Respecto al tema de interrogar por el pulsador todo el tiempo no hay problemas.
Dentro del lazo :

Inicio correcto
Primera parte del programa
OPCIÓN 2
Segunda parte del programa
Loop al inicio y funcionamiento indefinido con OPCIÓN 2.

por ejemplificar alguno; tengo muchos tiempos "muertos" ú ocupados por muchos NOPs para  que los tiempos del programa se acomoden correctamente.

Por ejemplo, al final de la primera parte del programa tenemos espacio como para colocar unas 100 instrucciones.
Ése espacio está ocupado con un loop para generar un retardo de tiempo, así que imagínate que hay espacio para meter bastante código allí.
Hasta sería un buen lugar meterlo allí.....

Inicio correcto
Primera parte del programa
SELECTOR DE OPCIONES
OPCIÓN ELEJIDA
Segunda parte del programa
Loop al inicio y funcionamiento indefinido con OPCIÓN ELEJIDA.

Gracias por la paciencia Ernesto ! :)

Antes de postear veo que has puesto ya un poco de código ...
Qué velocidad hombre !!!  :shock:
Analizo eso que me has dejado, trato de hacer algo (me peleo con el MPLAB) y vuelvo con comentarios.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Seleccionar una opción entre varias
« Respuesta #12 en: 09 de Octubre de 2007, 00:24:12 »
Ya le arregle unas cositas Como:

LE cambie la pregunta del pulsador para RA3

En las preguntas siempre comparaba si opcion es igual a 4, ya pregunta si es 0,1,2,3,4,5,6

Espero si te sirve, si no me avisas y miramos que mas hace falta..  :P

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1926
    • Servisystem
Re: Seleccionar una opción entre varias
« Respuesta #13 en: 09 de Octubre de 2007, 00:38:14 »
Creo que ya estoy rumbeao'  :shock:

En la parte final voy a cambiar los "GOTO RESTART" por "GOTO Segunda Parte del Programa" y creo (por lo poco que entiendo de ASM) que debiera funcionar.

Alcanzo a entender cómo incrementas la variable, tambien cuando la restas con los números fijos y controlas si devuelve "Zero" ....

Pruebo, experimento.
Si las neuronas me ayudan más tarde retorno con comentarios, sinó será mañana amigo. (Ya son las 00:36 por aquí)

Gracias por ahora.
Dejáme golpearme e intentarlo.

Un abrazo
Mario

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Seleccionar una opción entre varias
« Respuesta #14 en: 09 de Octubre de 2007, 00:44:29 »
Como asi?? Me vas a dejar asi??  :(

Tonses hasta maña o que??   :D :D

SALUDOS AMIGO!!!

PD: Dime si quieres que te explique y lo hago.. No hay problema por eso..  :)


 

anything