Pages: [1]   Go Down
Author Topic: Lettura frequenza con Arduino Micro  (Read 739 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Volevo acquisire un segnale in frequenza con Arduino Micro.
Il segnale è un'onda quadra variabile da 2 Hz a 1,5 kHz con duty cicle del 50%.

Per vedere se il poco codice scritto avesse senso ho collegato l'uscita PWM di un Arduino Uno a 500 Hz con duty cicle del 50% all'ingresso dell'Arduino Micro.

Con la funzione Pulse In il valore letto è quasi costante e si aggira intorno ai 499 Hz quindi con una buona accuratezza e precisione:
Code:
long int getFrequency(int pin)
{
  long freq = 0;
  for(unsigned int j=0; j<SAMPLES; j++)
    freq+= 500000/pulseIn(pin, HIGH, 500000);
  return freq / SAMPLES;
  freq=500000/pulseIn(pin, HIGH, 250000);
}
Il fatto che PulseIn sia bloccante non è che mi piaccia molto quindi volevo usare gli interrupt:
Code:
attachInterrupt(0, getFrequency, RISING);

void getFrequency()
{
  oldValue=actualValue;
  actualValue=micros();
  frequenza=1000000/((actualValue-oldValue));
}
Qui i valori letti oscillano molto di più, la media è intorno ai 470 Hz ma un valore ogni 5 è intorno agli 800 Hz.
Cosa sbaglio?
Grazie a tutti
« Last Edit: January 29, 2013, 08:08:17 am by rents85 » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 115
Posts: 7265
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
ti segnalo questo articolo --> http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/
e questo topic del prof. che sta costruendo un frequenzimetro --> http://arduino.cc/forum/index.php/topic,145059.0.html
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1]   Go Up
Jump to: