Problemen met het meten van de tijd tussen twee pulsen

Z

zanor

Guest
Gewoon voor de lol die ik probeer te maken van een digitale RPM meter voor mijn auto.Maar ik
ben niet in staat zijn om exacte metingen.
Ik heb gemeten met een oscilloscoop dat er ~ 0,06802721 sec (14,7 Hz) tussen de pulsen als mijn motor stationair."TMR_count" in mijn broncode moet worden dan 66.Maar ik krijg 61.Het is ~ 0,00512 sec te traag, waarom?
Is er enige vertraging in de timeropname / onderbreken operatie weet ik niet?

Ik gebruik een PIC16F84a op een breadboard.Kan de "lange" weg van het kristal op de microchip slow it down?Kabels ~ 3.4 cm ...

Hier is mijn code in MikroC formaat.
Code:# include <built_in.h> / / Voor Lo (); en Hi ();int i = 0;

int TMR_count = 0; / / 1x = 0.001024 sec

int TMR_value = 0; / / 1x = 0.000004 sec

int RPM = 0;

float time = 0;void interrupt () (

if (INTCON.INTF)

(

if (i <= 63)

(

TMR_value = TMR0;

TMR0 = 0;TIME = (TMR_count * 0,001024) (TMR_value * 0.000004); / / tijd tussen twee vonken

RPM = (1 / TIJD) * 60 / / RPM, 2 coiler en verspilling vonk = 1 vonk / revolutieEEPROM_WRITE (i, TMR_count);

i ;

EEPROM_WRITE (i, TMR_value);

i ;TMR_count = 0;

)

INTCON.INTF = 0;

)

if (INTCON.T0IF)

(

TMR_count ;

INTCON.T0IF = 0;

)

)void main () (

PORTA = 0;

TRISA = 0b00001000;

PORTB = 0;

TRISB = 0b00000001;PORTB.B3 = 1;

Delay_ms (1000);

PORTB.B3 = 0;INTCON.RBIF = 0;INTCON.GIE = 1; / / Enable Interrupts

INTCON.INTE = 1; / / Interrupt Enable op RB

INTCON.T0IE = 1; / / Enable Timer 0 owerflow onderbrekenOPTION_REG = 0x81; / / Pullups GEHANDICAPTEN!while (1);)

 
Tenuitvoerleggingsstaat een EEPROM schrijf in je interrupt functie resulteert in een uitgeput EEPROM binnen ten minste een paar uur en ook de timing enorme fouten.

 
FVM schreef:

Tenuitvoerleggingsstaat een EEPROM schrijf in je interrupt functie resulteert in een uitgeput EEPROM binnen ten minste een paar uur en ook de timing enorme fouten.
 

Welcome to EDABoard.com

Sponsor

Back
Top