Autor Tema: Saber el estado de un pulsador  (Leído 3668 veces)

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

Desconectado Luis_Chogi

  • PIC10
  • *
  • Mensajes: 44
Saber el estado de un pulsador
« en: 20 de Noviembre de 2006, 22:41:01 »
Hola que tal foro....

 Estoy tratando de hacer una pequeña aplicacion para poder saber entre el estado de un pulsador pero no me sale....


  Explico...... Tengo 2 pulsadores conectados a RA1 y RA2 de un pic 16F88... Los pines del pic estan a Vcc a travez de una resistencia asi que al momento de presionar el push en el pin hay un cero..... Lo que quiero es en una LCD mostrar que pulsador esta presionado.

 Aqui el codigo:

 
Código: CSS
  1. while(input(PIN_A2) ||  input(PIN_A1));         //Espero a que se pulse push1 o push2
  2.        {}
  3.  
  4.           if(!input(PIN_A1) ){          //si se pulsa A1
  5.                 do{                             //SI -> eliminar...
  6.             }while(!input(PIN_A1));             //...rebotes del boton
  7.  
  8.                 lcd_putc("\f PUSH1");
  9.                 }
  10.  
  11.  
  12.            if(!input(PIN_A2) ){         //si se pulsa A2
  13.                do{                                                      //SI -> eliminar...
  14.                    }while(!input(PIN_A2));              //...rebotes del boton
  15.                 lcd_putc("\f PUSH2");
  16.                }

   No me jala el programita pero la verdad es solo en la parte de:

   
Código: CSS
  1. while(input(PIN_A2) ||  input(PIN_A1));         //Espero a que se pulse push1 o push2
  2.        {}

  Espero me puedan echar una mano...... De antemano Gracias. 8)

Desconectado IIIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 158
Re: Saber el estado de un pulsador
« Respuesta #1 en: 21 de Noviembre de 2006, 00:16:09 »
Pues la verdad no creo que te este fallando en la linea que mencionas, de hecho creo que haces demaciadas cosas para evitar los rebotes, mejor intenta con lo siguiente.

(Pseudocodigo)

int E_pinA1 = 1;
int E_pinA2 = 1; //declarar 2 variables para almacenar el valor de los pines

while(E_pinA1 || E_pinA2)
       {
         E_pinA1 = input(PIN_A1);
         E_pinA2 = input(PIN_A2);
        };

if(E_pinA1) lcd_putc("\f PUSH1");
if(E_pinA2) lcd_putc("\f PUSH2");

delay(tiempo necesario para descartar rebotes);


Espero te sirva



"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."

Albert Einstein

Desconectado Arlequin

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 340
Re: Saber el estado de un pulsador
« Respuesta #2 en: 21 de Noviembre de 2006, 00:41:06 »
Si no veo mal, tenés que abrir y cerrar el while adecuadamente:

while(input(PIN_A2) ||  input(PIN_A1))
{
etc etc etc
};

saludos.   
¡¡Ex - c3poa!!            ---       Collapsing New People

Desconectado O R E

  • PIC10
  • *
  • Mensajes: 1
Re: Saber el estado de un pulsador
« Respuesta #3 en: 21 de Noviembre de 2006, 16:03:18 »
Hola,

Antes que nada comprueba o parchea aquí tu pedazo de código de lo siguiente:

-Zona de ficheros de cabecera de las librerias (Directivas)
-Zona de declaración de puertos.

Puede ser que el problema lo tengas ahí.

Un saludo,

Desconectado Luis_Chogi

  • PIC10
  • *
  • Mensajes: 44
Re: Saber el estado de un pulsador
« Respuesta #4 en: 22 de Noviembre de 2006, 01:12:17 »
Bueno pues les comento que mi problema sigue igual.... Aqui la declaracion de funciones y configuracion de los puertos:

