Go Down

Topic: Lettura frequenza con Arduino Micro (Read 877 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy