|
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 ?
|