FM音源YMF825+micro:bit編
2020.01.24
YouTube 動画でポイントを説明しています。画像をクリックすると再生できます。
今回は、ヤマハのFM音源YMF825ボードとmicro:bitをSPI接続し、SSH経由でノートパソコンのキーボードを鍵盤に見立てて音を鳴らせてみます。
また、音源のアルゴリズムも変更してみます。
ここでの前知識として、下記のYouTube動画と解説をご覧ください。
■構成図

ラズパイ・ゼロWHとmicro:bitは、USBケーブルでシリアル接続しています。また、micro:bitとYMF825は拡張シールドを介してSPI接続しています。
OSには、Raspbian Stretch を使用しています。Raspberry Pi の操作は、パソコンからSSH接続にて行います。
■micro:bit のピン配置
micro:bit は、I2C、SPIインターフェースを内蔵していますが、I2Sがないのが残念です。

BBC micro:bit
英国BBCの教育向けシングルボードコンピュータです。micro:bitはプログラミング可能な小さなコンピューターで、学習や教育が楽しく簡単に出来るようにデザインされています。
■micro:bit 用拡張シールド
micro:bit単体では、YAMAHAのFM音源YMF825と接続できないので、拡張シールドを用います。
micro:bit は3.3V稼働、FM音源YMF825は5V仕様なので、レベル変換に対応したシールドを使います。
下記のシールドでは、micro:bitにプログラムを転送する際には、micro:bit本体とラズパイをUSB接続する必要があります。
プログラム転送後は、micro:bit側のUSBケーブルを外しても、拡張シールド側の電源供給でmicro:bitも接続機器も稼働します。

Micro:bitマイクロビット センサーシールドV2 3.3V 5Vプログラミング拡張
I2CやSPI通信ピンなど、一般的に使用されているシリアル通信インタフェースを2.54mmピッチのピンまたはメスヘッダに拡張。マイクロ:ビット制御ボードと他の通信デバイス間の通信を可能にします。
センサーに電力を供給するとき、ジャンパーキャップV1とV2を通して供給電圧3.3Vか5Vを選ぶことができます。
■YAMAHA FM音源 YMF825ボード
YMF825は、4オペレータのFM音源、最大16音同時に発音可能、FMの基本波形29種類内蔵、アルゴリズム8種類、SPIによるシリアルインタフェース、スピーカアンプ内蔵、3バンドイコライザ内蔵、16 bitモノラルD/Aコンバータ内蔵で動作電圧5Vです。
ヤマハFM音源LSI YMF825搭載モジュール YMF825Board
ヤマハのFM音源チップYMF825(SD-1)を搭載した音源ボードです。ヤマハ独自のFMシンセサイザを搭載し、数種類のパラメータ指定により豊かなサウンドを再生することが可能です。
ArduinoやRaspberry Pi等のマイコンボードから、SPIを通して直接YMF825のレジスタを制御することで発音させます。スピーカーアンプも搭載しているので、アンプ回路を別途外部に用意する必要がありません。
■YMF825ボードと拡張シールドの結線
YMF825と拡張シールドをSPI接続します。
| YMF825Board | - | micro:bit |
| SS | - | P16:SS (chip select) |
| MOSI | - | P15:MOSI (serial data output) |
| MISO | - | P14:MISO (serial data input) |
| SCK | - | P13:SCK (serial clock) |
| GND | - | GND:ground |
| 5Vin | - | 5V :power |
| RST_N (reset) | | |
| Audio Out | | |
| 3.3Vin | | |
micro:bit 側の機能割振りのないデジタル8番ピンをリセットに使用してもよいのですが、接続しなくても問題ないようです。

配線すると、こんな感じになります。シールドのUSB端子は電力供給用です。5Vの電力供給を行うには、シールド側に電源用USBケーブルを挿す必要があります。
また、ここにラズパイからのUSBケーブルを挿しても、micro:bitと通信できません。ラズパイとのシリアル通信にはmicro:bit本体とUSB接続します。
YMF825には、SPEAK OUTの他に、3.5mmヘッドフォン出力があるので、そこにミニジャックを挿しても構いません。
今回は、パソコンからmicro:bit側のプログラムへ逐次データ送信を行うので、micro:bit本体側USBケーブルも挿したままにします。
■サンプルプログラムの使い方
下記の2つのプログラムをダウンロードします。
main.py
ymf825.py
micro:bit へ転送します。
$ ufs put main.py
$ ufs put ymf825.py
minicom を起動して、micro:bitをリセットします。
$ minicom -b 115200 -o -D /dev/ttyACM0
ラズパイとmicro:bitとのシリアル通信のコードはこんな感じです。
コード変換の部分はもうちょっとスマートな書き方があるかもしれません。
while True:
if uart.any():
s = uart.read()
key = chr(ord(s))
if key == 'q':
break
elif key >= '0' and key <= '7':
ymf.setAlgorithm(int(key))
uart.write('Algorithm=' + key + '\r\n')
elif key in notes:
note = notes[key][0]
ymf.keyon(0, 0, note)
uart.write('note=' + notes[key][1] + '\r\n')
sleep(200)
ymf.keyoff(0);
sleep(10);
else:
continue
minicom 上でキーボードを叩いてみましょう。
このプログラムでは、ノートパソコンのキーボードをピアノの鍵盤にみたてて、キーを押すと音が鳴るようにしています。
[Shift]キーを押しながら、キーを押すと1オクターブ上の音が鳴ります。