Código: CSS
  1. #include <16f88.h>                              //pic a utilizar
  2. #device adc=8
  3. #fuses EC_IO,NOWDT,NOPROTECT,PUT,NOLVP,INTRC_IO         //Fusibles
  4. #use delay (clock=4000000)                      //Fosc=4Mhz
  5. #use standard_io(B)
  6. #use standard_io(A)
  7. #define use_portb_lcd TRUE                               //definir portb lcd
  8. #include<lcd.c>                              //libreria manejo lcd
  9.  
  10. //******* y la configuracion de los puertos **********
  11.  
  12.  
  13. set_tris_a(0XFF);                               //porta como entradas
  14.  
  15.  
  16.  lcd_init();
  17.  
  18. while(input(PIN_A2) ||  input(PIN_A1));         //Espero a que se pulse push1 o push2  
  19.      {}           if(!input(PIN_A1) ){          //si se pulsa A1          
  20.      do{                                //SI -> eliminar...    
  21.         }while(!input(PIN_A1));         //...rebotes del boton
  22.            lcd_putc("\f PUSH1");               
  23.  }             if(!input(PIN_A2) ){             //si se pulsa A2
  24.               do{                       //SI -> eliminar...
  25.                    }while(!input(PIN_A2));              //...rebotes del boton
  26.                lcd_putc("\f PUSH2");  
  27.              }


 Ya probe lo que me mandaron y sigui igual o peor :S

Desconectado 5GTT

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 915
Re: Saber el estado de un pulsador
« Respuesta #5 en: 22 de Noviembre de 2006, 01:36:42 »
Si no veo mal, tenés que abrir y cerrar el while adecuadamente:

while(input(PIN_A2) ||  input(PIN_A1))
{
etc etc etc
};

saludos.   

Haz caso a Arlequin

Tutoriales y proyectos de electrónica

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Saber el estado de un pulsador
« Respuesta #6 en: 22 de Noviembre de 2006, 18:01:04 »
Hola que tal Luis_Chogi??!!

Voy ha ver que tal te va este trozo de codigo que te pongo. Prueba a ver que tal te va, yo no le he probado ya que toy en la casa de mi novia y no lo puedo compilar si da fallo pero yo creo que esta bien:

Código: C
  1. #include <16f88.h>                              //pic a utilizar#device adc=8
  2. #fuses EC_IO,NOWDT,NOPROTECT,PUT,NOLVP,INTRC_IO         //Fusibles
  3. #use delay (clock=4000000)                      //Fosc=4Mhz
  4. #use standard_io(B)
  5. #use standard_io(A)
  6. #define use_portb_lcd TRUE                               //definir portb lcd
  7. #include<lcd.c>                         //libreria manejo lcd
  8. #byte port_a=5 // PUERTO A COMO ENTRADAS
  9. #byte port_b=6 //PUERTO B COMO SALIDAS
  10.  
  11. lcd_init();
  12. void main ()
  13.    {   
  14.     while(1)
  15.     {                      
  16.     if(input(PIN_A1))
  17.          {
  18.           while(input(PIN_A1));
  19.             {
  20.             lcd_putc("\f PUSH1");
  21.             }
  22.          }
  23.  
  24.     if(input(PIN_A2))
  25.          {
  26.           while(input(PIN_A2));
  27.             {
  28.             lcd_putc("\f PUSH2");
  29.             }
  30.          }
  31.        }
  32.     }

Ya te digo que no lo he probado pero creo que debe funcionar.
Ya me contaras.  :P
« Última modificación: 23 de Noviembre de 2006, 04:34:31 por samshiel_pic »

Desconectado Luis_Chogi

  • PIC10
  • *
  • Mensajes: 44
Re: Saber el estado de un pulsador
« Respuesta #7 en: 22 de Noviembre de 2006, 20:43:48 »
que tal... samshiel_pic

  La verdad que tu codigo esta bien pero...... me funciono presionando priomero el push1 y luego el dos, si los presiono primero el push2 no aparece nada  :? ....

  5GTT.... Ya puse el ; que me mencionas y pues tampoco... pero bueno ya mas o menos tengo lo que quiero....

 Espero alguien me pueda ayudar. la verdad no veo el porque no funcione mi codigo si creo que no es algo del otro mundo..

 Saludos

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Saber el estado de un pulsador
« Respuesta #8 en: 23 de Noviembre de 2006, 04:36:01 »
hola ya he modificado el ejemplo que te puse arriba. Se me olvido el bucle infinito( While (1))  :mrgreen: ya te debe de funcionar a la perfeccion.

Desconectado Luis_Chogi

  • PIC10
  • *
  • Mensajes: 44
Re: Saber el estado de un pulsador
« Respuesta #9 en: 25 de Noviembre de 2006, 00:56:40 »
 :-/  Ya me funciono..... Mil gracias a todos.... Gracias samshiel

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Saber el estado de un pulsador
« Respuesta #10 en: 25 de Noviembre de 2006, 09:19:16 »
De nada amigo!!! :P me alegro que funcione!


 

anything