Autor Tema: demostracion del comando BUTTON  (Leído 8292 veces)

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

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
demostracion del comando BUTTON
« en: 23 de Noviembre de 2002, 03:43:00 »
Demuestra el empleo de multiples comandos BUTTON  .
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
RE: demostracion del comando BUTTON
« Respuesta #1 en: 18 de Diciembre de 2004, 01:08:00 »
Hola amigo norverto, estan muy bueno los ejemplos, pero no obstante, tengo unas dudas a ver si algunos de los compañeros del foro me la pueden aclarar.
En el comando button aparesen unos campos llamados DELAY y RATE estos dos no me quedan claro cual es su funcion le agradeceria a los amigos del foro si me pueden aclarar el significado de estos y si me pueden dar un ejemplo explicando lo que hacen estos (DELAY y RATE), ya que aunque entiendo los demas campos del comando button estos dos no los logro entender y en los ejemplos que coloco gentilmente norbeto no los explican. Enfurruñado

De antemano les agradeceria por la ayuda.

Nota:el comando button es el que viene en el pic basic pro compiler.

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: demostracion del comando BUTTON
« Respuesta #2 en: 18 de Diciembre de 2004, 11:14:00 »
Que onda Ralf2,
En este mismo sitio hay un manual en CASTELANO para aprender a usar PBPRO, te recomiendo que te des una vulta por ahi:
http://www.todopic.com.ar/pbp_sp.html#button

El comando button es un comando con el siguiente formato:

BUTTON  Pin , Down , Delay , Rate , Bvar , Action , Etiqueta

..............donde Pin es el pin donde esta conectado el boton siendo una constante , variable o pin de puerto  que aloje el valor de 0-15 . A parte de esto, tiene anti rebote y autorepeticion que son opcionales, el antirebote te ayuda a que si oprimes una sola ves el boton, y este emita 2 o 3 o mas pulsos de entrada en este pin, es como un FILTRO implementado en software que espera a que el estado haya cambiado nuevamente a su posicion normal antes de continuar con la ejecucion.

El estado DOWN, es para saber que estado se quiere cuando se oprima el boton(o mejor dicho el esperado), puede ser 0 o 1
El Estado DELAY es el tiempo antes de que comienze la autorepeticion. va de 0 a 255 donde el minimo(0)  no permite ANTI REBOTE(osease si hay rebotes) ni autorepeticion y el maximo(255) no permite Rebotes ni autorepeticion.

El estado RATE es el valor de AUTOREPETICION
El estado BVAR es la variable que llevara el conteo de las repeticiones y demoras. esta debe iniciarse en 0 y es exclusiva para el comando...(no debe usarse para otras cosas)
El estado Action es el estado del boton sin oprimirse(opuesto al de oprimirse en DOWN)
El estado Etiqueta  es donde comienza la ejecucion si es CIERTA ACTION


Una cosa mas, los ejemplos expuestos por el pana Todopic son eejmplos para el compilador proton sin embargo el comando funciona igual que el compilador pbpro.
Una breve explicacion de parte del codigo:

Chk1:   Delayms 25
      Button SW1,0,40,5,BUF1,0,Chk2   " Check Button 1 (Skip to 2 if Not Pressed)
      Toggle LED1   

Chk1, es un label encerrando la rutina del comando Button, un delay de 25ms, y cheka el boton definido por la variable SW1(el pin del puerto definico con la variable SW1).
CERO es el estado que se BUSCA cuando se oprime el boton, 40 es el dalay para antirebote y antirepeticion. 5 es el numero de CICLOS entre las autorepeticiones . BUF1 es la variable que almacena o con la cual trabaja dicho comando (inicializarse en cero...etc) . CERO es el estado en que debe de estar el pin sin oprimirse. Chk2 es la etiqueta a donde va en caso de que sea cierta ACTION o en este caso sea cero(permanesca en reposo o no haya sucedido el boton), funciona como un goto .
En otras palabras e slo siguiente:
Chk1:   Delayms 25            ´esperamos un poco
      Button SW1,0,40,5,BUF1,0,Chk2   " si SW1=0 (supongo que estan activadas las pullups y se esta llevando a tierra dicho boton) hace un cmabio de etsado en LED(lo enciende o lo apaga.. y asi sucesivamente), pero si esta en UNO logico (no se oprimio boton y no se llevo a tierra) ckeya Action o TARGETSATE y si es cero=no pressed(no oprimido dicho boton) como no es 1 logico(no SALE  o brinca el Toggle Led1 y lo lleva a la etiqueta CHK2... , dentro de todo esto BUF1 alamcena los conteos y demas.. delay 40 de antirebote y antirepeticiones y 5 ciclos entre cada repticion
      Toggle LED1   

