2016年1月2日 星期六

PSoC 5LP - CY8CKIT-059 電子琴

   PSoC 5LP - CY8CKIT-059 電子琴


開啟 PSoc Creator3.3 然後開專案


因為是用CY8CKIY-059開發板做的所以就選 Kit:CY8CKIT-059(PSoC 5LP)選好後 按 "Next"


PSoc Creator會詢問要用甚麼方是建立程式碼,就選 Empty schematic


再來就決定存放位置 工作區,專案名稱我用 music 好了就按 "Finish"


完成後會看到一張空白的線路圖

     電子琴最重要的是波形產生,PSoC 有一個非常有用的功能叫 WaveformDAC,能直接產生正旋波信號.既然有這功能就到零件區,正旋信號屬於Analog 所以就點開 Analig --> DAC 就可看到 Waveform DAC (8-bit) 這顆零件 



   滑鼠指著這顆零件按住滑鼠左鍵不要放拖曳到線路圖中,拖曳時零件會反白.


    放開就會變回彩色,底下會出現 2Errors 這是程式跟你說放了零件但是該接的線沒接,這先不理他


      滑鼠點兩下WaveDAC-8_1這顆零件,會出現這顆零件的特性,這顆零件有兩個頻率可選擇,分別為Waveform1與Waveform2,這兩個頻率特性可分開調整,輸出哪個頻率由ws腳控制.

 以下是各功能介紹與我們所需要的數值
1.Name : Do_Re (這顆零件的名稱,為了好記就用他將發出的聲音為名稱)
2.Range selection : VDAC 0 -1.020V (這是選擇DAC輸出波形大小)
3.Timing : Internal clock (參考時鐘信號來源選擇內部).
4.Sample rate : 100KSPS (取樣頻率100KSPS)
5.Wave type : Sine (正旋波)
6.Amplitude : 1.000 (波形峰對峰值電壓1.0V)
7.offset(V) : 0.510 (偏移電壓0.510V)
8.Phase(degress) : 0 (正旋角度 0 度)
9.Samples : 382 (這是產生頻率的除值,Sample rate /261.6 (Do的音頻)=261.6)填入後前面波形就會顯示將產生的頻率.
10.Wave type : Sine (正旋波)
11.Amplitude : 1.000 (波形峰對峰值電壓1.0V)
12.offset(V) : 0.510 (偏移電壓0.510V)
13.Phase(degress) : 0 (正旋角度 0 度)
14.Samples : 340 (這是產生頻率的除值,Sample rate /293.7 (Do的音頻)=340)


    現在只有兩個聲音,還要6個聲音才會有八度音,就還需三個WaveDAC-8.就再拉三個WaveDAC-8進線路圖.

第二個設定,只差別在產生的頻率,

1.Name : Mi_Fa (這顆零件的名稱,為了好記就用他將發出的聲音為名稱)
2.Range selection : VDAC 0 -1.020V (這是選擇DAC輸出波形大小)
3.Timing : Internal clock (參考時鐘信號來源選哲內部).
4.Sample rate : 100KSPS (取樣頻率100KSPS)
5.Wave type : Sine (正旋波)
6.Amplitude : 1.000 (波形峰對峰值電壓1.0V)
7.offset(V) : 0.510 (偏移電壓0.510V)
8.Phase(degress) : 0 (正旋角度 0 度)
9.Samples : 303 
10.Wave type : Sine (正旋波)
11.Amplitude : 1.000 (波形峰對峰值電壓1.0V)
12.offset(V) : 0.510 (偏移電壓0.510V)
13.Phase(degress) : 0 (正旋角度 0 度)
14.Samples : 286 


第三組

1.Name : So_La (這顆零件的名稱,為了好記就用他將發出的聲音為名稱)
2.Range selection : VDAC 0 -1.020V (這是選擇DAC輸出波形大小)
3.Timing : Internal clock (參考時鐘信號來源選哲內部).
4.Sample rate : 100KSPS (取樣頻率100KSPS)
5.Wave type : Sine (正旋波)
6.Amplitude : 1.000 (波形峰對峰值電壓1.0V)
7.offset(V) : 0.510 (偏移電壓0.510V)
8.Phase(degress) : 0 (正旋角度 0 度)
9.Samples : 255 
10.Wave type : Sine (正旋波)
11.Amplitude : 1.000 (波形峰對峰值電壓1.0V)
12.offset(V) : 0.510 (偏移電壓0.510V)
13.Phase(degress) : 0 (正旋角度 0 度)
14.Samples : 227 


第4組

