色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用Arduino和DAC播放音頻聲音文件

454398 ? 來源:wv ? 2019-10-24 08:36 ? 次閱讀

第1步:要求

Arduino-我使用Mega,但是沒有理由不能使Uno工作。

SdCard讀卡器-該程序配置為:MicroSD Breakout Board受Logic Conversion V2規范

http://www.hobbytronics.co.uk/microsd-card-regula 。..。

請參閱此說明以進行SdCard設置詳細信息:https://www.instructables.com/id/Arduino-Mega-Audio.。.

DAC0832 LCN-出色的8位數模轉換器-A幾磅。

LM386 N-1運算放大器-像芯片一樣便宜

20路芯片插座

8路芯片插座

9伏電源-電池即可。/p》

LM336 2.5 V參考電壓

10uF電容器* 3(任何9V以上的電壓)

10歐姆電阻器

50nF電容器-(或在接近47nF,56nf,68nf的地方工作)

220uF電容器

64歐姆揚聲器

10K線性電位器

電纜鏈接Arduino和電路之間的8條數據線-

在Uno上8條連接成一直線,在Mega上成對。

在我使用的Mega上帶10路IDC接頭的10路帶狀電纜。 (備用2條線)

用于0V,9V和DAC輸出的插座連接器

銅排板,焊錫,電線,刀具等

步驟2:規格

串行設置為115200波特。

使用Mega的Hobbytronics MicroSD Breakout Board支持到位。芯片選擇和其他端口將在Mega和Uno之間改變。

Wav文件必須存在于名為adlog的目錄中,請隨意命名,并重新排列必要的編碼。

wav文件必須為8位單聲道。我已經測試了高達44KHz。

“串行”監視器在adlog文件夾中顯示wav文件。文件名是從監視器輸出行發送的。

文件大小僅受SdCard大小的限制。

步驟3:入門

連接SD卡讀卡器。這些是Mega的連接。

0,5V

CLK到引腳52

D0到引腳50

D1到引腳51

CS到第53針

(有關Uno端口連接的信息,請參見供應商的網站)

您需要在此階段測試卡是否正常工作-使用供應商提供的腳本。

我們需要做一個小電路。

我們要從Arduino發送音頻字節流。

這些數字在0到255之間。它們代表電壓。

沉默范圍是127-128。

255是揚聲器的一種錐形揚聲器。

0是揚聲器的一種錐形揚聲器。

因此,音頻被記錄為已保存的數字,從而產生變化的電壓

我們可以使用“端口”同時在Arduino的8行中發送數字。

如果我們將8條線饋入數模轉換器,它會按照錫的指示進行操作,并產生與數字量成比例的模擬電壓。

然后我們要做的是包裝

第4步:小電路

DAC0832 LCN

這是一款出色的廉價8位數模轉換器。 (DAC)

它可以通過一系列數據保持,數據采樣線進行完全控制。

或者可以將其設置為在“流經操作”中自動完成所有操作。

引用該手冊:

僅將CS,WR1,WR2和XFER接地,并將ILE接地即可,這兩個內部寄存器都可以直接跟隨所應用的數字輸入(直通)影響DAC模擬輸出。

好,這是與芯片組的四個連接低端,一個設置為9V的連接-很容易。

我們不希望有任何負電壓,因此手冊說我們應該使用“電壓切換模式”,并提供圖表。

我們要做的就是替換一個小型音頻放大器,而不是他們建議的那種。

LM386-N音頻放大器

放大器的手冊提供了最小的零件圖-增益為20(對我們來說是太多了,但具有音量控制)。

我們需要做的是在DAC和放大器之間添加一個電容器,以便僅放大交流信號

我們還必須添加一個電容應靠近我們每個芯片的電源引腳,否則我們將從9V電源中獲得嗡嗡聲。

步驟5:取出烙鐵

由于電路很簡單,所以我不打算一擊即發。

以下是一些提示:

準備一塊至少28 x 28孔的銅帶板。 (是的,我知道腦外科醫師可以使它變小)

如果您打算用螺釘安裝它,請在開始時允許他們使用!

將芯片安裝在插槽上。僅在檢查完所有內容后才插入芯片。

將輸入線遠離輸出。

注意電容器的正確極性。

有關LM336參考電壓的基本視圖,請參見該圖。不使用調節腳,可以將其切開。

請注意直接連接到DAC的引腳8,這對于測試非常有用。

我使用帶狀電纜和10方向IDC連接器連接到Audino。

