FM音源プログラム TGRX62N (V1.2) readme 2011/05/05 pcm1723 ●はじめに このプログラムは、CQ 出版発行の「インターフェース」誌 2011 年 5 月号 付属の Renesas R5F562N7BDFB (RX62N) マイコン基板「CQ-FRK-RX62N」用の フル機能版のFM音源プログラムです。 以前の暫定版に比べ、V1.1 で LCD 表示およびスイッチ入力のサポート、 シリアル MIDI使用時のマルチ・ポート対応で同時発音数 32 を実現しました。 V1.2 では、ステレオ (パンポット) 対応と、従来の SMAF (Synthetic music Mobile Application File) シーケンサに代えて SMF (Standard MIDI File) シーケンサの組み込みにより、同時発音数を活かしたデモ曲を内蔵しました。 非商用利用のみ許可します。 ソースリスト一式のパッケージおよび HEX パッケージがあります。 操作方法等、多くの部分は ADuC7026版や、V850版と同様なので、Web サイト http://www.geocities.jp/pcm1723/ のADuC7026版や、V850版の説明を参照してください。 含まれている音色データはフリーの「std.sb」から変換したものなので、上記 サイトの記述のように、「MA2 オーサリングツール」付属の音色データと差し 替えることをお勧めします。 ソースファイルの再コンパイルによらず、HEX ファイルの音色データ部分のみを 差し替える二つの方法もサポートしています。 それぞれの出来上がりのファイル名は次のようになります。 TGRX62Nma.mot TGRX62Nma2.mot プログラムの RX62N 基板への書き込みは、プログラムをコンパイルしてできた オブジェクト・ファイル (.mot ファイル) を、FDT (Flash Development Toolkit) を利用して行う方法のみに対応しています。 RX62N 基板の利用法として標準的な「シリアル接続 HEW モニタ」 をあらかじめ 書き込んでおいて、64 K バイトの RAM 上にプログラムをダウンロード/実行/ デバッグする方法には対応していません。 FDT 経由の書き込みで、シリアル接続 HEW モニタも消去されてしまいます。 利用したソフトウェアのバージョンは次のようになります o HEW (High-Performance Embedded Workbench) Version 4.08.00.011 o C/C++ Compiler package for RX family V.1.00 Release 02 o FDT (Flash Development Toolkit) V.4.0.7 Release 00 それぞれのソフトウェアのダウンロード/インストール/操作方法については、 インターフェース本誌を参照してください。 ●仕様 - 内蔵 10 ビット DAC (DA0/DA1) 出力をサポ=[ト - SPI 出力に接続した外付けのディジタル・オIーディオ用 16 ビット・  シリアル DAC (いわゆる標準フォーマット) に対応 (ノン・オーバーサンプリング DAC の ROHM BU9480F で確認) - サンプリング周波数は 24 kHz, 30 kHz, 32 kHz, 40 kHz, 48 kHz に対応し、スイッチ操作で選択可能 - デフォルトのサンプリング周波数は 40 kHz で、同時発音数は 15 (ステレオ)  サンプリング周波数と同時発音数の対応は次の通り     fs NPOLY NPOLY (モノラル) (ステレオ) ------ ------ ------ 48 kHz 15 13 40 kHz 18 15 32 kHz 24 20 30 kHz 25 22 24 kHz 32 27 ステレオとモノラルの切り替えはコンパイル時のオプションであり、デフォルト  ではステレオになっている  ステレオ対応は、MIDI コントロール・チェンジ 10 番 (CC#10) の  「パンポット」の指定により、ステレオ音場内での「定位」を設定するだけ  の機能で、音源自体にステレオの広がりを持たせるわけではない 各 MIDI チャンネルとも、後着優先のモノモード、つまり、1チャンネル  あたり1音しか発音できない 16 音 (以上) を同時発音させるためには、16 MIDI チャンネルすべてを使う 必要があり、事実上、シーケンサーによる演奏に限られる V1.2 では、SMF シーケンサを内蔵し、デモ曲のデータも上述の事情を考慮  して作成してあるので、同時発音数を活かした演奏となっている  また、次項のマルチ・ポートは、単なる「MIDI プレイヤー」では対応して  いない場合が多く、シーケンサー・ソフトによる再生が必要になる - 「シリアル MIDI」の「マルチ・ポート」に荘ホ応し、2 ポート、最大 32 音  まで発音可能 同時発音数 16 以下の場合は、すべて「ポート 0」に割り付けられ、同時  発音数 16 を超える分が「ポート 1」に割り付けられる  ホスト PC のアプリケーション側で、たとえば YAMAHA の「CBX ドライバ」  で "YAMAMHA CBX A Driver" を選ぶとポート 0 側、"YAMAHA CBX B Driver"  を指定するとポート 1 側が選ばれる - 通常のマルチティンバー音源では、MIDI チャャ塔lル 10 はリズム音源の チャンネルだが、本機ではリズム音源の機能はない 同時発音数 10 以上 15 以下の場合には、MIDI チャンネル 10 をスキップ  して割り当てるように変更 (V1.2) 同時発音数 16 以上では、MIDI チャンネル 10 のスキップ機能はないので、  リズムデータを含む演奏データを再生する場合には、MIDI チャンネル 10 を  送信側でオフにして、リズムデータを送出しない設定にする必要がある - フォトカプラを使った通常の MIDI 入力 (311.25 kbps) と、RS-232-C 経由の シリアル MIDI 入力 (38.4 kbps) に対応 - 16 文字 x 2 行のキャラクタ LCD を接続しbト、簡易 MIDI モニタ、CPU 負荷率  などの表示や、サンプリング周波数の切り替えが可能 ●ハードウェア 回路図「TGRX62N.pdf」を「TGRX62N\sch」フォルダに置いてあります。 オーディオ出力は内蔵 10 ビット DAC 出力 (DA0: 左チャンネル、 DA1: 右チャンネル) および、外付けのディジタル・オーディオ用16 ビット・ シリアル DAC に対応しています。 DAC に出力するシリアル・データ形式は、いわゆる「標準フォーマット」の 16 ビット右詰めになっています。  接続する SPI は、外付けの LCD 拡張ボードで SD カード・インターフェース として RSPIA が使われるだろうことを考慮して、コネクタ 4 (CN4) の JTAG インターフェース部に出力されている RSPIB-A の信号を使うことにしました。 したがって、JTAG 経由のデバッガと、外付け DAC とは両立しません。 内蔵 DAC の出力は、本来は外部でOP アンプを使ってバッファリングする必要が あると思います。 しかし、DAC 出力の電圧値は、GND レベルから、ほぼ電源電圧いっぱいまで フルスイングするので、OP アンプを 3.3 V 電源で使う場合には、レイル・ツー・ レイル入出力のものを選ぶ必要があります。 そんなわけで、回路図では、単に DA0/DA1 端子から線を引き出すだけで、 バッファについては書いてありません。 データシートには、負荷インピーダンスが低くなると直線性誤差が増える傾向を 示す表がありますが、おそらく、負荷が重くなると全体のレベルが下がるだけ だと思います。 数十 kΩ の入力インピーダンスのアンプをつないでみても、特に歪っぽい音に はなりませんでした。 回路図には外部ディジタル・オーディオ DAC として、ROHM 製の BU9480F との、 接続が書いてあります。 入力は通常の MIDI 入力 (31.25 kbps) と、シリアル MIDI (38.4 kbps) に対応して います。 具体的なインターフェース回路は、冒頭に挙げた Web サイトを参照して ください。 回路図の コネクタ 2 (CN2) ピン 12 (P22/SCK0) に接続する「SENS」信号は、MIDI/シリアル MIDI のボーレート切り替えのためで、 「H」レベルででシリアル MIDI (38.4 kbps)、「L」レベルで通常の MIDI (31.25 kbps) を選択します。 「切り替え」が必要ない場合には、プルアップあるいはプルダウンするだけで構いませんが、 直接 Vcc / GND につなぐのではなく、10 kΩ 程度の抵抗を介してプルアップ/プルダウン してください。 プログラムを実行すると、デモ曲を自動演奏しますから、MIDI 入力はなくても 音は出ます。 オプションとして、HD44780 互換のコントローラを持つ、16 文字 x 2 行のキャラクタ LCD モジュールを接続して表示させることができます。 回路図では、液晶のバイアス電圧 (Vo: 3 番ピン) の発生にシャント・レギュレータ TL431 を使って電圧を安定化するようになっていますが、ここは単なる可変抵抗でも かまいません。 RX62N と LCD の間に 8 ビット MCU (PIC/AVR) を介在させ、LCD への信号出力と、スイッチ 入力の機能を持たせて、接続端子数を節約することにしました。 P00/P01 に割り当てられている SCI6 を利用して、62.5 kbps の調歩同期式シリアル通信で データをやりとりします。 8 ビット MCU と LCD との間は、ビジーフラグを読まない、ライト・オンリの 4 ビット・ モードで接続しています。 PIC は PIC16F628、AVR は ATtiny2313 用の回路図と、ファームウェアを同梱しています。 いずれも、クロックは内蔵 RC オシレータを使用しています。 PIC16F628 用プログラムのサイズは数十バイトですから、同じシリーズの PIC16F627 から PIC16F648A までのどれでも使用可能だと思います。 RX62N のポート 0 には内部プルアップ機能がないので、8 ビット MCU を外付けしない場合、 RX62N の P01/RxD6-A (CN2-30) は開放のままにせず、プルアップ抵抗を接続して誤動作を 防いでください。 RX62N ボード上の JPP4 (NMI/P35 端子) にプッシュ・スイッチを接続すると、8 ビット MCU に接続した「INC」スイッチと同等の機能になります。 「長押し」、つまり、2 秒間程度以上押し続けてから離すと、デモ曲の演奏を中止することが できます。 ●開発環境の準備 開発環境はインターフェース本誌の説明の通り、Renesas の Web サイトからダウンロード/ ンストールしてください。 ●パッケージ HEX パッケージ / ソース・パッケージは zip 形式で圧縮されていますので、 Windows XP 以降なら OS の機能で解凍できます。 ソースファイルを解凍する場所は、どこでも構いません。 もちろん、パッケージ作成時の環境とは違いますが、HEW 立ち上げ時に 「このワークスペースのディレクトリが移動されました。」 というダイアログが開き、「はい」をクリックすると修正されます。 オブジェクト・ファイル名は「TGRX62N.mot」です。  ソース・ツリーの中では、 \TGRX62N\prj\RX62N\TGRX62N\Debug\TGRX62N.mot です。 このファイルを書き込みます。 ●プログラムの書き込み方法 FDT (Flash Development Toolkit) を使って書き込みます。 操作方法はインターフェース本誌を参照してください。 ●LCD インターフェースの 8 ビット MCU 用プログラムについて PIC 用のプログラムは MPLAB V8.43 上で、PIC16F628 をターゲットとした ASM プロジェクトとして作成してあります。 AVR 用のプログラムは、AVR Studio V4.17 build 666 + WinAVR-20090313 の組み合わせ で、ATtiny2313 をターゲットとした C プロジェクトとして作成してあります。 AVR Studio 5 や AVR-Toolchain では試してありません。 ●HEX パッケージの内容 readme.txt : このファイル licence.txt : ライセンス条件のファイル TGRX62N.pdf : 回路図の pdf ファイル AVR_LCD.pdf : AVR (ATtiny2313) による LCD インターフェース回路の pdf ファイル PIC_LCD.pdf : PIC (PIC16F628) による LCD インターフェース回路の pdf ファイル lcd4avr.hex : AVR (ATtiny2313) 用のオブジェクトの hex ファイル lcd4pic.hex : PIC (PIC16F628) 用のオブジェクトの hex ファイル TGRX62N.mot : RX62N 用オブジェクト・ファイル ●ソース・パッケージの内容 パッケージを解凍すると、「TGRX62N」フォルダの下にファイルが展開されます。 以下では、TGRX62N フォルダを基準に話を進めます・ \TGRX62N | +-- readme.txt : このファイル | +-- licence.txt : ライセンス条件のファイル | +-- \gen_tab : テーブル定義ファイル作成用ツール | | | +-- Makefile : テーブル一括生成のためのメイクファイル | | | +-- *.c : C ソースファイル | | | +-- *.awk : gawk ソースファイル | +-- \src : ソースファイルフォルダ | | | +-- \common : 各マイコンに共通なソース | | | | | +-- *.c : C ソースファイル | | | | | +-- *.h : ヘッダ・ファイル | | | +-- \RX62N : RX62N に特有なソース | | | +-- *.c : C ソースファイル | | | +-- *.h : ヘッダ・ファイル | +-- \prj : プロジェクトファイルのフォルダ | | | +-- \RX62N : RX62N 用のワークスペース/プロジェクト | | | +-- TGRX62N.* : ワークスペース関連ファイル | | | +-- \TGRX62N : 各種ファイルのフォルダ | | | +-- TGRX62N.* : プロジェクト関連ファイル | | | +-- \Debug : オブジェクトのフォルダ | | | +-- TGRX62N.mot : オブジェクト・ファイル | | | +-- *.* : 各種ファイル | +-- \sch : 回路図のフォルダ | | | +-- TGRX62N.ce3 : bsch3v で書いた回路図 | | | +-- TGRX62N.pdf : 回路図の pdf ファイル | | | +-- PIC_LCD.ce3 : bsch3v で書いた PIC 使用 LCD インターフェース回路図 | | | +-- PIC_LCD.pdf : PIC 使用 LCD インターフェース回路図の pdf ファイル | | | +-- AVR_LCD.ce3 : bsch3v で書いた AVR 使用 LCD インターフェース回路図 | | | +-- AVR_LCD.pdf : AVR 使用 LCD インターフェース回路図の pdf ファイル | +-- \mcu_lcd : 8 ビット MCU (PIC/AVR) によるキャラクタ LCD インターフェースのファームのフォルダ | | | +-- \PIC : PIC 版のフォルダ | | | | | +-- \lcd4pic : MPLAB 用の ASM プロジェクトのフォルダ (PIC18F628) | | | | | +-- lcd4pic.asm : ASM ソースファイル | | | | | +-- lcd4pic.hex : オブジェクトの HEX ファイル | | | | | +-- lcd4pic.m* : MPLAB 用ワークスペース/プロジェクト・ファイル | | | +-- \AVR : PIC 版のフォルダ | | | +-- \lcd4avr : AVR Studio 4 / WinAVR 用の C プロジェクトのフォルダ (ATtiny2313) | | | +-- lcd4avr.c : C ソースファイル | | | +-- lcd4pic.a* : AVR Studio 用ワークスペース/プロジェクト・ファイル | | | +-- \default : オブジェクトのフォルダ | | | +-- lcd4avr.hex : オブジェクトの HEX ファイル | +-- \smf : デモ曲の SMF | +-- arabe_f1.mid : C.A.Debussy: アラベスク第一番 (SMF フォーマット 1) | +-- arabe_sp.mid : arabe_f1.mid を MIDI チャンネル当たり 1 音の発音に | なるように振り分けたもの (V1.2 の内蔵デモ曲の元) | +-- arabesq1.mid : C.A.Debussy: アラベスク第一番 (部分) (V1.1 以前用) | +-- Chopin66.mid : F.F.Chopin: 幻想即興曲 (部分) (V1.1 以前用) | +-- invent13.mid : J.S.Bach: インベンション第 13 番 (V1.1 以前用) ●コンパイル方法 \TGRX62N\prj\RX62N\TGRX62N.hws が「ワークスペース・ファイル」なので、HEW との「関連付け」が出来ていれば、 上記ファイルをダブル・クリックすれば、HEW が立ち上がり、ワークスペースが 開きます。 あるいは、HEW を起動して、メニューから「ファイル」→「ワークスペースを開く」を 選択し、現れるダイアログで上記ファイルを選べばワークスペースが開きます。 コンパイルは、(もし、あれば) ソースに必要な修正を施し、メニューから 「ビルド」→「ビルド」 と選べばコンパイルできます。 サイズ削減のため、ソース・パッケージからライブラリは削除してあるので、ビルドすると、 ライブラリの再構築から実行され、少し時間がかかります。 ウォーニング・メッセージがいくつか出ますが、問題ありません。 ●コンパイル時のオプション 「src/RX62N/TGRX62N.h」ファイル中の #define で設定する値によってプログラムの構成を 変更することができます。 定数名 意味 設定可能値 デフォルト DAC_FORMAT_SEL シリアル DAC 出力形式 0 = BU9480F 専用 0 1 = 一般の DAC STEREO_MODE ステレオ/モノラル切り替え 1 = ステレオ 1 0 = モノラル USE_SMF SMF シーケンサ使用フラグ 定義: SMF     定義 未定義:SMAF