teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

文法の修正

2018/04/09 14:29

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -6,7 +6,7 @@
6
6
  [Arduinoを用いたサンプル](https://github.com/yamaha-webmusic/ymf825board/blob/master/sample1/ymf825board_sample1/ymf825board_sample1.ino)
7
7
 
8
8
  実際に書き込む処理をどのようにpythonでどの用に書き直したらいいのかがわかりません。
9
- 現状のソースコードではwp.wiringPiSPIDataRWのところで処理が止ってしまいます。
9
+ 現状のソースコードではエラーもなく実行されますが、音がなりません
10
10
 
11
11
  ### 該当のソースコード
12
12
 
@@ -41,15 +41,21 @@
41
41
 
42
42
 
43
43
  def if_write(addr,data):
44
+ addr = addr.to_bytes(1, 'big')
45
+ data = data.to_bytes(1, 'big')
46
+
44
47
  set_ss_pin(0)
45
48
  wp.wiringPiSPIDataRW(SPI_CH, addr)
46
49
  wp.wiringPiSPIDataRW(SPI_CH, data)
47
50
  set_ss_pin(1)
48
51
 
49
52
  def if_m_write(addr,data,num):
53
+
54
+ addr = addr.to_bytes(1, 'big')
50
55
  set_ss_pin(0)
51
56
  wp.wiringPiSPIDataRW(SPI_CH, addr)
52
- for i in range(0,34) :
57
+ for i in range(0,35) :
58
+ data[i] = data[i].to_bytes(1, 'big')
53
59
  wp.wiringPiSPIDataRW(SPI_CH, data[i])
54
60
  set_ss_pin(1)
55
61
 
@@ -69,9 +75,9 @@
69
75
  if_write(0x02,0x0E)
70
76
  delay(1)
71
77
 
72
- if_wirite(0x00,0x01)#CLKEN
78
+ if_write(0x00,0x01)#CLKEN
73
- if_wirite(0x01,0x00)#AKRST
79
+ if_write(0x01,0x00)#AKRST
74
- if_wirite(0x1A,0xA3)#soft reset
80
+ if_write(0x1A,0xA3)#soft reset
75
81
  delay(1)
76
82
 
77
83
  if_write(0x1A,0x00)
@@ -99,7 +105,7 @@
99
105
 
100
106
  #=============
101
107
  def set_tone():
102
- tone_data[35] =[\
108
+ tone_data =[
103
109
  0x81,\
104
110
  0,\
105
111
  0x01,0x85,\
@@ -111,7 +117,7 @@
111
117
 
112
118
  if_write(0x08,0xF6)
113
119
  delay(1)
114
- id_write(0x08,0x00)
120
+ if_write(0x08,0x00)
115
121
 
116
122
  if_m_write(0x07,tone_data,35)
117
123
 
@@ -142,11 +148,13 @@
142
148
  init_825()
143
149
  set_tone()
144
150
  set_ch()
145
-
146
151
 
152
+
147
153
  keyon(0x1c,0x11)
148
154
  delay(500)
149
155
  keyoff()
150
156
  delay(200)
151
157
 
158
+
159
+
152
160
  ```

4

書式の修正

2018/04/09 14:29

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -28,16 +28,16 @@
28
28
 
29
29
  def set_ss_pin(val):
30
30
  if val == 1:
31
- wp.digitalRW(SS_PIN, wp.GPIO.HIGH)
31
+ wp.digitalWrite(SS_PIN, wp.GPIO.HIGH)
32
32
  else:
33
- wp.digitalRW(SS_PIN, wp.GPIO.LOW)
33
+ wp.digitalWrite(SS_PIN, wp.GPIO.LOW)
34
34
 
35
35
 
36
36
  def set_rst_pin(val):
37
37
  if val == 1:
38
- wp.digitalRW(RST_PIN, wp.GPIO.HIGH)
38
+ wp.digitalWrite(RST_PIN, wp.GPIO.HIGH)
39
39
  else:
40
- wp.digitalRW(RST_PIN, wp.GPIO.LOW)
40
+ wp.digitalWrite(RST_PIN, wp.GPIO.LOW)
41
41
 
42
42
 
43
43
  def if_write(addr,data):

3

誤字の訂正

2018/04/09 14:00

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -28,16 +28,16 @@
28
28
 
29
29
  def set_ss_pin(val):
30
30
  if val == 1:
31
- wp.digitalWrite(SS_PIN, wp.GPIO.HIGH)
31
+ wp.digitalRW(SS_PIN, wp.GPIO.HIGH)
32
32
  else:
33
- wp.digitalWrite(SS_PIN, wp.GPIO.LOW)
33
+ wp.digitalRW(SS_PIN, wp.GPIO.LOW)
34
34
 
35
35
 
36
36
  def set_rst_pin(val):
37
37
  if val == 1:
38
- wp.digitalWrite(RST_PIN, wp.GPIO.HIGH)
38
+ wp.digitalRW(RST_PIN, wp.GPIO.HIGH)
39
39
  else:
40
- wp.digitalWrite(RST_PIN, wp.GPIO.LOW)
40
+ wp.digitalRW(RST_PIN, wp.GPIO.LOW)
41
41
 
42
42
 
43
43
  def if_write(addr,data):
@@ -144,8 +144,6 @@
144
144
  set_ch()
145
145
 
146
146
 
147
-
148
- print("OK")
149
147
  keyon(0x1c,0x11)
150
148
  delay(500)
151
149
  keyoff()

2

質問内容の変更

2018/04/09 13:59

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,44 +1,154 @@
1
1
  ### 前提・実現したいこと
2
2
  FM音源に興味を持ったのでraspberryPiとYMF825boardを用いてDX7のようなFMシンセを作成しようと考えています。
3
- 電子工作的なことやICの制御などは今回が初めてなので、YMF825の仕様を見てもあまり理解ができず困っています。
4
- RaspberryPiのSPIの有効化はすんでいます。
5
3
 
6
4
  ### 発生している問題・エラーメッセージ
7
5
  現在下記リンクのサンプルをpythonでRaspberryPi用に書き直そうとしています
8
6
  [Arduinoを用いたサンプル](https://github.com/yamaha-webmusic/ymf825board/blob/master/sample1/ymf825board_sample1/ymf825board_sample1.ino)
9
7
 
10
- どのレジスタにどういう流れで書き込みを行っているのかはなんとなく把握できたのですが、
11
- 実際に書き込む処理をどのようにpythonで書き直したらいいのかがわかりません。
8
+ 実際に書き込む処理をどのようにpythonでどの用に書き直したらいいのかがわかりません。
12
- ライブラリwiringPiを使おう考えていますがSPI通信の方法についてご教授いただきたいです
9
+ 現状のソースコードでwp.wiringPiSPIDataRWのころで処理が止まっしまいます。
13
10
 
14
-
15
11
  ### 該当のソースコード
16
12
 
17
- ```Arduino
13
+ ```python
18
- void set_ss_pin(int val) {
14
+ import wiringpi as wp
15
+ import time
19
- if(val ==HIGH) PORTB |= (4);
16
+ #==========================
17
+ SPI_CH = 0 # SPI channel (0 or 1)
20
- else PORTB &= ~(4);
18
+ SPI_SPEED = 2000000 #SPI 2MHz
21
- }
22
19
 
23
- // only for Arduino UNO
24
- void set_rst_pin(int val) {
25
- if(val ==HIGH) PORTB |= (2);
26
- else PORTB &= ~(2);
20
+ SS_PIN = 22
27
- }
21
+ RST_PIN = 36
28
22
 
23
+ #setup
29
- void if_write(char addr,unsigned char* data,char num){
24
+ wp.wiringPiSPISetup (SPI_CH, SPI_SPEED)
30
- char i;
31
- char snd;
32
- set_ss_pin(LOW);
33
- SPI.transfer(addr);
34
- for(i=0;i<num;i++){
25
+ wp.wiringPiSetupGpio()
35
- SPI.transfer(data[i]);
36
- }
37
- set_ss_pin(HIGH);
38
- }
39
26
 
40
- void if_s_write(char addr,unsigned char data){
41
- if_write(addr,&data,1);
42
- }
43
27
 
28
+
29
+ def set_ss_pin(val):
30
+ if val == 1:
31
+ wp.digitalWrite(SS_PIN, wp.GPIO.HIGH)
32
+ else:
33
+ wp.digitalWrite(SS_PIN, wp.GPIO.LOW)
34
+
35
+
36
+ def set_rst_pin(val):
37
+ if val == 1:
38
+ wp.digitalWrite(RST_PIN, wp.GPIO.HIGH)
39
+ else:
40
+ wp.digitalWrite(RST_PIN, wp.GPIO.LOW)
41
+
42
+
43
+ def if_write(addr,data):
44
+ set_ss_pin(0)
45
+ wp.wiringPiSPIDataRW(SPI_CH, addr)
46
+ wp.wiringPiSPIDataRW(SPI_CH, data)
47
+ set_ss_pin(1)
48
+
49
+ def if_m_write(addr,data,num):
50
+ set_ss_pin(0)
51
+ wp.wiringPiSPIDataRW(SPI_CH, addr)
52
+ for i in range(0,34) :
53
+ wp.wiringPiSPIDataRW(SPI_CH, data[i])
54
+ set_ss_pin(1)
55
+
56
+
57
+ def delay(sec):
58
+ time.sleep(sec/1000)
59
+
60
+
61
+ #init
62
+ def init_825():
63
+
64
+ set_rst_pin(0)
65
+ delay(1)
66
+ set_rst_pin(1)
67
+
68
+ if_write(0x1D,0)#OutPower
69
+ if_write(0x02,0x0E)
70
+ delay(1)
71
+
72
+ if_wirite(0x00,0x01)#CLKEN
73
+ if_wirite(0x01,0x00)#AKRST
74
+ if_wirite(0x1A,0xA3)#soft reset
75
+ delay(1)
76
+
77
+ if_write(0x1A,0x00)
78
+ delay(30)
79
+
80
+ if_write(0x02,0x04)
81
+ delay(1)
82
+ if_write(0x02,0x00)
83
+
84
+ #add
85
+ if_write( 0x19, 0xF0 )#MASTER VOL
86
+ if_write( 0x1B, 0x3F )#interpolation
87
+ if_write( 0x14, 0x00 )#interpolation
88
+ if_write( 0x03, 0x01 )#Analog Gain
89
+
90
+ if_write( 0x08, 0xF6 )
91
+ delay(21);
92
+ if_write( 0x08, 0x00 )
93
+ if_write( 0x09, 0xF8 )
94
+ if_write( 0x0A, 0x00 )
95
+
96
+ if_write( 0x17, 0x40 )
97
+ if_write( 0x18, 0x00 )
98
+
99
+
100
+ #=============
101
+ def set_tone():
102
+ tone_data[35] =[\
103
+ 0x81,\
104
+ 0,\
105
+ 0x01,0x85,\
106
+ 0x00,0x7F,0xF4,0xBB,0x00,0x10,0x40,\
107
+ 0x00,0xAF,0xA0,0x0E,0x03,0x10,0x40,\
108
+ 0x00,0x2F,0xF3,0x9B,0x00,0x20,0x41,\
109
+ 0x00,0xAF,0xA0,0x0E,0x01,0x10,0x40,\
110
+ 0x80,0x03,0x81,0x80]
111
+
112
+ if_write(0x08,0xF6)
113
+ delay(1)
114
+ id_write(0x08,0x00)
115
+
116
+ if_m_write(0x07,tone_data,35)
117
+
118
+ #=============
119
+
120
+ def set_ch():
121
+ if_write( 0x0F, 0x30 )
122
+ if_write( 0x10, 0x71 )
123
+ if_write( 0x11, 0x00 )
124
+ if_write( 0x12, 0x08 )
125
+ if_write( 0x13, 0x00 )
126
+
127
+ def keyon(fnumh,fnuml):
128
+ if_write( 0x0B, 0x00 )
129
+ if_write( 0x0C, 0x54 )
130
+ if_write( 0x0D, fnumh )
131
+ if_write( 0x0E, fnuml )
132
+ if_write( 0x0F, 0x40 )
133
+
134
+ def keyoff():
135
+ if_write(0x0F,0x00)
136
+
137
+ #==================
138
+
139
+ if __name__ == '__main__' :
140
+
141
+
142
+ init_825()
143
+ set_tone()
144
+ set_ch()
145
+
146
+
147
+
148
+ print("OK")
149
+ keyon(0x1c,0x11)
150
+ delay(500)
151
+ keyoff()
152
+ delay(200)
153
+
44
154
  ```

1

質問内容の修正

2018/04/09 13:55

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,7 @@
1
1
  ### 前提・実現したいこと
2
2
  FM音源に興味を持ったのでraspberryPiとYMF825boardを用いてDX7のようなFMシンセを作成しようと考えています。
3
3
  電子工作的なことやICの制御などは今回が初めてなので、YMF825の仕様を見てもあまり理解ができず困っています。
4
+ RaspberryPiのSPIの有効化はすんでいます。
4
5
 
5
6
  ### 発生している問題・エラーメッセージ
6
7
  現在下記リンクのサンプルをpythonでRaspberryPi用に書き直そうとしています