Manejos de pulsadores con PIC

#1
Hola:

Con un PIC16F84A-04 en ASM, quiero lograr programar un botón que haga cosas diferentes dependiendo de cómo lo pulses.

Puedes elegir para tu ejemplo los puertos In/Out que desees, las salidas es sólo hay 3 diodos Led. Led_Verde, Led Ambar y otro Led_Rojo.

1º) Si el pulsador (P en adelante) no se está pulsando, ningún Led se enciende, en cambio de que se pulse se enciende el Led Rojo.

2º) Si dejas pulsado el P durante 3 segundos, se apaga el Led Rojo y acto seguido se enciende Led Verde, al final cuando dejes de pulsar el P, se quedará encendido el Led Verde.

3º) Si dejas pulsado el P durante 10 segundos, se apagan todos los Led, acto seguido parpadea el Led Ambar. 200ms y 200ms, ese el el tiempo de parpadeo del Led Ambar y se queda ahí.

4º) Después del punto 3º), en la EEPROM se almacena un valor que identifique si se pierde la energía, pila o batería al iniciar el PIC de nuevo, siga el Led Ambar parpadeando.

Un cordial saludo.
 
#2
Te has elejido un tema un poco complicadito meta, podrías llegar a resolver con la interrupción del TMR0. Es decir que cuando sobrepase cierto tiempo haga alguna acción según se haya o no apretado el pulsador.

Es una idea...
 
#3
Buenas:

Esto no es para mi, es por parte de un colega y es una actividad que debe hacer él, no perderé tiempo ya que estoy con el puerto serie.

No se si será complicado como parece. En C se hará rápido. El que lo quiera hacer en C que ponga su código aquí, dicen que es más rápido y fácil de hacer.

Saludo.
 
#4
La complicacion estriba en llevar los distintos contadores, junto con las banderas necesarias para saber si el boton se sigue manteniendo pulsado o no y que tiempo transcurrio...

Yo no lo veo tan complicado... pero si hay que ponerle atensión por que es facil equivocarse..., lo mejor es desarrollar un diagrama de flujo para tenerlo una guia al programar..
 
#6
Hola. Tengo un problema. Estoy realizando un medidor de temperatura con un PIC16F877A, que cuando mida 25° se encienda un LED.
En la simulación de proteus me mide bien la temperatura con un LM35, pero no me enciende el LED.
¿Cómo puedo hacer que encienda?

El código es éste y no tiene la opción del encendido del LED, pero funciona la medición de temperatura.
Código:
#include <16F877A.h>
#device *=16
#device adc=10
#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, LVP, CPD, NOWRT
#use delay(clock=4000000)//velocidad del pic
#include <lcd.c>
#byte puerto_b = 06
signed int i;
float CEL,der, FAR;

void main()
   {
    set_tris_b(0xFE);            //portb como salida(RB0,las demas desactivadas)
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas

   set_tris_b(0x00);// configuracion de las salidas
   setup_adc_ports(RA0_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
   set_adc_channel(0);
   lcd_init();
   delay_ms(200);
   for(i=16;i>0;i--)
   {
   printf(lcd_putc,"\f");
   lcd_gotoxy(i,1);
   printf(lcd_putc,"medidor de temperatura");
   delay_ms(200);
   }
   for(i=-9;i<2;i++)
   {
   lcd_gotoxy(i,2);
   printf(lcd_putc,"  diseño jimmy Quintero");
   delay_ms(200);
   }
   
   delay_ms(1000);
   while(1)
      {
     
   printf(lcd_putc,"\fTEMPERATURA");
      CEL=(read_adc()/2);
     printf(lcd_putc,"\n%fºC, ",CEL);
      delay_ms(200);
      
        }
}
Este programa maneja varios LED encendidos con pulsadores diferentes, además de tener un pulsador para ver el menú en la LCD.
Es algo sencillo pero bueno, ahí se los mando para que lo disfruten, sé que les servirá mucho.(y)

Anexo los códigos .c y .hex para que puedan editarlos y modificarlos de la manera que lo necesiten.
 

Adjuntos

Última edición por un moderador:
Arriba