Go Down

Topic: Lettura frequenza con Arduino Micro (Read 813 times) previous topic - next topic

rents85

Jan 29, 2013, 11:46 am Last Edit: Jan 29, 2013, 02:08 pm by rents85 Reason: 1
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: [Select]

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: [Select]

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


Go Up