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チップの温度です。
|

【深層学習関連】
【画像処理関連】

【音楽関連】

【WEBサイト構築関連】

【開発環境関連】

【SNS関連】

【周辺機器関連】

【その他】

トランジスタ技術 2021年1月号
特集: アナログ回路はノイズと闘う ~システムの性能を維持して安定な動作を実現するために~
Interface 2021年1月号
☆特集 Jetson/ラズパイ/PCで自習 Python画像処理100
☆特別付録:コンピュータ手帳2021
日経Linux 2021年 1月号
★超保存版・冊子付録 Ubuntu完全対応 Linuxコマンド逆引き大辞典 264項目
★付録DVD 特集連動2本入り「Ubuntu 20.10 日本語Remix」「Ubuntu Server20.10」
ラズパイマガジン2020年12月号
温度、距離、におい、圧力など、さまざまな種類のセンサー350種類を一挙に紹介します。特性や価格を示した一覧表を用意したので、用途に合った適切な製品を選べます。そのうちの34種類のセンサーは、仕組みから配線図まで図解で分かりやすく解説します。
15Stepで踏破 自然言語処理アプリケーション開発入門
エンジニアの実務に役立つ知識に絞り、独自に15の学習ステップを体系化しました。
数値計算にNumPy、形態素解析にMeCab、機械学習にscikit-learn、ディープラーニングに
Keras等を使い、Pythonのコードを記述し動かしていきます。
プログラミング・ビットコイン ―ゼロからビットコインをプログラムする方法
Linuxサーバーがゼロから作れる本
このLinuxを使いこなす上で一番手っ取り早いのが自分でLinuxサーバーを構築してみることです。
WindowsやMacのパソコンしか使ったことが無い人でも理解できるよう、
しくみや手順の解説を丁寧にまとめ上げた、ゼロからのサーバー入門ガイドです。
Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品
【仕様概要】CPU:ARM 1.2GHz 4コア、GPU:2コア 3D・動画支援、RAM:1GB、ネットワーク:LAN/Wi-Fi/Bluetooth、インターフェース:USB/HDMI/オーディオ/GPIO(UART/I2C/I2S/SPI...)。
Arduino Nano
ATmega328搭載/
動作電圧: 5V/
入力電源電圧(推奨):7~12V/
デジタル入出力ピン: 14本/
PWMチャンネル: 6本/
アナログ入力チャンネル: 8本/
直流電流(1ピン当り最大): 40 mA/
直流電流(3.3Vピン、1ピン当り最大): 50 mA/
Flashメモリ: 32 KB (ATmega328) 内2KBはブートローダーで使用/
SRAM: 2 KB (ATmega328)/
EEPROM: 1 KB (ATmega328)/
Clock Speed: 16 MHz
逆引き PIC電子工作 やりたいこと事典
機能が豊富で、速度・アナログ制御・省電力性・コストの面でもアドバンテージをもつPICマイコン。そんなPICマイコンの使い方を、目的別にやりたいことから引ける、逆引きタイプのガイドブックです。
C言語による PICプログラミング大全
2002年に初版、2009年に第2版を発売した名著『C言語によるPICプログラミング入門』
が大幅リニューアルし「大全」として生まれ変わりました。
本書では、機能豊富なPIC16F1シリーズを使いこなすために、統合開発環境を
MPLAB X IDEに、CコンパイラはMicrochip Technology社純正のXC8に、それぞれ変更しました。
C言語でPICマイコンのプログラミングを始めたい方から、最新のPICマイコンの機能をとことん使い倒したい方まで、必ず役に立つ1冊です。
PICと楽しむRaspberry Pi活用ガイドブック
「PICマイコン+Raspberry Pi3B」という組み合わせで、高機能な電子工作を簡単に実現し、電子工作を各段に高度化する方法について解説していきます。
ESP32&Arduino 電子工作 プログラミング入門
電子工作ファンに人気のマイコンArduino、そしてWiFiとBluetooth内蔵でネットワーク接続しやすいESP32。それらのマイコンでプログラムを組む際に使うのが「Arduino言語」です。
超特急Web接続!ESPマイコン・プログラム全集
IoT技術の回路とプログラムを解説しました.
トランジスタ技術2016年9月号と2017年3月号の特集に
最新の情報を加筆して一冊に仕上げました.
回路とプログラムのサンプル資料として最適です.
ラズベリー・パイやIchigoJamを連動させた例も紹介しています
M5Stack用カード型キーボードユニット
M5Stackにフル機能のQWERTY配列キーボードを実装できるユニットです。複数のボタンの組み合わせ(Sym + Key、Shift + Key、Fn + Key)や豊富なキーの値を出力することが可能です。
Ubuntu サーバー徹底構築
サーバー用UbuntuでLinuxサーバーを構築しよう!
導入からLinuxやコマンドの基本、各種サーバー構築、バックアップやストレージ管理まで!
サーバー用Linuxディストリビューションとして定評のあるUbuntu Serverの中でも、
10年長期サポート版であるUbuntu Server 18.04 LTSに対応!
[改訂第3版]Linuxコマンドポケットリファレンス
本書はLinux操作に必要なコマンドを収録したポケットリファレンスです。機能別にコマンドを分類し、各コマンドページでは書式/使用例などをコンパクトにまとめています。またアルファベット順索引も用意しており、名前しかわからなくてもすぐに目的のコマンドを探すことができます。今回の改訂では仮想化、データベース、クラウド時代に対応したネットワークコマンドなどを追加しています。おもなLinuxディストリビューションのCentOS、Fedora、Debian GNU/Linux、Ubuntuに対応し、初心者から上級者まで必携の1冊です。
できるPRO Apache Webサーバー 改訂版 Version 2.4/2.2/2.0対応
番のApache独学書を改訂しました!
CentOS、Ubuntu、Windows、Mac OS Xに対応しています。できるPROシリーズは、実際の画面や詳細なイラスト、概念図などで構成。
はじめての方でも理解しやすくなっています。
インストール、アクセス制限、CGI、モジュール拡張、ログ管理など、基本的なことから実践的なことまでていねいに解説しています。
[改訂第3版]PHPポケットリファレンス
PHPを利用したいすべての方必携の「PHPポケットリファレンス」最新版がついに登場! PHP 5/4による開発の際によく利用される機能を集約し、必要な知識を目的別、逆引きでまとめました。PHP5.3以降を対象とし、PHP4からある機能はPHP4でも利用できることがわかるようになっています。またオブジェクト指向型のAPI解説を大幅に強化。開発の現場には1冊置いておきたい書籍です。
MySQL ポケットリファレンス
MySQLはさまざまなWebサービスの中核を担うデータベースです。本書はMySQLの基礎的な内容を中心に、日常的によく使うちょっとしたコマンドや、外部管理ツールとの連携など、MySQLの管理/運用にあたって便利な情報を素早く探し出すことができます。MySQL自体の操作、MySQL特有のコマンド、MySQL専用管理ツール、PHPからの操作など、MySQLを実際に使っているユーザーに役立つ内容となっています。
Postfix詳解―MTAの理解とメールサーバの構築・運用
電子メールの配送システムの中核を担うプログラム「MTA」(Message Transfer Agent)のひとつが、「Postfix」です。 この全容を記した本です。
すところなく解説していきます。
DNSがよくわかる教科書
本書では、DNSの仕組みから、ドメイン名のルール、主なリソースレコードの内容、コマンドによる動作確認、DNSの運用ノウハウ、DNSSECの基礎知識まで、順を追ってやさしく解説します。
|