plotter seriale

Ciao a tutti. Ad un Arduino Nano porterei da una breadboard un segale analogico tra 0 e 5V e vorrei campionarlo a 1.000 Hz (il segnale ha una frequenza max di circa 200 Hz). Il nano ce la farebbe secondo voi a prendere 1.000 campioni al secondo? E come posso fare per monitorarlo con il Plotter Seriale? Sono agli inizi con la programmazione di Arduino, ci sarebbe uno sketch di esempio che potrei seguire? Grazie a tutti.

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

In verità avevo chiesto semplicemente un'indicazione verso uno sketch per campionare un segnale. Immagino che ce ne siamo vari e qualche indicazione mi sarebbe stata utile. Questo dovrebbe prescindere dalle mie conoscenze, comunque me la cavo discretamente con l'analogica e ho programmato TANTI anni fa. Un po' di mentalità mi dovrebbe essere rimasta. Con pazienza vorrei rivedere il wire, ma per il momento ho urgenza di mostrare un segnale analogico e da qui la tentazione di esplorare Arduino e la richiesta di qualche indicazione di esempio. Per presentarmi dovrei far ben mente locale (non è nella mia mentalità una presentazione BREVE, perché a quasi sessant'anni ancora non so nemmeno io chi sono e cosa voglio. In quanto alla riga di saluto, sono restato in linea a quanto avevo visto in altri post, chiedo scusa se ho offeso qualcuno, ma era evidente che non era mia intenzione. Non immaginavo di entrare in un ambiente così rigido e formale, ma comunque non intendo offendere nessuno e vedrò dove e come ho violato il regolamento. Grazie comunque.

Non hai offeso nessuno, e qui di certo non e' un'ambiente "rigido e formale" (se fai un giro sul forum, vedrai che molte volte sono tollerati nei post anche battute, offtopic e scherzi, se non diventano esagerati, roba che in altri forum manco permettono) ... e quello di Guglielmo non e' un rimprovero, ma il suo messaggio "standard" di saluto ai nuovi iscritti che non si sono ancora presentati (un po il suo modo di dare il benvenuto ;))

La presentazione non e' un'obbligo formale, e' solo buona norma farla come primo post, cosi chi poi legge le tue domande avra' un'idea u po piu precisa sul tuo livello di competenza, e potra' evitare di darti risposte con termini troppo specifici in campi dove non hai competenza, come anche di darti risposte in termini troppo elementari in quei campi dove gia hai conoscenze, cosa che sara' piu utile anche a te, alla fine ... :slight_smile:

Grazie della tua risposta garbata ed equilibrata, Etemenanki. Forse ho visto troppo male io e di questo mi scuso con tutti, ma mi era sembrato di percepire un leggero tono da "squadrismo" che in verità mi stonava in un luogo che dovrebbe essere aperto a tutti e non di proprietà di qualcuno, come un forum dovrebbe essere, specie se dedicato all'idea di un prodotto "open". A mia volta ho dedicato molte ore e molto tempo a rispondere su forums di altri argomenti (ovviamente donando il mio tempo) e conosco bene le problematiche di chi chiede e non si sa come rispondegli, ma proprio per questo mi sono limitato a chiedere solo qualche basilare esempio generale di acquisizione e visualizzazione grafica di un generico segnale, credo che questo sia indipendente dalle mie conoscenze di base. E ancora ripeto che se ho sbagliato mi scuso, ma il modo di rispondere nella mia generazione era considerato importante. Forse è l'ora hce io mi aggiorni anche in questo.

In quanto alle mie conoscenze è veramente difficile per me darne un'idea chiara senza cadere nel banale e se vuoi anche leggermente imbarazzante, per questo l'ho evitato volentieri.

Invece quello che farei ora volentieri è cercare di imparare a leggere (e forse poi a scrivere) uno sketch un po' più complesso del "Blink" e, siccome gioco volentieri con l'analogica (retaggio dei miei tempi), l'acquisizione di un segnale da breadboard mi sembrava una buona sfida alla mia portata. Un sentito grazie a chi vorrà darmi qualche indicazione e/o qualche link ad uno sketch per questo fine.

Con simpatia, einss.

Ti ri-invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Dentro l'IDE recente c'e' anche nel menu una voce di menu per plotterare un dato.
Qui un tutorial: http://www.mauroalfieri.it/elettronica/plotter-seriale-arduino-ide-1-6.html

