Autor Tema: LCD y Pulso para Mensaje  (Leído 5326 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
LCD y Pulso para Mensaje
« en: 22 de Abril de 2006, 09:10:27 »
Hola amigo me encuentro desarrollando este ej. La cual no me funciona como yo quiero..
Bueno quiero que cuando le mande un pulso por el pin de portb.6 me presente el mensaje primero durante un tiempo x, y que si durante ese tiempo x, no se presiona otro pulso vuelva al mensaje principal..
Eh conseguido hacer que cuando le doy el pulso por portb.6 me presente el mensaje y cuando le mando el otro pulso me presente el otro mensaje..
Esto me funciona pero cuando le pongo el tiempo que yo quiero que me de para presionar y darle el otro pulso, el espera que termine para poder presentar el otro mensaje..
'------Comando del lcd-----
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
DEFINE LCD_LINES 4
'------Oscilador----       
define OSC 4
'---------------

inicio:
       lcdout $FE,1," PRINCIPAL "
       pause 100
             
pulso:
      if PORTB.6=0 then
      lcdout $FE,1," PRIMERO "
      pause 1000
      endif
      if PORTB.7=0 then
      lcdout $FE,1," SEGUNDO "
      pause 1000
      endif
      goto pulso
      end
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: LCD y Pulso para Mensaje
« Respuesta #1 en: 22 de Abril de 2006, 10:07:27 »
Hola:

Veamos si te entendi, o mas bien voy a comentar tu codigo, el mensaje "PRINCIPAL" solo sera mostrado una ves, mientras no cambie de estado B6 o B7, luego no mostrará ese mensaje en ninguna condicion del programa.

El tiempo X que mensionas tampoco seria recomendable ponerlo directamente lo que quieres esperar con PAUSE X, ya que ese hara la pausa de X milisegundos y durante ese tiempo no sabras si se presiono o no B6 o B7.

Puedes hacer un bucle con un pause de menos tiempo y haces las iteraciones necesarias para lograr el tiempo requerido...

Código: [Seleccionar]
pulso:
      if PORTB.6=0 then
        for i=0 to 999
            lcdout $FE,1," PRIMERO "
            if PORTB.6=0 then goto inicio
            pause 1
        next i
      endif
      goto pulso

Algo como ese codigo por ejemplo, una ves que se preciono B6, hara ese bucle 1000 iteraciones, con una pausa de 1ms, y dentro de ese bucle pregunta nuevamente el estado de B6 para ver si fue presionado, si es asi salta a la etiqueta inicio que hara que muestre el mensaje "PRIMERO" prueba algo como eso y me comentas como te fue.  :mrgreen:
« Última modificación: 22 de Abril de 2006, 10:11:22 por LordLafebre »

Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Re: LCD y Pulso para Mensaje
« Respuesta #2 en: 22 de Abril de 2006, 10:33:07 »
amigo lordlafebre te comento que el mensaje "PRINCIPAL" este se mostrara al inicio de este, si cambio el estado de B6 o B7, me motrara el mensaje que estos pin contengan.

pero con respecto al tiempo de Pause de los mensaje me refiero que si una ves presionado B6 me muestra un mensaje, dan dome un tiempo para hacer otra cosa x "ej. mostras otro mensaje con B7" y si este no se cumple vuelve al mensaje "PRINCIPAL"...

y con respecto al ej que me pusiste este solo me muestra el mensaje PRINCIPAL y cuando le doy a B6 no hace nada...

bye... :-/ :-/
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: LCD y Pulso para Mensaje
« Respuesta #3 en: 22 de Abril de 2006, 11:09:15 »
Hola:

Blackpic, esa es la idea del ejemplo, ese codigo lo puse como guia, si compilas solo ese pedazo no hara nada, tienes que agregarlo a tu codigo original.

Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Re: LCD y Pulso para Mensaje
« Respuesta #4 en: 23 de Abril de 2006, 16:40:14 »
amigo lordlafebre mira este ej el que puse primero

inicio:
       lcdout $FE,1," PRINCIPAL "
       pause 100
             
pulso:
      if PORTB.6=0 then
      lcdout $FE,1," PRIMERO "    ' cuando oprimo B6 me muestra el mensaje y dura
      pause 1000                       '  un seg ante de mostrar el mensaje PRINCIPAL
      endif                             '***    pero lo que yo quiero es que antes de que muestre el mensaje
      if PORTB.7=0 then          '***   PRINCIPAL hacer una interuccion para mostras el mensaje SEGUNDO
      lcdout $FE,1," SEGUNDO "
      pause 1000
      endif
      gosub inicio
      goto pulso
      end
         
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: LCD y Pulso para Mensaje
« Respuesta #5 en: 23 de Abril de 2006, 17:17:09 »
Hola:

Veamos, a me imagino a lo que te refieres con interrupcion es que quieres que muestre el Mensaje SEGUNDO si se preciono B7 antes de que termine el tiempo de B6, si es asi, prueba con esto:

Código: [Seleccionar]
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
DEFINE LCD_LINES 4
'------Oscilador----       
define OSC 4
'---------------
i   var word

inicio:
    lcdout $FE,1," PRINCIPAL "
    pause 100
             
pulso:
    if PORTB.6=0 then
        lcdout $FE,1," PRIMERO "   
        for i=0 to 999
            if PORTB.7=0 then
                goto segundo
            endif
            pause 1
        next i
    endif                   
segundo:         
    if PORTB.7=0 then         
        lcdout $FE,1," SEGUNDO "
        pause 1000
    endif
    gosub inicio
    goto pulso
    end

Si no es eso algo como lo que necesitas, pues aclarame mejor que es lo que necesitas.

Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Re: LCD y Pulso para Mensaje
« Respuesta #6 en: 23 de Abril de 2006, 22:06:24 »
bueno amigo lordlafebre muchas gracias por todo, esto es lo mas o menos queria hacer.
le ise unos areglo y me funciono como lo quiero

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
DEFINE LCD_LINES 4
'------Oscilador----       
define OSC 4
'---------------
i   var word

inicio:
    lcdout $FE,1," PRINCIPAL "
    pause 100
         
pulso:
    if PORTB.6=0 then
        lcdout $FE,1," PRIMERO "   
        for i=0 to 999
            if PORTB.7=0 then
                goto segundo
            endif
            pause 1
        next i
    endif                   
segundo:         
    if PORTB.7=0 then         
        lcdout $FE,1," SEGUNDO "
       for i=0 to 999
       if PORTB.6=0 then
       goto pulso
    endif
    pause 1
    next i
    endif
    gosub inicio
    goto pulso
    end

bueno amigo solo una cosa veo que aveces el mensaje PRINCIPAL me palpadea y quiero que se quede fijo que le agoo.

bye... :-/ :-/
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: LCD y Pulso para Mensaje
« Respuesta #7 en: 24 de Abril de 2006, 01:16:51 »
Hola:

Blackpic, dos cosas, la primera, el parpadeo se da cuando los pulsantres no son presionados, eso pasa porque el mensaje lo muestra muy rapido, ponle una pequeña pausa para que no parpadee, lo segundo es que si te fijas el codigo que puse primero, es el que te decia que lo pongas en tu programa... luego lo que hice fue ponerlo tal como te habia mencionado...
en fin... que bien que ya te marcho..  :mrgreen:

Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Re: LCD y Pulso para Mensaje
« Respuesta #8 en: 29 de Abril de 2006, 09:10:54 »
hola:
bueno a hora estoy dando lata con este proyecto que estoy intentando hacer...
quiero que con un pus-boton que este en cualquier pin como entrada me muestre los pulso que le doy en nomeros en una LCD..
lo que quiero hacer es, si presiono una ves en pus-boton me muestre el nomero UNO, y que despues de un tiempo me muestre el mensaje que tiene por ej. ( presiono el pus-boton me muestre el 1, despues este me muestra el mensaje UNO)...

mas tarde tratare de poner mi ej. que estoy desarrollando....
bye... :-/ :-/
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Re: LCD y Pulso para Mensaje
« Respuesta #9 en: 29 de Abril de 2006, 12:11:12 »
aki pongo el ej que puede hacer:

'-----Comando del LCD---
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
DEFINE LCD_LINES 4
'------Oscilador----       
define OSC 4
'---------------
i var byte
cont var byte
cont1 var byte

trisb=%11000000
portb=0

lcdout $FE,$C0,dec cont
if cont >= 1 then primero
if cont1 >= 2 then segundo

loop:
    if PORTb.6=0 then
        cont=cont+1
        if cont>= 1 then primero
        pause 100
    endif
    if PORTb.6=0 then
        cont=cont+1
        if cont >= 2 then Segundo
        pause 100
    endif
    goto loop
    end   
Primero:
if portb.7=0 then
    lcdout $fe,1,"primero"
    return
    endif
Segundo:
if portb.7=0 then
    lcdout $fe,1,"segundo"
    return
    endif
 
cuando presiono el pus-boton que esta en B6 me presente el "1" y cuando presiono B7 muestra "primero"
esto esta bien...
pero cuando por ej presiono el pus-boton dos veces para que muestre el "2" no lo hace, quiero que lo haga.. para que cuando le de a B7 me presente "segunndo"..

bye... :-/ :-/
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: LCD y Pulso para Mensaje
« Respuesta #10 en: 29 de Abril de 2006, 12:39:58 »
Hola:

bueno, mientras estaba haciendo el codigo, has posteado, en fin, te pongo el ejemplo que hice a ver si te sirve, sino me avisas, o puedes tomar una idea desde alli para adaptarle a tus necesidades:

Código: [Seleccionar]
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
DEFINE LCD_LINES 4

cont var byte
TRISA.0=1

cont=0
LCDOUT $FE, 1, #cont


inicio:
    if PORTA.0=0 then
        cont=cont+1
        if cont>10 then cont=0
        LCDOUT $FE, 1, #cont
        pause 100
    endif
    select case cont
        case 0
            LCDOUT $FE, $c0, "cero"
        case 1
            LCDOUT $FE, $c0, "uno"
        case 2
            LCDOUT $FE, $c0, "dos"
        case 3
            LCDOUT $FE, $c0, "tres"
        case 4
            LCDOUT $FE, $c0, "cuatro"
        case 5
            LCDOUT $FE, $c0, "cinco"
        case 6
            LCDOUT $FE, $c0, "seis"
        case 7
            LCDOUT $FE, $c0, "siete"
        case 8
            LCDOUT $FE, $c0, "ocho"
        case 9
            LCDOUT $FE, $c0, "nueve"
        case 10
            LCDOUT $FE, $c0, "diez"
    end select
    goto inicio
end


Ese ejemplo fue antes de que pongas tu codigo y fue lo que te entendi, es un contador 0-10, muestra el numero y el valor en letras:

ejemplo

6
Seis.

Suerte...!!!  :-/

Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Re: LCD y Pulso para Mensaje
« Respuesta #11 en: 29 de Abril de 2006, 21:28:58 »
amigo lordlafebre lo que quiero hacer es lo siguiente..
con B6 como estrada este solo me muestrara los numeros del 1 al 10 cuando presione,
y con B7 este lo quiero para poner el mensaje..

por ej si presiono B6 dos vesces tengo el nomero "2" en la lcd y cuando le doy a B7 este muestra el mensaje "dos"
y me de saparece el numero "2" quedandoce en la lcd en "dos"..

bye... :-/ :-/
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: LCD y Pulso para Mensaje
« Respuesta #12 en: 30 de Abril de 2006, 02:05:07 »
Hola:

BLACKPIC, si revisas el codigo que te puse, notaras que tienes todo lo que necesitas y solo tienes que hacer unos pequeños cambios, de hecho agregar unas dos lineas, por favor revisa un poco mas los codigos  :?, mira, esto debe ser lo que necesitas:

Código: [Seleccionar]
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
DEFINE LCD_LINES 4

cont var byte
TRISB.6=1
TRISB.7=1

cont=0
LCDOUT $FE, 1, #cont


inicio:
    if PORTB.6=0 then
        cont=cont+1
        if cont>10 then cont=0
        LCDOUT $FE, 1, #cont
        pause 100
    endif
    if PORTB.7=0 then
        select case cont
            case 0
                LCDOUT $FE, 1, "cero"
            case 1
                LCDOUT $FE, 1, "uno"
            case 2
                LCDOUT $FE, 1, "dos"
            case 3
                LCDOUT $FE, 1, "tres"
            case 4
                LCDOUT $FE, 1, "cuatro"
            case 5
                LCDOUT $FE, 1, "cinco"
            case 6         
                LCDOUT $FE, 1, "seis"
            case 7
                LCDOUT $FE, 1, "siete"
            case 8
                LCDOUT $FE, 1, "ocho"
            case 9
                LCDOUT $FE, 1, "nueve"
            case 10
                LCDOUT $FE, 1, "diez"
        end select
    endif
    goto inicio
end   


como veras lo unico que aumento es un IF.

Suerte...!!!

Desconectado BLACKPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 129
Re: LCD y Pulso para Mensaje
« Respuesta #13 en: 30 de Abril de 2006, 09:43:31 »
gracias amigo por todo pero es que estube de masiado ocupado y casi no tuve tiempo de ponerme hacer los arreglo.

pero a hora siguire adelante com mi proyecto y por lo que veo qe pronto lo subire al foro..
tambien te pido otro favor que libro me recomiendas para compralo ya que veo que en tus ej siempre usas sintaxi que no hay en el manual que esta en la pag de todopic...

ya vi que en este usaste case, #cont y select
 lo del cont lo tengo claro pero el # no...

bye... :-/ :-/
« Última modificación: 30 de Abril de 2006, 09:49:55 por BLACKPIC »
Saludo desde Rep.Dom ( BLACKPIC )..
La ciencia es el arte del ensayo y el error, su producto más importante es la razón...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: LCD y Pulso para Mensaje
« Respuesta #14 en: 30 de Abril de 2006, 12:10:50 »
Hola:

como cont es una variable que cambiara de valor cuando presiones los botones y necesitas visualizar ese valor, para eso te sirve el "#" que seguido del nombre de la variable lo que hace es mostrar el valor de la misma.

Ejemplo:

si cont le sume algunas veces y esta almacenando el valor de 10

LCDOUT $FE,1,#cont ---> esto lo que hace es mostrar en el LCD el valor de cont, osea el 10.   El "#" no solo sirve para la funcion LCDOUT, sino para cualquier otra en donde quieras enviar una variable, tambien la puedes utilizar con SSEROUT por ejemplo.

Con respecto a la sintaxis, no es nada que me este inventando yo, todos los comandos instrucciones y demas, lo puedes ver en la ayuda del MICROCODESTUDIO, incluso te viene con ejemplos de como utilizar cada funcion.

Lo del SELECT CASE es para reemplazar a multiples IF cuando preguntas el estado de una misma variable, literalmente seria: Seleccione el caso de cont, y luego en el caso que sea 1 haga tal accion, y asi para todos los valores que quieras, y lo cierras con END SELECT.


 

anything