R8C/M12Aでファミコン音源の実装



ルネサスのマイコン「R8C/M12A」でファミコン音源の実装を試みました。

「ファミコンなんて昔の8bitコンピュータだから余裕っしょ」

と考えていたら甘かった。。
ファミコンすごいわ。

最初はDDS(Direct Digital Synthesizer)を作り出したけれどフィルターがうまくいかなくてファミコンってどんなフィルター持ってるんだろうと調べたらフィルター持ってないことが分かりどーやってあんなに色んな音色を作り出しているのか気になって作ることになりました。

y[i] = y[i-1] + m * (x[i] - y[i-1])
この簡単なローパス・フィルタをうまく動かせないー

アナログシンセを作るにあたって自分が一番めんどいなーと思うのはオシレータのチューニング。なのでJUNO-106にならいオシレータはデジタルでDCOにすればいいかとR8C/M12Aでやってみたら意外に簡単にできたのでじゃあ1チップシンセにしてしまえーとやりだしたら三角関数が使えないわ小数使えないわで壁にぶち当たってます。

カットオフとレゾナンスは必須っす。

話は戻りファミコン音源。サンプル周波数32kHzでパルス派2個、三角波1個、ノイズ1個の計4個波形を生成しようと試みたけれど、クロックが20MHzの場合割り込み間隔が625クロックしかなくて生成が間に合わず(多分…)、16kHzに変更。でもそうするとPWMの幅を決める値がアバウトになりすぎてかなーり音痴になってしまう。じつは32kHzでも気にすれば気になるくらいのずれがあった。16kHzにして処理が間に合っても音痴では使いものにならない。

とゆーわけで考えた仕様がこれ。
MIDIノート69、鍵盤番号A4、周波数440Hzの場合、割り込み回数は32.363636…となって、0.363636…の部分が音痴の原因となる。
ので1周期は32回、2周期は64回、3周期は108回 + 1.090909…回となるので3周期したら割り込み1回スルーして0.090909…を誤差とするようにした。これで大分音痴は改善された。

今回は単体でスーパーマリオを演奏するようにしたけれどやっぱりMIDI機能つけたいなー。まぁこれはまた今度。

続きを読む

R8C/27版LBCの基板が出来た!





F1第6戦モナコGPマーク・ウェーバー優勝祝!!
いつもは録画を飛ばし飛ばし見るんですけど今回は全部見てしまった。。
アロンソのハミルトンをアンダーカットした時は鳥肌もんですよ!
すごいわー。

LBCのハンダやっと終わりました。
動作確認しつつ実装していったのでまぁまぁ順調でした。
ですが最後の最後、バッテリ電圧監視が上手くいかなくて4日間ほどはまってました。
結果的には「VREFとVccの図面に記入漏れ、故に繋ぎ漏れ」と簡単なものだったのですが、まーほんとに解決の糸口が見つからない4日間でした。
実装直前に分圧する抵抗をチップ抵抗へ変更し、AD変換するポートも変更してしまい、ハンダ不良かプログラムの問題かのどっちかだと思い込んだのが敗因ですねー。

教訓。
作成した図面もきちんと確認しましょう

<実装図のようなもの>


<ソースファイルのようなもの>
Download file

R8C/M12Aでプレステコントローラを使用してみた



4月末から家を離れていましてやっとシャバに戻ってきました。
R8C/27でサーボ24個は出来ているので基板に実装すれば完成なんですが何故かやる気が出ず。。

とゆーわけでコントローラ側を何とかしてみました。
もう15年も前から使っているプレステコントローラ、ただのデュアルショック(SCPH-1200)を引っ張り出してきて秋月で100円で売っていたR8C/M12Aと接続。
最初はアナログスティックの中心付近の値だけが変だったり、L1を押すとR2も押された状態になったりとコントローラ壊れてるんじゃないかと思ったらマイコンのクロックを5MHzに落としたところ上手くいくようになりました。
平野さんのtiny2313のソースは素晴らしいので参考にして(パクッて)います→Download file
ありがとございまーすm(_ _)m

R8C/M12Aはとても良いと思います。
tiny2313と比べると大きさ一緒だし値段も一緒で
・RAMが倍の256KB搭載
・シリアルで書き込みができるので専用のライタいらず
・ADコンバータ6個搭載
・ハードPWMを3個出力可能
・3.3Vで20MHz駆動出来る
と至れり尽くせりで、さらにマイコンカーラリーネットで特集が組まれているので心強いです。

ルネサスR8C/27を使ってみる①



買い物苦手です。。
何をどこで買うのが一番得なのか、これは本当に必要なのか、将来欲しくなる可能性のあるものはないのか、とか考えすぎてしまってなかなか決済ボタンまで行けません。送料500円位別にいいんじゃねー 買っちゃえばー と思うのですが・・・。