def keyon(self, toneIndex, channel, note):
freqNum=self.noteFnum[note%12]
block=int(note/12)
freqNumH=((0x0380 & freqNum)>>4)|block
freqNumL=0x7f&freqNum
mosiChar( 0x0B, channel)
mosiChar( 0x0C, 0x54)
mosiChar( 0x0D, freqNumH)
mosiChar( 0x0E, freqNumL)
keyTone=0x40|(toneIndex&0x0f) # 0x40:KeyOn
mosiChar( 0x0F, keyTone)
また、YMF825は4オペレータのFM音源と8種類のアルゴリズムを実装しています。
0~7までの数字キーを押すと、下記の番号に対応して、アルゴリズムを変更できます。
※実際にはアルゴリズムは4つのオペレータと深く絡んでいるので、各オペレータの情報も修正しないとよい音質は得られません。

def setAlgorithm(self,num):
self.tone_data[2] = 0x40|num
mosiChar( 0x08, 0xf6 )
sleep(1)
mosiChar( 0x08, 0x00 )
mosi( 0x07, self.tone_data, 35 )
このプログラムでは実装していませんが、YMF825には29種類の波形が内蔵されているので、波形を変更するのも面白いかもしれません。
ソースコードでいうと、下記の部分です。
YAMAHA YMF825 の Tone Paramater 資料と、FM音源の専門書を参考に、自分だけの音を作ってみてはいかがでしょうか。
tone_data = [
0x81, # 80H + Tone Number
0x01, # BO (Basic Octave)
0x43, # LFO,ALG
0x00,0x67,0xFF,0x9D,0x00,0x10,0x40, # Operator1 Setting
0x21,0x33,0xE2,0xA3,0x00,0x50,0x00, # Operator2 Setting
0x10,0x41,0xD3,0x88,0x01,0x10,0x00, # Operator3 Setting
0x21,0x62,0xD4,0x02,0x01,0x10,0x00, # Operator4 Setting
0x80,0x03,0x81,0x80] # Footer

ここで、重要な事に気付いてしまいました!
micro:bit を拡張シールドに装着すると、可愛くない!
見た目の美しさが半減、いや7割減です!
これなら、ブレッドボードに Arduino Nano を挿して使ったほうが整然としていて美しい。
■参考資料
yamaha-webmusic/ymf825board System Setting
yamaha-webmusic/ymf825board Tone Parameter
Fabble
Arduino と micro:bit の性能比較
| Arduino Nano | micro:bit |
| CPU: |
Atmel Atmega328P 8bit@16MHz |
nRF51822(ARM Cortex M0) 32bit@16MHz |
| Flash Memory: |
32KB |
256KB※ |
| RAM: |
2KB |
16KB |
| GPIO: |
Digital=14 Analog=8 |
GPIO=19 |
| LED: |
1個 |
25個 |
| 加速度センサー: |
× |
MMA8653FC |
| 磁気センサー: |
× |
MAG3110 |
| スイッチ: |
× |
タクトスイッチ2個 |
| USB: |
mini-type |
micro-type |
| 無線: |
× |
BLE |
| 電圧: |
+5VDC |
+3.3VDC |
| 言語: |
Arduino言語 |
JavaScript/MicroPython |
| サイズ: |
18mm×42mm |
52mm×42mm |
※MicroPythonファイルシステムで 利用可能な容量は約 30KBです。
Ref.
BBC micro:bit MicroPython ドキュメンテーション
※micro:bitの温度センサーは室温ではなく、micro:bitの基板に搭載されているICチップの温度です。
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」
「一念発起して何かを始めても、いつも三日坊主で終わってしまう」
「色んなことを先延ばしにしたまま、時間だけが過ぎていく」
そこで本書では、そんな著者が独自に開発した、
まったく新しい目標達成メソッド「100日デザイン」について、
その知識と技術を、余すところなくご紹介します。
まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。
ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。
今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。
ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。
29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!
【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。
基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説!
500以上のサンプルを掲載。実行結果も確認。
全24章の包括的なチュートリアル。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。
Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード
電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)
|