einss:
Forse ho visto troppo male io e di questo mi scuso con tutti, ma mi era sembrato di percepire un leggero tono da "squadrismo"

Mah ... ::slight_smile:

Che vuoi che ti dico ... SE il richiedere il RISPETTO DEL REGOLAMENTO è per te "tono da squadrismo" :o :o :o, beh ... ok, allora SI, lo è, perché la presentazione è richiesta ed è obbligatoria, nell'apposito thread, come, appunto, da regolamento (che ti ho invitato a leggere) e che, come moderatore, ho il compito di far rispettare.

Quindi ...
... cortesemente, anche facendo un copia/incolla ... mettila nel thread di presentazione indicato. Grazie.

Guglielmo

Ho messo qualche nota su di me nelle presentazioni, o almeno c'ho provato, non so se ci sono riuscito.

Gentilissimo Signor gpb01,

lo "squadrismo" sta a mio modesto avviso nella forma e cortesia delle risposte, non nella sostanza di un regolamento che, per quanto discutibile e non sempre logico e chiaro, non avrò nessuna difficoltà ad assecondare, semmai poi riservandomi dopo il diritto a civile critica. Sulla non chiarezza del citato regolamento vorrei segnalare che gli stessi messaggi di risposta che ho ricevuto sono da questo punto di vista in lieve conflitto, si veda il gentilissimo Etemenanki che scrive:

"La presentazione non e' un'obbligo formale, e' solo buona norma farla come primo post"

laddove invece si dice il contrario al punto 16.7. Mi sembra significativo.

Comunque non ho problemi ad essere escluso se disturbo questo forum, a voi decidere cosa fare, io per conto mio posso solo assicurare un tono sempre molto gentile e compensivo.

Proprio per questo permettetemi di ringraziare sentitamente nid69ita per i link che ha segnalato. Soprattutto l'ultimo sul plotter seriale, che approfondirò. Rimane invece la mia originaria richiesta, se qualcuno gentilmente la volesse prendere in considerazione, sull'indicazione di qualche sketch di base per acquisire (campionare a 1000 Hz) un segnale analogico (tra 0 e 5V e con frequenza limitata a 200 Hz), per poterlo poi visualizzare in nel Plotter Seriale. Naturalmente non chiedo che venga scritto apposta, solo chiedo se esiste già pubblicato e se qualcuno mi può aiutare a trovarlo, per poterlo io poi guardare ed eventualmente modificare nei limiti in cui ne sarò capace. Di nuovo grazie a tutti.

einss:
... se qualcuno gentilmente la volesse prendere in considerazione, sull'indicazione di qualche sketch di base per acquisire (campionare a 1000 Hz) un segnale analogico (tra 0 e 5V e con frequenza limitata a 200 Hz) ...

... campionare per quanti secondi e salvare i dati dove ? Stiamo parlando di una MCU che ha appena 2K di SRAM, usata per le variabili, lo stack, ecc. ecc.

Un solo secondo di ADC a 10 bit (quindi int a 16 bit), con un campionamento a 1KHz ... richiede un array di dimensioni già superiori a tutta la SRAM disponibile.

Guglielmo

Grazie per la risposta.

Come detto sopra, per il momento mi accontenterei solamente di visualizzare il segnale. Campionarlo e vederlo sul plotter seriale in tempo reale e per ora perderlo. Solo per il gusto di vederlo. Poi eventualmente mi porrò il problema di memorizzarlo per un qualche postprocessing.

Mi sbaglio o lo ADC integrato nell'Arduino campiona solo a 8 bit?

Forse esiste già un qualche sketch già pronto o facilmente adattabile?

Grazie.

L'ADC di Arduino campiona a 10 bit, quindi ti serve un int.

Esempi a basso livello (ovvero NON con l'uso dell'istruzione di Arduino analogRead()) qui ne trovi pochi ... prova a fare una ricerca nel forum tramite l'apposita funzione.