R8C/27をついに使い始めました!(拍手!)
今のところ「LEDチカチカ」と「シリアル通信の受信」の2つを確認OK。
Webにほっとんどサンプルソースがないので不安でしたが、データシートが日本語で見やすいので何とかなりそうな感じです。
しかしR8Cの”SFR(Special Function Resister)”は単語が短かすぎて一瞬アセンブリかと思って焦りました。

<部品代>
R8C/27:430円
QFP32ピン(0.8mmピッチ)変換基板:100円
RS232Cドライバ:150円
セラミック発振子20MHz:40円
細ピンヘッダ2個:40円
三端子レギュレタ(3.3v500mA):100円
抵抗3本:3円
LED赤1本:4円
-------------
合計867円

<開発環境>
HEW(Version 4.07.01.004)

<ライター>
ゆきの研究室さんのr8cprog-GUI

↓LEDチカチカのソースファイル(C言語)

続きを読む

XBee ZB(ZigBee対応、シリーズ2)の導入



何とか導入できたのでメモしておこう。
気付いたら配線がスパゲティ状態に・・・。

ロボット用の無線機器はBlueStickを使用していて確かペアで4サーボしたと思います。
高いので別の安いのないかなーと探していたらXBeeのZigBeeタイプがあるじゃあないですか。
しかも1個1700円!(やっすー)
ネットで調べると設定が曲者なのか難しそうなイメージが・・・。
ですが安いので思い切って買ってみることに。
チップアンテナ型の高出力番は品切れなので低出力番を購入。
40mも飛べば十分と思っていますがはてさて。。
何やら「5mでやっと」という情報もあったりしてどーなんんでしょう?

課題として残っている
①通信可能距離は?
②ブーストモードって何?どうやるの?
の2点は別途確認です。

■購入先
 スイッチサイエンス
 注文3,000円以上で送料無料
 XBee ZB(ZigBee対応、シリーズ2)チップアンテナ型
 1,700円/個

 <性能>
 室内/アーバンレンジ 最大40m
 送信出力 1.25mW(+1dBm) / 2mW(+3dBm)ブーストモード
 シリアルデータインタフェース : 3.3V CMOS UART

■設定方法
 1対1の通信が出来ればよいのでXBeeの1つをコーディネーターに、
 もう1つをルータかエンドデバイスにして、それぞれに通信相手の
 シリアル番号を指定する。

 < XBeeの接続 >
 XBeeの1番ピン---3.3V
 XBeeの2番ピン---DOUTなのでRxdと接続
 XBeeの3番ピン---DINなのでTxdと接続
 XBeeの10番ピン---GND

 <パソコンのソフト>
 設定ソフト:XCTU 32-bit ver. 5.2.7.5
 モデムタイプ:XB24-ZB(Com testではXB24-Bと出るがバグらしい)

 <設定>
 X-CTUの「Modem Configuration」で「Read」を押してから以下内容を変更して「Write」する。

 1台目:
 「Function Set」に「ZIGBEE COORDINATOR AT」
 「ID-PANID」に任意の数字
 「DL」と「DH」の2項目に通信相手(ルータ)のシリアル番号

 2台目:
 「Function Set」に「ZIGBEE ROUTER AT」
 「ID-PANID」に「コーディネーターの設定と同じ数字」
 「DL」と「DH」の2項目に通信相手(コーディネーター)のシリアル番号

 
■XBeeのリセット方法
 強制的なファームウェア書き換え。

 1.XBeeを外しておく(リセットが出来るなら繋げたままでもOK)
 2.X-CTUを起動
 3.「Modem Configuration」のタブを開く
 4.「Always update firmware」のチェックボックスをチェックする
 5.修正したいXBeeの型番を「Modem:」から選ぶ
 6.入れ直したいファームを「Function Set」、「Version」から選ぶ
 7.「write」ボタンをクリックする
 8.XBeeに繋がらないメッセージが表示されたらXBeeを接続、またはリセットする
 9.以上

tiny2313と74HC237でサーボ15個動かしてみた



先日のF1開幕戦オーストラリア面白かったですね!
キミ・ライコネンが復帰戦で7位入賞うれしいす。

で、今更ながらPWM制御のボードを作る目処が立ちました。
AVRのtiny2313は秋月で100円、74HC237は大体150円位、レギュレータやRS232ICをいれても合計600円位で16軸制御のボードが出来そうです。
LBC(Little Be-tikku Core)バンザーイ!
tiny2313はFLASHが2kバイト、SRAMが128バイトとチョー貧弱。
このスペックである程度のモーションを再生させるとこまで来たので後は何とかなるでしょう。
mega168なら200円でFLASH16k、SRAM1kとスペック8倍。

作ってて気付いた点など。

