COMPONENTES PARA REALIZAR LA MAQUETA DEL GIROPLAY
Enviado por Jerry • 23 de Agosto de 2018 • 1.127 Palabras (5 Páginas) • 285 Visitas
...
Se hace uso de un bucle infinito mediante el ciclo while, para que este proceso se repita constantemente y el valor varié sin necesidad de un reseteo de PIC, es decir se adapte al cambio de los pulsos entrantes.
Como modo de prueba se programa una tarea de prender un LED conectado al Pin_B0, esto solo para corroborar el correcto funcionamiento del PIC.
[pic 13]
En la imagen anterior se muestra el montaje físico del Tacómetro Digital, se puede ver un integrado dedicado a la regulación de voltaje de referencia “7805” justo después de la fuente, este cumple la función de entregar 5 Volts y 1A al Pic y a la LCD, lo cual es suficiente para su funcionamiento.
Conclusiones:
En la realización del código para el Tacómetro Digital, se tuvieron inconvenientes con el reloj externo usado que era de 20MHz por lo tanto se agregó un condigo que programara el PIC y usara un reloj interno con un valor de 4Mhz. Se programó no para 20MHz como inicialmente sino para 4Mhz debido a que el PreScaler del Timer1 no acepta por encima de 8 por lo tanto en la ecuación no daba el valor para 500ms, por esto se usa un reloj de 4Mhz interno para evitar ese desbordamiento y no cause conflicto con la LCD. Se programa la interrupción de Timer1 a 500ms debido a que se desbordaba el Timer0 antes de leer su valor.
ANEXOS
CODIGO TACOMETRO DIGITAL:
#include
#use delay(clock=4M)
#fuses INTRC,NOWDT,NOPROTECT,NOLVP,noPUT,NODEBUG,BROWNOUT,NOCPD,NOWRT,nomclr
#include
int16 pulsos=0; //inicializa y declara la variable contador
#int_timer1
void timer1_isr(void) //Función de interrupción por desbordamiento TMR1
{
pulsos=get_timer0(); //Lee el valor actual del Timer0;
pulsos=pulsos*2*120; //COmo el RTCC_DIV_2 entonces se multiplica 60*2
//printf(lcd_putc, "\f %6lu rpm",pulsos); //escribe en la LCD
clear_interrupt(int_timer0);
set_timer0(0); //fija el valor inicial de la cuenta en 0
clear_interrupt(int_timer1);
set_timer1(3036); //carga del TMR1
}
void main()
{
setup_oscillator(OSC_4MHZ|OSC_INTRC); // Configuracion y Uso del Reloj interno del PIC
set_tris_b(0); //Puerto B como salida
output_high(PIN_b0); //Prueba de Funcionamiento del PIC
setup_timer_0(rtcc_ext_h_to_l | rtcc_div_2); // timer0 como contador | RTCC_DIV_2 se incrementa el Timer cada que oprime 2 veces el pulsador
setup_timer_1(t1_internal | t1_div_by_8); //Setup timer: Reloj interno(temporizador), preescaler= 8
delay_ms(500);
set_timer0(0); //fija el valor inicial de la cuenta en 0
set_timer1(3036); //carga del TMR1 //Tiempo = [(65536-carga) * PreScaler] * Tinst ////65536-62500=3036
enable_interrupts(int_timer1); //habilitacion de la interrupcion timer1
enable_interrupts(global); //habilitacion global de interrupcion
delay_ms(100);
lcd_init(); //Inicializa la LCD
delay_ms(500);
printf(lcd_putc, "H.Parra, E.Cabana"); //escribe en la LCD
delay_ms(1000);
printf(lcd_putc, "\f %6lu Rpm",pulsos); //escribe en la LCD
delay_ms(100);
while(1) //Bucle infinito
{
}
}
CODIGO DEL GIROPLAY
#include
#use delay (clock=4M)
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD, NOWRT
#byte portb=0x06
void main()
{
int16 control=0;
set_tris_b(0x00);
output_b(0x00);
while (1)
{
delay_ms(10);
for(control=1;control
{
output_b(0b000011100); //Primera secuencia Muestra un corazon// LS-MS
delay_ms(2);
output_b(0b000111110);
delay_ms(2);
output_b(0b001111110);
delay_ms(2);
output_b(0b011111100);
delay_ms(2);
output_b(0b001111110);
delay_ms(2);
output_b(0b000111110);
delay_ms(2);
output_b(0b000011100);
delay_ms(2);
output_b(0x00);
delay_ms(10);
}
control=0;
...