Escalas en el Arduino con un Dac de 12 Bit SPI (1 / 2 paso)

Paso 1: Escalas en el escudo de arduino audio

Primero descargar y compilar el código

 /* freqout(freq, t) // freq in hz, t in ms a simple tone generation function generates square waves of arbitrary frequency and duration program also includes a top-octave lookup table & transposition function */ 
 #include 
 #define LDAC 8 #define ChipSel 9 //using macros for pin numbers is better than using a variable -BM 
 ///Danger Will Robinson! /**************************** ***************************** This code will work ONLY with Arduino boards using ATMega 328 or 168 processors! Ex: Uno, Nano, Pro Mini. - BM ***************************** ****************************/ 
 void DACWrite( uint16_t ); 
 int ptime; int k, x, dur, freq, t; int i, j; 
 float ps; // variable for pow pitchShift routine 
 float noteval; 
 // note values for two octave scale // divide them by powers of two to generate other octaves float A = 14080; float AS = 14917.2; float B = 15804.3; float C = 16744; float CS = 17739.7; float D = 18794.5; float DS = 19912.1; float E = 21096.2; float F = 22350.6; float FS = 23679.6; float G = 25087.7; float GS = 26579.5; float AA2 = 28160; float A2S = 29834.5; float B2 = 31608.5; float C2 = 33488.1; float C2S = 35479.4; float D2 = 37589.1; float D2S = 39824.3; float E2 = 42192.3; float F2 = 44701.2; float F2S = 47359.3; float G2 = 50175.4; float G2S = 53159; float AA3 = 56320; 
 //octaves - corresponds to piano octaves float oct8 = 4; float oct7 = 8; float oct6 = 16; float oct5 = 32; float oct4 = 64; float oct3 = 128; float oct2 = 256; float oct1 = 512; float oct0 = 1024; 
 //rhythm values int wh = 1024; int h = 512; int dq = 448; int q = 256; int qt = 170; int de = 192; int e = 128; int et = 85; int dsx = 96; int sx = 64; int thx = 32; 
 // major scale just for demo, hack this 
 float majScale[] = { A, B, CS, D, E, FS, GS, AA2, B2, C2S, D2, E2, F2S, G2S, AA3 }; 
 void setup() { pinMode( ChipSel, OUTPUT ); // sets the digital pin as output pinMode( LDAC, OUTPUT ); 
 SPI.begin(); PORTB |= 0b00000011; //set chip select and LDAC to default high state - BM 
 Serial.begin(115200); } 
 void loop() { for (i = 0; i <= 11; i++) { ps = (float)i / 12; // choose new transpose interval every loop for (x = 0; x <= 15; x++) { noteval = (majScale[x] / oct4) * pow(2, ps); // transpose scale up 12 tones 
 // pow function generates transposition // eliminate " * pow(2,ps) " to cut out transpose routine dur = 100; freqout((int)noteval, dur); 
 delay(10); } } } 
 void DACWrite( uint16_t outbuf ) { outbuf |= 0b0111000000000000; //change some bits at the beginning to configure DAC char* w_bytes; w_bytes = (char*)&outbuf; //split the two bytes in outbuf into an array PORTB &= 0b11111101; //pull chip select low SPI.transfer( w_bytes [1] ); //send them one at a time SPI.transfer( w_bytes [0] ); PORTB |= 0b00000010; //pull chip select high PORTB &= 0b11111110; //pull LDAC low asm volatile("nop"); //wait one clock cycle PORTB |= 0b00000001; //pull LDAC high } // freq in hz, t in ms void freqout(int freq, int t) { int hperiod; //calculate 1/2 period in us long cycles, i; 
 hperiod = (500000 / freq) - 7; // subtract 7 us to make up for digitalWrite overhead 
 cycles = ((long)freq * (long)t) / 1000; // calculate cycles // Serial.print(freq); // Serial.print((char)9); // ascii 9 is tab - you have to coerce it to a char to work // Serial.print(hperiod); // Serial.print((char)9); // Serial.println(cycles); // play note for t ms for (i = 0; i <= cycles; i++) { DACWrite( 4095 ); //send max value to DAC -- equivalent to logic HIGH - BM delayMicroseconds(hperiod); DACWrite( 0 ); //send 0 to DAC -- equivalent to logic LOW - BM delayMicroseconds(hperiod); // - 1 to make up for digitaWrite overhead //removed - PORT is much faster - BM } } 

Artículos Relacionados

Usando Arduino UNO como DAC de alta resolución 3-CH

Usando Arduino UNO como DAC de alta resolución 3-CH

En esta aplicación, daremos una demostración sobre cómo construir una fuente de alimentación de alta precisión utilizando el DAC 3000 y una fuente de referencia de alta precisión REF4096.STEP1:List de MaterialDirección de la tienda de eBay:BUONO UNO
Espectáculo de láser de Arduino con Control completo de XY

Espectáculo de láser de Arduino con Control completo de XY

Update! Ver 32 paso para saber cómo utilizar este proyecto con una laser verde! Comprobación también - el LaserTweet Instructable para hacer que este proyecto Mostrar datos desde Twitter:Este proyecto utiliza un Arduino y algunos altavoces baratos pa
Arduino con alimentación solar en la parte posterior de una tarjeta de juego

Arduino con alimentación solar en la parte posterior de una tarjeta de juego

aquí es una tragedia de seis palabras:Mi arduino necesita cuatro pilas AA.¿De veras?  ¿No es este 2012?  ¿Dónde está mi jetpack?Aquí es un camino hacia el futuro, una manera de hacer un panel solar, desde cero, que puede alimentar cualquier arduino d
Bicicleta - sistema de purificación de agua accionado arduino (con luz UVC)

Bicicleta - sistema de purificación de agua accionado arduino (con luz UVC)

Este instructable muestra cómo un sistema de purificación de agua UV-C con una bicicleta y arduino el control de la energía. Una dinamo en la parte trasera de la bicicleta carga una batería (que inicialmente hemos cargado ya para este proyecto) que s
Temporizador de cuenta regresiva de Arduino con los botones de configuración

Temporizador de cuenta regresiva de Arduino con los botones de configuración

En esta guía de Instructables te mostrará cómo hacer su propio temporizador de cuenta regresiva de Arduino dos dígitos. Hice mi propio circuito utilizando el microcontrolador ATmega328 pero este es un paso opcional. En esta guía te ayudaré a hacer fá
Caja para Arduino con corte láser - Uno, Mega, Leonardo, Yun

Caja para Arduino con corte láser - Uno, Mega, Leonardo, Yun

Una caja para nuestras tarjetas Arduino, es un gran aliado para protegerlas y manipularlas de forma más sencilla. ¿Y qué mejor forma para conseguir una caja para tu Arduino fabricarla tú mismo?En este Instructable encontrarás los archivos para fabric
Control de Arduino con teléfono Android a través de Bluetooth

Control de Arduino con teléfono Android a través de Bluetooth

Hola gente, aquí pueden aprender a controlar Arduino con teléfono Android a través de Bluetooth. Puede utilizar tu smartphone como un control remoto para sistema de iluminación del hogar o se puede utilizar como un etc. remoto del abejón.Para realiza
Programación Arduino con otro Arduino

Programación Arduino con otro Arduino

Este es mi primer Instructable. En este Instructable voy a mostrarle cómo programar un Arduino con otro Arduino. No hay controladores son necesarios! Este Instructable es también útil para subir bocetos a chino ArduinoPaso 1: Cosas necesarias1. un Ar
Reloj de tiempo Real de Arduino con alarma y sensores ambientales

Reloj de tiempo Real de Arduino con alarma y sensores ambientales

Reloj de Arduino, con respaldo de batería (reloj en tiempo real), tiempo, fecha, alarma, temperatura, humedad, presión, LCD, salida, entrada de teclado, dormir modo, blanco de iluminación (4 X) LED LCD con control de intensidadPaso 1: Lista de piezas
Controlar un Arduino con cacao (Mac OS X) o C# (Windows)

Controlar un Arduino con cacao (Mac OS X) o C# (Windows)

No no estoy hablando controlar un Arduino con una barra de chocolate o cacao en polvo. Estoy hablando del lenguaje de programación Objective-C. ¿Qué es cacao? El cacao es un conjunto de Marcos, escrito en el lenguaje de programación de Objective-C pa
Programar tu Arduino con un dispositivo Android!

Programar tu Arduino con un dispositivo Android!

Hola,en este Instructable que quiero mostrarle, cómo puedes programar tu Arduino con tu dispositivo Android. Es muy simple y barato. También nos permite programar el Arduino donde siempre que queramos, esto es útil para instalación permanente placas
Reloj de Arduino con un motor de corriente continua (una aguja)

Reloj de Arduino con un motor de corriente continua (una aguja)

Hola,Estaba tratando de hacer un reloj con arduino con un solo motor pero no era posible con el método estándar como tiene que haber al menos dos agujasHoras y minutos, así que intenté algo nuevo. En este reloj hay seis divisiones en una hora en luga
Impreso de robot aspiradora de piso - controlada por Arduino con protector de motor, con ruedas de motor

Impreso de robot aspiradora de piso - controlada por Arduino con protector de motor, con ruedas de motor

robot aspiradora de piso. Versión #17. Intento de hacerlo más simple.El robot se mueve por pequeños motores de DC motor-las ruedas incorporadas impresión en impresora 3D:http://www.thingiverse.com/Thing:225576Componentes:Arduino con motor-motor-escud
Combinar 1 o varios Arduinos con un RaspberryPi

Combinar 1 o varios Arduinos con un RaspberryPi

Este instructable es una demostración de la función de Control remoto de Drogon (RDC) incluida con wiringPi.Las bibliotecas de wiringPi, escritas por Gordon Henderson, añaden las funciones que le permiten al programa de la GPIO pins en RaspberryPi en