Espero que haya quedado mas claro. Toda esta informacion y mejor explicada viene en el manual de  cada compilador

Salu2 pana

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
RE: demostracion del comando BUTTON
« Respuesta #3 en: 19 de Diciembre de 2004, 14:43:00 »
Hola amigo lager, gracias por tu respuesta me a aclarado algunas cosas, no obstante, todavia tengo mis dudas te comento: el valor que coloco en autorepeticion ,es las veces que la entrada cambiara de estado, es decir, si coloco 3 por ejemplo cuando pulse el boton colocado a pin como en el ejemplo que me describes esto equivaldria a que soltara y presionara tres veces el boton? y en cuanto al rate, este define como una especie de pausa entre cada autorepeticion? . Me explico
si por ejemplo coloco autorepeticion 3 y en rate 4 entonces el pin cambiara de estado cuando se active la autorepeticion 3 veces y ese cambio entre cada repeticion estara retardado 4 (no se que ???). por favor te agradeceria que me explicaras mejor estos dos campos de la instruccion (autorepeticion y rate).
En cuanto al manual te digo que ya lo he leido y de hay mi duda, los ejemplos que coloca el amigo todopic, ya me imajinaba que estaban en pbasic plus, pero tal como dices tambien sirven para el pbasic pro.
Saludos de valencia venezuela!!!

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: demostracion del comando BUTTON
« Respuesta #4 en: 19 de Diciembre de 2004, 16:14:00 »
Que onda pana,
mira el RATE, es el numero de CICLOS entre las autorepeticiones, va el mismo ejemplo:
Chk1:   Delayms 25
   Button SW1,0,40,5,BUF1,0,Chk2   
   Toggle LED1   

Explicacion: En teoria eL numero 40 es el DELAY que indica CUANTO TIEMPO TIENE que estar oprimido el boton SW1(el tiempo  esta comprendido entre la etiqueta inicial y el comando button, justo entre ambos esta un retardo de 25 msl) antes de que la AUTOREPETICION inicie. esto es 40*25(aprox=1000 ms, es decir, 1 segundo) es decir Sí TIENE AUTOREPETICION ....,en resumen va a estar auto repitiendose SI y SOLO SI se oprime mas de 1 segundo el boton SW1(y obviamente se mantiene oprimido el boton... para que siga repitiendose dicha rutina),es decir, en estado 0 logico.Es como los botones de un teclado de pc,si se teclea uno boton, se hace un caracter.. si se deja oprimido un tiempo determinado(por configuracion de teclado en el menu panel de control), este empieza a repetir el caracter varias veces RAPIDAMENTE(o lentamente segun el RATE o delay de repeticion.... este seria el RATE en el coamndo BUTTON).
AMBOS(delay, y Rate) son retardos, uno(el Dalay) es la espera para que suceda dicho acto(toggle Led) Cada RATE determinado(RATE). Explicando como interactuan ambos:. como es 5(Rate), entonces seria para la rutina desde la etiqueta hasta el comando button, 5*25ms(que es el delay intermedio de esta rutina por el numero de RATES o ciclos )=125ms,por tanto CADA repeticion durara 125ms.. donde podemos apreciar CADA segundo lo siguiente :1segundo/125= aprox.8 TOGGLES, es decir, encendidos  y apagados del led INTERCALADOS por cada segundo por tanto VISUALMENTE deberemos de notar lo siguiente:si desde un principio esta encendido(en espera de que pase el segundo y haga las repeticiones con el daly formado por el RATE y la rutina) Primeramente se apagara(toggle led) ,125ms despues encendera, 125ms despues volvera a apagar.. asi sucesivamente y siempre y cuando no soltemos el boton .
Por lo tanto lo de las repeticiones es un ADD que nos da un  LOOP a la velocidad preestablecida por los ciclos y el formato usado en la rutina que envuelve dicho comando
Todo esto es CLARAMENTE ENTENDIBLE si se lleva acabo el ejemplo.

No olvidar las resitencias de CARGA en el portc que no tiene pullups.. con una resistencia de 330 ohms en linea(del pin al led) es mas que suficiente.

RESUMEN FINAL:
el comando button para proton y pbpro hace lo siguiente:
1) hace la funcion de un if then... para chekeo de un pin(con 2 posbiles soluciones a esta, salta a el label definido en el comando o ejecuta la accion siguiente en caso contrario)
2) tiene el ADD o el PLUS de hacer el siguiente ACTO a la velocidad
determinada por la razon de Rate y la rutina de ciclo cerrado button,
en caso de mantener ese pin en el estado DOWNSTATE o DOWN(para pbpro) en el tiempo determinado por DELAY
3) En conjunto eliminar Rebotes(muy comunes en los pushbutton)

Espero y ahora alla quedado mas claro.
Repito EXPERIMENTAR para entender REALMENTE que hace cada comando en CUALQUIER COMPILADOR, asi como sus limitantes.Muchas de las veces resulta mas facil y practico usar solo un if..then para chekeo de pines.. ademas de tener el control preciso de tiempos...

Salu2 pana

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2062
RE: demostracion del comando BUTTON
« Respuesta #5 en: 21 de Diciembre de 2004, 09:12:00 »
Eso era presisamente lo que queria saber amigo lager, muchiiiisimas gracias por tu excelente explicacion ahora si me has sacado de la duda.
No dudare en buscarte si se me presenta alguna otra duda y si te puedo ayudar en algo mas adelante cuenta conmigo. Apenas estoy empezando a programar con estos lenguajes y ya el asm lo conozco bien (mas o menos).
Decidi empezar con el pic basic pro compiler porque es el que tengo a la mano, segun lo que he leido en el foro el pic basic plus (proton) es mejor que el pic basic pro, pero por lo que he visto, muchas de las instrucciones son muy similares, salvo una que otra que posee el pic basic plus y que no tiene el pro, tambien el editor que es mejor el del plus...
Sabes como puedo hacer para simular paso a paso un programa hecho en pic basic pro, usando el mplab o el proteus, digo para ver como se estan ejecutando las instrucciones? me podrias orientar en este sentido?
De antemano muchas gracias por tu ayuda!!!Giño

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: demostracion del comando BUTTON
« Respuesta #6 en: 21 de Diciembre de 2004, 10:27:00 »
El comando Button en muy util para eliminar rebotes y calcular repeticiones, pero yo quisiera saber si existe alguna manera de que funcione igualmente con una variable en vez de usar un pin.
Me explico:

Yo quiero extender el uso del comando button para sensar matrices de switchs (teclados). Supongamos el caso más sencillo, 2 switches conectados a un unico pin.
Si los SW estuvieran conectados a 2 pines diferentes se usarían alias para los 2 pines, como Pin1 y Pin2 (el caso más común).
Pero en este caso la idea sería usar estas mismas variables para usar 2 veces el comando Button y sensar el mismo pin como si fueran diferentes pines.

Algoritmo (todavía no conozco bien la sintaxis de protón):

*2 SW en 2 pines (Pin1, Pin2)

BUTTON Pin1 , 1 , Delay1 , Rate1 , Bvar1 , Action1 , Encender
BUTTON Pin2 , 1 , Delay2 , Rate2 , Bvar2 , Action2 , Apagar

*2 SW en un mismo pin (cambia la selección de columna en el teclado)
" Pin1, Pin2 son variables tipo bit

PORTC = %00000001  "selecciono columna.
Pin1 = PORTB.1

BUTTON Pin1 , 1 , Delay1 , Rate1 , Bvar1 , Action1 , Encender

PORTC = %00000010  "selecciono columna.
Pin2 = PORTB.1

BUTTON Pin2 , 1 , Delay2 , Rate2 , Bvar2 , Action2 , Apagar

Alguien probó haciendo esto? Espero que entiendan la idea... Porque si no funciona voy a tener que hacer todo por software y lo estoy viendo complicado para depurarlo.

