[Nota: Post guardado nos rascunhos faz tempo...]
Esses dias fiz um experimento com áudio no Arduino Due (em breve mais informações) e fiquei pensando qual seria a taxa de amostragem do ADC. Até procurei mais informações, mas no final decidi fazer um teste de verdade na placa para ter ideia da frequência. Aproveitei que o mesmo código roda em qualquer placa compatível de Arduino e testei em outras duas que tinha aqui. Na foto acima tem o Arduino Due, um Uno R3 (claro) e uma placa Feather Huzzah da Adafruit (resumidamente é um ESP8266 com um carregador de bateria).
Dá pra testar a taxa de amostragem de duas formas. Uma seria subir um pino digital qualquer, medir uma entrada analógica e, depois de concluída a medida, baixar o pino. Um osciloscópio ligado no pino digital mede o tempo de amostragem. Inverte o valor e tem-se a frequência. A outra maneira só precisa da placa e de um PC. Li sobre esse método em algum fórum, mas perdi o link. Você faz milhares de medidas numa entrada do ADC, conta o tempo decorrido e, ao final, divide pelo número de amostras. É este segundo método que implementei no código abaixo (disponível no meu Github):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /* Arduino ADC Sampling rate test Rodrigo Feliciano - 10/01/2018 www.pakequis.com.br */ #define N_SAMPLES 10000 unsigned long test; float tmp = 0; word i; word dumb_read; void setup() { //resolution 8, 10 or 12 bits //analogReadResolution(12); //Arduino Due //analogReadResolution(10); //Arduino Due //analogReadResolution(8); //Arduino Due Serial.begin(9600); } void loop() { test = millis(); //ADC Test for(i=0;i<N_SAMPLES;i++) dumb_read = analogRead(0); tmp = (millis() - test); tmp = (N_SAMPLES/tmp) * 1000; //1000ms = 1s Serial.print(tmp); Serial.print(" - "); Serial.println(dumb_read); delay(1000); } |
Os resultados no Arduino Uno foram estes:
Deu algo em torno de 8,9 kHz, com uma pequena variação entre um teste e outro.
Já no Arduino Due o taxa ficou em absurdos 217 kHz cravados, sem variação. Muito boa para áudio, como eu já havia confirmado em outros testes.
Agora a Feather Huzzah que tem apenas um canal ADC que funciona só até 1 V, no máximo (todos os testes foram feitos sem sinal nas entradas). Ela também tem uma variação nos testes. A taxa é bem baixa para um processador que roda a 80 MHz.
E pra concluir o consumo de memória do código dos testes em cada placa. No Uno o código consome 11% da Flash e 10% da RAM (grande parte deve ser por causa da serial):
No Due são 5% da Flash, sem informações da RAM:
Já na Feather são absurdos 24% da Flash e 40% da RAM. Claro que isso deve ser do código para o Wi-fi e outros enchimentos.
Muito bom
ResponderExcluirBoa tarde Rodrigo, fiz testes semelhantes e cheguei a resultados praticamente iguais aos seus. Estou trabalhando agora com a placa da Intel, Edison. Você tem alguma experiência com a mesma? estou desenvolvendo uma aplicação e gostaria de saber como alterar a taxa de amostragem para 30Khz. obrigado
ResponderExcluirBeleza!
ResponderExcluir