home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


accelerare una moltiplcazione
     
Autore Messaggio opzioni
MB54




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
11.07.2019, alle ore 08:26
caccamo2:
MB54:
caccamo2:
[quote](MB54):puoi lanciare l'acquisizione via software con la frequenza che desideri pur lasciano il clock dell'ADC al massimo.


la larghezza di banda la definisce il filtro anti alias davanti all'adc, che e' obbligatorio, non il sample rate, il sample rate deve essere almeno 2 volte la larghezza di banda, in genere si fa 10 o 100 volte.
Io temo che l'impedenza d'ingresso dell'adc sia troppo bassa e tu non stia acquisendo correttamente.
Rallentare l'acquisizione non e' un buon modo di rimediare, devi metterlo almeno un filtro davanti all'adc.


Filtri ci saranno. La risposta del calcolo secondo algoritmo di Goertzel ha una larghezza di banda che dipende dal rapporto SR/numero di acquisizioni per ogni blocco. I risultati sono quelli del primo grafico qualche post sopra: una campana con lobi secondari; la campana si stringe all' aumentare del numero di acquisizioni per ogni blocco (con aumento dei tempi).

La misura di Vrms, della quale ho chiesto nel 3d, è una misura parallela che non c' entra con Goertzel; voglio usare ogni tanto il vettore dati già acquisito dall' ADC per G. per controllare uno stadio a guadagno variabile e cercare di mantenere ragionevolmente stabile il livello del segnale in ingresso all' ADC. La misura di Vrms è sufficiente che sia spannometrica ed in effetti i calcoli a 8 bit come da te suggerito sono ampiamente adeguati e rapidi. In alternativa potrei usare un compressore analogico.

[quote](caccamo2):
Io temo che l'impedenza d'ingresso dell'adc sia troppo bassa e tu non stia acquisendo correttamente.


L' impedenza di uscita del segnale in ingresso (sinusoide 400-900 Hz) è sui 200 ohm; per l' ADC ho finora usato un tempo di carica del condensatore di 20 TAD, che è sovrabbondante. L' acquisizione a SR 4200 S/s avviene correttamente: i valori RMS letti dall' ADC corrispondono a quelli dell' oscilloscopio, idem la forma d' onda.

caccamo2





postato il:
11.07.2019, alle ore 19:35
ok se sei sicuro di acquisire bene allora deve esser solo questione di sincronizzazione, magari via software non viene deterministico e ti falsa la misura, l'unica sarebbe usare un micro piu' versatile tipo un dspic o un cortex m pero' se riesci a cavartela cosi why not...
curiosita', che clock gli stai dando? Non ti preoccupa il jitter?



-There is no philosophy which is not founded upon knowledge of the phenomena, but to get any profit from this knowledge it is absolutely necessary to be a mathematician- D.Bernoulli
MB54




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
11.07.2019, alle ore 19:58
caccamo2:
ok se sei sicuro di acquisire bene allora deve esser solo questione di sincronizzazione, magari via software non viene deterministico e ti falsa la misura, l'unica sarebbe usare un micro piu' versatile tipo un dspic o un cortex m pero' se riesci a cavartela cosi why not...
curiosita', che clock gli stai dando? Non ti preoccupa il jitter?


Sto provando adesso a 64M fisso, TAD 1/64= 1µS, dai 6 ai 20 TAD per la carica del condensatore. Visto che mi avanza tempo fra un acquisizione e l' altra ci infilo in mezzo i calcoli. In questo modo i tempi si riducono molto. Che é quello che volevo, ma mi vengono numeri ad minchiam. Probabilmente ho fatto qualche errore nel codice (ma non mi pare)-: ho stampato il tutto e questa sera lo rivedo.

Già lo vidi nelle prime prove: se acquisisco di fila su un file, al SR voluto, e poi elaboro in seguito .. viene tutto da previsioni, stabile, riproducibile.Fin troppo bello. Se invece acquisisco un sample, lo elaboro, metto il delay eventuale,poi ne acquisisco un altro , lo elaboro e così via ..non funziona.
Prima o poi ci arrivo, ma adesso sono fuso. Ho ormai anche mille varianti delle sub e mi sono un poco perso. Domani preparo qualche cosa ad hoc, passando anche da excel per verifica.

Per il jitter non ci dormo la notte. Scherzo: a spanne ho stimato che la BW della campana di riconoscimento del tono voluto sia piuttosto larga rispetto alle frequenze in gioco (10-20%) quindi non ho dato importanza sia al jitter (a essere sincero manco ci ho pensato) che alla deriva termica dell' oscillatore interno del PIC. Sbaglio?

Purtroppo non riesco a trovare voglia, tempo e coraggio per imparare l' uso di chip a 16 o 32 bit.A quasi 65 anni i neuroni si prendono troppe pause caffè.




picmicro675




una ogni 10 livelli una ogni 10 livelli


postato il:
12.07.2019, alle ore 06:16
MB54:
picmicro675:

Addirittura riduci il calcolo a passaggi semplificati.

Non ho capito cosa intendi. Cosa dovrei fare?


Fai il calcolo di solo due termini del tipo c = A * B
c = E * 3.
È meglio che A* B * 3, perché in qualche modo l'assembly farà quei passaggi al tuo posto con delle variabili transitorie, magari con qualche stortura che generalmente vengono generate dagli automatismi di compilazione..
MB54




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
12.07.2019, alle ore 10:08
picmicro675:

Fai il calcolo di solo due termini del tipo c = A * B
c = E * 3.


Ho capito... ma ne sai una più del demonio.
Grazie.

