lunes, 21 de octubre de 2013

Proyecto: Frecuencimetro Digital


Preguntas de anteproyecto:
¿Qué se quiere hacer?
   Se quiere elaborar un frecuencímetro, en el cual, al ingresar una señal con X frecuencia, se pueda leer e informar mediante un LCD y/o la PC misma, cuál es la frecuencia de esa señal.
¿Por qué se quiere hacer?
   Se quiere hacer porque en este proyecto, la parte principal es el tiempo; incluye tanto la parte de software como de hardware.
¿Para qué se quiere hacer?
   Para poder demostrar una de las tantas utilidades que tiene la programación y sus aplicaciones en µc (en este caso utilizamos un PIC16F887).
¿En dónde se lo quiere hacer?
   Trabajamos en el área de Laboratorio II y en el domicilio de cada uno de los integrantes.
¿Cómo se lo quiere hacer?
    Trabajando de ambos lados, o sea, mientras se ve cómo va a quedar el software, se trabaja en el hardware, ya que ambos tienen un vínculo importante sobre cómo quedará el producto final.
¿A quiénes está dirigido el proyecto?
    Se destina a aquellos que tengan que trabajar con un cierto rango de frecuencias y necesiten saber que la señal este a su frecuencia favorable a su trabajo.
¿Quiénes lo van a hacer?
    Lo van a hacer los tres integrantes del grupo, con ayuda del profesor para aclarar dudas y preguntas.
¿Con qué se lo va a hacer?
    Para la parte de software y planeamiento hardware utilizamos las netbooks que nos han entregado, toda la parte de hardware (soldadura, agujereo, corte) se trabaja en el ámbito de Laboratorio II y en los domicilios de los integrantes.
¿Con qué se va a costear?
    Todos los gastos vienen del dinero de la familia de los integrantes y de los mismos, todo pagado en efectivo.


Problemas que se encontraron al realizar el proyecto:
·         Que el programa en el cual simula la futura placa, no funcione de la manera que el usuario quiere.
·         Que haya un problema de soldadura en el cual provoca que la placa no funcione de manera debida.
·         Que el driver del LCD no sea el correcto para el proyecto.
·         Que los materiales no tengan stock en ciertas sucursales.
·         Que los materiales no sean fáciles de encontrar en las zonas cercanas al Instituto y de los domicilios de los integrantes.
·         Que al realizar el diseño de la placa, no se encuentren los módulos de los componentes a utilizar, provocando que tengamos que crear de manera propia los módulos.
·         Que los componentes ya estén mal de fábrica.
·         No tener acceso a la información sobre algún componente, ya sea porque no se tenga acceso a Internet, o en la datasheet no encontremos lo que nosotros buscamos.
·         Que al realizar el proceso de colocar el silkscreen de la placa, no salga con resultados favorables.
·         No todos los componentes tienen el mismo tamaño de pads, por lo cual, al agujerear la placa, cambiar las mechas.
·         Chequear el cable que se conecta de la placa principal al programador.
·         Al momento de la compra del gabinete, chequear el tamaño de las placas, la ubicación de las salidas, la altura de los componentes, el material del gabinete en si.

·         Llamar por teléfono al negocio para preguntar si tienen stock del componente, para ahorrar el tiempo en ir al negocio y preguntar. 


Fuentes para poder llevar a cabo el proyecto:
Libro “Compilador CCS C” 


Negocios en donde se consiguieron los componentes:
Musikman  -  Blanco Encalada 2274   -   Tel.: (54 11) 4780-0073
Bousa  -  Ciudad de la Paz 2226   -   Tel.: 011 4783-0920
SYC Electronica  -  Paraná 274   -   Tel.: 4371-5300
Microelectrónica S.H  -  Sucursal Paraná  -  Paraná 180  -  Tel.: (54 11) 4375-0066
La Casa del Transformador "ALAMTEC"  -  Paraná 220  -  Tel: 4371-1023 


Programas utilizados para realizar el proyecto:
KiCad (para el diseño de las placas).
Link para descargar KiCad: http://iut-tice.ujf-grenoble.fr/cao/
PIC C COMPILER (para programar el PIC en lenguaje C).
ISIS PROTEUS (para la simulación del programa en C en la placa futura).