在Uno上,連接成一直線-您可能會發現,將8個輸入連接成一條直線可以讓您使用購買的現成的8路連接器鏈接到Arduino,

完成后-檢查焊接情況并檢查銅軌之間的間隙。

我找到了一個36 tpi的小型鋼鋸條對于清除碎片非常有用。我卸下刀片的定位銷并將刀片的頂端滑入軌道-顯然刀片不在框架中。

步驟6:測試DAC

斷開電路與Arduino之間的連接。

將電路的音量控制設置為中途。

打開9V直流電源

檢查電路是否正常-我對您的電路不承擔任何責任!

關閉電源。

將電路連接到Arduino。

在Mega上使用22-29引腳。 (PORTA)不要弄錯上面的兩個5V引腳!

在Uno上使用0-7引腳。這是PORTD

將您的電源的0V連接到Arduino上的0V。

加電。

打開此測試程序DAC_TEST

對于UNO,將對PORTA的所有引用替換為PORTD

DDRD替換DDRA-該指令將所有8行設置為一次性輸出。這是數據方向寄存器

將串行監視器設置為115200。

在DAC out和OV之間連接電壓表

程序將設置輸出到255-所有線路上-最大電壓。

輸出128-最大電壓的一半。

輸出0-零電壓(或可能接近零)。

然后它將按位步進:1、2、4、8、16、32、64、128

電壓應穩定增加。

如果電壓回落而數量增加您可能將兩根互連線顛倒了。

您還應該聽到揚聲器隨著電壓的變化而悄悄地發出咔嗒聲

步驟7 :讀取Wav標頭

Wav文件以指定的頻率和數據大小保存。

此信息包含在以下位置的44字節標頭中一個wav文件的開頭。

盡管某些軟件擴展了標頭(在字節35之后),但使數據大小的位置更難定位。

要讀取標頭,我們創建一個buff er并復制文件的開頭。

頻率從文件的24個字節開始以4個字節存儲。

//讀取wav文件頭中指定的頻率

字節頭文件[60]

tempfile.seek(0);

tempfile.read(headbuf,60);

RETVAL = headbuf [27];

retval =(retval 《《8)| headbuf [26];

retval =(retval 《《8)| headbuf [25];

retval =(retval 《《8)| headbuf [24];

Serial.print(F(“ File Frequency”));

Serial.print( retval);

查找數據大小信息的最佳方法是在標題中搜索單詞“ data”。

然后提取緊隨其后的4個字節,這些字節構成了長值

無符號長檢索;

int mypos = 40 ;

用于(int i = 36; i 《60; i ++){

如果(headbuf [i] = =‘d’){

if(headbuf [i + 1] ==‘a’){

如果(headbuf [i + 2] ==‘t’){

if(headbuf [i + 3] ==‘a’){

//終于有了

mypos = i + 4;

i = 60;

}

}

} 》

}

}

tempfile.seek(mypos);

RETVAL = headbuf [mypos + 3];

RETVAL =(RETVAL 《《8) | headbuf [mypos + 2];

retval =(retval 《《8)| headbuf [mypos + 1];

retval =(retval 《《8)| headbuf [mypos];

確定數據長度和頻率!

音頻數據緊跟著構成數據長度值的4個字節。

步驟8:中斷,中斷。..。

頻率信息,以在所需頻率處或附近創建軟件中斷。

雖然不一定總是精確地設置中斷,但已足夠。從文件讀取的頻率將傳遞給setintrupt子例程。

