Buenas noches, estoy programando un codigo para un tacometro digital de 4x7 segmentos para autos. El programa se basa en medir el tiempo entre pulsos de la bobina del auto y mediante una cuenta aritmetica obtener el varlor de RPMs. El problema con el que me encuentro es al momento de representar el valor en los displays ya que el valor es representado una sola vez al principio y luego de este primer barrido de los displays no se vuelven a encender nunca mas.
A continuacion les copio el codigo y les adjunto el .HEX y el archivo de Proteus...
#include <16f628a.h>
#use delay(clock=12000000)
#fuses NOWDT,HS,PUT,NOPROTECT
#use fast_io(B)
#define ON output_high
#define OFF output_low
#define DIS1 PIN_A0
#define DIS2 PIN_A1
#define DIS3 PIN_A2
#define DIS4 PIN_A3
short flagllegopulso=0;
long t1=0;
long rpm=0;
long desbordamientos=0;
long prom=0;
int tabla[10]={0b10000000,0b11110010,0b01001000,0b01100000,0b00110010,0b00100100,0b00000100,0b11110000,0b00000000,0b00100000};
int dig1=0;
int dig2=0;
int dig3=0;
int dig4=0;
#INT_TIMER1
void TMR1_Interrupt()
{
++desbordamientos;
}
#INT_EXT
void RB0_Interrupt()
{
flagllegopulso=1;
}
void main()
{
disable_interrupts(global);
disable_interrupts(int_timer1);
disable_interrupts(int_ext);
setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
do{
if (flagllegopulso==1)
{
++prom;
flagllegopulso=0;
}
if (prom==10)
{
t1=get_timer1();
set_timer1(0);
rpm = 300000/((t1+(desbordamientos*65536))*0.00033333);
desbordamientos=0;
prom=0;
dig1=(rpm/1000);
dig2=(rpm/100)-(dig1*10);
dig3=(rpm/10)-(dig1*100)-(dig2*10);
dig4=(rpm/1)-(dig1*1000)-(dig2*100)-(dig3*10);
output_b(tabla[dig1]);
ON (DIS1);
delay_ms(5);
OFF(DIS1);
output_b(tabla[dig2]);
ON (DIS2);
delay_ms(5);
OFF(DIS2);
output_b(tabla[dig3]);
ON (DIS3);
delay_ms(5);
OFF(DIS3);
output_b(tabla[dig4]);
ON (DIS4);
delay_ms(5);
OFF(DIS4);
}
}while(TRUE);
}
Espero me puedan ayudar ya que estoy con este problema hace un par de dias y no puedo encontrar el error.
Desde ya muchas gracias.
Adrian...