Campionamento arduino

Ciao a tutti. Ho un problema riguardo il campionamento con arduino. Ho una scheda Arduino Duemilanove a cui ho collegato una shield GPS per lo scarico dei dati , latitudine e longitudine ed ho settato la porta con ricezione 4800 baud. Sul pin 2 analogico ho un potenziometro lineare che dovrei campionare a 200 hz e mi consigliano di aumentare il range a 2khz.Ma se fisso per la ricezione del GPS 4800 baud ovvero dati/sec come posso campionare il segnale sul pin 2 a 2khz. Forse sarò stato impreciso ed avrò commesso errori ma sto imparando da poco .... se potreste aiutarmi chiarendo anche i concetti ve ne sarei molto grato.

Grazie a tutti

Donato

puoi sospendere la scansione durante l'acquisizione del gps o no? sennò la vedo molto difficile....arduino e il multitasking non vanno molto d'accordo...

No non posso , voglio utilizzare Arduono come telemetria , mi serve quindi memorizzare i dati dei sensori con la posizione della macchina.

io ho un progetto simile ma acquisisco ogni cosa per conto suo: gps, accelerometri sensori mando a display e memorizzo

in successione non penso ti comporti gravi casini un ritardo di qualche ms tra uno e l'altro...

Si hai ragione sicuramente farò come dici tu . Quello ke vorre kiederti è come fare a campionare il potenziometro a 2 khz. sinceramente non sono riuscito a leggere,trovare alcuna informazione circa la massima frequenza di campionamento.Ho fatto un ciclo molto semplice per vedere quanti dati Arduino Duemilanove riesce ad acquisire in 1 sec e non riesco a leggerne più di 70-80 ovvero 80 hz. Sono un po pochini. Se potessi aiutarmi o delucidarmi in merito a questa questione te ne sarei grato.

Donato

cosa vuol dire leggere a 2khz? fare 2000 scansioni?

Ciao Garinus e grazie per la tua collaborazione. Leggere a 2khz vuol dire leggere 2000 dati in un secondo potrei scendere a 1000 ma non meno. Non riesco a sapere a quanto legge Arduino alla massima frequenza di campionamento. Ho dei sensori di torsione e inerziali che mi impongono tali frequenze per la stabilità e rigidità del telaio. Se anche tu stai realizzando un tuo progetto di telemetria ad esempio le sospensioni a quanto le stai campionando? Se non ti dispiace sarebbe possibile sentirti per cell per discuterne?

Ciao Donato e grazie ancora per il tuo contributo , almeno disctendo conosco i miei limiti :)

Sildon dovresti riuscire a leggere sul datasheet del micro avr che c'è sul tuo arduino (168 o 328). All'inizio di questa pagina http://arduino.cc/en/Main/Hardware ci sono i due link.

Una curiosità: il progetto è tutto tuo o lavori con una università? E in quel caso di quale università di parla?

ciao e in bocca al lupo

Ciao Uccio avevo già letto la scheda HW ma non neparla in maniera chiara. Il progetto è mio ma sono coadiuvato da uno studio di progettazione. Ho esperienze in tal senso e voglio togliermi delle curiosità lavrando su diversi telai delle superbike.Da una verifica SW sembra che arduino campioni intrno ai 100 hz , che per me sono pokini. Grazie a tutti per il vostro contributo :)

come hai fatto sta verifica? con un ciclo e poi ti sei fatto mandare i dati via seriale?

Ciao Uccio ho fatto un semplice ciclo di 1 sec e fatto campionare un segnale aalogivo e mi ha registrato circa 80 valori :)

bè allora l'hai fatto male. Ti copio quello che c'è scritto sul datasheet del micro atmel a pagina 243

? 10-bit Resolution ? 0.5 LSB Integral Non-linearity ? ± 2 LSB Absolute Accuracy ? 13 - 260 [ch956]s Conversion Time ? Up to 76.9 kSPS (Up to 15 kSPS at Maximum Resolution)

come leggi può fare sino a 76.9 kilo sample al secondo o 15 con la massima risoluzione. Ma poi dice anche :

By default, the successive approximation circuitry requires an input clock frequency between 50 kHz and 200 kHz to get maximum resolution.

quindi lui ha bisogno di un clock tra 50 e 200 k ma arduino ha un micro da soli 16 M, quindi non si capisce come faccia. Bisognerebbe chiedere a Banzi

Ciao Uccio. Sono daccordo con te, ma alla fine tutti noi memorizziamo i dati via software. Se i valori sono quelli che ti ho dato io , ho provato a memorizzare char e non int per risparmiare dati e più di 100 hz non sono andato. Disposto a parlarne ben volentieri.

Saluti

Donato C.

si in effetti hai ragione... quindi dovrai dire addio ad arduino?

.per il telaio credo di si , per gli altri sensori Arduino va benissimo .Poi con Arduino ci farò dell'altro, è troppo flessibile. Comunque mi piacerebbe approfondire l'argomento almeno per capire fino a dove posso spingermi con Arduino . Tra le schede della AT e secondo quanto ho rilevato io c'è differenza e vorrei capire la cosa.Tu che sei più esperto di me e sei da molto tempo nel settore ti riuscirebbe trovare una risposta a questo quesito?

Grazie

posta il tuo codice di campinamento che valutiamo se può andare più veloce.
io arrivo a 1000, 1200 campionamenti scrivendo su un lcd…

usando un semplice loop di campionamento vedo che arduino 2009 riesce ad effettuarne circa 10k in un secondo. ovviamente non ci sono altre istruzioni ad aggravare il calcolo del tutto:

void loop(){ val = analogRead(SENSOR); i++;

if( i > 10000 ){ time = millis();

Serial.print( "MilliSec: " ); Serial.print( time ); Serial.print( " Letture effettuate: " ); Serial.println( i );

delay( 10000 ); } }

sulla seriale ottengo:

MilliSec: 1120 Letture effettuate: 10001