Salida de Arduino Audio (2 / 10 paso)

Paso 2: Configurar DAC y prueba

construí mi DAC en un protoboard (figs. 1-3).  El esquema se indica en la fig 8.  A continuación se muestran algunas piezas de código de ejemplo que generan las formas de onda que se muestra en higos 4-7.  En las siguientes piezas de código envíe un valor entre 0 y 255 a "PORTD" cuando quiero enviar los datos a la DAC, se parece a esto:

PORTD = 125; //send datos CAD

Esto se llama direccionamiento del puerto directamente.  En el Arduino, pines digitales 0-7 están todos en el puerto d del chip Atmel328.  La deja comando PORTD nos dice 0-7 pernos a alta o baja en una línea (en lugar de tener que utilizar digitalWrite() ocho veces).  No sólo es más fácil de código, es mucho más rápido para el Arduino procesar y causa las clavijas para todos los cambios simultáneamente en lugar de uno por uno (usted puede sólo hablar con un perno a la vez con digitalWrite()).  Desde d puerto tiene 8 pines en él (pines digitales 0-7) podemos enviamos uno de 2 ^ 8 = 256 posibles valores (0-255) para el control de los pernos.  Por ejemplo, si escribimos la siguiente línea:

PORTD = 0;

fijó clavijas 0-7 bajo.  Con el CAD en pins 0-7 esta salida 0V.  Si nos envía las siguientes:

PORTD = 255;

fijó clavijas 0-7 alto.  Esto hará que la DAC a la salida de 5V.  También podemos enviar combinaciones de baja y alta los Estados a la salida un voltaje entre 0 y 5V de la DAC.   Por ejemplo:

PORTD = 125;
125 = 01111101 en binario.  Esto establece el pin 7 bajo (el msb es 0), pernos alta (los siguiente cinco bits son 1) 6-2, pin 1 bajo (el siguiente bit es 0) y pin 0 alta (el lsb es 1).  Usted puede leer más acerca de cómo funciona aquí.  Para calcular la tensión que esto es la salida de la DAC, utilizamos la siguiente ecuación:

salida de voltaje de DAC = [(valor enviado a PORTD) / 255] * 5V
para PORTD = 125:
salida de voltaje de DAC = (125 / 255) * 5 v = 2.45V

El código siguiente envía varios voltajes entre 0 y 5V y tiene cada uno para un a corto plazo demostrar los conceptos que he descrito arriba.  En la función loop() principal he escrito:

PORTD = 0; //send (0/255) * 5 = 0V a DAC
retardo (1); //wait 1ms
PORTD = 127; //send (127/255) * 5 = 2.5V a DAC
demora (2); //wait 2ms
PORTD = 51; //send (51/255) * 5 = 1V a DAC
retardo (1); //wait 1ms
PORTD = 255; //send (255/255) * 5 = 5V salida DAC
demora (3); //wait 3 MS

La salida se muestra en un osciloscopio en la figura 4.  La línea horizontal en el osciloscopio representa 0V y cada línea horizontal representa una aumento/disminución de voltaje de 2V.  Las notas de la imagen en la figura 4 muestran la salida de cada una de las líneas de código anterior, haga clic en la imagen para ver las notas de la imagen.

 //Analog out //by Amanda Ghassaei 

El código siguiente genera una rampa de 0 a 5V.  En la función loop(), la variable "a" se incrementa de 0 a 255.  Cada vez que se incrementa, el valor de "a" se envía al PORTD.  Este valor se lleva a cabo para 50us antes de enviar un nuevo valor de "a".  Una vez que "a" alcanza 255, se consigue restablecer a 0.  Toma el tiempo para cada ciclo de esta rampa (también llamada el período):

periodo = (duración de cada paso) * (número de pasos)
período = 50us * 256 = 12800us = 0.0128s

por lo que la frecuencia es:
frecuencia de rampa = 1/0.0128s = 78 Hz

