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
Domanda da 1000€ su analogRead()
20 messaggi
• Pagina 1 di 2 • 1, 2
0
voti
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.
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.
0
voti
il web non delude mai!
dopo 20min di ricerca ho trovato un sito molto carino!
consiglio la lettura!!!
https://www.gammon.com.au/adc
dopo 20min di ricerca ho trovato un sito molto carino!
consiglio la lettura!!!
https://www.gammon.com.au/adc
-

francicoma
60 1 6 - Frequentatore

- Messaggi: 151
- Iscritto il: 5 lug 2013, 1:23
0
voti
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
-

francicoma
60 1 6 - Frequentatore

- Messaggi: 151
- Iscritto il: 5 lug 2013, 1:23
1
voti
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.
In linea di principio sarebbe meglio non farlo con dei delay o letture continue, ma con interrupt.
-

SandroCalligaro
2.970 2 4 5 - G.Master EY

- Messaggi: 1181
- Iscritto il: 6 ago 2015, 19:25
0
voti
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
1
voti
Non è una buona idea fare moltiplicazioni in un service di interrupt.
-

PietroBaima
90,7k 7 12 13 - G.Master EY

- Messaggi: 12206
- Iscritto il: 12 ago 2012, 1:20
- Località: Londra
0
voti
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.

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.

0
voti
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
Davide
20 messaggi
• Pagina 1 di 2 • 1, 2
Chi c’è in linea
Visitano il forum: Google [Bot] e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)





pigreco]=π