<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 計算機接口使19世紀管風(fēng)琴自行彈奏

計算機接口使19世紀管風(fēng)琴自行彈奏

作者: 時(shí)間:2013-04-07 來(lái)源:網(wǎng)絡(luò ) 收藏
電子設計

在進(jìn)行電子設計時(shí),我們大家坐下來(lái),粗略地設計出電子結構;圖3為基本結構圖。在圖的左側,MIDI消息由外部傳入(我將在下文詳細介紹MIDI協(xié)議)。圖的右側是一個(gè)位移寄存器鏈;控制器在驅動(dòng)相應的“數據”值填充位移寄存器鏈時(shí),負責切換“時(shí)鐘”信號,然后通過(guò)“選通”信號將位移寄存器鏈的內容并行發(fā)送至電磁鐵驅動(dòng)器的輸入端。

newmaker.com
圖3:電子結構我們在位移寄存器/驅動(dòng)器鏈上采用了74HC595位移寄存器IC。不過(guò),電磁鐵試驗顯示每個(gè)電磁鐵大約需要15V電源提供350mA驅動(dòng)電流——超出了CMOS輸出級的提供范圍。這了滿(mǎn)足這個(gè)要求,我們在每個(gè)位移寄存器IC上增加了一個(gè)ULN2803A Darlington輸出級。這個(gè)芯片還具備一個(gè)保護二極管,對切斷電流時(shí)電磁鐵生成的高反激電壓進(jìn)行分流,避免增加一個(gè)分立式二極管。我們在萬(wàn)用板上制作了幾個(gè)驅動(dòng)器電路板原型,每個(gè)可驅動(dòng)16個(gè)電磁鐵。

控制器設計

盡管我們可以采取多種方法設計控制器(包括利用Arduino平臺或采用其他微控制器),但我們最終還是選擇使用賽靈思Spartan-3E入門(mén)套件,因為我在賽靈思的日常工作中用過(guò)這種開(kāi)發(fā)板,對相關(guān)工具了如指掌。特別是,我知道如何使用Platform Studio SDK和ChipScope等調試工具,由于這有可能是一個(gè)現場(chǎng)調試項目,這樣做可節省時(shí)間。我們使用賽靈思嵌入式開(kāi)發(fā)套件,開(kāi)發(fā)核心組件MicroBlaze子系統(圖4)。

newmaker.com
圖4:MicroBlaze 子系統除了MIDI接口和位移寄存器接口,我們還選擇增加了串行RS-232控制端口,幫助我們調試系統。RS-232協(xié)議看起來(lái)有點(diǎn)老套,但在此類(lèi)項目中,它的價(jià)值非凡。我們也增加了一些GPIO端口,用于驅動(dòng)LED,讀取開(kāi)關(guān)和按鈕,以便在無(wú)需使用控制端口的情況下,完成某些交互操作。

寫(xiě)入MicroBlaze固件

我們已經(jīng)確定系統的最佳輸入接口是MIDI端口。自20世紀80年代以來(lái),樂(lè )器數字接口(MIDI)已經(jīng)成為連接合成器等數控樂(lè )器與其他樂(lè )器或控制計算機的標準接口,因此,顯然我們也應當采用這種接口。MIDI將使我們取得了連接的最大靈活性。

MicroBlaze可從內部顯示整個(gè)鍵盤(pán)的狀態(tài)以及系統正在按壓哪些鍵——即系統正在為哪些電磁鐵加電。

MIDI是一種單向低速串行協(xié)議,傳輸速率為31250波特。它包含多種類(lèi)型的信息,但就我們的目的而言,只有NOTE ON和NOTE OFF是重要的信息類(lèi)型。每個(gè)NOTE ON信息由3個(gè)字節構成。

第一個(gè)字節是0x9n,這里的n代表通道數。
第二個(gè)字節是0至127的音符數,中間的C為第60號。
第三個(gè)字節是0至127的速度值。

NOTE OFF除第一個(gè)字節是0x8n外,其余與此非常相似。

在我們的設計中,我們決定同步聽(tīng)取所有通道的信息( “omni”操作)。由于鍵盤(pán)對速度并不敏感,因此,我們可安全地忽略所有速度字節。

EDK UART IP核接收MIDI消息,然后通過(guò)FIFO,一次向MicroBlaze處理器發(fā)送一條信息。MicroBlaze可從內部顯示整個(gè)鍵盤(pán)的狀態(tài)和系統正在按壓哪些鍵(即系統正在為哪些電磁鐵加電)。固件采用一個(gè)靜態(tài)查找表,指出與這個(gè)音符相關(guān)的電磁鐵,將這個(gè)用做內部圖的索引;到達的NOTE ON消息將相應entry值設為“1”,而NOTE OFF消息將entry值設為“0”。

內部圖更新后,利用圖的全部?jì)热莞码姶盆F寄存器;通過(guò)GPIO端口的位拆裂,MicroBlaze處理器一次將一位的圖內容寫(xiě)入位移寄存器的數據輸入端,然后切換時(shí)鐘信號,移動(dòng)一下位移寄存器。一旦利用圖內容對整個(gè)位移寄存器進(jìn)行了更新,MicroBlaze會(huì )將一個(gè)上升沿寫(xiě)入STROBE行,這能夠將位移寄存器的值拷貝至輸出寄存器,為正確的電磁鐵加電或斷電,從而產(chǎn)生悅耳的音樂(lè )。

我們將固件用作軟件狀態(tài)機;對于不采用實(shí)時(shí)操作系統的嵌入式應用而言,這可提供某些多線(xiàn)程應用功能,但沒(méi)有實(shí)際線(xiàn)程實(shí)現開(kāi)銷(xiāo)。靜態(tài)結構數組根據當前的狀態(tài),指出系統針對特定事件應當采取什么措施。



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>