La salida de la DAC en un osciloscopio se puede ver en la figura 5.

 //Ramp out //by Amanda Ghassaei 

El código siguiente salidas una onda del seno centrada alrededor de 2.5V, oscilante hasta un máximo de 5V y un min de 0V.  En la función loop(), la variable "t" se incrementa de 0 a 100.  Cada vez se incrementa, la expresión:
127+127*sin(2*3.14*t/100)
se envía al PORTD.  Este valor se lleva a cabo para 50us antes de "t" se incrementa otra vez y un nuevo valor es enviado al PORTD.  Una vez que "t" llega a 100, se consigue restablecer a 0.  El período de esta onda sinusoidal debe ser:

periodo = (duración de cada paso) * (número de pasos)
período = 50us * 100 = 5000us = 0.005s

así que la frecuencia debe ser:
frecuencia de rampa = 1/0.005s = 200 Hz

 //Sine out //by Amanda Ghassaei 

Pero este no es el caso, la salida de la CAD se muestra en la fig 6.  Como se indica en las notas de la imagen, no tiene una frecuencia de 200hz, su frecuencia es más parecido a 45hz.  Esto es porque la línea:

PORTD = 127+127*sin(2*3.14*t/100);
toma mucho tiempo para calcular.  En general multiplicación/división con números decimales y la función sin() tomar el Arduino un montón de tiempo para llevar a cabo.

Una solución es calcular los valores de seno antes de tiempo y guardarlos en la memoria de Arduino.  Entonces cuando el sketch de Arduino está ejecutando todo el Arduino se tiene que hacer es recordar estos valores de memoria (una tarea muy fácil y rápida para el Arduino).  Corrí un simple script en Python (abajo) para generar 100 valores de 127+127*sin(2*3.14*t/100):

importación matemáticas
para x en el rango (0, 100):
imprimir str(int(127+127*math.sin(2*math.pi*x*0.01)),)+str(","),

Almacena estos valores en un array llamado "seno" en el sketch de Arduino por debajo.  En mi lazo, para cada valor de "t" envía un elemento de [] seno a PORTD:

PORTD = seno [t];

La salida de este DAC para este boceto se muestra en la figura 7.  Se puede ver que produce una onda senoidal de 200hz, como se esperaba.

 //Sine out with stored array //by Amanda Ghassaei 

Artículos Relacionados

Generador de código para menús personalizados de Android/Arduino activar salidas de Arduino y apagado. Andriod/Arduino para principiantes. Absolutamente ninguna programación requerida

Generador de código para menús personalizados de Android/Arduino activar salidas de Arduino y apagado. Andriod/Arduino para principiantes. Absolutamente ninguna programación requerida

Actualización: un usuario pidió menú apoyo. pfodApp siempre admite submenús pero he agregado submenús al pfodDesigner. El instructable diseño un sistema de menú Custom muestra cómo utilizar pfodDesigner para crear un menú con submenús que mostrará en
Pulso de salida de Arduino del móvil Android. Ninguna programación requerida

Pulso de salida de Arduino del móvil Android. Ninguna programación requerida

IntroducciónEste Instructable muestra cómo utilizar la aplicación gratuita, pfodDesigner, para diseñar un menú en tu móvil Android que se pulsará una salida en tu placa Arduino sin tener que escribir ningún código en absoluto. El pfodDesigner genera
Registro de salida de Arduino para días con un BeagleBone

Registro de salida de Arduino para días con un BeagleBone

Aquí es un hack rápido para la depuración de proyectos de Internet de las cosasVamos a decir usted construido un bonito, conectados a Internet Arduino proyecto con una elegante interfaz Web servida por, por ejemplo, el escudo de la Ethernet. Después
RegisterWrite - extender las salidas del Arduino/microcontrolador con los registros de cambio

RegisterWrite - extender las salidas del Arduino/microcontrolador con los registros de cambio

