Autor Tema: temporizador descendente 20 minutos  (Leído 5981 veces)

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

Desconectado ferfrepic

  • PIC10
  • *
  • Mensajes: 4
temporizador descendente 20 minutos
« en: 23 de Mayo de 2012, 11:04:32 »
HOLA! soy nuevo en el foro y estoy iniciando la programación de microcontroladores PIC. Me gustaría que alguien pudiera guiarme para poder hacer un TEMPORIZADOR DESCENDENTE DE 20 MINUTOS para activar un relé, y visualizar en display la cuenta regresiva. ¿Qué microcontrolador PIC puedo usar? tenía pensado el pic16f84a pero no estoy seguro porque quiero hacer una rutina de minutos y segundos con restas de 60 y con 8 bits puedo contar hasta 255 osea 4 minutos y monedas.verdad? Espero puedan ayudarme, desde  ya muchas gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: temporizador descendente 20 minutos
« Respuesta #1 en: 23 de Mayo de 2012, 11:32:52 »
Hola Ferfrepic, antes de determinar el micro, deberías detallar bien las especificaciones de tu proyecto, para ver qué necesitas.
¿Qué tipo de display vas a usar?, ¿con cuántos voltios se alimenta el display, 5V o 3.3V, u otra?, ¿alguna otra tarea?

También deberías tener claro en qué lenguaje de programación te sientes cómodo.

Una vez aclaradas esas dudas, podrás seleccionar mejor el micro, aunque dudo mucho que un 16F84 sea el más adecuado.

Desconectado ferfrepic

  • PIC10
  • *
  • Mensajes: 4
Re: temporizador descendente 20 minutos
« Respuesta #2 en: 23 de Mayo de 2012, 12:07:51 »
Nocturno gracias por responder! Los display a utilizar son cátodo común 5v, y el lenguaje sería ensamblador que es el que estoy viendo ahora. No tiene tareas extras solamente setear el temporizador con un pulsador y que incremente cada 30 segundos y con otro pulsador cada 10 minutos. La salida activa un relé es todo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: temporizador descendente 20 minutos
« Respuesta #3 en: 23 de Mayo de 2012, 13:34:49 »
Pues empieza por determinar cuántos pines del micro vas a necesitar para gestionar todo eso.

Desconectado ferfrepic

  • PIC10
  • *
  • Mensajes: 4
Re: temporizador descendente 20 minutos
« Respuesta #4 en: 23 de Mayo de 2012, 14:48:02 »
Pues serán tres pines de entrada supongo, uno para activar temporizador 30segundos otro para 10 minutos y uno de stop/reset.  Para la salida uno al relé y para manejar los cuatro display no estoy seguro.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: temporizador descendente 20 minutos
« Respuesta #5 en: 23 de Mayo de 2012, 15:11:06 »
Dibuja el esquema y te irá saliendo. Deja el micro para el final.

Desconectado ferfrepic

  • PIC10
  • *
  • Mensajes: 4
Re: temporizador descendente 20 minutos
« Respuesta #6 en: 23 de Mayo de 2012, 15:14:57 »
Ok gracias, mi idea es que me vayan guiando porque recién empiezo con pic, no que me  resuelvan el problema ja, a medida que avance voy  a volver por acá, gracias de nuevo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: temporizador descendente 20 minutos
« Respuesta #7 en: 23 de Mayo de 2012, 15:24:22 »
Claro, esa es la actitud con la que debes afrontar el problema. Será un placer poder ayudarte a medida que vayas avanzando.

Desconectado Alin3pa

  • PIC10
  • *
  • Mensajes: 5
Re: temporizador descendente 20 minutos
« Respuesta #8 en: 04 de Febrero de 2013, 08:52:15 »
Tengo el mismo problema. Stoy haciendo un marcador automático controlado por Android pero no consigo programar para que me haga el tiempo bien. Lo toy haciendo con un "for" pero se me atasca el programa es ese bucle . Yo kiero k haga eso y cuando le llegue otra instruccion que no pare o k pare pero cuando yo le mande parar. Nose si me explicao bien pero me vendria bien un poco de ayuda con la programación.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: temporizador descendente 20 minutos
« Respuesta #9 en: 04 de Febrero de 2013, 10:28:54 »
Bienvenido al foro!, tienes que colocar tu programa para que te podamos dar una ayuda  :mrgreen:

