Schubben op de Arduino met een SPI 12 Bit Dac (1 / 2 stap)

Stap 1: Schubben op de arduino audio schild

Eerst downloaden en compileren van de code

 /* 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 } } 

Gerelateerde Artikelen

Programmering Arduino met een Arduino

Programmering Arduino met een Arduino

Dit is mijn eerste Instructable. In dit Instructable ga ik u tonen hoe te programmeren van een Arduino met een Arduino. Er zijn geen stuurprogramma's nodig! Dit Instructable is ook handig voor het uploaden van schetsen aan de Chinese ArduinoStap 1: D
Program je Arduino met een Android toestel!

Program je Arduino met een Android toestel!

Halloin dit Instructable die ik wil je laten zien, kunt hoe u programmeren uw Arduino met uw Androïde apparaat. Het is zeer eenvoudig en goedkoop. Ook het laat ons toe om onze Arduino program waar ooit wij wilt, dit is nuttig voor permanent geïnstall
Een Arduino met een ZIF-Socket bootload

Een Arduino met een ZIF-Socket bootload

Bootloading een Arduino met een ZIF-socket kunt u gemakkelijk programma een heleboel chips tegelijk zonder zorgen te maken over de pinnen mangelen. De reden hiervoor is dat de ZIF voor "zero insertion force staat", en zoals de naam al impliceert
Hoe de controle van de arduino met een mail

Hoe de controle van de arduino met een mail

Er zijn een heleboel oplossingen waarmee een Arduino board: web oplossingen, desktop applicatie oplossingen, hardwareoplossingen. Maar hoe zit het met e-mail? Ja, vind je iets op het web, maar ze nodig hebben voor ethernet schilden en vaak is Arduino
* Inleiding * SPI op de Pi: communiceren met een SPI 3-assige versnellingsmeter met behulp van een Raspberry Pi

* Inleiding * SPI op de Pi: communiceren met een SPI 3-assige versnellingsmeter met behulp van een Raspberry Pi

stap voor stap handleiding over het opzetten van Raspbian, en communiceren met een SPI-apparaat met behulp van bcm2835 SPI bibliotheek (niet beetje geneukt!)Dit is nog steeds zeer voorlopige... Ik moet toevoegen van betere foto's van fysieke hookup,
Hoe te uploaden schetsen naar een Arduino met een kapotte Usb Port / Chip

Hoe te uploaden schetsen naar een Arduino met een kapotte Usb Port / Chip

Welkom bij mijn allereerste instructable :)Enige tijd geleden, ik had een sensor aangesloten op mijn Arduino Nano, maar de sensor werkte niet, dus heb ik besloten om mijn multimeter om te controleren de verbindingen. Ik een eind te maken op de 5 v-pi
Hoe te programmeren een AVR (arduino) met een ander arduino

Hoe te programmeren een AVR (arduino) met een ander arduino

deze instructables is handig als:* je hebt je arduino met atmega168 en je kocht een atmega328 op je lokale elektronicawinkel. Het hoeft niet een arduino bootloader* u wilt maken van een project dat geen gebruik maakt van arduino - gewoon een regelmat
Gebruik van een Arduino met een N64-controller

Gebruik van een Arduino met een N64-controller

er zijn tutorials die er voor het gebruik van een NES-controller met een Arduino, maar met behulp van de meer gecompliceerde N64-controller en de analoge joystick heeft een duidelijke aantrekkingskracht. Als u een Arduino rond hebt en wil niet te kop
Combineren van 1 of meer Arduinos met een RaspberryPi

Combineren van 1 of meer Arduinos met een RaspberryPi

Dit instructable is een demonstratie van de functie van de Drogon Remote Control (DRC) die wordt geleverd met wiringPi.De bibliotheken van de wiringPi, geschreven door Gordon Henderson, de functies waarmee u de GPIO op de RaspberryPi in C in een stij
Controle van uw Arduino met een afstandsbediening

Controle van uw Arduino met een afstandsbediening

benieuwd over hoe om te controleren alles in uw huis met een eenvoudige afstandsbediening? Het is vrij eenvoudig en goedkoop.Stap 1: Verzamel spullen Hier is wat u nodig heeft:-Arduino (ik gebruik UNO)-Solderless breadboard-Een infrarood ontvanger-So
Macht van de Arduino met een mobiele telefoon

Macht van de Arduino met een mobiele telefoon

oude mobiele telefoons zijn makkelijk te verwerven, en ze hebben gebouwd in lithium opladen circuits. Wat een prachtige uitvalsbasis voor een voeding voor kleine mobiele dingen. Ik aangesloten een cellphone aan de arduino met de mogelijkheid om de mo
Controle van een Arduino met een horloge (TI eZ430 Chronos)

Controle van een Arduino met een horloge (TI eZ430 Chronos)

het horlogeDe Texas Instruments eZ430 Chronos is een coole gadget. Het heeft bidirectionele radiocommunicatie, en een gehele bos van sensoren: temperatuur, druk, versnelling.Het is in feite een development kit voor de MSP-430 (een low-power microcont
Extra ingangen voor Arduino met een toetsenbord

Extra ingangen voor Arduino met een toetsenbord

De Arduino is misschien wel de coolste ding op aarde. Er zijn vele soorten, de Uno, de Mega, de Pro, de Pro Mini, etc. etc.Maar één ding dat vaak een probleem kan zijn is dat je slechts een beperkt aantal inputs en outputs. Er zijn vele oplossingen v
PacMan en aangepaste tekens op Arduino met een 16 x 2 LCD I2C YwRobot LCM1602 IIC V1

PacMan en aangepaste tekens op Arduino met een 16 x 2 LCD I2C YwRobot LCM1602 IIC V1

Hallo iedereen, dit is mijn eerste instructables!Ik heb deze handleiding omdat ik had een heleboel problemen om te rijden de I2C LCD YwRobot met Arduino vanwege problemen in verband met softwarebibliotheken.Na veel onderzoek en testen, aan het einde,