Registrar escriba es un ejemplo de programa para ampliar las salidas de Arduino usando un registro de cambio.He escribí un bosquejo sencillo que usa 3 salidas de Arduino para manejar el registro de desplazamiento.Escribí esto como no pude encontrar n
Shield Arduino Audio

Shield Arduino Audio

En este vídeo mostramos los pasos para el montaje de su caso de audio shield Arduino. Para adquirir uno de estos casos, solo volver a mi proyecto de kickstarter: Arduino Audio escudoPaso 1: Cómo montar tu caso de Shield Arduino Audio DSPEl primer pas
Escudo de Arduino Audio DSP

Escudo de Arduino Audio DSP

El escudo de Arduino Audio DSP tiene modulación de anillo, eco, reverb, un oscope, oscilador, generador de forma de onda arbitraria, etc.. Es un sistema de software y hardware, un hombre sano, en una lata!Paso 1: Conseguir un escudo audio de arduinoL
Entrada de Arduino Audio

Entrada de Arduino Audio

Enviar sonido a tu Arduino. Este Instructable le mostrará cómo preparar el audio para que puedan ser muestreado y procesada por un Arduino para hacer proyectos sensibles sonidos y efectos de audio. (Este artículo es un compañero de otro Instructable
¿Arduino Audio accionado el interruptor

¿Arduino Audio accionado el interruptor

Ever quería su entretenimiento en el hogar o el sistema de sonido a la energía encima de sí mismo al conectar tu iPod u otro reproductor portátil de MP3?Vea este vídeo para ver cómo funciona. Entonces voltear a través de los pasos para saber cómo hac
Probador de la salida de Arduino usando LED #Xolcano

Probador de la salida de Arduino usando LED #Xolcano

este es un simple y proyecto muy útil cuando se trabaja en cualquier prototipo te puede usar esto para ahorrar tiempo...! así que empezar letzPaso 1: Componentes necesarios 1) LED 3 mm-#72) 1 k resistencia - #73) protoboard perforado4) soldadura de p
Fácil Arduino Audio Annoyatron

Fácil Arduino Audio Annoyatron

este simple dispositivo simple juega una pequeña melodía a intervalos al azar, entre 5 y 30 segundos cuando apagarán las luces en una habitación. Puede ser hábilmente disfrazada dentro de una caja de tejido, o dentro o debajo de cualquier número de o
Twitter controla salidas de Arduino - no PC - pantalla de LCD + Sensor datos a Twitter

Twitter controla salidas de Arduino - no PC - pantalla de LCD + Sensor datos a Twitter

Control digital hacia fuera los pernos por mensajes de Twitter. Lecturas del sensor enviadas a Twitter.MODIFICADO por JOHN Xativa de Twitter2LCD escrito originalmente por Fabrizio GranelliVer * Usted puede enviar mensajes de texto a la pantalla de LC
Arduino Due entrada guitarra de ADC y DAC salida mezclador

Arduino Due entrada guitarra de ADC y DAC salida mezclador

esta es la secuela a mi instructable que ofrece un circuito de entrada de señales generadas por una guitarra en el arduino due ADC.[Actualizado el 26 de enero de 2014 - el esquema ha cambiado... ver notas a continuación.]Este instructivo describe el
Audio estéreo con Arduino

Audio estéreo con Arduino

Recientemente yo he publicando un montón de proyectos que usan un 8 bit escala de resistenciaconvertidor digital a analógico (DAC) y un Arduino para hacer sonido. (ver el cuadro de efectos vocales de Arduino, Arduino tambor sampler y mi tutorial de s
Arduino intermedio: Entradas y salidas

Arduino intermedio: Entradas y salidas

Continuando con mi introducción a Arduino puesto, irá este Instructable sobre algunos temas un poco más avanzados con Arduino, relativos específicamente a controlar y muchas entradas y salidas. La siguiente clase cubre cómo conectar entradas de Ardui