TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: facupic en 10 de Junio de 2010, 16:22:44

Título: un boton, 3 funciones, 1 solo pin
Publicado por: facupic en 10 de Junio de 2010, 16:22:44
Hola amigos como estan? :lol: :o :) en un proyecto que estoy haciendo en un pic16f628a, tengo pocos pines para utilizar ya que son necesarias varios pines para otras cosas que luego preguntare. Al proyecto necesito incluir 3 boton con 2 o 3 diferentes funciones cada uno, el diagrama (trucho) seria asi:(para un boton):

inicia el pic
        |
  declaramos que portb.0 es un pulsador, y boton es una variable del tipo byte
        |
comprobamos si rb0 es =1(si lo es pasamos al siguiente paso)
        |
si no se preciona esta tecla nuevamente durante 5 segundos boton=1
        |
si se preciona antes de esos 5 segundos boton=2
        |
volvemos a comprobar


asi seria mas o menos el diagrama de flujo, ahora como podria implementarlo en basic? (utilizo el pic simulator ide)

la otra pregunta es:
Que me aconsejan usar para una pantalla para caracteres pequeños, un display 7 segmentos o un pequeño matriz de led de 3x3.

Título: Re: un boton, 3 funciones, 1 solo pin
Publicado por: Fer_TACA en 10 de Junio de 2010, 17:26:10
Pues para lo que quieres realizar, ya lo has explicado bien en tu diagrama de flujo, solamnete tienes que escribirlo en lenguaje basic.
Pero al principio con PSI deberias e añadirle las palabras de configuracion, elegir el tipo de micro y la velocidad del cristal.
A partir de ahi, si sabes lenguaje basic solo te queda codificarlo:
definir los puerto como entradas o salida
crear la s variables
testear los pines de entrada
poner las salidas y variables de acuerdo a las condiciones de decision.

Pero escribelo tu y si no te funciona ya se te ira ayudando.
En la ayuda te vienen los comando que se pueden emplearo en la web del PSI puedes verlo tambien.

Fermin
Título: Re: un boton, 3 funciones, 1 solo pin
Publicado por: NORTEÑO en 14 de Junio de 2010, 14:38:09

inicia el pic
        |
  declaramos que portb.0 es un pulsador, y boton es una variable del tipo byte
        |
comprobamos si rb0 es =1(si lo es pasamos al siguiente paso)
        |
si no se preciona esta tecla nuevamente durante 5 segundos boton=1
        |
si se preciona antes de esos 5 segundos boton=2
        |
volvemos a comprobar


asi seria mas o menos el diagrama de flujo, ahora como podria implementarlo en basic? (utilizo el pic simulator ide)





HOLA:
ANIMO ANIMO

QUE! como va ese codigo

Creo que mejor seria una pantallita LCD
OK

UN SALUDO.

Título: Re: un boton, 3 funciones, 1 solo pin
Publicado por: kamisama en 16 de Junio de 2010, 01:23:58
Hola, no tengo el PSI pero bueno a ver... salvando las cosas que hay que declarar (que cortas y pegas de cualquier lado) y haciendo la ACLARACION de que hay varias formas de lograr lo unico complicado que veo (el chequeo del boton y el delay)... voy a exponer la mas burda porque es mas simple de entender en un principio, luego cuando ya domines el tema de interrpuciones o las funciones del propio MCU o del PSI, vas  a decir... uhhh que codigo feo, es una tonteria... pero bueno... por ahora solo como idea seria algo asi.


gosub configurarpic
principal:
      output portb.0
      if portb.0=1 then
               do
               until portb.0=0
               for t=0 to 200
                     if portb.0=1 then
                              gosub hacer_algo
                              do
                              until portb.0=0
                     endif
                     delayms 25
               next t
      else
      endif
goto principal


inicia el pic
        |
  declaramos que portb.0 es un pulsador, y boton es una variable del tipo byte
        |
comprobamos si rb0 es =1(si lo es pasamos al siguiente paso)
        |
si no se preciona esta tecla nuevamente durante 5 segundos boton=1
        |
si se preciona antes de esos 5 segundos boton=2
        |
volvemos a comprobar
Título: Re: un boton, 3 funciones, 1 solo pin
Publicado por: wolfman77 en 16 de Junio de 2010, 16:07:20
Intente hacer lo que pedias pero me salio una cosa rara  :z)
Lo que hace es pasar al siguiente comando, pero se toma una pausa de X tiempo (lo setee en 1 seg en lugar de 5), o sea, se ejecuta la funcion 1, despues del tiempo elejido recien se puede ejecutar el siguiente comando a traves del pulsador, y asi hasta empezar de nuevo, fijate si de esto que hice algo te sirve, al menos pasar de una salida a la otra, la entrada es RB0 y las salidas son RB1, RB2 y RB3
Lo hice bajo PSI, en un 16F876A y a 4Mhz

Código: [Seleccionar]
AllDigital
TRISB = %00000001
PORTB = %00000000

Dim boton As Byte
boton = 0

inicio:
If PORTB.0 = 1 Then Goto botonmas1
Goto inicio

botonmas1:
boton = boton + 1
If boton = 1 Then Goto comando1
If boton = 2 Then Goto comando2
If boton = 3 Then Goto comando3
If boton = 4 Then boton = 0
Goto inicio

comando1:
PORTB = %00000010
WaitMs 1000
Goto inicio

comando2:
PORTB = %00000100
WaitMs 1000
Goto inicio

comando3:
PORTB = %00001000
WaitMs 1000
Goto inicio

End  

Algo mas simplificado seria asi:

Código: [Seleccionar]
AllDigital
TRISB = %00000001  'PortB.0 como entrada, el resto como salidas
PORTB = %00000000
Dim boton As Byte
boton = 0

inicio:
If PORTB.0 = 1 Then Goto botonmas1

Goto inicio

botonmas1:
boton = boton + 1
If boton = 4 Then boton = 1
If boton = 1 Then PORTB = %00000010
If boton = 2 Then PORTB = %00000100
If boton = 3 Then PORTB = %00001000
WaitMs 1000
Goto inicio

End

Exitos!