Pagina 1 di 2

Domanda da 1000€ su analogRead()

MessaggioInviato: 9 gen 2018, 23:28
da francicoma
E' possibile sfruttare la frazione di tempo in cui arduino aspetta che l'adc gli dia i dati?

da quanto mi ricordo con i PIC la lettura analogica nei microcontrollori viene gestita impostando HIGH un bit del registro del ADC il quale a sua volta alzerà un altro bit a lettura ultimata.
arduino dissipa completamente il tempo che intercorre tra questi due momenti, nel moi progetto mi sarebbe essenziale riuscire a recuperare tale tempo per far girare il programma principale, Come potrei Fare?

Grazie mille in anticipo

Re: Domanda da 1000€ su analogRead()

MessaggioInviato: 9 gen 2018, 23:51
da aldofad
Non so risponderti ma forse posso favorire una deduzione.
Ricordo bene che nelle prime versioni di Arduino (0.22 circa), se non si inseriva almeno un delay(10) nel loop, le letture analogiche risultavano molto inesatte. Nelle versioni successive questo obbligo venne meno.

Re: Domanda da 1000€ su analogRead()

MessaggioInviato: 9 gen 2018, 23:59
da francicoma
il web non delude mai!
dopo 20min di ricerca ho trovato un sito molto carino!
consiglio la lettura!!! ;-)
https://www.gammon.com.au/adc

Re: Domanda da 1000€ su analogRead()

MessaggioInviato: 10 gen 2018, 0:03
da MarcoD
Quanto tempo stimi che duri l'esecuzione dell' analogread ?
Forse puoi gestire la la lettura della conversione A/D con un interrupt. Ma non so come fare .

Re: Domanda da 1000€ su analogRead()

MessaggioInviato: 10 gen 2018, 20:09
da francicoma
sicuramente poco, nel progetto sto facendo misurazoni true RMS di tensione e corrente a 230V quindi mi serve un campionamento continuo , avevo provato anche eseguire la misura di 10 periodi e dopo eseguire il resto del codice ma è troppo lento, devo comandare anche un triac e dargli continuamente gli impulsi... non posso permettermi funzioni con loop a vuoto

Re: Domanda da 1000€ su analogRead()

MessaggioInviato: 10 gen 2018, 23:02
da SandroCalligaro
Se devi misurare il valore RMS, dovrai (immagino) avere un campionamento regolare...
In linea di principio sarebbe meglio non farlo con dei delay o letture continue, ma con interrupt.

Re: Domanda da 1000€ su analogRead()

MessaggioInviato: 11 gen 2018, 18:16
da dadduni
Non so con l interfaccia arduinica come si fa ma sull' atmega una volta impostato il prescaler dell' ADC si può impostare il free running mode in cui fa continue letture e generata un interrupt a fine si ogni singola lettura. Per l RMS dentro la routine di interrupt si può semplicemente fare la moltiplicazione e l accumulo poi il resto lo gestisce il main

Re: Domanda da 1000€ su analogRead()

MessaggioInviato: 11 gen 2018, 18:33
da PietroBaima
Non è una buona idea fare moltiplicazioni in un service di interrupt.

Re: Domanda da 1000€ su analogRead()

MessaggioInviato: 11 gen 2018, 18:44
da MarcoD
Dovresti impostare il progetto da un punto di vista matematico-sistemistico:
Quale è la frequenza massima del segnale pseudo sinusoidale da acquisire,
quale è il valore massimo di distorsione,
quale è il massimo errore di misura che puoi tollerare ?
Da cui forse ricavi la minima frequenza di campionamento e il numero di campioni che ti servono per i calcoli.
Forse puoi fare dei calcoli di simulazione off-line ( in C++, basic, processing, mathcad, quello che preferisci ); cerco di spiegarmi: supponi di avere la sinusoide spezzettata in 1000 campioni, calcoli il valore efficace, poi prendi solo un campione ogni 10 (hai ora solo 100 campioni) ricalcoli il valore efficace, di quanto cambia rispetto a quello calcolato precedentemente?
E se la sinusoide è distorta, cosa capita?
devi prendere i campioni per un periodo esatto ? Se no. quale errore commetti?
...
dopo vedi se l'hardware è in grado a soddisfare quello che vuoi fare.
O_/

Re: Domanda da 1000€ su analogRead()

MessaggioInviato: 11 gen 2018, 19:14
da dadduni
Non è una buona idea fare moltiplicazioni in un service di interrupt.

Questo è certamente vero ma ho pensato che l'OP volesse monitorare la tensione di rete a 50Hz per calcolare l'RMS e pilotare un triac.
Senza conoscere l'applicazione direi che il triac non venga pilotato a più di 100Hz ossia ogni volta che la tensione di rete passa per lo 0 e che, per campionare 50Hz una frequenza di campionamento di 1ksps sia più che sufficiente. A questi rate di frequenze c'è tutto il tempo necessario per far fare al micro una moltiplicazione e una somma senza doversi impelagare in soluzioni più complesse (credo)

Però sono deduzioni tirate un po' a caso, probabilmente sbaglio #-o
Davide