Al momento il problema di velocità nel calcolo saltuario di Vrms e offset dc è superato; per la scarsa precisione che mi serve il calcolo a 8 bit è sufficiente e veloce, a 64M diventa una scheggia.....

Il problema a Fosc 64M si risposta sull' acquisizione ADC che potrebbe non avvenire correttamente con TAD Fosc/64. Oggi o nel fine settimana sistemo questo aspetto.

caccamo2





postato il:
12.07.2019, alle ore 10:19
MB54:
caccamo2:
ok se sei sicuro di acquisire bene allora deve esser solo questione di sincronizzazione, magari via software non viene deterministico e ti falsa la misura, l'unica sarebbe usare un micro piu' versatile tipo un dspic o un cortex m pero' se riesci a cavartela cosi why not...
curiosita', che clock gli stai dando? Non ti preoccupa il jitter?


Sto provando adesso a 64M fisso, TAD 1/64= 1µS, dai 6 ai 20 TAD per la carica del condensatore. Visto che mi avanza tempo fra un acquisizione e l' altra ci infilo in mezzo i calcoli. In questo modo i tempi si riducono molto. Che é quello che volevo, ma mi vengono numeri ad minchiam. Probabilmente ho fatto qualche errore nel codice (ma non mi pare)-: ho stampato il tutto e questa sera lo rivedo.

Già lo vidi nelle prime prove: se acquisisco di fila su un file, al SR voluto, e poi elaboro in seguito .. viene tutto da previsioni, stabile, riproducibile.Fin troppo bello. Se invece acquisisco un sample, lo elaboro, metto il delay eventuale,poi ne acquisisco un altro , lo elaboro e così via ..non funziona.
Prima o poi ci arrivo, ma adesso sono fuso. Ho ormai anche mille varianti delle sub e mi sono un poco perso. Domani preparo qualche cosa ad hoc, passando anche da excel per verifica.

Per il jitter non ci dormo la notte. Scherzo: a spanne ho stimato che la BW della campana di riconoscimento del tono voluto sia piuttosto larga rispetto alle frequenze in gioco (10-20%) quindi non ho dato importanza sia al jitter (a essere sincero manco ci ho pensato) che alla deriva termica dell' oscillatore interno del PIC. Sbaglio?

Purtroppo non riesco a trovare voglia, tempo e coraggio per imparare l' uso di chip a 16 o 32 bit.A quasi 65 anni i neuroni si prendono troppe pause caffè.





se usi la funzione delay ci sta che non sia deterministico, devi usare un timer.



-There is no philosophy which is not founded upon knowledge of the phenomena, but to get any profit from this knowledge it is absolutely necessary to be a mathematician- D.Bernoulli
MB54




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
12.07.2019, alle ore 11:30


In tutta la serie di prove il timing era dato dalla lunghezza totale di ogni singola acquisizione (ACQT:20 TAD, conversione 11 TAD, scarica cap 2TAD), associato ad un TAD molto basso (Fosc 8M, ADC clock: Fosc/64) .

In qualche caso ho usato anche i timer, oppure dei loop di ritardo (calcoli fittizi o delay) verificando però con timer inizio e fine della serie di loop.
In tutta questa serie di prove l' algoritmo di Goertzel funzionava correttamente, o così a me sembrava: perlomeno i risultati seguivano le speranze. Unico problema i tempi lunghi. Occorre ricordare che molto spesso si vede ciò che si desidera vedere.


Sto provando adesso con Fosc 64M e clock ADC Fosc/64. Una acquisizione ogni 238µS, che dovrebbe corrispondere ad un sampling rate di 4200 Hz.
Senza calcoli, solo acquisizione. L' acquisizione presenta bene, con piccoli difetti sulle cuspidi dovuti penso alla risoluzione del ADC. Il problema è che facendo un grafico excel dei dati acquisiti con ingresso a 700 e 350 Hz, vengono due belle sinusoidi ma a 85 e 42 Hz anzichè 700 e 350 Hz. Ogni tanto mi tocca lavorare e procederò lentamente con le verifiche

Nell' img quì sotto:
Fin 350 e 700 Hz ( con DDS, impostate e verificate)
Fosc 64M
ADC 10b Fosc/64 -> TAD 1µS tempo tot ADC 33µS
1 ADC ogni 238 µS




visualizzata: F blu : 85,7 Hz, F rossa:la metà
MB54




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
12.07.2019, alle ore 11:48
MB54:


...

Sto provando adesso con Fosc 64M e clock ADC Fosc/64. ...Il problema è che facendo un grafico excel dei dati acquisiti con ingresso a 700 e 350 Hz, vengono due belle sinusoidi ma a 85 e 42 Hz anzichè 700 e 350 Hz.


Cazzata mia nel codice; non riesco a fare le prove fra una telefonata e l' altra e rotture varie. Rinvio a orari migliori.

A parte il timing che NON è quello voluto, mi pare che l' acquisizione dell' ADC sia decorosa.


MB54




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
12.07.2019, alle ore 13:43
L' intervallo di pranzo è sempre utile; trovato errore stupido nel codice.

Nell' img sotto un segnale a 350 Hz, acquisito con le seguenti condizioni:

acquisizione di 100 campioni
MCU: Fosc=64M
ADC: clock= Fosc/64 TAD=1uS ACQT=20TAD tempo totale=33TAD

il timing di acquisizione è dato da interrupt:

curva blu : ogni 238 uS, circa 4200 S/s
curva rossa: ogni 119 uS, circa 8400 S/s

A me pare possa andare; commenti?
MB54




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
12.07.2019, alle ore 13:43
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 

 
 
indietro | homepage | torna su copyright © 2004/2019 GRIX.IT - La community dell'elettronica Amatoriale