#include #include #define MAXAV 10 void main(void) { FILE *fp; int ret; int frequency, periodes,rpm,i; double dperiode; int parameter; unsigned char timespan = 1; int samples=0; struct timeval tv,tv_start; int avval[MAXAV]; gettimeofday(&tv_start,NULL); // configure frequency counter parameters fp = fopen("/dev/fcounter","wb"); if(fp) { parameter = 0xaa370000; parameter += timespan; fwrite(¶meter,4,1,fp); fclose(fp); } else printf("Cannot open device \n"); // Read the counter result (exit with Ctrl-C) fp = fopen("/dev/fcounter","rb"); if(fp) { while(1) { ret = fread(&frequency,4,1,fp); if(ret<=0) break; ret = fread(&periodes,4,1,fp); if(ret<=0) break; frequency /= timespan; dperiode = 512.0/(double)periodes; // 1 jiffies entspricht 512 Hz // bei Torzeit 1s und Priodenzaehler 512 Hz, ist die Periodenmessung bei 22 Hz genauer, dar?ber die Frequenzmessung if(frequency < 22) { rpm = (int)(dperiode*60.0); printf("Periodic measurement: "); } else { rpm = frequency*60; printf("Frquency measurement: "); } for(i=(MAXAV-1); i>0; i--) avval[i] = avval[i-1]; avval[0] = rpm; rpm = 0; for(i=0; i