Autor Tema: Menu PIC 16F84A  (Leído 2501 veces)

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

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Menu PIC 16F84A
« en: 29 de Julio de 2010, 03:46:50 »
Buen Dia, este es mi primer Tema, ya que estoy hace poco con el mundo de los Pics.
Aca tengo un pequeño problema, con este menu ejemplo que les comparto, osea...
Esta pensado. para que por medio de 2 pulsadores, uno va pasando el menu, y el otro accede al menu y un submenu, y volviendo a oprimir el primer pulsador sale del submenu y vuelve al principal recorriendolo.
Todo esto se visualiza, en un LCD 2 x 16, configurado a 4 Bits, incluye las siguientes rutinas:
LCD_4BIT.inc
LCD_MENS.inc
RETARDOS.inc

Conexionado datos Pic a LCD RB4 a RB7   al Pin 11 a 14 deLCD
Conexionado configuracion Pic a Lcd RA0 a RA2   al Pin  4 a 6 del LCD
Pulsadores RB0 y RA2
Si alguien lo puede chequear y ver porque no funciona correctamente ya que en algunos submenu no entra, otros los saltea, osea no funciona correctamente. Aqui les mando el ejemplo:

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

   CBLOCK  0x0C
   ENDC


; ZONA DE CÓDIGOS ********************************************************************
   
   status        equ        3h
   porta      equ      5h
   portb      equ      6h

   ORG   0
   bsf   status,5
   bsf   porta,3
   bsf   portb,0
   bcf   status,5   
Inicio
   call   LCD_Inicializa


Principal
   btfsc   porta,3
   goto   Menu7
   call    Retardo_500micros
   call   Borra               ; Delay 200000 ciclos (incluyen  call+return)
   movlw   Mensaje0         ; Apunta al mensaje 0.
   call   Visualiza
N2   btfsc   porta,3
   goto   Menu            ; ****** MENU MENSAJE 0 ******
   call    Retardo_500micros
   call   Borra              ; Delay 200000 ciclos (incluyen  call+return)
   movlw   Mensaje1         ; Apunta al mensaje 1.
   call   Visualiza
N3   btfsc   porta,3
   goto   Menu2            ; ****** MENU MENSAJE 1 ******
   call    Retardo_500micros
   call   Borra               ; Delay 200000 ciclos (incluyen  call+return)
   movlw   Mensaje2         ; Apunta al mensaje 2.
   call   Visualiza
N4   btfsc   porta,3
   goto   Menu3
   call    Retardo_500micros
   call   Borra               ; Delay 200000 ciclos (incluyen  call+return)
   movlw   Mensaje3         ; Apunta al mensaje 3.
   call   Visualiza
N5   btfsc   porta,3
   goto   Menu4
   call    Retardo_500micros
   call   Borra               ; Delay 200000 ciclos (incluyen  call+return)
   movlw   Mensaje4         ; Apunta al mensaje 4.
   call   Visualiza
N6   btfsc   porta,3
   goto   Menu5
   call    Retardo_500micros
   call   Borra               ; Delay 200000 ciclos (incluyen  call+return)
   movlw   Mensaje5         ; Apunta al mensaje 5.
   call   Visualiza
N7   btfsc   porta,3
   goto   Menu6
   call    Retardo_500micros
   call   Borra               ; Delay 200000 ciclos (incluyen  call+return)
   movlw   Mensaje6         ; Apunta al mensaje 6.
   call   Visualiza
   goto   Principal         ; Repite la visualización de todos los mensajes.


;         -----------------------------------------------------------------
;               Menu Mensaje 0
Menu   btfsc   portb,0            
   goto   N2
   call   Retardo_500micros
   call   Borra
   movlw   Mensaje7         ; " Activado "
   call   Visualiza2
   movlw   Mensaje0
   call   Visualiza
   goto   Menu


Menu2   btfsc   porta,0            ; Volver atras ?
   goto   N3            ; No, Testear Menu3
   call   Retardo_500micros         
   call   Borra
   movlw   Mensaje8         ; Si, a "< Testeo Menu > "
   call   Visualiza2
   movlw   Mensaje1
   call   Visualiza
   goto   Menu2
   

Menu3   btfsc   portb,0   
   goto   N4
   call    Retardo_500micros
   call   Borra              ; Delay 200000 ciclos (incluyen  call+return)
   movlw   Mensaje9         ; Apunta al mensaje 9.
   call   Visualiza2
   movlw   Mensaje2
   call   Visualiza
   goto   Menu3

