|
Autore |
Messaggio |
opzioni |
double_wrap
postato il: 11.09.2019, alle ore 16:58 |
Prova a cambiare questa istruzione nel setup()
ADCSRA = 0b11100101; // set ADC to free running mode and set pre-scalar to 32 (0xe5)
con questa
ADCSRA = 0b11100110; // set ADC to free running mode and set pre-scalar to 64 (0xe6)
il campionamento scende a cira 20 KHz, la massima frequenza a 10 KHz e i 32 step sono ora distanziati di circa 300 Hz
Si perde poco (nella visalizzazione!) perche' sopra i 10 Kz in un segnale musicale ci sono sole le armoniche alte degli strumenti che servono a fornire i timbri e gli inviluppi. Per avere una idea il tasto piu' a destra di un pianoforte (Do8) e' di 4186 Hz.
ps: analogRead di arduino campiona a circa 9.5 KHz in modalita' single read
"se peso cado, ma se cado non peso"
adamatj.altervista.org |
|
MB54
postato il: 11.09.2019, alle ore 19:35 |
daniele1979:
ho fatto anche la prova prendendo un generatore audio on line, ho fatto fare la spazzolata da 10 a 20.000 hz,
li comunque dovrebbero andare su, ed invece nulla
SW a parte, per generare il segnale usi la scheda audio del pc (bene) o il cellulare (forse male?
|
|
daniele1979
postato il: 11.09.2019, alle ore 21:24 |
ho usato il pc. con sia con scheda audio integrata che esterna |
|
daniele1979
postato il: 12.09.2019, alle ore 18:23 |
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); // display object
arduinoFFT FFT = arduinoFFT(); // FFT object
void setup() {
ADCSRA = 0b11100110; // set ADC to free running mode and set pre-scalar to 64 (0xe6)
ADMUX = 0b00000000; // use pin A0 and external voltage reference
pinMode(buttonPin, INPUT);
mx.begin(); // initialize display
delay(30); // wait to get reference voltage stabilized
}
void loop() {
// ++ Sampling
for(int i=0; i<SAMPLES; i++)
{
io ho fatto cosi e0 giusto?ma non e' cambiato nulla |
|
double_wrap
postato il: 13.09.2019, alle ore 10:08 |
se hai seguito questo progetto
https://create.arduino.cc/projecthub/Shajeeb/32-band-audio-s…
https://github.com/shajeebtm/Arduino-audio-spectrum-visualiz…
- conferma che hai usato questo codice https://create.arduino.cc/projecthub/code_files/229785/downl…
- posta i link da cui hai scaricato le librerie <arduinoFFT> e <MD_MAX72xx> cosi' si da uno sguardo ai metodi usati (impostazioni e comandi di FFT e display) e agli esempi per testare il display a 4 matrici
- usa un generatore audio con un NE555 cosi' ci sono un bel po' di armoniche (se non hai piu' 20 anni oltre i 10 KHz l'orecchio non sente piu' nulla)
nell'articolo del link si parla di 5 modi diversi di visualizzazione
>>>Five different display modes are supported which can be switched with the push button>>>
li hai verificati tutti? in cosa differiscono (lineari, ottave, logaritmici, ecc)?
"se peso cado, ma se cado non peso"
adamatj.altervista.org |
|
daniele1979
postato il: 13.09.2019, alle ore 18:12 |
allora :
le librerie le ho prese dal sito di arduino,per la precisione qui
https://www.arduinolibraries.info/libraries/arduino-fft
https://www.arduinolibraries.info/libraries/md_max72-xx
i 5 modi sono l effetto visualizzato barra punto sotto sopra
|
|
daniele1979
postato il: 13.09.2019, alle ore 18:46 |
ho scaricato da qui https://create.arduino.cc/projecthub/code_files/229785/downl…
ma non riesco ad aprire il file ino.
l ho preso da qui
https://github.com/shajeebtm/Arduino-audio-spectrum-visualiz…
|
|
caccamo2
postato il: 13.09.2019, alle ore 19:33 |
Queste librerie hanno una marea di opzioni, come dicevo occorrono anni di esperienza per imparare a fare analisi digitali in frequenza, non puoi pretendere di fare solo copy and paste.
Poi bisogna vedere cosa significhi per te -funziona alla sperandio- hai fatto un confronto con uno strumento? No, e allora come cavolo fai a dire che -non risponde alle frequenze corrette- ?
E' inutile quindi che ti metti a provare tutte le librerie che trovi senza ragionarci su un attimo, hai messo un filtro anti alias? Hai misurato almeno con uno oscilloscopio se le alte frequenze arrivino all'adc o vengano filtrate prima?
... |
|
daniele1979
postato il: 13.09.2019, alle ore 19:43 |
scusami tanto , ma sono 2 le voci da cambiare?
while (!(ADCSRA & 0x10)); // wait for ADC to complete current conversion ie ADIF bit set
ADCSRA = 0b11110110 ; // clear ADIF bit so that ADC can do next operation (0xf6)
int value = ADC - 512 ; // Read from ADC and subtract DC offset caused value |
|
daniele1979
postato il: 13.09.2019, alle ore 23:42 |
come filtro questo va bene?
|
|
|