void setintrupt(float freq){

float bitval = 8;//8表示8位定時器0和2,1024表示定時器1字節

setocroa =(16000000/(freq * bitval))-0.5;

//setocroa值需要減去-1。但是,將0.5個回合加到最接近的0.5

//計時器的分辨率有限

//由位值的大小確定

cli();//禁用中斷

//設置 timer2 中斷

TCCR2A = 0;//將整個TCCR2A寄存器設置為0

TCCR2B = 0;//與TCCR2B相同

TCNT2 = 0;//將計數器值初始化為0

//設置比較匹配寄存器的頻率(hz)增量

OCR2A = setocroa ;//=(16 * 10 ^ 6)/(頻率* 8)-1(必須為《256)

//開啟CTC模式

TCCR2A | =(1 《

TCCR2B | =(1 《

//TIMSK2 | =(1 《

sbi(TIMSK2,OCIE2A);//在定時器2上啟用中斷

sei();//啟用中斷

關注讀者的讀者會發現 sbi(TIMSK2,OCIE2A)

我已設置幾個用于設置和清除寄存器位的功能(獲取互聯網):

//定義用于清除寄存器位的方法

#ifndef cbi

#define cbi(sfr,bit)(_SFR_BYTE(sfr)&=?_BV(bit))

#endif

//定義用于設置寄存器位

#ifndef sbi

#define sbi(sfr,bit)( _SFR_BYTE(sfr)| = _BV(位))

#endif

這些函數可輕松調用以設置或清除中斷

所以中斷正在運行,我們該怎么辦?

步驟9:中斷和雙緩沖

在22 Khz時,每0.045 ms輸出一個字節的音頻數據

在2.08中讀取512字節(緩沖區大小) ms。

因此無法在一秒內從SDCard讀取緩沖區

然而,在23.22ms內將512字節寫入端口。

所以我們要做的就是設置每次緩沖區清空時讀取一個新文件。需要一個新的數據塊之前獲取數據的時間。..假設我們使用兩個緩沖區,在填充另一個緩沖區時將其清空。

這是雙緩沖。

讀取的文件

我已經設置了兩個512字節的緩沖區,分別稱為bufa和bufb。

標志 aready 是true,我們從porta讀取,否則從portb讀取

當緩沖區位置(bufcount)達到緩沖區大小(BUF_SIZE 512)時,我們設置一個名為的標志

void循環例程會尋找此標志并開始讀取塊:

if(readit){

if(! Aready){

//啟動SD卡讀取到bufa

tempfile.read(bufa,BUF_SIZE);

}否則{

//啟動讀取到bufb的SDCard塊

tempfile.read(bufb,BUF_SIZE);

}

readit = false;

}

完成后,例程標志readit = false。

在中斷例程中,我們必須檢查void循環通過檢查readit == false是否結束。

在這種情況下,我們發出信號,要求再次讀取并切換Aready標志以切換緩沖區。

如果SD卡仍在讀取我們必須回溯一個讀數(counter--; bufcount--;)并退出中斷以稍后再試。 (單擊音頻輸出信號表示已發生這種情況。)

讀取所有數據后,中斷被取消,端口重置為中間電壓值128,音頻文件關閉。

在首次運行dac2.ino腳本之前,請將音量設置為50%。這會太大聲,但是比100%更好!

如果您的音量控制反向工作,則將10K電位器兩端的引線互換。

讓我知道如何聽起來。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • dac
    dac
    +關注

    關注

    43

    文章

    2309

    瀏覽量

    191388
  • Arduino
    +關注

    關注

    188

    文章

    6477

    瀏覽量

    187603
收藏 人收藏

    評論

    相關推薦

    【AI技術支持】ESP32-C3-Lyra播放音頻無法控制音量及異聲問題處理

    【AI技術支持】ESP32-C3-Lyra播放音頻無法控制音量及異聲問題處理
    的頭像 發表于 11-22 01:01 ?578次閱讀
    【AI技術支持】ESP32-C3-Lyra<b class='flag-5'>播放音頻</b>無法控制音量及異聲問題處理

    TLV320AIC3100播放音頻的時候,拔插耳機然后在插入就無法播放了,為什么?

    TLV320AIC3100播放音頻的時候. 拔插耳機.然后在插入就無法播放....有幾個DAC寄存器被關閉..這個是什么問題? 是不是DAC哪個寄存器設置錯誤.... 如果停止
    發表于 11-08 07:23

    8127+tlv320aic3104設置立體聲采集到音頻播放是快進音頻聲音,怎么解決?

    8127+tlv320aic3104設置單通道采集到的音頻播放正常流暢的聲音,設置立體聲采集到音頻 播放出來是快進
    發表于 11-05 06:31

    請問TLV320DAC3100可以播放什么格式的音頻文件

    請問TLV320DAC3100可以播放什么格式的音頻文件
    發表于 10-31 07:22

    AM3354處理器wince系統調playsound播放聲音,有電流雜音怎么解決?

    335板子wince7系統下調用playsound接口播放wav格式聲音總是有雜音,同一塊板子如果用播放播放音頻 是沒有雜音的。 同一塊板子wince6系統下調用playsoun
    發表于 10-29 06:46

    TLV320AIC_54_RHB_EVM playback沒有聲音是怎么回事?

    我使用playback設置,設置如圖 從電腦播放音頻文件,在headphone和lineout端無法停貸聲音,在direct analog bypass 和PGA analog bypass,沖int1輸入聲音是可以聽到
    發表于 10-28 06:19

    TLV320AIC3106335板子wince系統下調用playsound接口播放wav格式聲音總是有雜音,怎么解決?

    TLV320AIC3106335板子wince系統下調用playsound接口播放wav格式聲音總是有雜音,同一塊板子如果用播放播放音頻 是沒有雜音的。 我用用飛思卡爾的某個ce系
    發表于 10-25 08:00

    PCM1770播放音頻的時候有白噪音怎么解決?

    我們通過根據PCM1770的技術文檔提供的基礎電路設計圖,其中的Vcc與Vhp共用0.1uF和10uF的電容。其余接法和器件參數一樣。 但在播放24KHz與32KHz的音頻文件的過程中使用耳機
    發表于 10-25 06:56

    tas5805m連續通過tinyplay播放音頻有概率出現播放不了的情況,為什么?

    通過pp3軟件得到配置文件,并通過I2c寫入tas5805m。連續通過tinyplay播放音頻有概率出現播放不了的情況,此時時鐘都有信號,參考電路圖
    發表于 10-12 07:15

    TLV320DAC3100音頻播放偶爾出一聲比正常聲音響的聲音是怎么回事?

    。 while true;do aplay btn.wav;sleep 2;done 但是播放其他音頻文件(試了很多種),不管是單通道還是雙通道都沒有出現過此現象,因此也一定程度上排除是硬件故障。 我的板子
    發表于 10-10 06:38

    如何使用音頻接口播放音頻文件

    ZDP1440是一款基于開源GUI引擎的圖像顯示專用驅動芯片,內部集成16MB顯示內存、2D圖形加速器、音頻解碼器等豐富多媒體功能,本文將介紹如何使用音頻接口播放音頻文件
    的頭像 發表于 08-06 16:12 ?705次閱讀
    如何使用<b class='flag-5'>音頻</b>接口<b class='flag-5'>播放音頻文件</b>

    請問如何使用PSoC4播放音頻文件

    如何使用 PSoC4 播放音頻文件
    發表于 07-02 07:19

    esp-adf大版本升級到最新,播放音頻的log怎么關閉呢?

    , bytenum = 0, bread = 960 D (5014) ADF_BIT_STREAM: length = 960, bytenum = 960 這個log好像是在庫文件libesp_processing.a里面的,每播放音頻的時候,出現一堆log,能否關閉
    發表于 06-28 07:41

    如何通過BLE播放音頻

    現在是我有一個android app,有一塊esp32板子上面有喇叭,板子刷了a2dp_sink例子的固件。如果用bluetooth 和板子pair之后,可以播放音樂。 現在要求不用bluetooth,而是用ble連接,然后播放音樂,請問可以實現嗎?求指點迷津,謝謝。
    發表于 06-26 06:36

    求助,關于STM32 I2S播放和采集聲音的問題求解

    學習使用STM32的I2S接口采集ADC I2S接口的聲音,存儲后,再通過DAC I2S接口播放。I2S參數,需要配置聲音頻率,如8KHz,22kHz或者44kHz,比如我配置了8kH
    發表于 04-10 06:46
    主站蜘蛛池模板: 国产老肥熟xxxx | 伊人久久大香网 | 俺来也俺去也视频久久 | 好看AV中文字幕在线观看 | 免费看黄软件 | 国产精品色欲AV亚洲三区软件 | 免费成年人在线视频 | 亚洲伊人久久大香线蕉综合图片 | 小向美奈子厨房magnet | 99国产精品久久久久久久日本竹 | 国产精品综合AV一区二区国产馆 | 久久国产精品人妻中文 | 国产精品亚洲国产三区 | 国产午夜精品美女免费大片 | 色噜噜噜亚洲男人的天堂 | 亚洲精品久久国产高清 | 1973性农场未删减版 | 1788vv视频 | 午夜神器18以下不能进免费 | 忘忧草在线社区WWW日本-韩国 | 果冻传媒视频在线播放 免费观看 | 欧美一区二区在线观看 | 精品九九视频 | AV午夜午夜快憣免费观看 | 久久99r66热这里只有精品 | 欧美一道本一区二区三区 | 国产精品久久久久影院免费 | 日本漫画之无彩翼漫画 | 暖暖免费 高清 日本社区中文 | 年轻的女职工在线观看 | 亚洲黄色高清 | 亚洲国产日韩欧美高清片a 亚洲国产日韩a精品乱码 | 超熟女专门志 | 国产91青青成人a在线 | 欧美特级特黄a大片免费 | 国产99久9在线 | 精品久久久久中文字幕加勒比东京热 | tube日本护士 | 天天爽夜夜爽8888视频精品 | 青青热久久综合网伊人 | 麻豆高清免费国产一区 |