Saludos!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado ElectroVolt

  • PIC10
  • *
  • Mensajes: 22
Re: temporizador descendente 20 minutos
« Respuesta #10 en: 05 de Febrero de 2013, 05:04:43 »
te ayudaria pero yo solo se asembler :/ y hago multitarea
pero en C u otro lenguaje si no se mucho , pero si en algo puedo ayudar cuenta conmigo

Desconectado Alin3pa

  • PIC10
  • *
  • Mensajes: 5
Re: temporizador descendente 20 minutos
« Respuesta #11 en: 05 de Febrero de 2013, 08:18:49 »
#include "C:\Users\Sergio\Desktop\Proyecto Marcador\Programacion entera\programamarcador.h"
#use I2C(MASTER,SDA=PIN_C4,SCL=PIN_C3)

int disp[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};

long int t_uni,t_dec,t_cen,t_mil,tiempo=1000,a_uni,a_dec,a_cen,b_uni,b_dec,b_cen,tantoa,tantob;

int faltasa=0,faltasb=0,periodo=0;

char lectura;

void visualizardisplays()    //Viualiza en el marcador la informacion
{
   t_mil = tiempo/1000;             //Ecuaciones para el temporizador
   t_cen = (tiempo%1000)/100;
   t_dec = ((tiempo%1000)%100)/10;
   t_uni = ((tiempo%1000)%100)%10;
   
   a_dec=tantoa/100;                //Ecuaciones para los tantos equipo A
   a_cen=(tantoa%100)/10;
   a_uni=((tantoa%100)%10);
 
   b_dec = tantob/100;              //Ecuaciones para los tantos equipo B
   b_cen = (tantob%100)/10;
   b_uni = ((tantob%100)%10);
   
   i2c_start();
   i2c_write(0b01110000);    // Dirección (Escritura. SAA nº1
   i2c_write(0b00000000);    // Direcciono registro de control
   i2c_write(0b01000111);    // Palabra de Control: Luminosidad +12mA, 
   i2c_write(disp[t_uni]);   
   i2c_write(disp[T_dec]);   
   i2c_write(disp[t_cen]);   
   i2c_write(disp[t_mil]);
   i2c_stop();
   
   i2c_start();
   i2c_write(0b01110110);    // Dirección (Escritura. SAA nº2
   i2c_write(0b00000000);    // Direcciono registro de control
   i2c_write(0b01000111);    // Palabra de Control: Luminosidad +12mA, 
   i2c_write(disp[periodo]);   
   i2c_write(disp[a_uni]);   
   i2c_write(disp[a_cen]);   
   i2c_write(disp[a_dec]);
   i2c_stop();
   
   i2c_start();
   i2c_write(0b01110100);    // Dirección (Escritura). SAA nº3
   i2c_write(0b00000000);    // Direcciono registro de control
   i2c_write(0b01000111);    // Palabra de Control: Luminosidad +12mA, 
   i2c_write(disp[0]);   
   i2c_write(disp[b_uni]);   
   i2c_write(disp[b_cen]);   
   i2c_write(disp[b_dec]);
   i2c_stop();
}

