Control pulsadores de un PIC
Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 10 de 13

Tema: Control pulsadores de un PIC

  1. #1
    Usuario
    Mensajes
    729
    Gracias
    92
    Agradecido 93 veces en 77 posts

    Control pulsadores de un PIC

    Hola:

    Estoy poco a poco aprendiendo CCS por un libro centrado en ASM y algo de CCS comparativas. Pero son más bien gente que ya sepan.
    Quiero hacer pruebas con ejemplos tontos.

    Por ejemplo, teniendo un PIC16F64A/88/886/887 o el 18Fx550, da igual, el que ustedes prefieran, los tengo todos físicamente y puedo hacer pruebas.

    Con el copilador CCS, bajo MPLAB lo estoy usando. Quiero hacer con dos entradas que pueden ser el RA0 y el RA1. A su salida, por los puertos B, tienen Led.

    Funciones. (PORTA son pulsadores, no interruptores).
    Si pulso RA0, se enciende el Led del puerto RB0.
    Si pulso RA1, se enciende el Led del puerto RB1.
    Si dejp pulsado RA2 durante 3 segundos, se apagan los RB0 y RB1 si están algunos de ellos encendidos.
    Si pulso RA3 y RA4 al mismo tiempo durante 3 segundos, se apagan las salidas RB0 y RB1.

    Esto parece complicado de hacer. Ya me dirán. Haré Pseudocodigos para no machacarme las neuronas por falta de conocimiento en C para PIC si hace falta.

    ¿Alguien puede hacerlo?

    Si les lleva mucho tiempo, mejor déjalo estar, lo intentaré primero con ASM que se me da mejor, luego intento pasarlo a C.

    Un cordial saludo y gracias por leer hasta aquí.

  2. #2
    Usuario Avatar de Julian_03
    Ubicación
    Entre Rios, Argentina
    Mensajes
    1,493
    Gracias
    492
    Agradecido 525 veces en 373 posts
    #include <16f873a.h>
    #fuses nowdt,put,xt
    #use delay (clock=4000000)
    #use fast_io (a)
    #use fast_io (b)
    #use fast_io (c)




    void main ()
    {
    set_tris_a (0b11111111);
    set_tris_b (0b00000000);
    int a,b,c,d,e,f,g,h,i;


    output_low (pin_b0);
    output_low (pin_b1);
    output_low (pin_b2);
    output_low (pin_b3);
    output_low (pin_b4);
    output_low (pin_b5);
    output_low (pin_b6);
    output_low (pin_b7);


    do
    {
    a= input (pin_a0);
    b= input (pin_a1);
    c= input (pin_a2);
    d= input (pin_a3);
    e= input (pin_a4);
    f= input (pin_a5);
    g= input (pin_a6);
    h= input (pin_a7);


    if (a==1)
    {
    output_high (pin_b0);
    }
    if (b==1)
    {
    output_high (pin_b1);
    }
    if (c==1)
    {
    output_high (pin_b2);
    }
    if (d==1)
    {
    output_high (pin_b3);
    }
    if (e==1)
    {
    output_high (pin_b4);
    }
    if (f==1)
    {
    output_high (pin_b5);
    }
    if (g==1)
    {
    output_high (pin_b6);
    }
    if (h==1)
    {
    output_high (pin_b7);
    }
    }
    while (0==0)
    }

    lo estoy compilando amigo pero para que te des una idea es algo asi esto es un paso mas largo pero es mas entendible capaz que otro lo hace en menos lineas pero para empezar es mejor este porque lees linea por linea.....
    asi es por lo menos la parte de prender y apagar los led dependiendo de los pulsadores aclaro que no lo probé
    después te confirmo cunado lo pruebe en el proteus...
    Última edición por Julian_03; 29/03/2012 a las 03:14

  3. #3
    Usuario
    Mensajes
    729
    Gracias
    92
    Agradecido 93 veces en 77 posts
    Por lo qu eveo es algo así. Gracias por compartir.

    Mientras (True)
    {

    Si RA0 es igual a 1
    {
    RB0 es 0 //Se apaga el Led.
    }

    Entonces
    {
    RB0 es 1 //Se enciende el Led.
    }

    //Aquí lo mismo para RA1 y RB1.

    /* Aquí no se como se hace el tema de, si dejas pulsado RA2 durante 3 segundos, se apagan RB0 y RB1. Si sólo pulso normalmente RA2, no debe pasar nada, si lo dejo pulsdo durante 3 segundos es cuando la acción de apagarse los Led actúa.

    Tal vez sea así: */

    Si pulso RA2
    {
    Empieza a restar el contador hasta 3 segundos.
    Si no llega los 3 segundos.
    Contador3 es igual a 3 segundos
    }

    Entonces
    {
    Desactiva los Led.
    }

    }
    Última edición por Meta; 29/03/2012 a las 03:16

  4. #4
    Usuario Avatar de Julian_03
    Ubicación
    Entre Rios, Argentina
    Mensajes
    1,493
    Gracias
    492
    Agradecido 525 veces en 373 posts
    Por lo qu eveo es algo así. Gracias por compartir.

    Mientras (True)
    {

    Si RA0 es igual a 1
    {
    RB0 es 0 //Se apaga el Led.
    }

    Entonces
    {
    RB0 es 1 //Se enciende el Led.
    }

    //Aquí lo mismo para RA1 y RB1.

    // Aquí no se como se hace el tema de, si dejas pulsado RA2 durante 3 segundos, se apagan RB0 y RB1. Si sólo pulso normalmente RA2, no debe pasar nada, si lo dejo pulsdo durante 3 segundos es cuando la acción de apagarse los Led actúa.

    }
    exacto la estructura es algo así perfecto.... perdón por no ser tan claro pero mañana me levanto temprano y me tengo que ir a dormir y vi tu duda y tenia que ayudarte.....
    es algo así mañana yo cunado vuelva de la universidad sigo con esto es fácil lo que quieres hacer necesito un tiempito y lo solucionamos amigo
    edito el programa no me compila deve ser porque estoy cansado ya veo doble jajaja
    mañana te soluciono el problema amigo Saludos!

  5. #5
    Moderador Avatar de byboRRe
    Mensajes
    271
    Gracias
    140
    Agradecido 179 veces en 116 posts
    Cita Iniciado por Meta Ver mensaje
    Por lo qu eveo es algo así. Gracias por compartir.
    /* Aquí no se como se hace el tema de, si dejas pulsado RA2 durante 3 segundos, se apagan RB0 y RB1. Si sólo pulso normalmente RA2, no debe pasar nada, si lo dejo pulsdo durante 3 segundos es cuando la acción de apagarse los Led actúa.
    }
    Supongamos que a RA2 le llegan 5 volts al presionar el botón.


    if(RA2 == 1)
    delay_ms(3000);
    if(RA2 ==1)
    {
    RB0 =0;
    RB1=0;
    }

    Así no te sirve ?? es la forma mas simple y rápida que se me ocurre obviamente esta de la patada poner un delay de 3 segundos.
    µPraxis- Electrónica en Practica

  6. #6
    Usuario
    Mensajes
    729
    Gracias
    92
    Agradecido 93 veces en 77 posts
    Hola:

    No se si servirá así, pero si sueltas el botón antes de los tres segundos, no debería pasar nada. Me da que se debe usar interrupciones por si acaso.

    Por el código qu ehas puesto.
    Código:
    if(RA2 == 1) //Si RA2 es igual a 1.
          delay_ms(3000); //Retardo de 3 segundos.
    
        // Aquí continua pasen 3 seg. o no. No creo que sea así.
    if(RA2 ==1) // Si RA2 es = a 1
      {
          RB0 =0; // Desactiva los Led
          RB1=0; // de estas salidas RB0 y RB1.
      }
    Hay que probar.

    Gracias por la idea.
    Última edición por Meta; 29/03/2012 a las 06:57

  7. #7
    Moderador Avatar de byboRRe
    Mensajes
    271
    Gracias
    140
    Agradecido 179 veces en 116 posts
    Cita Iniciado por Meta Ver mensaje
    Hola:

    Código:
    if(RA2 == 1) //Si RA2 es igual a 1.
          delay_ms(3000); //Retardo de 3 segundos.
    
        // Aquí continua pasen 3 seg. o no. No creo que sea así.
    if(RA2 ==1) // Si RA2 es = a 1
      {
          RB0 =0; // Desactiva los Led
          RB1=0; // de estas salidas RB0 y RB1.
      }
    Pasaran los 3 Segundos, y ahí continuara pero ojo, que solo presionando el botón la condición sera un 1, si lo sueltas antes de los tres evaluara la condición, y con el botón suelto la condición no se cumple y no se ejecuta.

    Obviamente con interrupciones es mejor. Pero si aun no puedes hacerlo de esa forma ni te metas con interrupciones ni con PIC32 que bastante te escucho hablar de ellos.

    Saludos!!!

    Edito: Quizás te este confundiendo en un ratito mas te lo pongo con el código exacto, para que me entiendas.
    Última edición por byboRRe; 29/03/2012 a las 16:14
    µPraxis- Electrónica en Practica

  8. #8
    Moderador Avatar de byboRRe
    Mensajes
    271
    Gracias
    140
    Agradecido 179 veces en 116 posts
    if(input(pin_a1))
    delay_ms(3000);
    if(input(pin_a1))
    {
    output_low(pin_RB0);
    output_low(pin_RB1);
    }
    Prueba así, pero prueba y después de probar comentamos.

    Saludos!!
    µPraxis- Electrónica en Practica

  9. Los siguientes usuarios agradecen a byboRRe por este post:

    Meta (30/03/2012)

  10. #9
    Usuario
    Mensajes
    35
    Gracias
    38
    Agradecido 8 veces en 3 posts
    Hola Meta.

    Bueno, creo que los 2 primeros problemas ya los has resuelto.

    Te dejo unos ejemplos de los puntos 3 y 4, hechos a mi manera:

    Si dejo pulsado RA2 durante 3 segundos, se apagan los RB0 y RB1 si están algunos de ellos encendidos.

    Código:
    while(input(pin_A2) == 1) // mientras exista un 1 en el pin A2
    {
        delay_ms(3000); // espero los 3 segundos
    
        if(B0 || B1 == 1) // verifico si B0 o B1 están encendidos. Ojo, capás que no te deje ponerlo así, pero podés usar una función que creo que es bit_test que testea el estado del puerto, ahora no me acuerdo bien como funciona.
        {
        output_low(pin_B0); // apago B0
        output_low(pin_B1); // apago B1
        }
    }
    Si pulso RA3 y RA4 al mismo tiempo durante 3 segundos, se apagan las salidas RB0 y RB1

    Código:
    while(input(pin_A3) && input(pin_A4) == 1) // si los 2 pulsadores están pulsados
    {
    delay_ms(3000); // espero 3 segundos
    
    output_low(pin_B0); // apago B0
    output_low(pin_B1); // apago B1
    }
    Espero que te sirvan.

    Saludos.
    Última edición por 14matias13; 29/03/2012 a las 19:25

  11. Los siguientes usuarios agradecen a 14matias13 por este post:

    Meta (30/03/2012)

  12. #10
    Usuario Avatar de Julian_03
    Ubicación
    Entre Rios, Argentina
    Mensajes
    1,493
    Gracias
    492
    Agradecido 525 veces en 373 posts
    bien meta tienes demasiada información y muy valiosa jajajaja
    aprovéchala
    Saludos!

Página 1 de 2 12 ÚltimoÚltimo

Temas similares

  1. Control de Distancia mediante LabVIEW - USB
    Por VLAD en el foro Robótica
    Respuestas: 16
    Último mensaje: 29/01/2013, 06:55
  2. LED Control: PWM, Servo y LED Dimmer
    Por Yesbond en el foro Electrónica Digital
    Respuestas: 13
    Último mensaje: 25/08/2011, 22:32
  3. Control basico de LCD (2*16) con PIC16F877A
    Por Andres F. Arellano en el foro Electrónica Digital
    Respuestas: 2
    Último mensaje: 19/08/2011, 15:39
  4. la mesa baul - Control NES
    Por stemo en el foro Internet
    Respuestas: 1
    Último mensaje: 27/04/2011, 16:03
  5. Control Remoto universal con PIC
    Por dds en el foro Electrónica Digital
    Respuestas: 4
    Último mensaje: 07/11/2010, 16:30

Los visitantes encuentran esta página buscando por:

pic

pulsadores pic ccs

control servo pic pulsador

ejemplo 16f84 ccs c

ejemplo de 2 pulsadores en pic basic

ejemplos en pic c con pulsadores y leds

control de servomotores con pic c

encender un led con un pulsador en pic en c

leer pulsador pic en c

control servomotor pic ccs pulsador

prender un led con pulsador en pic c

pulsador

ejemplo pulsador pulsos pics

control remoto con pic ccs c

control de servo con pulsadores

como encender 5 led y apagarlos con pulsador usando pic 16f877a

pulsador con ccs

control de led con dos pulsadores y pic

programa en lenguaje c para 4 servomotores pic

como usar un pulsador en pic c

control de servomotor con pic ccs

como usar el whiler en picc como pulsador

servomotor con pulsador pic

pulsadores pic16f877a

ejemplo de pulsadores con pic ccs

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37