①AVRのPWM動作
 比較レジスタの更新はカウンタがボトム(ゼロ)になった時に更新される。
 のでLBCの仕様にあるカウンタ開始から0.6msec以内にDutyを設定というのは出来ない。
 が、次のカウンタ開始にセットされる比較レジスタの値をセットできる。

 16bitタイマ1は2つPWMを出力できる。タイマ周期はICR1で設定可能。

②74HC237のラッチ
 G0がLowになった時にラッチされるので、コンペアマッチ(CM)用のポートで制御するのではなく、入力しているPWMをGLにも入力し制御する。
 →制御ポート1つ削減成功!

 PWMがHiになる時Selectは更新されずLowになった時に更新されるので、Selectも次のPWMがHi(カウンタ開始)になる時の出力値を設定できる。

③以上のことから
 オーバーフロー割り込みで呼び出された処理では、
 ・次のSelectをセットしてから
 ・次の比較レジスタAとBをセットする
 ・これらを1つのPWMの周期(2.4msec~20msec)以内に処理できればOK


ATtiny2313のアナログ比較器を実験



なんかカンフー映画みたいに縦長の動画になってしまった。

AVRのATtiny2313を使用してボリュームでLEDアレイを点灯する実験をしてみました。
VUレベルメータに仕立て上げるつもりだったのですが、どーしてもイメージ通りにならないのでちょっと保留。
ドラムのキックの音でレベルが上がってくれると、、、あ、周波数のフィルター入れればいいんだ!

いやいや遊びはここまでで次の事やらねば。

<ATtiny2313の課題>
・AVRライタの作成(完了)
・開発環境の構築(完了)
・シリアル通信
・モーションプロセッサと同パケットのデータ受信
・PWMにてサーボ1個動作
・74HC237を使用してサーボ8個動作
・サーボ16個動作
・モーションプロセッサと同じような関数の作成

PWM以外はAX-12専用ボード(SH2)作成時に実装済みなので何とかなるかなー。
PWMと74HC237はVstoneのWRC003(H8)だったかで実験済みなので何とかなるかなー。
と高をくくっていますが果たして?

16軸のラジコンサーボを制御するのにマイコンから供給する必要のある信号線は、
・PWM信号2本
・タイマのコンペアマッチ信号1本(CM)
・I/Oポート3本
の計6本。
ポートは十分空きがあるように見える。

ATtiny2313でLED



COMポート接続のISPアダプタ
http://elm-chan.org/works/avrx/report.html

と、開発環境構築の確認も含めてATtiny2313でLEDを点灯させてみました。
あー、なんか久しぶりだー。

<環境>
AVR Studio 4(v4.19、Build730)
AVR Toolchain(3.3.0.710)←これないとビルド出来ませんでした
WinAVR(20050214)
avrsp.exe

<ソース>
#include
int main(void){
volatile long i;
PORTB = 0xff;
DDRB = 0xff;

while(1) {
PINB |= _BV(PB0); //12番ピン
for (i = 5000; i > 0; i--);
}
return 0;
}

KRS4014シリアル通信成功!



外部クロック115200bpsで、VSTONE製VS-SV1150とKONDO製KRS-4014のシリアル制御とりあえず成功しました。

配線ぐちゃぐちゃの状態ですが、初YouTubeに動画アップしてみましたので見てやってください。

まだ1個づつなので合計24個の制御が成功するまでは気が抜けません。。
ですがとにもかくにも成功したのでよかったです。

KRS4014は制御信号5vの双方向通信なので、AX-12の回路そのまま使えるのではと実験してみたら、そのまま使えました!

ミッチーありがとう!!
ソースはもうちょっと整理したらアップします。。
っていうかファイル置く場所作らねば・・・。

KRS4014後10個買わなくてわ!
14万円くらいか。。
安いな。
300kgサーボ1個分だ。
最近金銭感覚がおかしい。。
1万円のサーボが安く思えてきた。。

メモ>>
1つの発振器から、複数の外部クッロク端子へクロックを供給しても問題なし。



KCB1、4014を購入してみました



KCB-1を1つ。
KRS-4014HVを2つ。
(初めてのHVだ!!)

KCB1-SDKにサンプルソースが入っているのでそれを見たいがために購入。。
プロはどういう書き方をするのか見てみたくて買ってしまいました。
アールティで購入させて頂きました。
いつもありがとうございます。

開発環境がSH2/7144Fと同じHEWなので、無事サーボを動かすことができました!

次は本番の7144Fで動かしたいのですが、信号の電圧を3.3Vから5Vに変換しなければならないので、2系統のレベル変換機能を持っているらしいSN74LVC1T45を購入しようとしたら、、、

どこにも売ってない。。
うそーん。。。

これって生産中止ロットなのか?
代わりのIC探さなきゃ!!