Audio stéréo avec Arduino (3 / 7 étapes)

Étape 3: Sortie Audio Mono avec 8 Bit DAC et fréquence d’échantillonnage de 44,1 kHz

Le schéma pour l’installation de la DAC est indiqué sur la Fig. 2. TOUJOURS et DGND (broches 1 et 5) se connecter à la terre de l’Arduino. VDD (broche 17), OUTA (axe 2), OUTB (pin 20). RFBA (broche 3) et RFBB (19 broches) se connectent à 5V de l’Arduino. WR (16 broches) se connecte à la broche numérique 10, CS (15 broches) se connecte à la broche numérique 9 et DACA/DACB (6 broches) se connecte à la broche numérique 8. DB0-DB7 (broches 14-7) se connecter à broches numériques 0-7. Les sorties de la DAC sont les broches 4 (DACA) et 18 (pour DACB).

Dans le code suivant de la pièce, j’utilise un interrupt timer pour envoyer des données à la DAC à un taux de 44,1 kHz (taux d’échantillonnage audio standard). Interruptions sont des routines qui sont exécutées à spécifiquement les intervalles. Alors que l’Arduino s’exécute des commandes dans le loop() principal il fonctionnent interrompt brièvement pour exécuter le contenu de {ISR(TIMER1_COMPA_vect)} à une vitesse de 44,1 kHz. Une fois que les commandes à l’intérieur de la fonction sont exécutées, l’Arduino reprend ce qu’il faisait dans la fonction loop(). De cette façon nous pouvons facilement ajouter le code pour la fonction de boucle (vérifier les capteurs, allumer les leds, etc.) et n’ont pas à se soucier du moment de la sortie audio. Les lignes suivantes configurer l’interruption :

() de CLI ; //stop interruptions

interruption de jeu timer1 à ~44.1kHz
TCCR1A = 0; / / set ensemble TCCR1A Registre à 0
TCCR1B = 0; / / Idem pour TCCR1B
TCNT1 = 0; //initialize valeur de compteur à 0
Comparez Set match s’inscrire à des incréments de 1hz
OCR1A = 361; / / = (16 * 10 ^ 6) / (44100 * 1) - 1 (doit être < 65536)
activer le mode de la CCT
TCCR1B | = (1 << WGM12) ;
Néc CS10 bit 1 diviseur
TCCR1B | = (1 << CS10) ;
activer minuteur comparer interruption
TIMSK1 | = (1 << OCIE1A) ;

SEI (); //enable interruptions

Une explication complète de ces lignes est donnée dans mon tutoriel d’interruption Arduino Timer. À l’intérieur de la routine d’interruption, nous trouvons les lignes suivantes :

PORTD = scie ; //send découper à la DAC par broches numériques 0-7
scie ++; valeur de scie //increment par un
Si (vu == 256) {//reset vu si elle atteint 256 (sortie continue au sein de 0-255 toujours)
vu = 0 ;
}

Donc chaque fois que la routine d’interruption il exécute envoie la valeur de la variable « vu » à la DAC. Puis la scie variable est augmentée d’un pour la prochaine fois qu'exécute la routine d’interruption. Si la scie est > 255 il est remis à zéro. Essentiellement l’Arduino envoie les numéros 0-255 à la DAC et ensuite remise à 0 une fois qu’il atteint 255. Cela va afficher une vague de scie de la DAC (fig 7).

J’ai noté dans les commentaires du code que la routine d’interruption n’est pas exécuté à exactement de 44,1 kHz, mais plus près que je pouvais obtenir. La fréquence d’échantillonnage réelle est 44,199 kHz (qui est en fait légèrement mieux que 44,1). C’était en raison de certaines limitations dans la configuration des interruptions de minuterie. Nous allons utiliser ce numéro pour calculer quelques infos sur la sortie DAC :

durée de chaque échantillon = 1/taux d’échantillonnage
durée de chaque échantillon = 1/44199 Hz = 22.6us

