Ho usato il seguente programma per calcolare la frequenza:
int sigPin = 47; //signal pin
int state; //the state of the input
int oldstate;
unsigned long t; //timer
unsigned long s; //samples
unsigned long c; //count
unsigned long f; //frequency
void setup()
{
pinMode(sigPin, INPUT);
pinMode(DAC0, OUTPUT);
Serial.begin(9600);
}
void loop()
{
c = 0;
t = micros(); // read time at start of sampling
for(s=0; s<1000; s++){ //take a number of samples
state = digitalRead(sigPin); //read state
if (state != oldstate){ //if state changes:
c++; //increment counter
oldstate = state; //and reset current state
}
}
t = micros() - t; //read time at end of sampling
c = c/2; // need to divide by 2 because counter incremented on each change - two changes per cycle
f = 1000000*c/t; //calculate frequency
analogWriteResolution(12);
analogWrite(DAC0, map(f, 0, 1023, 0 ,4095));
Serial.print(" , 12-bit PWM value : ");
Serial.print(map(f, 0, 1023, 0 ,4095));
Serial.println("\n frequenza");
Serial.println(f);
delay(500);
}
quello che non capisco e perche
cambiando il valore di s, mi cambia anche la frequenza che mi legge ? io devo calcolare frequenze che arrivano a max 200 kHz. Uso questo programma perche avendo arduino due non posso mettere le librerie FreqCount e FreqCounter; essendo il nuovo microcontrollore AT91SAM3X differente dagli altri microcontrollori ed ha registri timer counter diversi. Ho provato a cercare di modificare la libreria ma il nuovo microcontrollore ha pochissimi registri, qualcuno sa
come modificarla o farne una nuova con i registri del AT91SAM3X ?