1.Name : So_La (這顆零件的名稱,為了好記就用他將發出的聲音為名稱)
2.Range selection : VDAC 0 -1.020V (這是選哲DAC輸出波形大小)
3.Timing : Internal clock (參考時鐘信號來源選擇內部).
4.Sample rate : 100KSPS (取樣頻率100KSPS)
5.Wave type : Sine (正旋波)
6.Amplitude : 1.000 (波形峰對峰值電壓1.0V)
7.offset(V) : 0.510 (偏移電壓0.510V)
8.Phase(degress) : 0 (正旋角度 0 度)
9.Samples : 202 
10.Wave type : Sine (正旋波)
11.Amplitude : 1.000 (波形峰對峰值電壓1.0V)
12.offset(V) : 0.510 (偏移電壓0.510V)
13.Phase(degress) : 0 (正旋角度 0 度)
14.Samples : 191

     
    一般樂器都只有一個聲音輸出但現在有4個,就需要有一個把4個聲音整合的零件,這零件名稱是 Multiplexer 簡稱是 MUX,那就到零件區找.
    在Analog --> Analog MUX -->有一個名稱是Analog MUX 零件,就把這顆零件拉進線路圖


      在輸出要推動外接裝置時都會加一個放大器(Amplifiers),一樣在Analog -->Amplifiers 找一個名稱 Opamp的零件拉進線路圖


這個 Opamp 只做電流放大,按兩下Opamp 改成 Follower & High Power


要接八個按鍵所以要一個收按鍵信號的暫存器 Digital --> Registers --> Status Register


   有4個發出聲音裝置需要一個控制器來控制哪一個發出聲音 Digital --> Registers --> Control Register

Control Register目前有八隻腳,只有4個零件要控制,按兩下Control Reg這顆零件,將 Outputs 改成4
.
    內部零件都齊全了再來就設定要接到外面的接腳,Ports and Pins  --> Digital Input 拉進線路圖,注意接腳框框直接相連於要接出的零件上,原本小框框會消失


需要八個按鍵



按兩下Pin_1 將名稱改為 Do_Key ,Drive mode 改為 Resistive pull up


Pin_2 將名稱改為 Re_Key ,Drive mode 改為 Resistive pull up
Pin_3 將名稱改為 Mi_Key ,Drive mode 改為 Resistive pull up
Pin_4 將名稱改為 Fa_Key ,Drive mode 改為 Resistive pull up
Pin_5 將名稱改為 So_Key ,Drive mode 改為 Resistive pull up
Pin_6 將名稱改為 La_Key ,Drive mode 改為 Resistive pull up
Pin_7 將名稱改為 Si_Key ,Drive mode 改為 Resistive pull up
Pin_8 將名稱改為 Doh_Key ,Drive mode 改為 Resistive pull up

   
     再來要把零件接線,按鍵盤 "w" 鍵,滑鼠游標會變 + 點一下要銜接零件接腳會拉出一條線,要轉彎點一下滑鼠左鍵,到達連接點時再點一下左鍵就完成了


全部內部接線完成


    按鍵需要有Clock來判斷按下與放開的時間,System --> Clock 一樣拉進線路圖接在Status_Reg_1的clock接腳上


點兩下Clock_1 把 Sours type 改成 MASTER_CLK , Specify 改成 Divider : 1


    再來就選實際接出IC接腳 點選左邊 music.cydwr 會出現IC與目前接腳使用情形



點一下右邊 Port 會下拉接腳,綠色為可用可自行跟換


這是我改完後接腳使用狀況


再來就把線路圖整理整齊,加上外部示意零件,這動作不影響程式運行,對日後Debug有很大幫助


開起左邊 mail.c 填入這段程式碼

#include <project.h>
#include <stdbool.h>

int main()
{
    /* 啟動所有零件 (零件_Start()) */

    Do_Re_Start();
    Mi_Fa_Start();
    So_La_Start();
    Si_Do_Start();
    AMux_1_Start();
    Opamp_1_Start();

    
    uint8 InputReg;
        
    /* 描述按下開關後各 Register 動作. */
    for(;;)
    {
        
        
        InputReg = Status_Reg_1_Read();
        
        
        switch(InputReg){
            
         case 1:
            
            Control_Reg_1_Write(0); //0000
            AMux_1_Select(0);    
            
         break;
            
         case 2:
            
            Control_Reg_1_Write(1); //0001
            AMux_1_Select(0);   
            
         break;
            
         case 4:
            
            Control_Reg_1_Write(1); //0001
            AMux_1_Select(1);            
            
         break;
            
         case 8:
            
            Control_Reg_1_Write(2); //0010
            AMux_1_Select(1);
             
         break;
            
         case 16:
            
        Control_Reg_1_Write(2); //0010
        AMux_1_Select(2);            
            
         break;
            
         case 32:
            
        Control_Reg_1_Write(4); //0100
        AMux_1_Select(2);            
            
         break;
            
         case 64:
            
        Control_Reg_1_Write(4); //0100
        AMux_1_Select(3);                       
            
         break;
            
         case 128:
            
        Control_Reg_1_Write(8); //1000
        AMux_1_Select(3);                 
            
         break;
            
         default:
            
            AMux_1_DisconnectAll();
            
          break;         
        }             
        
        
    }
    
}

/* [] END OF FILE */


將目標版的配線依設定的腳位接好



按 Ctrl+F5 開始編譯上傳程式,沒有出現錯誤就完成了


按住 Do 的波形

按住 Re 的波形


證實PSoC 5LP產生的是正旋波

沒有留言:

張貼留言