Salu2.


Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: demostracion del comando BUTTON
« Respuesta #7 en: 21 de Diciembre de 2004, 11:28:00 »
Pana colores2,
No entendi con precision lo que deseas  hacer (que novedad que no entienda loco ).. en tu ejemplo aun no has puesto las etiquetas, en el caso que no uses autorepeticion no es necesario la etiqueta de INICIO(donde va a estar repitiendose), normalmente el comando button esta diseñado para usarse dentro de bucles, asi cada ves se esta chekando dicho(s) botones...
Aun asi sigo viendo mas optimo y rapido el uso de IF THEN ELSE(de 1 a 2 ciclos si es verdadero) en chekeo de botones.
Si tu problema son los rebotes nada mas sencillo que un If then(Btfsc) DESPUES de haber pasado el primer if then para chekar que haya cambiado el estado.. ojo que si el boton permanece oprimido(osea no estas usando un pushbutton o lo usas pero lo dejas oprimido) esto sale sobrando y hasta que cambies o dejes de oprimir dicho boton aceptara el cambio de estado en el pin.. Normalmente (dependiendo del tipo de pushbutton) el tiempo de corto va de 1 a 20 ms(con un micro a 20 mhz es evidente que habra problemas de rebotes)
para un mismo pin puedes usar los alias que quieras , el PIN que estipulas en tu formato en proton  es un PORT.PIN, ya que tienes que indicar puerto y pin a diferencia de pbpro que estan por defaul Numerados del 0 al 15; este puede ser un PORT.pin, una variable o una constante, ojo que si usas variable esta debe de adquirir los valores permitidos/port.pin, o valor de 0-15, al igual que en pbpro).
En resumen si se puede implementar lo que requieres, pero  habria mucha perdida de tiempo en los bucles y falta de precision por lo mismo.Para que te des una idea de lo que te trato de explicar nada mas sencillo que veas lo que abarca el comando button CADA ves que se ejecuta:
        Movlw PORTB  <-- a w lo que tenga portb
   Movwf GEN      <--- lo guarda (w) en variable del systema Gen
   Movlw 16         <---- w=16
   Movwf GENH     <----genh=w
   Clrf PP6             <---- limpia el registro(variable del sistema) PP6
   Movlw 40           <---- mueve 40 (DELAY) a w
   Movwf PP5         <------la guarda en pp5=40
   Movlw 5              <------w=5(RATE)
   Movwf PP5H        <------pp5h=5, pp5h es el highbyte del word pp5
   Clrf PP6H              <-----limpia pp6H
   Movfw BUF1          <------w=Buf1
   F@Call but@n         <------llamado
   Movwf BUF1              <----BUF1=w
   set@page CHK2       <--- seteo de pagina
   Btfsc STATUS,0        <----Si.. tnonces
   Goto CHK2             <.--- va a la etiqueta CHk2

....,sin delay y sin accion(toggle led)..etc

Si no es esto lo que preguntabas(lo mas seguro) por favor podrias explicar nuevamente lo que deseas?(disculpa a este pana que es muy lento)

Un abrazo pana

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: demostracion del comando BUTTON
« Respuesta #8 en: 21 de Diciembre de 2004, 18:19:00 »
Creo que no se entendio bien...
Delay1 , Rate1 , Bvar1 , Action1 y Encender son supuestas variables con suspuestas etiquetas, es sólo para dar un ejemplo...

La idea principal está en estas líneas:
Pin1 = PORTB.1
Pin2 = PORTB.1

O sea, la idea es usar el mismo pin (PORTB.1) con diferentes asignaciones para BUTTON o lo que es lo mismo usar diferentes variables como si fuera el mismo pin.
Esto se me ocurrió tratando de imaginarme como sería controlar un teclado matricial con BUTTON.

