TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: HieloZero en 03 de Marzo de 2013, 02:23:38
-
Hola!
Me llamo Oscar soy estudiante de Ing. Mecatronica...
En la uni me han pedido un proyecto.
-Contar RPM (tacometro)
-Distancia recorrida
-Menu LCD y un teclado...
Uso un pic 16f877a, lcd 16x2 y teclado matricial 4x4...
Lo q manda los pulsos es un par infrarrojo amm un encoder con 8 ranuras(un disco con 8 ollos xD) y su comparador con un lm358
Mi codigo.
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD,NOWRT
#include <lcd.c>
#include <KBD4X4.c>
#define use_portd_lcd TRUE
#define use_portb_kbd TRUE
int16 contador=0, valor=0, posi=0;
char k;
#int_timer1
void timer1_isr(void)
{
setup_timer_0(rtcc_ext_h_to_l | rtcc_div_2);
setup_timer_1(t1_internal | t1_div_by_8);
set_timer0(0);
set_timer1(3036);
enable_interrupts(int_timer1);
enable_interrupts(global);
}
void tacometro ()
{
timer1_isr();
contador=get_timer0();
contador=contador*60/4;
printf(lcd_putc, "\f %6lu RPM :D",contador);
set_timer0(0);
set_timer1(3035);
}
void odometro()
{
timer1_isr();
contador=get_timer0();
valor=contador*38;
printf(lcd_putc, "\f %6lu cm/s",valor);
set_timer0(0);
set_timer1(3035);
}
void posicion()
{
timer1_isr();
posi=contador;
posi=contador*360/256;
printf(lcd_putc, "\f %6lu cm/s",posi);
set_timer0(0);
set_timer1(3035);
}
void menu()
{
lcd_putc("1)Taco 2)Odo\n");
lcd_putc("3)Posi");
}
void main()
{
lcd_init();
kbd_init();
lcd_putc(" Biemvenido\n"); // Saca texto
lcd_putc(" :D"); // Saca texto
delay_ms(200); // Retardo
lcd_putc("\f");
lcd_putc("Menu");
delay_ms(200);
lcd_putc("\f");
menu();
while(TRUE) {
k=kbd_getc();
switch (k)
{
case '1':
tacometro();
while(true)
{
k=kbd_getc();
if (k=='4'){
break;
}
}
menu();
break;
case '2':
odometro();
while(true)
{
k=kbd_getc();
if (k=='4'){
break;
}
}
lcd_putc("\f");
menu();
break;
case '3':
posicion();
while(true)
{
k=kbd_getc();
if (k=='4'){
break;
}
}
lcd_putc("\f");
menu();
break;
}
}
}
Mi intencion es q cuente cada .5 segundos cuantos pulsos hay y haga la operacion dada...
PERO!
No entiendo muy bn eso de los timers :/ uso un prescaler de 16...
Si pudieran orientarme un poco, se q sobra informacion de timers, pero aun no logro coparlo bn todo...
De antemano Gracias :)