Menu4   btfsc   porta,0            ; Vuelve atras ?
   goto   N5            ; No, Sigue el mensaje
   call   Retardo_500micros         
   call   Borra
   movlw   Mensaje10         ; Si, a " Estado Menu "
   call   Visualiza2
   movlw   Mensaje3
   call   Visualiza
   goto   Menu4


Menu5   btfsc   portb,0
   goto   N6
   call   Retardo_500micros
   call   Borra
   movlw   Mensaje11         ; " 48.5 V "
   call   Visualiza2
   movlw   Mensaje4
   call   Visualiza
   goto   Menu5

Menu6   btfsc   porta,0            ; Atras ?
   goto   N7            ; No, seguir testeando
   call   Retardo_500micros
   call   Borra
   movlw   Mensaje12         ; Si,a " Bateria "
   call   Visualiza2
   movlw   Mensaje5
   call   Visualiza
   goto   Menu6

Menu7   btfsc   portb,0
   goto   Principal
   call   Retardo_500micros
   call   Borra
   movlw   Mensaje13         ; " 20.5 A "
   call   Visualiza2
   movlw   Mensaje6
   call   Visualiza
   goto   Menu7
   

; Subrutina "Visualiza" -----------------------------------------------------------------
;

Visualiza   
   call   LCD_Mensaje
   Return

Visualiza2
   call   LCD_Mensaje
   call   Retardo_2s
   call   Borra
   call   Retardo_200ms
   return

Borra   call   LCD_Borra         ; Borra la pantalla y se mantiene así durante
   call   Retardo_200ms         ; este tiempo.
   return
;
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
   addwf   PCL,F
Mensaje0                  ; Posición inicial del mensaje 0.
   DT "  < Estado >", 0x00
Mensaje1                  ; Posición inicial del mensaje 1.
   DT "  < Bateria >", 0x00   
Mensaje2                  ; Posición inicial del mensaje 2.
   DT " < Corriente >", 0x00
Mensaje3
   DT " < Velocidad >", 0x00
Mensaje4
   DT "  < Potencia >", 0x00
Mensaje5
   DT "   < Motor >", 0x00
Mensaje6
   DT " < Microswich >", 0x00
Mensaje7               ;Mensaje0
   DT "    Activado", 0x00
Mensaje8
   DT "  Desconectado", 0x00
Mensaje9               ;Mensaje1
   DT "     48.5 V", 0x00
Mensaje10
   DT "     20.5 A", 0x00
Mensaje11
   DT "    150 Km/hs", 0x00
Mensaje12
   DT "      120 W", 0x00
Mensaje13
   DT " HP=20 RPM=1550", 0x00

   INCLUDE  <LCD_4BIT.INC>
   INCLUDE  <LCD_MENS.INC>
   INCLUDE  <RETARDOS.INC>
   END

Desde ya muchas gracias y espero que me puedan sacar la duda !!!

ATTE. Victor Angel

Vangeluz

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Menu PIC 16F84A
« Respuesta #1 en: 29 de Julio de 2010, 03:53:41 »
Hola y bienvenido al mejor foro de pics del universo mundial  :mrgreen:

Primero, has posteado en una sección inadecuada; esto debería ir en "almacén del asembler". Pero no pasa nada  :)

Segundo, a primera vista la pausa antirrebotes de los pulsadores es demasiado pequeña. 500us es poco, súbelo a 20-40ms.
Esta puede ser una de las causas que te haga cosas raras, por los rebotes. Prueba con esto y seguimos.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: Menu PIC 16F84A
« Respuesta #2 en: 29 de Julio de 2010, 19:49:55 »
Hola y bienvenido al mejor foro de pics del universo mundial  :mrgreen:

Primero, has posteado en una sección inadecuada; esto debería ir en "almacén del asembler". Pero no pasa nada  :)

Segundo, a primera vista la pausa antirrebotes de los pulsadores es demasiado pequeña. 500us es poco, súbelo a 20-40ms.
Esta puede ser una de las causas que te haga cosas raras, por los rebotes. Prueba con esto y seguimos.

Te agradezco mucho x tu respuesta, probare cambiando los antirebotes a ver si cambia la cosa, y vor a ver eso de almacen de assembler, a ver si lo encuentro y lo puedo mover. Desde ya muchas gracias amigo !!! :lol:
Vangeluz

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Menu PIC 16F84A
« Respuesta #3 en: 30 de Julio de 2010, 04:26:27 »
Ya ha sido movido, no te preocupes.  ;-)
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"