Espero que se haya entendido y si no vuelvo a explicar...
Salu2.

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: demostracion del comando BUTTON
« Respuesta #9 en: 21 de Diciembre de 2004, 18:40:00 »
Perfecto pana, pues si puedes nombrar como te comente un mismo pin con 2 alias
y puedes sensar estos dos alias,pero aun no entiendo para que sensar dos alias que son el mismo pin, si puedes hacerlo solo una ves:
Pin1 = PORTB.1
Pin2 = PORTB.1
seria como igualar por separado dos veces:
pin1=1
pin2=1 , si pin1=portb.0 igual que pin2 no es necesario poner un uno logico en cada uno.
O en que forma lo usarias?
Salu2 pana

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
RE: demostracion del comando BUTTON
« Respuesta #10 en: 21 de Diciembre de 2004, 20:55:00 »
bueno saludos amigos foro la verdad para aprovechar y consultar pues me llamo la atencion eso de que el comando buttom elimina rebotes pues lo que busco justo ahora y haber si obtengo ayuda miren:
tengo dos servomotores uno que me ayuda abrir y cerrar  las alas supongamos,y otro que me hace subir y bajar una estructura ,hasta alli hice con el pic una secuencia y ok
pero el problema surgio cuando le puse switchs mecanicos a los extremos(producen rebotes),para el primer motor un switch que se activa en la maxima abertura y otro cuando esta cerrando las alas 9osea como sensores de llegada )
y para el segundo motor igual dos switch en los extremos uno que me detecta la llegada de la segunda estructura arriba y el otro que me detecta la llegada abajo bueno hasta alli esta facil pero la cosa es al comienzo todas las salidas para el motor esten en cero  y luego de 1 seg el servo1 que abra las alas y el servo 2 que suba que funcionen en simultaneo los dos servos ,,y que al llegar por ejemplo primero el servo 1 se activa el switch que detecta su llegada(abertura maxima) y para su movimiento ,que espere la llegada del servo 2(altura maxima) y que recien cuando los dos esten detenidos uno servo1 abierto y servo 2 arriba esten en esa posicion en un lapso de por ejemplo 3 seg y que ahora se activen los dos de nuevo en simultaneo [pero para cerrarse sv1 y bajar sv2 y asi hacer un bucle bueno el programa es el sgte pero lo simule en el proteus y nada ,bueno siempre q lo simulo alli me sale pero ahora no miren y porfavor si me orientan para ponerle el buttom que la verdad recien estoy masticando la idea explicada por el Mister Lager
TRISB=%11110000
sube var portb.0
baja var portb.1
abre var portb.2
cierra var portb.3
det_sub var portb.4
det_baj var portb.5
det_abr var portb.6
det_cer var portb.7
low sube
low baja
low abre
low cierra
pause 1000
juego2:
high sube
low baja
high abre
low cierra
if det_sub=0 then
low sube
endif
if det_baj=0 then
low baja
endif
if (sube=0) and (abre=0) then
low sube
low baja
low abre
low cierra
pause 3000
low sube
high baja
low abre
high cierra
if det_baj=0 then
low baja
endif
if det_cer=0 then
low cierra
endif
if (baja=0) and (cierra=0) then
low sube
low baja
low abre
low cierra
pause 3000
goto juego2
endif
endif
la verdad disculpen si esta demasiado facil o si la hago demasiado larga pero le aceptare gustopso susu sugerencias y la verdad aca en este programa no creo haber eliminado el efecto rebote y no me funciono para mal no se si mi algoritmo esta bien estructurado bueno dilapidemme sere valiente y aceptare toda clase de criticasLlorando

Desconectado Colores

  • Moderadores
  • PIC16
  • *****
  • Mensajes: 232
RE: demostracion del comando BUTTON
« Respuesta #11 en: 22 de Diciembre de 2004, 10:03:00 »
Escrito originalmente por Lager.
Perfecto pana, pues si puedes nombrar como te comente un mismo pin con 2 alias
y puedes sensar estos dos alias,pero aun no entiendo para que sensar dos alias que son el mismo pin, si puedes hacerlo solo una ves:
Pin1 = PORTB.1
Pin2 = PORTB.1
seria como igualar por separado dos veces:
pin1=1
pin2=1 , si pin1=portb.0 igual que pin2 no es necesario poner un uno logico en cada uno.
O en que forma lo usarias?
Salu2 pana


Epa... te agarré! No estás mirando bien!
Se sensa 2 veces porque al ser un teclado matricial el pin puede tener 2 valores diferentes según que salida selecciono en el port C.
En el primer post dice claramente:

PORTC = %00000001 "selecciono columna.
Acá sigue lo del comando Button....
PORTC = %00000010 "selecciono columna
Acá vuelve a sensar con Button, pero es el mismo pin con diferente combinación de Port C!!!
Si mirás bien es el mismo ejemplo que el que publique en otro post como "Problema de tiempo..." te acordás? Bueno, para que te des una idea el circuito en este caso sería el mismo.

Ahora supongo que está mas claro, de cualquier manera si no se entendió vamos de nuevo.

Salu2 y gracias por tu tiempo!

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: demostracion del comando BUTTON
« Respuesta #12 en: 22 de Diciembre de 2004, 10:59:00 »
Pana colores2, parece que el que no se explico bien fui yo loco (que novedad ...jajajaja) loco
Sigue siendo el mismo pin(portb.x) con dos alias que aunsigo sin ver la necesidad, claro que puede tener dos valores el pin(0 y 1) lo unico que cambia,respecto a lo que comentas,es la condicion de alimentacion de cada pin a chekar(portc cambia) pero lo que sugieres en que te ayuda censar DOS veces el mismo puerto de esa forma?(se que es lo que quieres hacer en tu programa, como para ver si esta mal el swith en x,y posicion o algo asi). si lo puedes hacer automatiamente como una rutina repeat until portc=%10000000(solo un ejemplo yo lo implementaria con un for), es decir hacer el chekeo de todos los puertos y cambiar (rotar,incrmentar,etc) hasta  la ultima linea de portc que alimente dicha matriz. vaya no veo la necesidad del uso de  alias o del comando button (a lo mejor para referenciadirecta en calidad de comentarios y de guia,.. pero el codigo no esta tan largo como para que los requiera) o si vas a hacer operaciones de senos o  cosenos  y atraves de varios procesos que requieran que guardes dicha variabe, y aun asi creo que se podria hacer de formas mas optimas.
La unica ganancia que tendrias al usar el comando button que no es mas que un if con autorepeticion en caso de un estado deseado en Rate tiempo...., seria que te quitaria los rebotes, algo que puedes implementar con otro if.
Ahora que si lo que quieres hacer es un Teclado y usarlo como tal bien podrias usar (y de forma sencilla) el comando  INKEY que es para keypads que te soporta para 12 y 16 botones como estandar y con modificaciones  de otros tipos(mas o menos botones). Rebotado

En fin, ahora si que no se como vayas a usar tu proyecto pana, pense que el chekeo via columna y lineas era para ver donde habia corto(o algo parecido) y notificarlo por pc.. para eso tu rutina y un bucle que varie portc(que alimenta con otro pin y CAMBIA la condicion del estado del portb.x ) para ver en que coordenadas x,y esta el problema de corto.

Un gran abrazo pana

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: demostracion del comando BUTTON
« Respuesta #13 en: 22 de Diciembre de 2004, 12:56:00 »
Aqui te pongo un ejemplo pana de como quedaria revizando y dandote las
coordenadas del corto, es 100% funcional y todavia se puede optimizar.
claro que si quieres usar el comando button en lugar de los IF"s solo
tienes que cambiarlos.

loop:

if PORTB > 0 then
    HSEROUT ["°°°°°°°°°°°°°°°°°",13]
    HSEROUT ["CORTO EN:",13]
   gosub sector1
endif
...
...
sector1:
DEF=1
CLEAR PORTC
FOR VAC=1 TO 5
PORTC =DEF
"......................lOS DEMAS IF..THEN
.......................
if PORTB.7=1 then
   HSEROUT ["COLUMNA 8,LINEA ",#VAC,13]
endif
HSEROUT [#VAC,"................",13]
DEF=DEF*2
CLEAR PORTC
NEXT
CLEAR PORTC
PORTC = %00011111
RETURN

Pana electronando: dejame revizar tu codigo, aunque podrias optimizar lo de los high y low:
no se si tengas el comando set por que el low, tarda mucho "ya que setea banco,entra al registro tris para ponerlo como salidas o entradas , sale del banco y setea el bit.... con el set solo lo setea(si no tuvieras definido el tris tendrias que usar el high o low a fuerzas.. pero como lo definiste te conviene mas usar el set y clear(bsf y clrf en asm) o un comando equivalente, en su defecto asm(@bsf abajo.....clrf sube)

Salu2 panas

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: demostracion del comando BUTTON
« Respuesta #14 en: 22 de Diciembre de 2004, 18:43:00 »
Hola :

Al margen de todo lo discutido en este apartado ,el comando BUTTON con todos sus accesorios ,delay ,pin,etc no es muy confiable :las veces que lo he utilizado es muyyyy dependiente y filoso de las declaraciones del debounce (antirebote) asi que con cuidado ...a veces es mas efectivo sensar el estado del pin y ejecutar la rutina los micro switches o teclados de membrana suelen producir contactos NO perfectos a veces con algunas irregularidades y hay que darle un delay largo para no ser interpretado como un rebote con lo que conlleva a una ejecucion imprecisa .
No se hagan mucho problema ,la instruccion es muy completa y casi perfecta para sensar un mecanismo bastante imperfecto (boton),por eso si se tropiezan con este inconveniente reemplazen por sensado de estado .....

Saludos

khasistos


 

anything