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.
· 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
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/
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:
http://www.ti.com/lit/ds/symlink/max232.pdf
http://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_DB9-USB-RS232.pdf
http://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_DB9-USB-RS232.pdf
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.