Puoi poi provare a cercare con Google o ... prenderti il datasheet, vedere come funziona l'ADC e scrivere tu il codice ...
... ho visto, dalla tua presentazione, che abbiamo esperienza simile (io ho cominciato un po'prima ... 4004), per cui NON dovrebbe esserti cosa difficile.

Guglielmo

Una risoluzione di 8 bit mi sarebbe più che sufficiente. Se l'istruzione AnalogRead() prende solo i primi 8 bit e li mette in un "dato"a 8 bit (come si chiama?), a me andrebbe più che bene. Inoltre sono tantissimi anni che non tocco più l'Assembler e un livello un po' più alto (come il Wire) non mi spiacerebbe.

Forse un AnalogRead() nel corpo del loop con un ritardo di un millisecondo farebbe al caso mio?
E per poterli visualizzare nella finestra del plotter devo inviare uno streaming di dati alla seriale? Mi farebbe comodo visualizzare almeno qualche secondo per volta (diciamo 4 o 5 secondi o giù di lì).

Mi basta il livello base per ora, forse esiste già un esempio del genere? Provo a cercare anche io.

Il segnale che mi diverto a prendere per ora sarà un ECG (il mio), dove sto prestando tutte le attenzioni sui disturbi e sulla sicurezza; ben volentieri condividerò poi le mie elucubrazioni con chi fosse interessato. In seguito vorrei vedere se riesco ad elaborarlo per estrarre un po' di parametri non convenzionali (e quindi poi mi serviranno più bit di risoluzione). La Heart Rate Variability (HRV) ha avuto un momento di grossa fama circa 20 anni fa e poi è tramontato l'interesse clinico (ingiustamente). Allora lavoravo con una equipe di cardiologi e avevamo fatto molte pubblicazioni sull'argomento. Ora che posso giocare mi piacerebbe rivederne alcuni punti.

Ancora grazie per l'aiuto.

Non inserire alcun delay() ... la analogRead() è già piuttosto lenta di suo :smiley: :smiley: :smiley: ... per questo suggerivo di lavorare a più basso livello, ma NON in assembler, sempre in C, accedendo direttamente alle porte ed hai registri della MCU (cosa perfettamente ammessa nell'IDE di Arduno, che, alla fine, comunque chiama avr-gcc).

L'ADC ritorna 10 bit, se lo metti in un byte ti perdi i 2 bit più significativi ... ed è un bel problema ...

Come esempi, basta che guardi quelli già presenti nel IDE ... es. "Examples -> Communication -> Graph" ... senza usare processing, apri il Serial Plotter e ... hai quello che vuoi già fatto. Per andare alla massima velocità, togli quel delay(2).

Guglielmo

Grazie Guglielmo, provo a digerire tutto quanto e ci risentiamo, a breve spero. Grazie anche agli altri, tutti suggerimenti utili per me. Userò un Nano per simpatia per le breadboard, poi vi farò sapere.

einss:
lo "squadrismo" sta a mio modesto avviso nella forma e cortesia delle risposte, non nella sostanza di un regolamento che, per quanto discutibile e non sempre logico e chiaro, non avrò nessuna difficoltà ad assecondare, semmai poi riservandomi dopo il diritto a civile critica. Sulla non chiarezza del citato regolamento vorrei segnalare che gli stessi messaggi di risposta che ho ricevuto sono da questo punto di vista in lieve conflitto, si veda il gentilissimo Etemenanki che scrive:

Non voglio entrare in polemica. Da regolamento la presentazione è obbligatoria. Non tutti gli utenti di questa comunità sono d'accordo. Chi frequenta il forum sezione italiana avrà di certo notato una certa "rigidità" che forse su altri forum o sezioni non c'é. Io personalmente, dopo anni che frequento questo forum/sezione, sono ben contento di queste regole.
Chi frequenta altri forum molto più "liberi" potrà facilmente notare le differenze. A mio modesto parere il forum qui è molto più serio e meno "caciarone" di altri forum.
Inoltre "open" non vuol dire "faccio quel che mi pare" come invece alcuni utenti pensano, soprattutto i più giovani (non tutti), poco inclini a rispettare i regolamenti. Pensiero mio. Nessuna polemica, ripeto.

einss:
Grazie Guglielmo, provo a digerire tutto quanto e ci risentiamo, a breve spero. Grazie anche agli altri, tutti suggerimenti utili per me. Userò un Nano per simpatia per le breadboard, poi vi farò sapere.

Occhio ai cloni cinesi da pochi euro, se leggi nel forum già alcuni hanno avuto problemi se si fa qualcosa di più che non accendere a tempo di led

nid69ita:
Non voglio entrare in polemica. Da regolamento la presentazione è obbligatoria.
.... [omissis]

Non avevo risporto proprio per evitare qualsiasi polemica :wink: ...

... comunque aggiungerei solo che Etem è un vecchio utente a cui può essere, negli anni, sfuggita qualche nuova regola, io che lo chiedo, sono un moderatore che, per funzione, conosco piuttosto bene quello che nel regolamento c'è scritto e che quindi richiedo. :slight_smile:

Comunque, direi che possiamo considerare chiusa la faccenda e concentrarci sul problema.

Guglielmo

Il post solo per scusarmi, soprattutto con einss, se ho involontariamente dato indicazioni errate ... ricordavo che all'inizio era richiesta ma non obbligatoria, ma non avevo consultato il regolamento aggiornato in tutti i suoi punti, colpa mia ...

( > Guglielmo: stai leggero con la frusta, che poi ho problemi a stare seduto ... :stuck_out_tongue: :smiley: :smiley: :D)

Per quanto invece riguarda il problema, ma non sarebbe piu conveniente utilizzare un'ADC esterno, per la velocita' ? ... oppure non porta vantaggi a causa del fatto che poi va interrogato via I2C ? ...

... mah ... l'ADC esterno lo vedo bene se deve aumentare la risoluzione (es. a 12 o 16 bit), a lui invece basterebbero già 8 bit quindi, mi sembra sprecato un tale chip esterno.

Se si evita l'uso del "core" Arduino e si usano direttamente i registri ...

  1. si può fare in modo di avere solo gli 8 bit più significativi perdendo i due meno significativi (datasheet, pagina 306):

The ADC generates a 10-bit result which is presented in the ADC Data Registers, ADCH and ADCL. By default, the result is presented right adjusted, but can optionally be presented left adjusted by setting the ADC Left Adjust Result bit ADMUX.ADLAR.
If the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read ADCH.

  1. la velocità di campionamento (datasheet pag. 305) massima è di ben 76.9 kSpS ... che, a alla masima risoluzione, diventa di 15 kSpS. Direi più che sufficiente per i suoi scopi.

Il problema è poi ... che deve trasmettere i dati ... su porta seriale ... :grin: :grin: :grin:

Guglielmo

Per me non era mai stata polemica. Per me l’argomento era già chiuso, o meglio mai nato. Ma, viste le repliche, ho sentito e sento prima di tutto il dovere di dire chiaramente cosa penso. Già la premessa “non voglio entrare in polemica” potrebbe essere scambiata proprio per il contrario, cercherò quindi di non cadere nell’equivoco. Non credo di aver mai detto, neanche tra le righe, che “open” stia per “confusione” e comunque non sono, PURTROPPO, tra i più giovani! In ultimo, vista la OVVIA utilità dei regolamenti, andrebbe ben scritto un regolamento su come si scrivono i regolamenti.

Fatte queste premesse, io qui non sono a casa mia e, finché sarò ospite, mi assoggetterò, come ho già fatto, anche a regole che non condivido pienamente (nella fattispecie, non perché non senta anche io il bisogno di regole!). In particolare, ho speso anni a scrivere regolamenti, posso assicurare tutti che non me ne sfugge la necessità, è il concetto in sé di presentazione superficiale che mi aberra. Ma questo è un problema tutto mio e non intendo assolutamente discuterne pubblicamente. Ho però passato tutta la vita a cercare, in controtendenza col mondo attuale, di non apparire e di volare basso, non credo che cambierò carattere adesso che mi avvio al tramonto. Per questo la mia ritrosia a scrivere poche righe (e molte son troppe).

Invece trovo utile parlare subito di pregresso background tecnico-culturale, cosa che certamente aiuta a capirsi, ma quello purtroppo non emerge da poche parole standard. In ultimo, la mia umile ed utopistica visione è quella di un mondo dove le regole sono interiori, non scritte ma sentite, altrimenti si rischia di scivolare nei regimi dove la “caciarra” viene repressa sì efficacemente, ma a spese di tanti altri valori irrinunciabili. Sono sicuro che esistano altri regimi dove i forum sono molto molto più “ordinati” che da noi. Il discorso porta lontano e non è certo questa la sede. Chiudo facendo un sentitissimo complimento a tutti coloro che dedicano energie e tempo personali a rispondere meglio possibile a tutti, compresi quelli non facili come me.

N.B. nel frattempo ho visto che gli esempi già inclusi nell’ultimo IDE di Arduino rispondono ampiamente alle mie necessità immediate. L’impasse mi veniva dal fatto che avevo un vecchio IDE che non conteneva il Plotter Seriale, di cui avevo sentito parlare e che però non conoscevo e quindi credevo che fosse uno sketch da aggiungere. Invece me lo trovo già pronto nell’IDE. Grazie di tutto il vostro aiuto e delle vostre preziose segnalazioni.