Étape 9: Interruptions et le mécanisme de Double tampon
À 22kHz un octet de données audio est émis toutes les 0,045 ms
512 octets (taille de tampon) est lu en ms 2,08.
Si la mémoire tampon ne peut pas être lu depuis la carte SD dans l’un écriture cycle.
Cependant 512 octets sont écrits dans le port de 23.22ms.
Donc tout ce que nous avons à faire est le programme d’installation, un nouveau fichier lire chaque fois que le tampon se vide et nous avons assez de temps pour obtenir les données avant un nouveau bloc de données est nécessaire... En supposant que nous utilisons deux tampons, une vidange que nous remplissons un autre.
C’est le mécanisme de double tampon.
Le fichier lu sera ralenti par l’interruption répétée, mais il va se faire.
.
J’ai deux tampons de 512 octets d’installation appelé bufa et bufb.
Si drapeau aready est vrai que nous lisons de porta sinon que nous lisons du portb
Lorsque la position de la mémoire tampon (bufcount) atteint la taille de mémoire tampon (BUF_SIZE 512) nous définir un indicateur appelé readit true.
La routine void boucle ressemble pour cet indicateur et débute un bloc de lire :
{if(READIT)}
Si (! aready) {}
initiate SDCard bloc lu à bufa
tempfile.Read (bufa, BUF_SIZE) ;
} else {}
initiate SDCard bloc lire à bufb
tempfile.Read (bufb, BUF_SIZE) ;
}
READIT = false ;
}
Quand il a fini la routine drapeaux readit = false.
Au sein de la routine d’interruption, nous devons vérifier que la boucle Sub a fini en vérifiant si readit == false.
Ceci étant, nous signalons qu’une autre lecture est requise et activer/désactiver l’indicateur aready pour mettre des tampons.
Si est encore la lecture de la carte SD il faut revenir suivre une seule lecture (compteur--; bufcount--;) et sortez l’interruption à réessayer plus tard. (Clics dans le signal de sortie audio impliquent que cela s’est produit.)
Lorsque toutes les données sont lues à l’interruption est annulée, a fermé le port re-réglé à la valeur de tension moyenne de 128 et le fichier audio.
.
Avant d’exécuter le script dac2.ino pour la première fois, réglez votre volume à 50 %. Ce sera trop fort, mais c’est mieux que 100 % !
Si votre contrôle de volume fonctionne en sens inverse permuter les fils aux extrémités opposées du potentiomètre 10K.
Laissez-moi savoir comment ça sonne.