找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7519|回復(fù): 2
收起左側(cè)

基于PIC32的激光電子琴制作

[復(fù)制鏈接]
ID:99624 發(fā)表于 2015-12-25 04:29 | 顯示全部樓層 |閱讀模式
這里是視頻演示:給力隊(duì)友彈奏演示(沒有學(xué)過(guò)音樂(lè),彈得丑了點(diǎn))


  本來(lái)這可以幾周內(nèi)做好的作品,但由于元件的采購(gòu),學(xué)業(yè)的壓力,還有的是那份惰性,導(dǎo)致了它的難產(chǎn)。正好元旦放假,寢室的該找媽的都回去找媽了,找不成媽的也找...(你懂得)。也好一個(gè)人在寢室清靜清靜,沒有復(fù)雜的氛圍來(lái)左右我自戀的給它拍個(gè)照了。
      完成后效果圖:

只能說(shuō)激光在平常條件下是難以看到的,所以為了顯示效果故意放了個(gè)三角尺高手別介意。

這都是我們組員設(shè)計(jì)的外包裝,還算可以吧簡(jiǎn)單樸素。

好了,開始來(lái)干貨了,以下內(nèi)容可能會(huì)讓你感到不適,眩暈,鄙視,請(qǐng)你選擇性略過(guò)。
首先要擬好硬件的電路圖,才能確定要采購(gòu)的元器件。

圖太大了,先看個(gè)大概的情況,稍后附件里添加DSN電路圖文件,慢慢仔細(xì)看看,這是最小的系統(tǒng)框圖,考慮到我們發(fā)的試驗(yàn)開發(fā)板,左邊一列的AN1AN2,AN3已經(jīng)連接好了按鍵,就先不動(dòng)它,PGD1PGC1為程序代碼燒錄端口寫的程序就通過(guò)這個(gè)燒錄進(jìn)單片機(jī)的。OSC1OSC2連接的是外部晶振8MHz,就像心臟一樣維持著單片機(jī)的運(yùn)行。

通過(guò)圖片可以看到我們還有4個(gè)可用的引腳RB2,RB4,RA4,RB5.本來(lái)RB4RA4是用來(lái)接輔助晶振的我們用不到就可以去除了。留下盡可能多的引腳口,畢竟至少要有7根弦吧,對(duì)于我們的開發(fā)板來(lái)說(shuō)就要手動(dòng)的做些硬件上的改動(dòng)了。

好,現(xiàn)在細(xì)說(shuō)我們這塊開發(fā)板硬件的改動(dòng),非本次賽課計(jì)劃的可以忽略以下內(nèi)容了。
關(guān)于輔助晶振的改動(dòng)已經(jīng)說(shuō)了是為了多留出兩個(gè)引腳端口。關(guān)鍵是左側(cè)的四個(gè)電阻的去除,這尤為重要,關(guān)系到寫入程序后是否能正常運(yùn)行,兩個(gè)電容也是防止按鍵電壓不穩(wěn)。還有添加芯片左右兩側(cè)的排針,背面的上拉電阻,硬件改動(dòng)就這些了。

   可見這個(gè)連接口可謂是錯(cuò)綜復(fù)雜,有按鍵的端口引腳還有OC1PWM1)共用。OC1(PWM1)輸出不同頻率的方波從而通過(guò)揚(yáng)聲器器發(fā)出不同的音調(diào),而按鍵是否按下需要單片機(jī)時(shí)刻檢測(cè)電平的變化信號(hào),方波通過(guò)電阻R1影響AN1端口的電平,導(dǎo)致無(wú)法正常的檢測(cè)按鍵的電平。所以要OC1就不能用按鍵1,反之亦然,就必須把中間連接的電阻R1去掉,但是去掉電阻后按鍵的電壓會(huì)不穩(wěn)定,注意R3及以上部分是我后來(lái)加上去的上拉電阻,加上上拉電阻后電壓就穩(wěn)定了。
   硬件的背面按鍵上拉電阻:

背面多加了兩個(gè)電阻接到高電壓,老師是將左側(cè)(正面看)的2,7上拉的電阻,由電路圖可以看出,是選擇的按鍵AN1和按鍵AN4。我個(gè)人就直接把AN1,AN2上拉電阻了方便,當(dāng)然對(duì)應(yīng)老師給的代碼也需要修改小部分。

回歸大眾,我們繼續(xù)來(lái)看看還有那些端口可用。

   圖中已經(jīng)說(shuō)了SCLK,SLCK,SDO接數(shù)碼管芯片,為了簡(jiǎn)單就不用再敘述數(shù)碼管的連接方式了(又是一個(gè)傷腦筋的東西)。對(duì)于我們開發(fā)板來(lái)說(shuō)還可以用的引腳有RB10,RB11,RB13.加上之前的四個(gè)看7個(gè)引腳夠了,如果還嫌少可以把按鍵的引腳也拿來(lái)用用。RB7定義為PWM從而輸出波形,通過(guò)三極管S8050放大電流由發(fā)聲器發(fā)出聲音。

    已經(jīng)可用的RB2,RB4,RA4,RB5,RB10,RB11,RB13,七個(gè)端口就可以接光敏電阻或者激光接收器(推薦)了,在通過(guò)寫入程序檢測(cè)七個(gè)端口電壓從而發(fā)出不同的音調(diào)。
   
