Go Down

Topic: Campionare segnali analogici con ARDUINO 2 (Read 59 times) previous topic - next topic

Sosu97

Salve a tutti  :) ,
volevo porre un problema nel quale mi sono imbattuto lavorando ad un progetto. Devo campionare 6 segnali analogici con un arduino 2. Ho fatto quindi questo programma per testare la velocità "massima" di campionamento:

Code: [Select]

unsigned long StartWait,EndWait,WaitedTime;
unsigned int Samples[6];

void setup() {
  Serial.begin(9600);
}

void loop() {
  StartWait=micros();
  Samples[0]=analogRead(A0);
  Samples[1]=analogRead(A1);
  Samples[2]=analogRead(A2);
  Samples[3]=analogRead(A3);
  Samples[4]=analogRead(A4);
  Samples[5]=analogRead(A5);
  EndWait=micros();
  WaitedTime=EndWait-StartWait;
  Serial.println(WaitedTime);
}


Nel monitor seriale vedo stampato il numero 24 o 25 che sono i microsecondi che ha impiegato ad effettuare le sei letture (sarebbero circa 40kS/s). Siccome mi basta campionare meno velocemente ho elaborato quest'altro programma:

Code: [Select]

const unsigned long int TIME_SAMPLE=2000;

unsigned long int StartWait, EndWait, WaitedTime;
unsigned int Sample;

void setup() {
    Serial.begin(9600);
    StartWait = micros();
}

void loop() {
    EndWait = micros();
    WaitedTime = (EndWait-StartWait);
 
    if (WaitedTime>=TIME_SAMPLE){
        StartWait=micros();
        Sample=analogRead(A0);
        Serial.println(WaitedTime);
    }
}


Il problema è che questa volta il programma stampa circa 6238 (sempre us). Qualcuno sa dirmi perchè? Grazie mille in anticipo.
Simone :)

cyberhs

Non hai tenuto conto del tempo impiegato dall'UART a 9600 baud.

Ti conviene stampare il valore all'esterno del ciclo di rilevazione.

Sosu97

Grazie mille,
il primo dei due programmi non teneva conto del tempo della che impiega la seriale a inviare. Ora con le opportune modifiche anche quello stampa 6238... Quindi mi sorge un altro problema, c'è la possibilità di fare in modo che la seriale non mi rallenti il campionamento (ho provato con 115200baud e ci mette 427us)? Quanto veloce massimo riuscirei ad andare col campionamento?

cyberhs

Con la UNO il limite è circa 9000 sample/s, con la DUE non ti so dire.

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