Autor Tema: Menu con Submenus?  (Leído 11492 veces)

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

Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
Menu con Submenus?
« en: 25 de Agosto de 2004, 01:47:00 »
hola amigos

tengo una pregunta: quiero hacer un Menu con diversos Submenus para un 18F252 que debe ser mostrado en un LCD. Tambien tiene que tener la posibilidad de elegir los numeros de 0 a 9. Por lo que he leido por ahi, se podria utilizar un maquina de estado (statemachine). Puede explicarme alguien como se hace una maquina de estado en un PIC?, quizas algun ejemplo?

Gracias por toda la informacion que se pueda juntar de antemano.
Saludos desde Suiza, Pablo.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7755
RE: Menu con Submenus?
« Respuesta #1 en: 25 de Agosto de 2004, 07:09:00 »
Yo me anoto con las respuestas, me interesa el tema....
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: Menu con Submenus?
« Respuesta #2 en: 25 de Agosto de 2004, 09:32:00 »
hola

por lo que estuve averiguando, existen dos tipos basicos de programacion para teclados con Menus y Submenus:
1) con el tipico Switch()
2) con pointer to functions(punteros de/para funciones)
El 1) no es dificil, pero cuando existe un Menu muy grande necesita mucha memoria.
El 2) es mas dificil de programar(por los punteros), pero el codigo es mas elegante.

A mi personalmente me interesaria hacer un Menu con la opcion No 2. El problema es que casi no tengo experiencia en la programacion.

Seria lindo que alguien pueda ayudar.
Saludos desde Suiza, Pablo.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Menu con Submenus?
« Respuesta #3 en: 25 de Agosto de 2004, 09:47:00 »
Si quieres usar CCS tendrás q optar por la opción primera,ya que éste no admite punteros a funciones.
Si explicas más o menos como van a ser concretamente esos menús se puede ir construyendo código.
Saludos

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7755
RE: Menu con Submenus?
« Respuesta #4 en: 25 de Agosto de 2004, 09:51:00 »
Yo creo que se puede utilizar una funcion que pase parametros a otra funcion.
No es lo mismo pero igual es elegante...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Menu con Submenus?
« Respuesta #5 en: 25 de Agosto de 2004, 10:05:00 »
Eso sí,pero siempre que los parámetros sean sólo de entrada.
Se me ocurre que quizá pueda implementarse con un procedimiento recursivo que gestionaría el solito todo el menú completo incluídos todos los submenús.
Un procedimiento recursivo es el que dentro de su implementación contiene una o varias llamadas a sí mismo

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Menu con Submenus?
« Respuesta #6 en: 25 de Agosto de 2004, 10:52:00 »
Olviden la recursividad...
CCS tampoco admite llamadas recursivas

Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: Menu con Submenus?
« Respuesta #7 en: 26 de Agosto de 2004, 02:26:00 »
hola gente

ante todo gracias por las respuestas. Bueno yo quiero hacer un menu como el que sigue:

- Range -->Auto/Manuell
- Fine Adjust --> 0...100%
- Integration Time --> 0...60s
- Limit --> 0...100%(Standard 50%)
- Compensation --> 0...100%
- 0/4...20mA --> 0...20/4...20mA
- Sensitivity --> ??
- Self Calibration --> Start

Yo pienso que se tiene que utilizar el switch-case statement para realizar el menu. En cuanto tenga algo lo posteo.
Lo que hay que pensar tambien es en no hacer un programa que se coma toda la memoria.

Mas infos: Tengo un teclado de cuatro teclas conectado al puerto B 4...7. He pensado utilizar una intrrupcion para detectar cuando se ha apretado una tecla. Despues va al programa principal y controla cual tecla ha sido apretada. Ahi mismo hago por soft un antirebote para las teclas y despues le asigno la funcion del menu. Que opinan de esto?

 
Saludos desde Suiza, Pablo.

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Menu con Submenus?
« Respuesta #8 en: 26 de Agosto de 2004, 04:36:00 »
Yo hice uno hace tiempo con interrupciones, lo que pasa es que ahora no se si lo tengo, no se si lo habré perdido en algún formateo....

Consistía en lo siguiente:

4 pulsadores en RB4/7 una tecla era la de menú, otra era flecha arriba otra flecha abajo y por último la tecla de acepatción o enter.

Al menú solo se podía entrar con la tecla menú, al entrar mostraba en el lcd 2 opciones (submenús) que podían ser seleccionadas mediante las flechas, y con el menú aceptar se accedía al submenú seleccionado, si se pulsaba la tecla menú se retrocedía al menú anterior y así sucesivamente.

Creo que en el ejemplo que hice con proteus, hice algo parecido...

Saludos.


Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: Menu con Submenus?
« Respuesta #9 en: 26 de Agosto de 2004, 05:59:00 »
hola oshow

exactamente como lo hicistes vos, lo quiero hacer yo. Yo tambien tengo 4 Teclas: Enter, Up, Down y Menu.
La interrupcion del puerto B la uso para saber si se ha apretado una tecla, si es asi, en la subroutine de la interrupcion pongo un Flag = true, que despues lo chequeo en el bucle principal y veo cual es la tecla que se ha apretado.

Si tienes ese ejemplo que has dicho, no estaria nada mal echarle un vistazo.
Saludos desde Suiza, Pablo.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Menu con Submenus?
« Respuesta #10 en: 26 de Agosto de 2004, 06:29:00 »
Para el manejo de los datos,una forma muy práctica puede ser usando esta estructura:
Codigo:

///////////////////////////////////// PREPROCESADO ///////////////////////////////////

#include <16F84.h>
#use delay(clock=10000000)
#fuses HS,NOWDT,NOPUT
#define use_portb_lcd TRUE
#include "lcd.c"

//////////////////////////////////////// TIPOS ///////////////////////////////////////

typedef enum Trango {manual,automatico};

typedef struct Tconfiguracion {
                    Trango rango;
                    int ajuste_fino;
                    int t_integracion;
                    int limite;
                    int compensacion;
                    int amperaje;
                    int sensibilidad;
                    boolean autocalibracion;
                    };

/////////////////////////////////////// GLOBALES /////////////////////////////////////

struct Tconfiguracion configuracion;

////////////////////////////////////// PRINCIPAL /////////////////////////////////////

void main()
   {
   lcd_init();
   configuracion.rango = manual;
   configuracion.ajuste_fino = 0;
   configuracion.autocalibracion = TRUE;
   // etc...
   for(;;) {}
   }



Desconectado gauchosuizo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 457
RE: Menu con Submenus?
« Respuesta #11 en: 26 de Agosto de 2004, 07:23:00 »
hola

antes de empezar con el menu se me ha presentado otro problema: como hago para identificar que tecla se esta apretando? Como yo tengo las teclas a la entrada del puerto B4...7 uso la interrupcion para saber si se apreto una tecla y pongo un flag. En el bucle principal controlo el bucle. Si este esta puesto, quiero eliminar los posibles rebotes de las teclas y clasificarlas. Como puedo hacer estas dos cosas de una manera sencilla?

Gracias
Saludos desde Suiza, Pablo.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
RE: Menu con Submenus?
« Respuesta #12 en: 26 de Agosto de 2004, 07:25:00 »
Algo parecido estoy tratando de hacer yo, pero la cosa no sale

La unica diferencia es que quiero usar 3 botones, flecha arriba, abajo, ok/menu, para este ultimo se distingue entre pulsacion larga y corta, a ver si encuentro el ejemplo que tenia yo.....

lo mismo de aqui sacas alguna idea:
http://www.vermontficks.org/datalogc.htm

aqui tb están construyendo algo muy interesante solo que eso... estan haciendolo :p
http://users.skynet.be/bk317494/012/012.htm

Salu2

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Menu con Submenus?
« Respuesta #13 en: 26 de Agosto de 2004, 08:36:00 »
Para evitarte los rebotes,en tu rutina de interrupción puedes llamar a una rutina que tuviese esta forma:

Codigo:

// Estamos suponiendo que loa pulsadores van a ser activos a nivel alto.
void antirebote()
   {
   delay_ms(30);
   while(PORTB != 0) {}  // No progresamos hasta que ningún pulsador esté activo
   delay_ms(30);
   }





Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Menu con Submenus?
« Respuesta #14 en: 26 de Agosto de 2004, 08:38:00 »
Pues no sabéis cuanto lo siento, pero he estado buscando el programa con los menús y no lo he encontrado, pero mira a ver el ejemplo que hice con proteus:

http://www.telecable.es/personales/trelles2/esquemas_proteus/ejemplo_a_enviar.rar

Creo recordar que aquí usé algo parecido, a lo mejor os puede servir de ayuda.


Saludos.


 

anything