Fig. 8 montre qu'un zoom au vu de la DAC vu sortie sur un oscilloscope. Vous pouvez voir le 22.6us des étapes de la vague, tout comme calculé. La période de l’onde (la longueur du cycle on voyait complet) est :

Durée = Durée de chaque échantillon * échantillons par cycle
période = 22.6us * 256 = 5.8ms

et la fréquence :

fréquence = 1/période
fréquence = 1/0.0058s = 172 Hz

celles-ci peuvent être vues dans la Fig. 6.

 <pre>//mono saw out with 44.1kHz sampling rate //by Amanda Ghassaei //Nov 2012 

Le code ci-dessous génère une onde sinusoïdale à l’aide de la même interruption, que j’ai mis en place au-dessus. Arduino intègre une fonction sinus, mais c’est trop lent à exécuter à 44,1 kHz, donc j’ai conservé un tableau de valeurs de sinus pour tirer au cours de chaque interruption. J’ai couru un simple script Python (ci-dessous) pour générer des 100 valeurs de 127+127*sin(2*3.14*t/100) :

importer des mathématiques
pour x dans l’intervalle (0, 100) :
imprimer str(int(127+127*math.sin(2*math.pi*x*0.01)),)+str(",")
,

J’ai ces numéros mémorisés dans un tableau appelé « sine » et puis mettre la ligne suivante dans la routine d’interruption :

PORTD = sine [index]; //send une valeur stockée dans le sinus tableau dehors à la DAC via digital broches 0-7
index ++; index de //increment par un
Si (indice == 100) {//reset index si elle atteint 100
index = 0 ;
}

ces lignes envoyer une valeur du tableau « sine », spécifié par la valeur de la variable « index », pour PORTD. Puis « index » est augmentée par l’un pour le prochain cycle. Si index > 99 il est remis à zéro. La sortie de ce code est indiquée sur la Fig. 9.

Étant donné que j’ai utilisé la même configuration d’interruption que le code de la scie, la durée de chaque échantillon est identique : 22.6us (Fig. 10). Puisqu’il n’y a seulement 100 échantillons par cycle pour ce sinus (échantillons vs 255 par cycle pour la scie), la période est :

Durée = Durée de chaque échantillon * échantillons par cycle
période = 22.6us * 100 = 2.3ms

fréquence = 1/période
fréquence = 1/0.0023s = 442 Hz

celles-ci peuvent être vues dans la Fig. 9

 <pre>//mono sine out with 44.1kHz sampling rate //by Amanda Ghassaei //Nov 2012 

Articles Liés

Contrôlez votre système Audio, Dvd et Tv avec Arduino et Android

Contrôlez votre système Audio, Dvd et Tv avec Arduino et Android

Salut tout le monde, c'est mon deuxième instructable et mon premier en anglais, oui, Désolé pour les fautes.Je tiens à partager ce projet qu'il s'agit de comment vous pouvez contrôler votre Tv, de DVD et de votre système Audio avec Arduino et un app
Streaming Audio et la reconnaissance vocale avec Arduino sans fil

Streaming Audio et la reconnaissance vocale avec Arduino sans fil

dans ce projet j'ai connecter ma carte Arduino à un WiFly module (https://www.sparkfun.com/products/10822) de Roving Networks et de flux audio pour le PC, alors que BitVoicer (http://www.bitsophia.com/BitVoicer.aspx) peut exécuter la reconnaissance v
Commande d’un moteur DC avec Arduino et Visual Basic

Commande d’un moteur DC avec Arduino et Visual Basic

Bonjour amis c'est mon premier post dans instructables.com où je vais essayer de mettre plus des nouveauté souvent.Aujourd'hui, le thème est avec Arduino et Visual Basic.Le projet que nous voyons aujourd'hui est un moteur à courant continu contrôleur
Motorisé, Sound réagissant à-St Star Wars modèle de Bandai, avec Arduino.

Motorisé, Sound réagissant à-St Star Wars modèle de Bandai, avec Arduino.

