Lendo e reproduzindo sinal senoidal

Olá, sou novo aqui, estou fazendo um TCC com uso de arduino para processamento de dados EMG, esses sinais chegam em 4 entradas analógicas do arduino, e preciso trabalhar com esse sinais e processar, para comandar outros dispositivos, a dúvida, que ao fazer um teste com o arduino para ler um sinal senoidal de 0 a 1V de freq de 1Khz, e imprimir no serial monitor para testar a leitura, os dados ficavam totalmente distorcidos, a impressão que tinha alaising, mas não poderia pela freq de amostragem do conversor, que inclusive fiz um teste de tempo de leitura que dava de 116us ou 8620Hz... Vocês tem alguma sugestão de como ler e reproduzir esse sinal com confiabilidade...agradeço desde já...

Olá Kiko,

Cara, não tenho um grande conhecimento na área de analogica, mas vou tentar te ajudar na medida do possível.

O arduino uno se utiliza do microcontrolador atmega328 que possui conversores de sinal de analogico para digital de 10 bits, logo, existem limitações na precisão de leitura quando se precisa de grandes precisões.

o que vou falar é apenas a titulo de te dar um caminho, mas só testando pra ver se funciona.
Tente mudar a AREF ou seja, a referencia Analogica do arduino, que originalmente é de 5V, se você esta trabalhando com valores na faixa de 1v, talvez deva colocar um valor de algo como 1,2v para ser o valor de referencia e assim ter mais precisão.

Quanto a questão de saida, o arduino fornece apenas sinal analogico simulado, visto que ele emite sinal PWM que é na verdade um sinal digital.
Porem, existem algumas formas de passar PWM para analogico indo desde CIs D/A até filtros de pwm para analogico.

Bem, não sei se ajudei, é que nunca enfrentei um problema como esse antes.

qualque cosia da um retorno.

A precisão até que é boa para o que preciso, o que está estranho são os valores que ele amostra no monitor, para uma frequência baixa como 100Hz. como exemplo os dados que ele captou de uma senoide de 0 a 840mv.
0,78 0,08 0,34 0,82 0,15 0,25 0,84 0,23 0,17 0,82, isso na hora de analisar o sinal fica totalmente errado..Da impressão que a leitura está lenta em relação ao sinal, por exemplo de 0,78 cai direto para 0,08 é muita coisa em pouco tempo...

Kiko_3003:
A precisão até que é boa para o que preciso, o que está estranho são os valores que ele amostra no monitor, para uma frequência baixa como 100Hz. como exemplo os dados que ele captou de uma senoide de 0 a 840mv.
0,78 0,08 0,34 0,82 0,15 0,25 0,84 0,23 0,17 0,82, isso na hora de analisar o sinal fica totalmente errado..Da impressão que a leitura está lenta em relação ao sinal, por exemplo de 0,78 cai direto para 0,08 é muita coisa em pouco tempo...

Tenho ideia de que cada analogRead demora aproximadamente 100ms o que é mais que suficiente para ler um sinal a 100Hz. Talvez estejas a executar alguma operação pesada entre cada leitura. Provavelmente, estas a fazer um Serial.print entre cada leitura, que deve ser muito lento (não tenho a certeza disto).
Tenta, por exemplo, guardar os dados num array e ao fim de algumas leituras imprimir tudo duma só vez.

Ola
O teu problema esta logo explicado nestas palavras:" sinal senoidal"
Pensa nisto, a onda é sinosoidal logo como sabes em que parte da onda estas a medir?
O ADC vai ler um "momento" do que esta na entrada, como o teu sinal é variavel ao longo do tempo é de esperar isto:

0,78 0,08 0,34 0,82 0,15 0,25 0,84 0,23 0,17 0,82, isso na hora de analisar o sinal fica totalmente errado.

Nota que se observares bem os teus resultado eles devem andar sempre compreendidos num minimo e num maximo conhecido(o pico minimo da onda e o pico maximo da onda).
Podes sempre fazer um "bruteforce" à onda fazendo um oversample e depois uma media mas isso é feio ...
A frequencia é sempre 1KHz?

Utilizar o analogRead é meio caminho andado para o que estás a ver...

Leste o manual e colocaste o ADC em free running?