pokusavam da napravim frekvencmetar ali mi se javio problem :(
On bi radio na sledeci nacin: jednostruko ispravim signal nakon cega sa schmitom dobijam 1 i 0, pomocu toga otvaram tranzistor koji vodin na INT0. Frekvenciju merim tako sto interaptom na uzlaznu ivicu ukljucim TMR0, a sledecim interaptom iskljucujem tajmer, za to vreme na interapt tajmera se povecava brojac. Kako znam vrednost tajmera i broj interapta, ako pomnozim to dvoje dobijam periodu signala u us (zbog tajmera us). Ovo mi je da izmerim samo jednu periodu, ako bih hteo non stop da merim onda ne bih isklucivao tajmer nego bi na svaku drugu uzlaznu ivicu resetova brojac, ali to sada nije bitno, gore navedeno mi bas ne radi kako sam zamislio. Naime uvek mi gresi za nekih 9%. Evo koda, pa vidite. Ako imate drugu ideju dobro je dosla.... Hvala
int i=0,pe=0,k=0,m=1;
float re=0,ff=0,fr=0,procenat=9.518847368;
char txt[13];
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RA0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISA0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
void interrupt(){
if(INTF_bit){
k++;
if(k<100){
switch(pe){
case 0:INTCON=0b10110000;TMR0=120;pe=1;break; //ovim regulisem da se na drugu uzlaznu ivi gasi tajmer
case 1:INTCON=0b10010000;pe=0;m=0;break; // promenljiva k sluzi samo da mi duze radi simulacija (nebitna je)
}
}
}
if(k==100){
PORTA=2;
if(i!=0)PORTA=2;
TRISB=0;
INTCON=0;
}
INTF_bit=0;
if(T0IF_bit){
if(m){
i++; // brojac
TMR0=120;
}
T0IF_bit=0;
}
}
void main() {
OPTION_REG=0b01001000;
INTCON=0b10010000;
TRISA=0;
Ansel=0;
Anselh=0;
TRISB=1;
PORTA=0;
PORTB=0;
while(1){
if(k==100){
re=1000000/(i*161);
fr=ff-(procenat*ff)/100; //racunanje frekvencije uz oduzimanje procenta greske
FloatToStr(fr,txt);
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,txt);
}
}
}
Konkretno interesuje me kako da merim vreme izmedju 2 interrupta, objasnjenje za ovo bi mi dosta pomoglo.....