你好,
根据DA7212 Page 62的数据表,当DA7212以从模式与处理器接口时,不需要MCLK。我已经用我的Arduino MKRZERO接口了ard-audio-da7212板。Arduino MKRZERO能够生成所需的I2S信号,如BCLK、WCLK和DATOUT。我的问题是,我需要从MKRZERO提供MCLK到ard-audio-da7212吗?
问候,
Niradat。
亲爱的Niradat,
很抱歉回复晚了。我的DA7212数据表似乎和你的有所不同。
你能把你的寄给我看看描述吗?我需要检查PLL时钟soucrec是来自MCLK或block。
很多谢谢!
BR
查尔斯
随函附上我拥有的DA7212的数据表。
Niradat
嗨Niradat,
附件是一份新的。您可以参考“13.25时钟模式”一节。请注意锁相环模式配置。
谢谢!
你好查尔斯,
感谢分享更新的DA7212数据表。我在Arduino MKRZERO上用数据表写了以下代码。在这个代码中,MKRZERO正在播放一个16位立体声WAV文件,我可以在我的ARD-AUDIO-DA7212音频屏蔽上听它。但DA7212似乎突然进入睡眠状态,音频停止。虽然MKRZERO正在播放音频。此外,来自DA7212模块的音频不是立体声。请在这方面给予帮助。
最好的问候,
NIradat。
#define CODEC_ADDRESS 0x1A #include #include < arduinsound .h> #include // wave文件的文件名来播放const char filename[] = "MUSIC.WAV";//变量表示Wave文件SDWaveFile waveFile;void setup(){//打开串口通信并等待端口打开:serial .begin(9600);延迟(5000);//设置SD卡,取决于你的屏蔽板//你可能需要传递一个pin号开始SS串行。打印(“初始化SD卡…”);if (!SD.begin()) {Serial。println(“初始化失败!”);返回;}系列。println(“初始化完成。”); // create a SDWaveFile waveFile = SDWaveFile(filename); // check if the WaveFile is valid if (!waveFile) { Serial.println("wave file is invalid!"); while (1); // do nothing } // print out some info. about the wave file Serial.print("Bits per sample = "); Serial.println(waveFile.bitsPerSample()); long channels = waveFile.channels(); Serial.print("Channels = "); Serial.println(channels); long sampleRate = waveFile.sampleRate(); Serial.print("Sample rate = "); Serial.print(sampleRate); Serial.println(" Hz"); long duration = waveFile.duration(); Serial.print("Duration = "); Serial.print(duration); Serial.println(" seconds"); ///////////////////////////////////////////////////////////////////// Initialization of DA7212 ///////////////////////////////////////////////////////////////// Wire.begin(); //WRITE DA7212 0x92 0x00 //Set Ramp rate to default delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x92); Wire.write(0x00); Wire.endTransmission(); //WRITE DA7212 0x90 0x80 //Enable Digital LDO delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x90); Wire.write(0x80); Wire.endTransmission(); //WRITE DA7212 0x29 0xC0 //Enable AIF 16bit I2S mode delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x29); Wire.write(0xC0); Wire.endTransmission(); //WRITE DA7212 0x22 0x0A //Set incoming sample rate to 44.1kHz delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x22); Wire.write(0x0A); Wire.endTransmission(); //WRITE DA7212 0x94 0x02 //Set PC sync to resync default delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x94); Wire.write(0x02); Wire.endTransmission(); //WRITE DA7212 0x27 0x04 //PLL_CTRL PLL disabled delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x27); Wire.write(0x04); Wire.endTransmission(); //WRITE DA7212 0x2A 0x32 //Route DAI to Outputs default delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x2A); Wire.write(0x32); Wire.endTransmission(); //WRITE DA7212 0x4B 0x08 //MIXOUT_L input from DACL delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x48); Wire.write(0x08); Wire.endTransmission(); //WRITE DA7212 0x4C 0x08 //MIXOUT_R input from DACR delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x4C); Wire.write(0x08); Wire.endTransmission(); //WRITE DA7212 0x47 0xCD //Enable charge pump, CP_MOD mode, CPVDD/1 and Boost CP delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x47); Wire.write(0xCD); Wire.endTransmission(); //WRITE DA7212 0x95 0x36 //Set CP threshold to 0x36 delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x95); Wire.write(0x36); Wire.endTransmission(); //WRITE DA7212 0x96 0xA5 //Set CP Tau DELAY to 64ms delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x96); Wire.write(0xA5); Wire.endTransmission(); //WRITE DA7212 0x48 0x2D //Set volume to -12dB delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x48); Wire.write(0x2D); Wire.endTransmission(); //WRITE DA7212 0x49 0x2D //Set volume to -12dB delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x49); Wire.write(0x2D); Wire.endTransmission(); //WRITE DA7212 0x51 0xF1 //Enable DAC, Mix and HP amplifiers delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0x51); Wire.write(0xF1); Wire.endTransmission(); //WRITE DA7212 0xFD 0x01 //Set tone gen gain to -18dBstem Active delay(100); Wire.beginTransmission(CODEC_ADDRESS); Wire.write(0xFD); Wire.write(0x01); Wire.endTransmission(); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // adjust the playback volume AudioOutI2S.volume(50); // check if the I2S output can play the wave file if (!AudioOutI2S.canPlay(waveFile)) { Serial.println("unable to play wave file using I2S!"); while (1); // do nothing } // start playback Serial.println("starting playback"); AudioOutI2S.play(waveFile); } void loop() { // check if playback is still going on if (!AudioOutI2S.isPlaying()) { // playback has stopped Serial.println("playback stopped"); while (1); // do nothing } }
如果您决定将DA7212配置为从模式,能否提供从您的Arduino MKRZERO发送的MCLK/BCLK/WS的频率?
我可以为您找到一些示例代码。
是的,我想在从模式下配置DA7212。在Arduino MKRZERO的时钟输出中,MKRZERO的时钟输出只有BCLK、WS和DOUT三种,频率分别为BCLK= 1.4112 MHz和WS=44.1KHz。MCLK不是由MKRZERO输出的。
BCLK= 44.1 kHz × 16 × 2 = 1.4112 MHz
请参考附件中的代码。
非常感谢查尔斯
亲爱的Niradat,
很抱歉回复晚了。我的DA7212数据表似乎和你的有所不同。
你能把你的寄给我看看描述吗?我需要检查PLL时钟soucrec是来自MCLK或block。
很多谢谢!
BR
查尔斯
你好,
随函附上我拥有的DA7212的数据表。
问候,
Niradat
嗨Niradat,
附件是一份新的。您可以参考“13.25时钟模式”一节。请注意锁相环模式配置。
谢谢!
你好查尔斯,
感谢分享更新的DA7212数据表。我在Arduino MKRZERO上用数据表写了以下代码。在这个代码中,MKRZERO正在播放一个16位立体声WAV文件,我可以在我的ARD-AUDIO-DA7212音频屏蔽上听它。但DA7212似乎突然进入睡眠状态,音频停止。虽然MKRZERO正在播放音频。此外,来自DA7212模块的音频不是立体声。请在这方面给予帮助。
最好的问候,
NIradat。
嗨Niradat,
如果您决定将DA7212配置为从模式,能否提供从您的Arduino MKRZERO发送的MCLK/BCLK/WS的频率?
我可以为您找到一些示例代码。
谢谢!
你好查尔斯,
是的,我想在从模式下配置DA7212。在Arduino MKRZERO的时钟输出中,MKRZERO的时钟输出只有BCLK、WS和DOUT三种,频率分别为BCLK= 1.4112 MHz和WS=44.1KHz。MCLK不是由MKRZERO输出的。
BCLK= 44.1 kHz × 16 × 2 = 1.4112 MHz
问候,
Niradat。
嗨Niradat,
请参考附件中的代码。
谢谢!
非常感谢查尔斯