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