Go Down

Topic: Problem while playing Wav files (SDcard & TLC7226 DAC) (Read 1 time) previous topic - next topic

Sn4ke

Oct 24, 2011, 08:24 pm Last Edit: Oct 24, 2011, 09:07 pm by Sn4ke Reason: 1
Hi all,
I need to play .wav files from a SD Card. I chose to use 22050Hz 8bits mono files.

I connected a TLC7226 parallel DAC to my Arduino Duemilanove. The datasheet is here : http://www.ti.com/lit/ds/symlink/tlc7226.pdf
I use the first DAC (it's name DACA in the datasheet), that's why I connected A0 and A1 to ground. The D0-D7 pins go to the Arduino, as /WR one. Voltage reference is 5V.

A speaker is connected between OUTA and ground, through a 100 ohm resistor and a 10µF capacitor.

The DAC works well, I can hear a square wave for instance. I also read data from my SD card. The problem is when I read a byte from the file and I write it on the DAC, I can't recognize the music. There's just "cracking sounds".

Here is my code, sorry for the French :

Code: [Select]
#include <SD.h>

/*
 Connexion SD Card :
  ** MOSI (Violet) - pin 11
  ** MISO (Violet) - pin 12
  ** CLK (Gris) - pin 13
  ** SS (Blanc) - pin 4
*/


File fichier;
byte octet;
int i;



int pin_D[8] = {A0, A1, A2, A3, A4, A5, 2, 3}; // Here is connected my DAC
int pin_Enable = 7;





void Ecrire_DAC(byte val) // Write a byte to the DAC
{
   int i;
   
   for(i = 0; i < 8; i++) // I know that way to write the byte is slow. It's just for debug.
       digitalWrite(pin_D[i], bitRead(val, i));
   
   digitalWrite(pin_Enable, LOW);
   delayMicroseconds(5);
   digitalWrite(pin_Enable, HIGH);
   
   //Serial.print("Ecriture de ");
   //Serial.println(val, HEX);
}


void setup()
{
   int i;
   
   
   // Configuration du port série
   Serial.begin(115200);
   
   
   // Configuration du DAC
   pinMode(pin_Enable, OUTPUT);
   digitalWrite(pin_Enable, HIGH);
   for(i = 0; i < 8; i++)
       pinMode(pin_D[i], OUTPUT);
   Ecrire_DAC(0);
   
   pinMode(10, OUTPUT);
   if(SD.begin(10))
       Serial.println("Initialisation de la carte SD reussie.");
   else
       Serial.println("Echec de l'initialisation de la carte SD.");
   
   fichier = SD.open("22khz8b.wav");
   if(fichier)
       Serial.println("Ouverture du fichier reussie.");
   else
   {
       Serial.println("Echec de l'ouverture du fichier.");
       return;
   }
   
   fichier.seek(300); // make sure the pointer comes over the data
   
}




void loop()
{
   octet = fichier.read();
   Ecrire_DAC(octet);
   delayMicroseconds(45);
}

Even if the speed of the music will be very approximative, because I don't wait precisely 45µs between each byte, I thought I can hear something.

Can someone help ?
Thanks

Go Up