You are on page 1of 4

Minimalista Arduino DSP (MiniArDSP)

Sobre minimalista Arduino DSP


Esta a configurao mais bsica para fazer efeitos de udio qualidade decente
com um Arduino. O sistema baseia-se tanto o nosso tutorial PWM e nosso tutorial
ATmega ADC . A configurao bsica um valor de 10 bits lidos em ADC0, e jogado
para fora atravs de um de 16 bits, PWM duplo nos pinos 9 e 10. existem dois
botes, nos pinos 2 e 3, que podem ser utilizados para modificar os parmetros. A
razo para os botes e no botes, que a ADC j completamente consumida
com o sinal de udio analgico que vem dentro Esta uma verso mais focada do
nosso bsico de configurao Arduino PWM , alvejado em pedais de efeitos. Para
uma verso finalizada com filtros, amplificadores, feedback e mix, consulte a
nossa Escudo Stomp .
Na configurao do hardware
O seguinte esquema a verso bsica para comear. Eventualmente, haver uma
verso melhor com um dual opamp, e ganho, mistura, feedback e nvel de
botes. Mas isso pode demorar um pouco para terminar. O 3k9 e resistores 1M
deve ser de 1% (ou melhor), se possvel. Alm disso, o sinal de entrada tem de ser
a partir de um misturador ou outro dispositivo de potncia com uma baixa
impedncia de sada e um sinal forte. Ligar um no violo no ir funcionar com esta
verso.

