発端となったサイト
SCC+互換チップ、これは面白い!作ろう!という事で、Arduino UNOから動かしてみました。
必要なもの
- Arduino UNO
- AE-UM232Rなど、USB-シリアルの変換モジュール
- LPC810(←秋月で
80円300円、マルツオンラインで75円) - スピーカーとかブザーとか、音を出せるサムシング
USBシリアル変換モジュールはいろんなマイコンいじるのに使えるので、電子工作やる人はひとつ持っておくと良いです。
値段も1,000~1,500円とそんなに高いものではないですし。
LPC810マイコンへの書き込みにはFlash Magicというソフトが必要になります。インストールしときましょう。
LPCマイコンに書き込むSoundCortexのバイナリファイル(SoundCortex_PSG_SCC.hex)もGitHubからダウンロードしておきます。
LPC810の入手
秋月電子で80円。マルツパーツで75円。
大須の第二アメ横にあるタケイムセンで150円。
150円?高いだろ!とも思いましたが、まあ10個も100個も買うわけではないので気にしない。
とりあえず予備も含めて2個購入しました。
※追記(2016/10/13)
秋月電子が300円、タケイムセンが450円とそれぞれ大幅値上げ。ないわー……
LPC810への書き込み
9353log • LPC810(6) 〜 ISPモードでのプログラム書き込み
こちらのサイトを参考にして接続しました。
→AE-UM232R経由で3.3V、GND、TX/RXを接続
こんな感じ。
AE-UM232RをPCに接続
繋げたらデバイスマネージャーでポートを確認しておきます。
ウチの環境ではCOM6のようですね。
Flash Magicを立ち上げて、
「Step1 – Communications」のSelectボタンでLPC810を選択。
COM Portを環境に合わせて選択。
Oscillatorを12MHzに設定。
「Step3 – Hex File」で、ダウンロードしておいた”SoundCortex_PSG_SCC.hex”を指定。
こんな。
とりあえずメニューのISP→Display Memoryで、書き込む前のLPC810の中身を読み込もうとするんですが、
“Unable to Commonicate”だの”Operation Failed”だのとエラーが出て、上手いことつながりません。
ISP→Read Device Signatureという、マイコンの型番とシリアル読み込むだけの一番シンプルな読み込みにも失敗する始末。
で、他のサイトも色々調べて、
AE-UM232RのDTR#→LPC810のpin1(/RESET)を接続
これでISP→Read Device Signatureは取れるようになりました。
相変わらずISP→Display Memoryは失敗しますが、書き込みは可能になったっぽいので
「Step4 – Options」の”Verify after programming”のチェックを外して、「Step5 – Start!」を押してhexファイルを書き込みます。
読み込みができない原因は不明のままですが、書き込めたのでまあいいやということで。
- Arduinoの3.3VとGND→LPC810のpin6,7(Vdd/Vss)
- A4(SDA)→pin8(PIO0_0)
- A5(SCL)→pin1(PIO0_5)
参考:Arduino 日本語リファレンス Wireライブラリ概要
Arduinoは5V動作、LPC810は3.3V動作なので、本来は双方向ロジックレベルコンバータを使うのが正しいのだと思いますが、そのまま繋いだら動いたので、これも気にしないことにします。
※追記(2016/10/05)
気にした方がいいです。コンバートしないとかなりの確率でフリーズします。
スケッチはtoyoshimさんのサンプルをそのまま使います。
#include <Wire.h> void SoundCortexWrite(uint8_t reg, uint8_t value) { Wire.beginTransmission(0x50); // SoundCortexのaddress Wire.write(reg); Wire.write(value); Wire.endTransmission(); } void setup() { Wire.begin(); SoundCortexWrite(0x00, 0xfd); // Channel.Aの周波数1 SoundCortexWrite(0x01, 0x01); // Channel.Aの周波数2 SoundCortexWrite(0x07, 0xfe); // MixerでChannel.AのみON SoundCortexWrite(0x08, 0x0f); // Channel.AのVolume } void loop() { }
音はpin2(PIO0_4)から出ます。
スピーカーをpin2とGNDにつなぐとラの音が出るはずです。
PSGの音が出たのでとりあえず今回はここまで。次回はSCCの方も鳴らしてみましょう。