LPC810とArduino UNOでSCC互換音源を鳴らす(1)

発端となったサイト

SCC+互換チップ、これは面白い!作ろう!という事で、Arduino UNOから動かしてみました。

必要なもの

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を接続
lpc810_usb1
こんな感じ。

AE-UM232RをPCに接続
繋げたらデバイスマネージャーでポートを確認しておきます。
device_manager
ウチの環境ではCOM6のようですね。

Flash Magicを立ち上げて、
「Step1 – Communications」のSelectボタンでLPC810を選択。
COM Portを環境に合わせて選択。
Oscillatorを12MHzに設定。
「Step3 – Hex File」で、ダウンロードしておいた”SoundCortex_PSG_SCC.hex”を指定。
flashmagic
こんな。

とりあえずメニューのISP→Display Memoryで、書き込む前のLPC810の中身を読み込もうとするんですが、
flashmagic_error1 flashmagic_error2
“Unable to Commonicate”だの”Operation Failed”だのとエラーが出て、上手いことつながりません。
ISP→Read Device Signatureという、マイコンの型番とシリアル読み込むだけの一番シンプルな読み込みにも失敗する始末。

で、他のサイトも色々調べて、
AE-UM232RのDTR#→LPC810のpin1(/RESET)を接続
lpc810_usb2
これでISP→Read Device Signatureは取れるようになりました。
device_signature
相変わらずISP→Display Memoryは失敗しますが、書き込みは可能になったっぽいので
「Step4 – Options」の”Verify after programming”のチェックを外して、「Step5 – Start!」を押してhexファイルを書き込みます。
読み込みができない原因は不明のままですが、書き込めたのでまあいいやということで。

Arduino UNOとはこんな感じで接続します。
lpc810_arduino

  • 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の方も鳴らしてみましょう

コメントを残す