Balances sur l’Arduino avec un SPI 12 Bit Dac (1 / 2 étapes)

Étape 1: Balances sur le bouclier audio arduino

Commencez par télécharger et compiler le 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 } } 

Articles Liés

État de machine et le multitâche sur arduino avec extenseurs SPI

État de machine et le multitâche sur arduino avec extenseurs SPI

La semaine dernière, je posais créer un système de feux d'artifice pilote avec un arduino. Il fallait environ 64 sorties pour contrôler les incendies. Une façon de le faire consiste à utiliser des succédanés de l'IC. Donc 2 solutions sont disponibles
Programmer votre Arduino avec un périphérique Android !

Programmer votre Arduino avec un périphérique Android !

Salutdans ce Instructable que je veux vous montrer, comment vous pouvez programmer votre Arduino avec votre appareil Android. C'est très simple et pas cher. Il nous permet également de programmer notre Arduino, où que nous voulons, c'est utile pour l
Programmer une Simple mélodie sur un Arduino Uno

Programmer une Simple mélodie sur un Arduino Uno

Cette instructable va vous montrer une façon super simple de programmer votre Arduino Uno à jouer une mélodie midi simple (dans ce cas "You Are My Sunshine"). J'ai utilisé quelques éléments dans mon Arduino Starter Kit, un Chromebook et le libre
Détecteur de Distance Arduino avec un LED et Buzzer

Détecteur de Distance Arduino avec un LED et Buzzer

il s'agit d'un simple guide sur comment faire un détecteur de distance à l'aide d'un Arduino, un capteur à ultrasons HC-SRO4, un Buzzer et quelques LED.  Le but ultime de ce tutoriel est d'utiliser le buzzer et LEDs pour afficher dans quelle mesure l
Générateur de Code ESP8266 avec sécurité 128 bits - aucun codage requis

Générateur de Code ESP8266 avec sécurité 128 bits - aucun codage requis

Générateur des modules ESP8266 à l'aide de pfodDesigner, pfodApp et Arduino avec sécurité 128 bits de codeCréer des menus personnalisés pour votre Android. AUCUN Android ou Arduino de programmation requis.Remarque : Cette instructable besoins pfodPar
Servos de contrôle sur l’Internet via Arduino avec Teleduino

Servos de contrôle sur l’Internet via Arduino avec Teleduino

Servos ont de nombreuses utilisations et peut être beaucoup de plaisir à jouer avec. Quelque chose qui peut être des tas de plaisir prend le contrôle de jusqu'à 6 servos sur internet ! Imaginez les possibilités.Ce processus est rendu vraiment simple
Lire le niveau de lumière sur l’Internet via Arduino avec Teleduino

Lire le niveau de lumière sur l’Internet via Arduino avec Teleduino

Nous l'avons tous fait. Vous quittez la maison pour travailler le matin et vous vous demandez si vous avez quitté le garage lumière sur. Vous décidez de ne pas s'inquiéter à ce sujet et ensuite avoir des ennuis avec votre femme/mari/petite amie/petit
Une LED de contrôle sur l’Internet via Arduino avec Teleduino

Une LED de contrôle sur l’Internet via Arduino avec Teleduino

il y a quelque chose de cool à propos de faire une lueur LED via un Arduino. Ce qui pourrait rendre qui est encore plus cool ? Que diriez-vous de faire si le LED brillent de partout dans le monde via l'internet ? Maintenant nous sommes Talkin ' !Ce p
Suivre votre voiture avec un Lojack axée sur l’Arduino

Suivre votre voiture avec un Lojack axée sur l’Arduino

Vol de voiture est un frein réel ! Augmentez vos chances de récupérer votre voiture en installant ce tracker simple axée sur l'Arduino dans votre voiture.Ce projet est assez simple et serait un bon projet pour un nouveau programmeur Arduino vous cher
Mappig Arduino Bit sur écran LCD avec LOGO

Mappig Arduino Bit sur écran LCD avec LOGO

Ce projet Arduino est utilisé pour le LOGO Arduino affichage sur écran LCD à l'aide de la fonction createChar de la bibliothèque innovente.En cela, le LOGO est un personnage personnalisé conçu en donnant une valeur binaire à chaque PIXEL sur l'écran
Robotique mobile avec Scratch : construire un Walker d’insectes comme axée sur l’Arduino et programmez-le avec Scratch

Robotique mobile avec Scratch : construire un Walker d’insectes comme axée sur l’Arduino et programmez-le avec Scratch

Nous allons se précipitent autour ? C'est un Arduino-basé, facile à construire la version de la marchette insectes comme faite avec du fil de cintre et conçu à l'origine par Jérôme Demers (voir aussi cette instructable) et Gareth Branwyn. Il se décli
Le streaming vidéo à partir de carte SD sur Nokia LCD avec Arduino

Le streaming vidéo à partir de carte SD sur Nokia LCD avec Arduino

Pendant longtemps, j'ai pensé que la lecture de vidéo avec l'audio n'a pas été possible sur l'Arduino. Puis un jour j'ai décidé de lui donner un coup de feu et il s'est avéré pour être plus simple que je pensais.J'ai décidé d'écrire les étapes dans u
Comment programmer un AVR (arduino) avec un autre arduino

Comment programmer un AVR (arduino) avec un autre arduino

cette instructables est utile si :* vous avez votre arduino avec atmega168 et vous avez acheté un atmega328 à vous magasin d'électronique. Il n'est pas un bootloader arduino* vous voulez faire un projet qui n'utilise pas arduino - juste une puce AVR
Voltmètre numérique d’Arduino avec température

Voltmètre numérique d’Arduino avec température

un de mes projets nécessaires à l'essai des aquastats, et nous avions besoin pour contrôler la tension (12-14vac) ainsi que de la température. Initialement, j'ai commencé avec un capteur de température analogique TMP36, mais était mécontent de la sor