Código utilizado para el PIC en el lenguaje “C”:
#include “frec.h”
//-----------------------------------------------------------------------
// Variables globales
int1 flagToggleFlanco, flagHayDatos;
int16 t1,t2,tt;
float st=0.0;
float valf=0.0;

//-----------------------------------------------------------------------
// Constantes
float const uSxTick = 0.2;

//-----------------------------------------------------------------------
#define LCD_TYPE 2
#include <lcd.c>

//-----------------------------------------------------------------------
#int_ext
void handle_ext_int(){
   if(flagToggleFlanco==0){
      flagToggleFlanco=1;
      t1=get_timer1();
      ext_int_edge(0,H_TO_L);   
   }else{                    
      t2=get_timer1();          
      ext_int_edge(0,L_TO_H);   
      flagToggleFlanco=0;       
      set_timer1(0);            
      if(flagHayDatos==0){      
         flagHayDatos=1;         
      }
   }
}

//-----------------------------------------------------------------------------
void main()
{
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);  // --à Revisar
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
//-----------------------------------------------------------------------------
   ext_int_edge(0,L_TO_H);         // Configuro captura de 1er flanco de subida
   flagToggleFlanco=0;           // inicializo el Flag para cambiar de flanco

   enable_interrupts(int_ext);
   enable_interrupts(global);
   set_tris_d(0);

   printf(“\r\nFrecuencimetro Digital\r\n”);
   lcd_init();

  do{
     if(flagHayDatos==1){          // Detecto que ya hay datos de flancos …
      if(t2 > t1){              
        tt = t2 – t1;            
        st = uSxTick * tt;        // Calculo en uS el tiempo.
        Valf = 5000.0 / tt;
        printf(“Ticks %Lu - %Lu = %Lu = %3.1fuS \r\n”,t2,t1,tt,st);
        printf(“Frecuencia: %2.3f Hz \r\n”,valf);
        lcd_gotoxy(1,1);
        lcd_putc(“Frecuencia”);
        lcd_gotoxy(1,2);
        printf(lcd_putc,”%2.3f Hz”,valf);
        flagHayDatos=0;           // Indico que ya he transmitido lo pendiente.
      }
    }
  }while(TRUE);
}


  Para capturar la frecuencia utilizamos el TIMER1, lo que el programa hace es que captura el primer flanco, ya sea ascendente o descendente, guardar el dato en una variable, capturar el segundo flanco y guardarlo en otra variable. Se hace la diferencia entre ambos valores, multiplicamos el resultado por el tiempo que dura cada tick (depende del cristal que utilizemos), y obtendremos el tiempo.



Diseño final de la Placa de Entrada y la Placa Principal:






Componentes Críticos:

·         DISPLAY LCD GDM1602K.

·         PIC16F887

·         MAX232

·         DB-9
·         LM311
·         SWITCH
·         RJ12
·         ALIMENTACIÓN 9V
·         CRISTAL 20MHZ
·         PRESET 10K
·         7805


Links de las hojas de dato (datasheet) de los componentes:

Demostración de la simulación en el programa ISIS PROTEUS:



   Lo que demuestra es el ciclo completo de la frecuencia, en la ventana de la izquierda, muestra la frecuencia y el período de ésta. El LCD solo muestra la frecuencia, esto permite que verlo en la PC la frecuencia sea opcional.



martes, 1 de octubre de 2013

Proyectos relacionados con conexión inalámbrica

La idea en general es crear y armar un dispositivo de bajo consumo controlado remotamente por medio de un celular o pc, por el cual se le transmite una señal por medio de Bluetooth para activar/desactivar dicho dispositivo.
El dispositivo a su vez estará conectado a un electrodoméstico o mejor dicho dispositivo electrónico a el cual lo enciende o apaga.

 http://lisergio.wordpress.com/2013/03/17/ricino-pro-1-1-nuevas-mejoras/

 http://www.dwengo.org/es/blog/domotics

Tambien el aparato tendra un fucible ya que en caso de corto no se queme el aparato y el electrodomestico.

El dispocitivo tendra un una salida a pc para poder saver a que hora, dia y la cantidad de veces que se encendió.