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產生的是正旋波
沒有留言:
張貼留言