看一下實(shí)驗(yàn)的電路圖吧,前方多圖高能預(yù)警。


   圖中由于是實(shí)驗(yàn)性質(zhì)的,所以并沒有接光敏電阻這么高級(jí)的東西,就是把7個(gè)端口引出來(lái),通過(guò)電阻與高電平相連,然后引出一條相對(duì)地線,依次接觸七個(gè)端口就會(huì)使接觸的那個(gè)端口電壓變低,一樣的效果也會(huì)發(fā)出對(duì)應(yīng)的聲音。


   比對(duì)電路原理圖,所引出的7個(gè)的端口如圖所示,第幾個(gè)可要對(duì)清楚,例如1(DO)是左側(cè)第6個(gè)端口,2(RE)是第11個(gè)端口。

接上激光和激光接收器后亂如麻的線路:

以下放送外殼的加工,隊(duì)友給力呀,沒什么可多說(shuō)的了,看圖吧







   就此結(jié)束了,結(jié)果還可以吧,程序(老師給好的)見附件下載吧,有一些注釋,結(jié)合我前幾篇的基礎(chǔ)講解應(yīng)該可以看懂吧,也可以試著修改看看多加幾根弦如何(發(fā)現(xiàn)沒我是9根弦)?


難得有心情,再完善一下,更新下最新作品,隔得時(shí)間有點(diǎn)久了.....   貼上最新作品制作過(guò)程(2015年6月版)
框架定型




剛開始的棺材板一般的造型,后來(lái)淘寶換材料,記得是端午節(jié)剛到然后當(dāng)天加工好,第二天就交作品了(真懸)
















  1. #include "DZQConfig.h"

  2. //按鍵和顯示
  3. //顯示:RB8-RB9-RB15
  4. //按鍵:RA0-RB3
  5. //說(shuō)明:RB15-SPI的CLK時(shí)鐘信號(hào);RB8-SPI的SDO數(shù)據(jù)信號(hào);RB9-SPI的LCK數(shù)據(jù)鎖存信號(hào)
  6. //     AN1-RA0;AN4-RB3
  7. void InitKeyDisp(void)
  8. {
  9.     SpiOpenFlags oFlags;
  10.     oFlags = SPI_OPEN_MSTEN | SPI_OPEN_CKP_HIGH | SPI_OPEN_MODE8 | SPI_OPEN_ON;        
  11.     SpiChnOpen(2, oFlags, 6);
  12.     PPSOutput(2, RPB8, SDO2);
  13.     PORTSetPinsDigitalOut(IOPORT_B, BIT_9);

  14.     PORTSetPinsDigitalIn(IOPORT_A,BIT_0);
  15.     PORTSetPinsDigitalIn(IOPORT_B,BIT_3);
  16. }
  17. // 對(duì)定時(shí)器1進(jìn)行初始化
  18. void InitTimer1(void)
  19. {
  20.     OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_1, PERIOD);
  21.     INTEnable(INT_T1, INT_ENABLED);
  22.     INTSetVectorPriority(INT_TIMER_1_VECTOR, INT_PRIORITY_LEVEL_2);
  23.     INTSetVectorSubPriority(INT_TIMER_1_VECTOR, INT_SUB_PRIORITY_LEVEL_0);

  24. }
  25. // 對(duì)蜂鳴器進(jìn)行初始化
  26. // PWM1-RB7
  27. // 說(shuō)明:48MHZ系統(tǒng)頻率,4分頻為12MHZ,使用定時(shí)器2產(chǎn)生
  28. //       200HZ對(duì)應(yīng)周期值為60000,2KHZ對(duì)應(yīng)6000;
  29. void InitBeep(void)
  30. {
  31.     OC1CON = 0x0000;
  32.     RPB7Rbits.RPB7R = 0b0101;       // PWM1-RB7
  33.     OC1RS = 0;                  // 占空比
  34.     PR2 = 60000;                    // 周期
  35.     OC1CON = 0x0006;                // 配置位PWM模式
  36.     OC1CONSET = 0x8000;             // 使能PWM1
  37.         T2CONSET = 0x8020;              // 使能定時(shí)器2和4分頻48MHZ/4 = 12MHZ
  38. }
  39. //對(duì)激光接收管進(jìn)行初始化
  40. void InitInput(void)
  41. {
  42.     u32 in=0;
  43.     in = in | BIT_2 |BIT_4 |BIT_5 |BIT_10|BIT_11|BIT_13|BIT_14;
  44.     PORTSetPinsDigitalIn(IOPORT_B,in);

  45.     // 其他沒用的引腳配置成輸出,并輸出為低
  46.     PORTSetPinsDigitalOut(IOPORT_A,BIT_1|BIT_4);
  47.     PORTClearBits(IOPORT_A, BIT_1|BIT_4);
  48. }

  49. // 系統(tǒng)硬件初始化
  50. void BSP_Init(void)
  51. {
  52.     SYSTEMConfig(PERIOD, SYS_CFG_WAIT_STATES |SYS_CFG_PCACHE);
  53.     INTDisableInterrupts();
  54.     INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);

  55.     InitKeyDisp();
  56.     InitTimer1();
  57.     InitBeep();
  58.     InitInput();

  59.     INTEnableInterrupts();
  60. }

復(fù)制代碼
關(guān)于程序代碼,解壓后用MPLAB打開文件夾工程。
DZQ-1.X.zip (175.02 KB, 下載次數(shù): 15)



回復(fù)

使用道具 舉報(bào)

ID:210627 發(fā)表于 2017-9-8 21:41 | 顯示全部樓層
可以改成基于STC的單片機(jī)吧
回復(fù)

使用道具 舉報(bào)

ID:704585 發(fā)表于 2020-6-20 17:30 | 顯示全部樓層
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表