Pages: [1] 2   Go Down
Author Topic: Oscilloscopio con scheda audio  (Read 2560 times)
0 Members and 1 Guest are viewing this topic.
Parma
Online Online
Edison Member
*
Karma: 20
Posts: 2356
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,

Volevo realizzare un oscilloscopio con Arduino ma sopratutto per Arduino e i miei esperimento con gli infrarossi ma sono giunto però alla conclusione che la seriale è troppo lenta per trasferire i dati necessari per campionare a 40 KHz nonostante l'analogRead con prescaler impostato a 16 sia in grado, seppur con imprecisione, di campionare a 77 KHz.

Avevo pensato di memorizzare i dati nella ram o in una eeprom per un replay in differita di un intervallo di qualche secondo e di passare poi questi dati compressi con qualche algoritmo tramite la seriale ma la scrittura su eeprom 24LC256 raggiunge un massimo di 12,8 kbyte/s stando al datasheet e quindi ho scartato l'idea.
*Datasheet 24LC256 : 5ms max write cycle time (byte or page), dato che una pagina è 64 bytes, ottengo (1/0.005)*64=12.800 bytes al secondo

La mole di dati è infatti data, considerando un campionamento minore di 38.400Hz ed una precisione di 8 bit invece di 10 (tanto col prescaler diminuito si ottengono risultati più approssimati) è di ben 38,4 kbyte/s.

La ram interna è decisamente troppo piccola (1 Kb) e quindi non dispongo di interfaccie di output per comunicare col pc.

Mi è sorta dunque un'idea pensando a questo insormantabile a prima vista problema: utilizzare la scheda audio del computer?
Dovrebbe disporre almeno di un campionamento di 44100 Khz e 16 bit di risoluzione (qualità CD) quindi potrebbe andare bene per i miei esperimenti con gli infrarossi, ora vi chiedo:

-Qualcuno a già provato?
-Come posso evitare di fare danni al computer? Quali precauzioni posso prendere? Devo tenere conto di effetti capacitivi/induttivi particolari?
-Avete qualche informazione su come "sondare" un segnale dalla breadboard e leggerlo tramite scheda audio

Nota: Dispongo di un jack da 3.5 vergine quindi potrei iniziare a costruire "la sonda"

Ciao a tutti e grazie per la vostra partecipazione
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La massima quantità di dati per volta che puoi trasferire verso una EEPROM I2C è 30 byte perché il buffer I2C è di 32 byte: 2 byte vengono usati per l'indirizzo e gli altri 30 per i dati.

La SRAM interna è di 2 KB, cmq sempre poca.

Per la scheda audio, personalmente non ci ho provato ma esistono alcuni software che fanno questa operazione. Si chiamano software sampler e sono programmi tipo gigastudio, HALion, Kontakt. Poi non li conosco in dettaglio, ripeto: mai usati.

EDIT:
qui un lungo elenco:
http://en.wikipedia.org/wiki/Software_sampler
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Volevo realizzare un oscilloscopio con Arduino ma sopratutto per Arduino e i miei esperimento con gli infrarossi ma sono giunto però alla conclusione che la seriale è troppo lenta per trasferire i dati necessari per campionare a 40 KHz nonostante l'analogRead con prescaler impostato a 16 sia in grado, seppur con imprecisione, di campionare a 77 KHz.

Guarda che se hai un Arduino con FTDI puoi dialogare con il PC fino a 1 Mbit/s, ovvero 125 kByte/s, decisamente molto più veloce del ADC.



Logged

Parma
Online Online
Edison Member
*
Karma: 20
Posts: 2356
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se c'è un'interfaccia così veloce allora cambiano molte cose e slitta l'utilizzo della scheda audio che comporta maggiori rischi di danneggiare il pc.

Ora però sorgono alcune domande a cui non ho trovato risposta con Google:
-Come posso scrivere su FDTI con arduino? Con la seriale avevo Serial.write()
-Come posso leggere da FDTI con il pc? Con la seriale configuravo i miei programmi sulla porta COM
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ora però sorgono alcune domande a cui non ho trovato risposta con Google:
-Come posso scrivere su FDTI con arduino? Con la seriale avevo Serial.write()

L'FTDI è collegato alla seriale, basta che metti Serial.begin(1000000); e la Vcom sulla USB lavorerà a questa velocità.
Puoi facilmente verificarlo con uno qualunque degli sketch demo di Arduino, p.e. quello che stampa la tabella ASCII, modifica la Serial.begin(), apri la Vcom sul pc con programma emulazione terminale che ti permette di impostare 1 mbps e sei pronto per il test.
Ovviamente se vuoi spedire le letture ADC senza perderle devi bypassare wiring sia per la lettura del ADC che per l'invio dei dati sulla seriale, se non lo fai i vari colli di bottiglia imposti da wiring non ti permettono di inviare dati con quella velocità in modo continuo.


Logged

Parma
Online Online
Edison Member
*
Karma: 20
Posts: 2356
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.arduino.cc/en/Serial/Begin dice che al massimo si può impostare 115200, come mai?
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
For communicating with the computer, use one of these rates: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, or 115200. You can, however, specify other rates - for example, to communicate over pins 0 and 1 with a component that requires a particular baud rate.