void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   
   visualizardisplays();
   
   while(TRUE)
   {
      lectura = input(PIN_C7);
     
      if(lectura=='a')  //Comienza el tiempo
      {
         set_timer1(0);                            // es aqui donde tengo que poner el temporizador pero no sé como hacerlo
      }
      if(lectura=='b')  //Para el tiempo
      {
         enable_interrupts(int_timer0);
      }
      if(lectura=='c')  //Resetea el tiempo
      {
         
      }
      if(lectura=='m')  //Suma tanto equipo A
      {
         tantoa++;
      }
      if(lectura=='n')  //Resta tanto equipo A
      {
         tantoa--;
      }
      if(lectura=='k')  //Suma tanto equipo B
      {
         tantob++;
      }
      if(lectura=='l')  //Resta tanto equipo B
      {
         tantob--;
      }
      if(lectura=='p')  //Suma periodo
      {
         periodo++;
      }
      if(lectura=='r')  //Suma falta equipo A
      {
         faltasa++;
      }
      if(lectura=='g')  //Suma falta equipo B
      {
         faltasb++;
      }
      if(lectura=='h')  //Reset Faltas
      {
         faltasa=0;
         faltasb=0;
      }

     
     
      if(periodo>4)  //Se poone el periodo a 0 cuando supera 4
      {
         periodo=0;
      }
      if(faltasa>5)  //Se pone las faltas a 0 cuando superan 5
      {
         faltasa=0;
      }
      if(faltasb>5)
      {
         faltasb=0;
      }
     
      delay_ms(50);
     
      // manda las faltas que tiene el equipo A:
     
      switch(faltasa)
      {
         case 0:
            output_bit(PIN_B0,0);
            output_bit(PIN_B1,0);
            output_bit(PIN_B2,0);
            output_bit(PIN_B3,0);
            output_bit(PIN_B4,0);
            break;
         case 1:
            output_bit(PIN_B0,1);
            output_bit(PIN_B1,0);
            output_bit(PIN_B2,0);
            output_bit(PIN_B3,0);
            output_bit(PIN_B4,0);
            break;
         case 2:
            output_bit(PIN_B0,1);
            output_bit(PIN_B1,1);
            output_bit(PIN_B2,0);
            output_bit(PIN_B3,0);
            output_bit(PIN_B4,0);
            break;
         case 3:
            output_bit(PIN_B0,1);
            output_bit(PIN_B1,1);
            output_bit(PIN_B2,1);
            output_bit(PIN_B3,0);
            output_bit(PIN_B4,0);
            break;
         case 4:
            output_bit(PIN_B0,1);
            output_bit(PIN_B1,1);
            output_bit(PIN_B2,1);
            output_bit(PIN_B3,1);
            output_bit(PIN_B4,0);
            break;
         case 5:
            output_bit(PIN_B0,1);
            output_bit(PIN_B1,1);
            output_bit(PIN_B2,1);
            output_bit(PIN_B3,1);
            output_bit(PIN_B4,1);
            break;
      }
     
      // manda las faltas que tiene el equipo B:
     
      switch(faltasb)
      {
         case 0:
            output_bit(PIN_B5,0);
            output_bit(PIN_B6,0);
            output_bit(PIN_B7,0);
            output_bit(PIN_C0,0);
            output_bit(PIN_C1,0);
            break;
         case 1:
            output_bit(PIN_B5,1);
            output_bit(PIN_B6,0);
            output_bit(PIN_B7,0);
            output_bit(PIN_C0,0);
            output_bit(PIN_C1,0);
            break;
         case 2:
            output_bit(PIN_B5,1);
            output_bit(PIN_B6,1);
            output_bit(PIN_B7,0);
            output_bit(PIN_C0,0);
            output_bit(PIN_C1,0);
            break;
         case 3:
            output_bit(PIN_B5,1);
            output_bit(PIN_B6,1);
            output_bit(PIN_B7,1);
            output_bit(PIN_C0,0);
            output_bit(PIN_C1,0);
            break;
         case 4:
            output_bit(PIN_B5,1);
            output_bit(PIN_B6,1);
            output_bit(PIN_B7,1);
            output_bit(PIN_C0,1);
            output_bit(PIN_C1,0);
            break;
         case 5:
            output_bit(PIN_B5,1);
            output_bit(PIN_B6,1);
            output_bit(PIN_B7,1);
            output_bit(PIN_C0,1);
            output_bit(PIN_C1,1);
            break;
      }
     
      visualizardisplays();
   }

}