Pulsador secuencial ¿Con pic16f84?.

#1
Me han pedido que diseñe un contador, es el tipico de turno del mercadona, que en principio tengo controlado como hacerlo. Pero me han pedido que tenga el pulsador de subir y de bajar turno debe tener una funcion extra y es lo siguiente:

Pulsador 1 sube un turno por pulso y pulsado mas de 5 segundos manda una secuencia (frecuencia) constante hasta que se deja de pulsar.
Pulsador 2 baja un turno por pulso y si es pulsado mas de 5 segundos manda una secuencia(frecuencia) constante hasta que se deja de pulsar.

He pensado hacerlo con un micro pero creo que debe haber un circuito mas sencillo para hacer esto. Es muy parecido a mi antiguo casio de muñeca que cuando querias cambiar la hora y no querias que te dieran las uvas pulsabas el botoncito un tiempo prolongado y corrian mas rapido los minutos.

¿Que me sugeris? ¿Hay algo parecido para pic16f84?.

Un saludo a todo el foro y gracias de antemano.
 
#2
Perfectamente realizable con un PIC. Usando componentes digitales discretos tambien pero es un reto de diseño. Tu escojes.
Saludos
 
#5
Pues la opción más razonable es hacer tu programa en el pic, bastan unas cuantas líneas y listo, puedes desplegar tu valor en un LCD. La otra opción no es tan sencilla como esta y el resultado es el mismo.
 
#6
Estoy empezando por aqui, pero la variable contador... no se donde meterla, sera cosa de seguir pensando.

PHP:
/* pulsador.c programa que cuenta hasta 5  cuando es pulsador una entrada y manda parpadear un led */
#include <16f84a.H> /* tipo de PIC */
#use delay( clock = 4000000 ) /* reloj de 4 MHz */
#byte puerto_a = 06 /* dirección del puerto B */
#byte puerto_b = 06 /* dirección del puerto B */

int contador;
void main( void )
{
set_tris_a( 11110 ); /* puerto a como entrada */
set_tris_b( 0xFE ); /* puerto B como salida */
puerto_b = 0; /* apaga todos los led */

do{
 if(input(PIN_B1)){
    output_high(PIN_B0)
delay_us( 1000 ); /* retardo de 1000 (seg. */
output_high(PIN_B0); /* enciende el led RB0 */
delay_us( 1000 ); /* espera 1 ms*/
else {                    //Caso contrario...   
         output_low(PIN_B0); }  //lo apago.
}
 
Última edición por un moderador:
Arriba