ADC a più di 10kHz?

ciao a tutti, sono un po' confuso da alcuni post che ho letto in giro. Mi pare di aver capito che sia possibile praticare conversione adc con un arduino ad alte frequenze. La cosa che non mi è chiara è la "filosofia" dietro a tutto questo.. La lettura viene fatta e poi mandata a una ram interna? come funziona esattamente la cosa? Che velocità si può sperare di ottenere mandando ad es i dati in una schedina SD? magari direttamente in binario.. Si fanno fuori dal loop queste operazioni? Scusatemi se per voi queste cose sono banali ma io sono piuttosto confuso :-[

Davide

Ciao balerion
I dati tecnici dicono:
Up to 76.9 kSPS (Up to 15 kSPS at Maximum Resolution)
Temo che arrivi a quella velocitá solo programmando in assembler.
La velocitá é la somma di tutte le entrate analogiche, percui se vuoi usare tutte le 6 entrate devi dividere per 6.
Ciao UWe

The ADC clock is 16 MHz divided by a prescale factor. The prescale is set to 128 (16MHz/128 = 125 KHz) in wiring.c. Since a conversion takes 13 ADC clocks, the sample rate is about 125KHz/13 or 9600 Hz.

So anyway, setting the prescale to, say, 16, would give a sample rate of 77 KHz. Not sure what kind of resolution you would get though!

altre info e codice: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1208715493/11
Per la perdita di precisione NON ti preoccupare, un tizio ha fatto un oscilloscopio con l'arduino e la perdita di precisione risulta minima. Non si usano "ram interne" ma registri, comunque l'idea è quella

per la velocità all'sd dipende, se lavori in digitale usando la digital read mi pare un bit impiega 100microsec, se usi direttamente i registri arrivi a 50/70microsecondi però la scrittura può essere parallela fino a 8 pin, se riuscissi ad usarli tutti velocizzeresti x8 (ma non so se si può fare, mai lavorato con le flash)

le operazioni di scrittura le puoi fare nel loop, la lettura "veloce" di solito si fa con gli interrupt per essere sicuri di non "mancare" qualche dato.

però son argomenti avanzati, prima fai un pò di pratica se no ci sbatti la testa e basta. molto utile il manuale dell'atmega che trovi sul sito dell'atmel, che ti spiega tutti i registri e come funzionano

ciao Lesto
Quanto so io le schedine SD hanno solo 1 canale seriale e non di piú per poter trasmettere in paralello.
Ciao Uwe

già una line in input e una in output, protocollo SPI, un bell'arcticoletto con connessioni a SD/MMC: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235125412

balerion, insomma a parte la lettura analogica veloce (che comunque puoi fare con un copia incolla del codice e poi usando le normali funzioni arduino) la comunicazione con SD la fai via libreria... se ti fai 2 programmi separati, e una volta che li hai ben testati e capiti unirli dovrebbe essere semplice, diciamo che se hai un minimo di conoscenze del C, anche scolastiche, dovrebbe essere un esercizio per sgranchirsi un pò :slight_smile:
ovvio che se l'SD vuoi usarla non in modo raw ma con filesystem tipo FAT32 o NTFS la cosa si complica assai, anche se trovi librerie precotte ruberanno sicuramente un sacco di CPU per la loro corretta esecuzione

ciao Lesto
Le SD hanno ne FAT32 ne NTFS. Devi usare FAT16; Le SDHD hanno FAT 32 ma molte librerie Arduino non soportano FAT32.
Le SD con FAT16 arrivano fino 2GByte
Ciao Uwe

un altro modo di connessione direttamente con le sd
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1206874649/8
ciao

grazie a tutti per le risposte. ora provo a cimentarmi nell'impresa, vi farò sapere come procedo :wink:
saluti,
davide