Issus de Star Wars à-St modèle Bandai.Réagit aux sons et tourne la tête vers elle.Fait avec Arduino Nano, un composant personnalisé 3dprinted, microphones, micro servo.Cette instructable est faite pour partager les modifications nécessaires pour acqu
Comment utiliser WTV020SD - 16p avec Arduino

Comment utiliser WTV020SD - 16p avec Arduino

WTV020SD-16p est un excellent module pour ajouter de la musique électronique projets. Le module peut être utilisé avec ou sans l'Arduino.Il y a plusieurs choses à considérer lorsque vous travaillez avec ce module. Par exemple, il fonctionne avec la s
* mise à jour * LED-tour « Hello », Vu-mètre avancé de détection musique sans qu’avec Arduino et l’interfaçage d’IC avec le logiciel PC Windows !

* mise à jour * LED-tour « Hello », Vu-mètre avancé de détection musique sans qu’avec Arduino et l’interfaçage d’IC avec le logiciel PC Windows !

LED-tour « Hello », Vu-mètre avancé de détection musique sans qu'avec Arduino d'ICet l'interfaçage avec le logiciel PC Windows ! Salut, tout le monde.Ce qui rend ce projet cool c'est le fait, que sa musique de télédétection, contrairement aux traditi
Jouer des sons sur pc avec arduino et progduino

Jouer des sons sur pc avec arduino et progduino

Aujourd'hui je vais vous montrer comment il est facile de construire un lecteur simple et exécutez-le sur l'ordinateur avec arduino et progduino.En savoir plus sur progduino : http://www.progduino.comÉtape 1: Code Arduino - player sur votre pc.Copiez
2RM voix contrôlée Robot avec Arduino et serveur BitVoicer

2RM voix contrôlée Robot avec Arduino et serveur BitVoicer

Dans ce Instructable je vais montrer comment construire un robot de commande vocale 2RM . Même si je suis contrôle uniquement les moteurs à courant continu pour déplacer le robot, la même approche peut servir à la voix-contrôle de moteurs pas à pas e
Untethered la reconnaissance vocale et la synthèse vocale avec Arduino

Untethered la reconnaissance vocale et la synthèse vocale avec Arduino

MOVI signifie « Ma propre voix Interface » et est un Arduino Shield adossés kickstarter qui le rend très facile de créer vos propres boîtes de dialogue discours aux dispositifs de contrôle au sein de l'IDE Arduino. Cette rapide instructable vous mont
La reconnaissance vocale et la synthèse avec Arduino

La reconnaissance vocale et la synthèse avec Arduino

Dans mon précédent Instructable, j'ai montré comment contrôler quelques LEDs à l'aide d'une carte Arduino et le Serveur BitVoicer. Dans ce Instructable, je vais rendre les choses un peu plus compliqués. Je vais également à synthétiser la parole en ut
Bronze USB cloche horloge saisissante (avec Arduino)

Bronze USB cloche horloge saisissante (avec Arduino)

agacer vos collègues de travail : conduire dans la mendicité vous désactiver votre horloge de PC spécial !Cette petite plate-forme enfait interfaces via le port USB à l'horloge de votre PC et génère des heures et des demi-heures bosses sur une cloche
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
Éclairage LED avec Arduino vocale

Éclairage LED avec Arduino vocale

Ce projet est une extension pour la reconnaissance de la parole avec Arduino par leandro4b (). Cependant, au lieu d'utiliser 3 LEDs de couleur distinctes, j'ai utilisé un émetteur de LED multicolor 4 canaux RVB + blanc. J'ai eu l'occasion de travaill
Joyeux anniversaire avec Arduino

Joyeux anniversaire avec Arduino

Tout d'abord, Merci à bonniee, pour son grand Illumaphone instructable : Instrument de musique à base de lumière avec Arduino.J'ai juste amélioré pour que ce soit, comme je l'entends.Cette instructable vous montrera comment jouer « Happy Birthday » a