C'è scritto quali sono i valori standard per la comunicazione con il pc, ma c'è anche scritto che puoi usare valori diversi, non è indicato nessun limite massimo che è dato dall'UART del micro e il clock, con 16 MHz  1 Mbps è il massimo possibile.
Se non ci credi fai la prova che ti ho indicato e vedrai da solo che funziona.
Logged

Parma
Online Online
Edison Member
*
Karma: 20
Posts: 2356
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Rivedendo i "pezzi" che ho in casa mi è venuta un'idea:
E' possibile utilizzando un ATTiny 85 standalone (eventulmente a 20 MHz tramite oscillatore esterno) e collegarsi ai pin 1 e 2 di una scheda Arduino Uno per trasmettere attraverso la sua USB ad almeno 1 Mbit/s?
In questo modo avrei un micro dedicato solo alla funzione di oscilloscopio senza però la necessità di avere un altra porta USB, altri chip FDTI, etc..
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E' possibile utilizzando un ATTiny 85 standalone (eventulmente a 20 MHz tramite oscillatore esterno) e collegarsi ai pin 1 e 2 di una scheda Arduino Uno per trasmettere attraverso la sua USB ad almeno 1 Mbit/s?

Per farlo devi tirare via l'ATmega 328 da Arduino, abbastanza scomodo e alla lunga rompi qualche pin, dovresti prendere un convertitore USB basato su FTDI standalone, ma a questo punto ti conviene spendere qualcosina in più e prenderti un piccolo dso standalone come questo, hai 2 Megasamples/s, stadio amplificato d'ingresso e ha il suo schermo lcd, se cerchi in giro lo trovi ad un prezzo sensibilmente minore di quello praticato da Futura Elettronica.
« Last Edit: September 14, 2011, 12:12:26 pm by astrobeed » Logged

Parma
Online Online
Edison Member
*
Karma: 20
Posts: 2356
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Astrobeed per la risposta,
Ma perchè dovrei togliere il 328 se voglio solo inviare e non ricevere?
Non posso agganciarmi al pin 1 e basta e utilizzare così l'usb lasciando il micro al suo posto mentre è acceso?
Quali danni rischio di fare?

PS: Il link non funziona, punta all'home page e non al prodotto
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Astrobeed per la risposta,
Ma perchè dovrei togliere il 328 se voglio solo inviare e non ricevere?

Perché ad RX del FTDI è collegato il Tx del ATmega, due TX in parallelo non vanno molto d'accordo.

Quote
PS: Il link non funziona, punta all'home page e non al prodotto

Adesso funziona.
Logged

Parma
Online Online
Edison Member
*
Karma: 20
Posts: 2356
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In che senso non vanno d'accordo? Se non uso Serial.begin sul 328 tutto dovrebbe andare liscio. Nella documentazione leggo:

Digital Pins 0-1/Serial In/Out - TX/RX (dark green) - These pins cannot be used for digital i/o (digitalRead and digitalWrite) if you are also using serial communication (e.g. Serial.begin).

Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data. On the Arduino Diecimila, these pins are connected to the corresponding pins of the FTDI USB-to-TTL Serial chip. On the Arduino BT, they are connected to the corresponding pins of the WT11 Bluetooth module. On the Arduino Mini and LilyPad Arduino, they are intended for use with an external TTL serial module (e.g. the Mini-USB Adapter).

O c'è qualche problema di tipo elettronico tipo tipo qualche effetto capacitivo o altro?
Grazie ancora
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

In che senso non vanno d'accordo? Se non uso Serial.begin sul 328 tutto dovrebbe andare liscio. Nella documentazione leggo:

Nel senso che se su Arduino c'è caricato uno sketch che utilizza la seriale, praticamente quasi tutti, metti in corto il TX dell'ATmega con quello dell'ATTiny, il rischio di fare danni è quasi nullo, però non puoi comunicare sulla seriale.
Se ogni volta che usi "l'oscilloscopio" devi caricare su Arduino uno sketch che ti disattiva sicuramente la seriale allora tanto vale che carichi direttamente lo sketch per trasformarlo in un oscilloscopio senza usare un micro dedicato.

Logged

Parma
Online Online
Edison Member
*
Karma: 20
Posts: 2356
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, allora il problema non esiste e posso procedere.
Sostanzialmente le ragioni per utilizzare un micro dedicato a ruolo di oscilloscopio sono:
- Si può clockare a 20 Mhz facilmente
- Fa solo quello
e portano entrambe a tempi di campionamento minori e quindi una maggiore frequenza.

Il micro "principale", il 328 è libero di svolgere altri compiti che non richiedono la seriale. Se il 328 si mettesse anche a campionare per l'oscilloscopio sarebbe per forza di cose molto più lento nel campionamento e il codice si complicherebbe parecchio visto che non ci sono thread o cose del genere.

Grazie a tutti, vi terrò aggiornati se funziona dopo le prime prove
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9158
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, allora il problema non esiste e posso procedere.
Sostanzialmente le ragioni per utilizzare un micro dedicato a ruolo di oscilloscopio sono:
- Si può clockare a 20 Mhz facilmente
- Fa solo quello

C'è il piccolo problemino che gli ATtiny non hanno l'UART, hanno l'USI che non è la stessa cosa e non possono dialogare a 1 Mbps, di usare la seriale software non se ne parla proprio.
Logged

Pages: [1] 2   Go Up
Jump to: