Zdravím
dělám otáčkoměr pro pomalé frekvence, ale s větší přesností ±0.05Hz max 20Hz.
Když je “rychlost_hz=doba;” nezobrazí to nic, když to je “rychlost_hz=pocitadlo;” zobrazuje se počítadlo od 0 do maxima a při přerušení INT0 začne odznova. Nějaký nápad, proč se “pocitadlo” neokopíruje do “doba”
[code]
uint64_t pocitadlo=0, doba=0, doba_last=0,aaa=0;
// přerušení 2Hz pro zobrazení dat na LCD + výpočet frekvence
ISR(TIMER1_OVF_vect){
TCNT1H=0x87;
TCNT1L=0x00;
rychlost_hz=doba; ///**** problémový řádek
obnov=1; //obnoví údaj na displeji, zápis je ve while(1)… a zobrazí údaj “rychlost_hz”
}
//1KHz
ISR(TIMER0_OVF_vect){
TCNT0=0x83;
pocitadlo++;
/// pro ověření frekvence - pin se připojí k multimetru na rozsah Hz
/*if (neguj==0){
neguj=1;
SETBIT(PORTB,0);
}else{
neguj=0;
CLRBIT(PORTB,0);
}*/
}
ISR(INT0_vect){
_delay_ms(5); //ošetření zákmitů
TIMSK0=0x00; //pokus, žádná změna
_delay_ms(1); //pokus, žádná změna
doba=pocitadlo; /// proč se pocitadlo neokopíruje do doba???******
pocitadlo=0;
TIMSK0=0x01;
}[/code]
Zobrazení informací
while(1){
if(zobraz==1){
sprintf(buffer,"%u Hz", rychlost_hz);
lcd_puts("Frekvence:\n");
lcd_puts(buffer);
zobraz=0;
}
......
}