質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

352閲覧

pythonを用いたymf825boardの制御について

退会済みユーザー

退会済みユーザー

総合スコア0

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/04/02 14:16

編集2018/04/09 14:29

前提・実現したいこと

FM音源に興味を持ったのでraspberryPiとYMF825boardを用いてDX7のようなFMシンセを作成しようと考えています。

発生している問題・エラーメッセージ

現在下記リンクのサンプルをpythonでRaspberryPi用に書き直そうとしています
Arduinoを用いたサンプル

実際に書き込む処理をどのようにpythonでどの用に書き直したらいいのかがわかりません。
現状のソースコードではエラーもなく実行されますが、音がなりません。

該当のソースコード

python

1import wiringpi as wp 2import time 3#========================== 4SPI_CH = 0 # SPI channel (0 or 1) 5SPI_SPEED = 2000000 #SPI 2MHz 6 7SS_PIN = 22 8RST_PIN = 36 9 10#setup 11wp.wiringPiSPISetup (SPI_CH, SPI_SPEED) 12wp.wiringPiSetupGpio() 13 14 15 16def set_ss_pin(val): 17 if val == 1: 18 wp.digitalWrite(SS_PIN, wp.GPIO.HIGH) 19 else: 20 wp.digitalWrite(SS_PIN, wp.GPIO.LOW) 21 22 23def set_rst_pin(val): 24 if val == 1: 25 wp.digitalWrite(RST_PIN, wp.GPIO.HIGH) 26 else: 27 wp.digitalWrite(RST_PIN, wp.GPIO.LOW) 28 29 30def if_write(addr,data): 31 addr = addr.to_bytes(1, 'big') 32 data = data.to_bytes(1, 'big') 33 34 set_ss_pin(0) 35 wp.wiringPiSPIDataRW(SPI_CH, addr) 36 wp.wiringPiSPIDataRW(SPI_CH, data) 37 set_ss_pin(1) 38 39def if_m_write(addr,data,num): 40 41 addr = addr.to_bytes(1, 'big') 42 set_ss_pin(0) 43 wp.wiringPiSPIDataRW(SPI_CH, addr) 44 for i in range(0,35) : 45 data[i] = data[i].to_bytes(1, 'big') 46 wp.wiringPiSPIDataRW(SPI_CH, data[i]) 47 set_ss_pin(1) 48 49 50def delay(sec): 51 time.sleep(sec/1000) 52 53 54#init 55def init_825(): 56 57 set_rst_pin(0) 58 delay(1) 59 set_rst_pin(1) 60 61 if_write(0x1D,0)#OutPower 62 if_write(0x02,0x0E) 63 delay(1) 64 65 if_write(0x00,0x01)#CLKEN 66 if_write(0x01,0x00)#AKRST 67 if_write(0x1A,0xA3)#soft reset 68 delay(1) 69 70 if_write(0x1A,0x00) 71 delay(30) 72 73 if_write(0x02,0x04) 74 delay(1) 75 if_write(0x02,0x00) 76 77 #add 78 if_write( 0x19, 0xF0 )#MASTER VOL 79 if_write( 0x1B, 0x3F )#interpolation 80 if_write( 0x14, 0x00 )#interpolation 81 if_write( 0x03, 0x01 )#Analog Gain 82 83 if_write( 0x08, 0xF6 ) 84 delay(21); 85 if_write( 0x08, 0x00 ) 86 if_write( 0x09, 0xF8 ) 87 if_write( 0x0A, 0x00 ) 88 89 if_write( 0x17, 0x40 ) 90 if_write( 0x18, 0x00 ) 91 92 93#============= 94def set_tone(): 95 tone_data =[ 96 0x81,\ 97 0,\ 98 0x01,0x85,\ 99 0x00,0x7F,0xF4,0xBB,0x00,0x10,0x40,\ 100 0x00,0xAF,0xA0,0x0E,0x03,0x10,0x40,\ 101 0x00,0x2F,0xF3,0x9B,0x00,0x20,0x41,\ 102 0x00,0xAF,0xA0,0x0E,0x01,0x10,0x40,\ 103 0x80,0x03,0x81,0x80] 104 105 if_write(0x08,0xF6) 106 delay(1) 107 if_write(0x08,0x00) 108 109 if_m_write(0x07,tone_data,35) 110 111#============= 112 113def set_ch(): 114 if_write( 0x0F, 0x30 ) 115 if_write( 0x10, 0x71 ) 116 if_write( 0x11, 0x00 ) 117 if_write( 0x12, 0x08 ) 118 if_write( 0x13, 0x00 ) 119 120def keyon(fnumh,fnuml): 121 if_write( 0x0B, 0x00 ) 122 if_write( 0x0C, 0x54 ) 123 if_write( 0x0D, fnumh ) 124 if_write( 0x0E, fnuml ) 125 if_write( 0x0F, 0x40 ) 126 127def keyoff(): 128 if_write(0x0F,0x00) 129 130#================== 131 132if __name__ == '__main__' : 133 134 135 init_825() 136 set_tone() 137 set_ch() 138 139 140 keyon(0x1c,0x11) 141 delay(500) 142 keyoff() 143 delay(200) 144 145 146

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

SPIはクロックとデータの2線を使って、ぶっちゃけバタバタさせるだけの話なので、速度さえ考えなければGPIOを使って(割と)簡単に実装できます
まずはそれで一通り動作させてみるってところですか

あと、YMF825というICのデータシートをよく読んで、どういうタイミングで送ればいいのか、どういうコマンドを送るのか、というのをよく理解しておくことですね


質問の修正に伴う追記
RasPIの内蔵SPIを使う、ということなら、まずは「RaspberryPI SPI」でぐぐってみましょう。
ドライバのインストールの仕方から使用法まで解説しているところが出てくると思います。
まずはそれで一通りやってみて、その上で質問があるならまた聞いてください。

いきなり、わからないので教えろ、と言われても、こんなところで教えれるわけがありませぬ。

投稿2018/04/02 21:34

編集2018/04/03 05:32
y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/09 12:21

回答ありがとうございます、質問でイマイチ言いたいことが伝わってなかったみたいですいません ICのデータシート自体はある程度読んでおり、どのレジスタになにを書き込むなどについては理解していると思います。 またSPIの有効化や、wiringPiのインストールなども済んでいるのですが Arduinoのサンプルと同じ処理をしようとした場合どういった書き方をしたらいいのかが分からない状態です。 ArudinoサンプルにてSPI.transferとなっているところを素直にwiringPiSPIDataRWなどに置き換えればいいと考えているのですが pythonでのwiringPiのメソッドについての記述が見当たらず確証が持てなかったため質問させていただきました。
y_waiwai

2018/04/09 12:31

どのレジスタになにを書き込むかわかっているなら、あなたが操作したいようにそのレジスタに書き込めばいいだけのはなしです まずはオシロなどでどういうデータが送信されるかを見てみるといいかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問