Amostra de som
Para dar uma idia do que possvel com essa configurao mnima, aqui est uma
amostra de som. Foi gravado usando uma configurao analgica sightly melhor do
que o mostrado acima. Ele usa trs plos filtros anti-aliasing na entrada e sada, e
misturar e botes de feedback. O sinal foi tomado diretamente de um violo, e
registrado em um computador. Os primeiros 2 bits sonoros demonstrar o nvel de
rudo e frequncia de resposta de uma passagem direta atravs do sinal. O ltimo
pedao de som um efeito flanger.
MiniArDSP amostra de som
Biblioteca Arduino
O seguinte uma biblioteca Arduino (apenas um primeiro rev, nada
extravagante). Faa o download do arquivo compactado, e descompacte-o. A pasta
inteira deve ser colocada em voc bibliotecas pasta em seu diretrio de
usurio. Se voc no tem certeza se isso, consulte a nossa descrio
na CodecShield Wiki .
Biblioteca MiniArDSP
Exemplo de cdigo
Neste momento, h apenas um exemplo na biblioteca, e um efeito de
tremolo. Ele tem dois botes, um para aumentar a taxa de tremolo, o outro para
diminuir. um tremolo profundidade total, ento voc vai ter que misturar uma
parte do sinal original de volta para obter uma profundidade menor. Os botes so
muito cortado, neste ponto, que eles precisam para ser aproveitado rapidamente a
fazer pequenas mudanas.
Ligar / Desligar Numeros de Linhas
1 / / Mini_tremolo.pde
2/ / Programa tremelo minimalisitic
3/ / Guest - openmusiclabs.com - 1.13.13
4/ / Recolhe dados de udio da ADC e joga-lo para fora em
5/ / Timer1 PWM. 16b, Fase correta, 31.25kHz. aplica-se uma
varivel
6Vibrao / / frequncia para o som.
sete
8 # include "MiniArDSP.h"
9
10 # definir PWM_FREQ 0x00FF / / frequncia PWM - ver tabela
11# definir PWM_MODE 0 / / Rpido (1) ou Fase correta (0)
12# definir PWM_QTY 2 / / nmero de PWMs, 1 ou 2
13
14 / / Cria tabela de pesquisa de onda senoidal
15/ / PROGMEM armazena os valores na memria do programa
16/ / Ele automaticamente includo no MiniArDSP.h
17PROGMEM prog_int16_t onda senoidal [] = {
18 / / Este arquivo armazenado no MiniArDSP e um valor
1.024
19 Tabela de pesquisa / / onda senoidal de 16 bits assinado
inteiros de
20 / / Voc pode substitu-lo com seu prprio forma de onda,
se quiser
21 # incluem <sinetable.inc>
22 };
23unsigned int localizao ; / / pesquisa de localizao de
valor de tabela
24
25 byte taxa = 5 ; taxa / / tremolo
26byte rate_counter ; / / verso modificvel taxa de
27unsigned int amplitude ; / / atual amplitude tremolo
28unsigned int boto ;
29
30 vazio de configurao () {
31 / / Configurao do boto pinos
32 PORTD | = 0x0C ; / / turno em pullups para os pinos 2 e 3
33
34 / / Configurao ADC
35 ADMUX = 0x60 ; / / esquerda ajustar, adc0, vcc interno
36 ADCSRA = 0xe5 ; / / turno em adc, ck/32, disparador
automtico
37 ADCSRB = 0x07 ; captura / / t1 para gatilho
38 DIDR0 = 0x01 ; / / desliga entradas digitais para adc0
39
40 / / Configurao PWM
41 TCCR1A = ((( PWM_QTY - 1 ) << 5 ) | 0x80 | ( PWM_MODE << 1
)); / /
42 TCCR1B = (( PWM_MODE << 3 ) | 0x11 ); / / ck / 1
43 TIMSK1 = 0x20 ; / / interromper a captura de interrupo
44 ICR1H = ( PWM_FREQ >> 8 );
45 ICR1L = ( PWM_FREQ & 0xff );
46 DDRB | = (( PWM_QTY << 1 ) | 0x02 ); / / turno nas sadas
47
48 TIMSK0 = 0 ; / / turno de t0 - nenhum atraso () ou millis
()
49 sei (); / / turno em interrupes - no realmente
necessrio com arduino
50}
51
52 vazio lao () {
53 enquanto ( 1 ); / / se livrar de jitter
54 / / Nada acontece aqui. se voc quiser colocar o cdigo
aqui
55 / / Se livrar do ISR_NAKED ea reti (); abaixo
56}
57
58 ISR ( TIMER1_CAPT_vect , ISR_NAKED ) { / / ISR_NAKED
usado para salvar
59Ciclos / / relgio, mas probe cdigo no loop seo ().
60
61 / / Obtm dados ADC
62 byte temp1 = ADCL ; / / voc precisa buscar o byte baixo
primeiro
63 byte temp2 = ADCH ; / / sim ele precisa ser feito desta
forma
64 int entrada = (( temp2 << 8 ) | temp1 ) + 0x8000 ; / /
fazer um valor 16b assinado
65
66 boto -; / / verifica botes de vez em quando
67 se ( boto == 0 ) {
68 byte TEMP3 = PIND & 0x0c ; / / pega o pino 2 e 3
valores
69 se ( TEMP3 == 0 ) { / / ambos os botes pressionados
70 } / / no faz nada
71 mais se ( TEMP3 == 0x08 ) { / / boto pressionado at
72 se ( taxa == 1 ); / / no faz nada
73 outra taxa -; / / fazer mais rpido tremolo
74 }
75 mais se ( TEMP3 == 0x04 ) { / / boto para baixo
pressionado
76 se ( taxa == 255 ); / / no faz nada
77 outra taxa + +; / / fazer tremolo mais lento
78 }
79 boto = 0x0400 ; contador / / reset
80 }
81
82 rate_counter -; / / diminuir o nosso contador de
83 se ( rate_counter == 0 ) {
84 / / Cria uma varivel da freqncia e amplitude de onda
senoidal
85 / / Busca uma amostra da tabela de pesquisa
86 amplitude = pgm_read_word_near ( onda senoidal + local )
+ 0x8000 ;
87 / / O + 0x8000 transforma o valor assinado para no
assinado
88 localizao + +;
89 / / Se weve passaram o limite da tabela -> loop de volta
90 / / Volta para o outro lado.
91 localizao & = 0x03ff ; / / forma rpida de fazer
rollover para 2 ^ n nmeros
92 rate_counter = taxa ; contador da taxa / / reset
93 }
94
95
96 / / Multiplicar a nossa entrada pelo valor onda senoidal
97 / / Note o uso do especial multiplicar macro
98 / / Isto mais rpido do que o mtodo normal *
99 / / Este um assinado * assinado, retornando as altas de
16 bits
100 int sada ; / / define varivel antes de us-lo
101 MultiSU16X16toH16 ( sada , entrada , amplitude );
102
103 Dados / / sada
104 OCR1AL = ( sada + 0x8000 ) >> 8 ; / / converter para
unsigned
105 / / E s a sada do topo byte
106 OCR1BL = sada ; / / sada do byte inferior
107 reti (); / / retorno de interrupo - necessrio devido
ISR_NAKED
108}
109

You might also like