posted by rerofumi
2008/3/3 月曜日 3:31:01
posted by rerofumi
2008/3/3 月曜日 3:31:01
posted by rerofumi
2008/2/12 火曜日 1:50:25
ホビーとしての電子工作はなにかと下火に見えるけれども、それはアマチュア無線やラジオ工作といった世界から覗き込んだものでジャンルによってはまだまだ盛り上がっている場所があるんじゃないかと思う。
一つがマイコン制御のLED点滅等を用いたアートの世界。次が真空管アンプ等のアナログオーディオ自作の世界。んでもう一つが、ビンテージシンセサイザークローンのような楽器作成の世界。
特に音の世界は古きアナログの世界もビンテージだのアナログ音源だのといった別価値を今も持っているのがポイントかもしれない。WEBで軽く眺めてもページが沢山ヒットする。
そんなこんなで楽器を作ってみようかと思い立った。
もちろんちゃんとしたのを作ろうと思ったら限りなく奥が深いし、とてもじゃないが私には手が出ないような世界が待っている。でもそんなクオリティを求めなければ適当なピコピコ音とかならば直ぐに作れるはず。
最初に思い立ったきっかけは、MIDIデータを弄っていてMIDIケーブルの通信ってシリアルだったよなーと思い出したあたりから。単純なシリアル通信なので、8bitマイコンでやりとりができる。なら、受け取って音を鳴らす「俺音源」とか作れそうだよなとか考えた次第。
自作曲のオケを自作楽器で鳴らすというのも粋そうではある。めざせ初音ミクのバッキング。
で、取り敢えず以前作ったV850の 8bit D/A 音声出力ルーチンがあるので、それを使ったリズムマシンもどきでも作ってみようかなというのが最初のお題。
構想としては
・4小節 8個のスイッチで 2分音符の分解能
・それが3トラックで 24個のパターンスイッチ
・LCDモジュールでテンポの指定をしたり音色を切り替えたりする
・出力はV850内蔵の8bit D/Aコンバータをつかったモノラル音声
とかいったあたり。8bit以上のD/Aコンバータを接続するとか、パターンプログラミングできるようにするとか、発展の余地はあるけれどもまずは背伸びせず小さな所から作成していきましょ。
ああ、MIDI出力はそのうち付けたい。
今回使う V850 ボードはInterface付録のものではなく、NECのテストボード。入手性の問題と、MINICUBE2での開発のしやすさから選択。先日サンハヤトがこの基板の取り扱いを中止しちゃったけれども、まだ入手経路はあるので大丈夫かと。
基板にパーツを挿してレイアウトを検討していく。
これらのメカニカルスイッチをぱちぱちやるものが作りたいというのが今回のテーマ。
というわけで、今現在は制作中。
パターンスイッチのマトリクス配線が終わったあたり。
ちょびちょびと進行していくのですよ。
posted by rerofumi
2008/2/5 火曜日 2:16:27
posted by rerofumi
2007/10/21 日曜日 20:37:52
続いては、V850マイコン基板を用いた音声時計の話題。
クリプトンのボーカルシンセサイザーであるVOCALOID2「初音ミク」に歌わせた音声を波形データとして持っておき、現在の時刻を音声出力するボイスクロック。
動画の方ではWindowsアプリ版とマイコン版の二つを作る様子が描かれているけれども、今回は後者のマイコン版についての解説。
V850基板はおなじみ Interface 2007/5月号付録のもの。
追加回路は以下のもののみ。
VCCは3.3Vね。V850基板の R4 をショート(正確には0Ωを実装)させ COM2-39 から 3.3V を得るのがオススメ。
D/Aコンバータからの出力は電流が少ないために直接スピーカーをドライブさせることはできずオペアンプ等での増幅が必要。といってもインピーダンスが高いアンプなら大抵なんとかしてくれるので、ピンジャックを繋いで直接音声入力がある装置に繋いでしまっても割と大丈夫だったりする。
その様に省略してしまうととても簡単な回路になるので、アナログ回路や電子工作自体に慣れてない人にもお勧め。
ソースコード: miku_clock_v850.zip
プログラムは、以前作ったコメベーダーのサウンド部分と入力部分を使い回しているので案外さっくりと作ってあったり。
InterfaceのV850基板にはサブクロックとして 32.768kHz の水晶を載せる場所があり、それを実装すると時計としての精度を上げることができるのだけれども、今回はメインクロックの 20MHz をカウンターで計測しての時計としている。こちらの方が作りやすいでしょ、といいながら単に私が 32.768kHz の水晶を持っていないだけなのだけれども。
SW1とSW3が時刻合わせで、SW1を押すと「時」がインクリメントされていきSW3を押すと「分」がインクリメントされていく。秒については起動したとき0で以後アジャストする手段は無し。このへん手抜き。
SW2が時刻読み上げのボタンなので、これは押しやすい実装にするが吉。
V850基板は手元にあるんだけどー、といった人にぜひお勧めしたい手頃さなのでお試しあれ。
posted by rerofumi
20:03:22
この 2ヶ月間はVOCALOID2の「初音ミク」(とニコニコ動画)にかかりっきりで、コメを噛めとしての記事が完全に停滞していたあたり。
でもその間に電子工作をしていなかったかというとそんなこともなく。
というわけで、それら成果(と呼ぶにはちとしょぼい)を、後出しで掲載。
ニコニコ動画の空気がわからないと面白くないと思われるけれども、そのへんはご容赦。
まずはこちら。
初音ミクにネギを振らせるおもちゃを作ろうという各種工作動画があってその一つ。
コメを噛めらしくサーボモーターをマイコンで制御して動作させようという試み。
サーボモーターは電源とコントロール線の 3本のコードがあって、コントロール線に与える信号で回転位置の指定を行っている。
この信号は、50Hz(20ms)周期のパルスで、パルスの幅によって回転位置が決定する。
そのパルスの幅は周期の 1/10〜2/10 となっている。
この信号をマイコンで作り出せば良いのだけれども、そのためには割り込みかPWMかソフトウェアタイミングか、まあ如何様にもやり方がある。
今回はPSoCのPWMモジュールを使ってハードウェアにおまかせしてみた。CPUからは回転角を変えたくなったときにPWMカウンター設定を変更すれば良い。
PSoCのソースコードはこの後のPC経由Wiiリモコン制御の時に上書きして半分消してしまったので省略。すんません。
サーボモーターをパネルに取り付け。
キャラクター玩具として組み立てる。
マイコン制御なので動作パターンもプログラミング次第というのがうれしい。
これ自体は他愛もないおもちゃだけれども、こういうのが積み重なってメカトロニクス制御になっていくのではないかと思う次第。
これ自体は大したものではなく、面白いと感じるかどうかは「初音ミク」と「ネギ回し」で楽しめるかどうかといったところですが。
posted by rerofumi
2007/8/14 火曜日 21:04:50
組み込み開発における開発手法のひとつ、について。
組み込みのマイコンにおけるソフトウェア開発も、コードがある程度の規模になってくるとだんだん面倒になってくる。
主な理由がターゲットへのダウンロードと、ターゲットデバッグによるのだが、大抵の場合はダウンロードに時間がかかったりターゲットデバッグに苦労させられたりする。特にデバッグの様な頻繁にチェック&エディットが必要なターンに、毎回ダウンロードしていたのでは結構な時間を消費してしまう事になる。
そういった場面を想定して上手いこと開発を行うにはどうしたら良いのだろうかというのは、開発者のスキルの見せ所なのではないだろうか。
私はできるだけ PC 上で開発するようにしている。
PC上であれば高速にコーディングやデバッグができるので、かなり理想的な開発速度を得ることができる。
ではどうやって?
これが今回 V850 上で作成したコメベーダーの概略図。
インベーダーゲームを作成するのに必要な要素として考えると「画像」「音声」「入力」の三つであることがわかる。そしてそれぞれの要素を用意していたわけだが、それらの動作を司るルーチンとして “kome_*_drv” というルーチンを用意して処理をまとめてある。
そこより上位のコードにおいてはこれらドライバルーチン「だけ」を介してシステムリソースにアクセスする形に抽象化することで、ハードウェアの仕様を「ある程度」忘れることができる。そのことによって、上位コードはインベーダーゲームというアプリケーションの実現のみに思考を割くことができるというわけ。
さて、上の図を眺めていて欲しい。
上位のコードはドライバルーチンのみをコールしているので、ターゲットへの依存性は無くなっている。ハードウェアをドライバルーチンが抽象化しているためだ。
ならば “kome_*_drv” とインタフェースは全く同じで、おおよそ同じ動作をしてくれるルーチンを用意すれば、上位コードについてはPC上でも開発・動作可能なのではないか。
そこで、このようにPCで開発できるようインタフェースは同じだけれども、中身が違うドライバルーチンを用意した。画面を表示したり、音声を出力したりするためのメディアライブラリとして libSDL を使用している。
これで、Windows上で開発ができることとなる。
実際コメベーダーに関しては先にこのような仕組みを作ってあり、ゲーム部分の開発とデバッグは Windows 上で全て済ませてしまっている。
今回、下部分を SDL に頼ったが、この SDL 自体オープンソースかつ他機種向けに用意されているので、コメベーダーSDL版もコードの変更無しで様々な機種に持っていく事ができる。
MacOSX版
Linux版(スクリーンショットは PS3 Linux のもの)
OS に Linux を使っている韓国産オープンソースゲーム機 GP2X。
とまあ、こんな風に C言語基調で機種依存性を減らすように組み立てると色々できるというお話。多少無駄なコードは増えるけれどもね。
こんな開発の仕方もあるんですよというお話までに。
SDL版のソースコードは GP2X の方に置いておく。
posted by rerofumi
2007/8/11 土曜日 1:22:29
てなわけで、V850とCPLD CRTCによるインベーダーゲームの完成です。
タイトルはプロジェクト名だった「コメベーダー」をそのままタイトルにしてしまいました。考えるの面倒だったので。
まずは作成成果物の提示ということで、動作している所を紹介するムービーとスクリーンショットから。
ムービーはニコニコ動画にあるのと同じもの。
作成成果物としてのソースコード。
CPLDは以前から変わっていないはず。
V850のソースコードも画面周りはCPLDとSRAMが無いと意味がないので参考程度に。でも、音声出力周りは使い回しが効くんじゃないかと。
posted by rerofumi
2007/8/8 水曜日 12:52:44
トータルでは長いこと続けてきたインベーダーゲームとそれを動作させるハードウェアの制作ですが、ついに完成。
動作の様子はニコニコ動画にアップしてあるので、見てやってくださいな。
ニコニコ動画はアカウントがなくて見れないよ、という方用の動画や、ソフトウェア部分のソースコードと解説などはまたこのあと少しずつ用意していく予定。
posted by rerofumi
2007/8/6 月曜日 2:35:17
posted by rerofumi
2007/7/20 金曜日 0:26:16
波形合成だけでCPU負荷を食いつぶしてしまうのは流石にまずいのでいくらかの高速化を考えてみる。
高速化といえばアセンブラで最適化を目指す方向で。
基本的には、発声させる波形データを加算合成するだけなのだが、加算後の値が上限を超えないように制限する必要がある。(サチュレーション)
V850 には飽和加算と飽和減算の命令があるのだけれども、(当然ながら)32bit レジスタに対して行われる。さらに、音声データは8bitで 0時 0x80、+1 0x81, -1 0x7f といったデータである(データ、出力共に)。レジスタ内では 0 時 0x00000000 で +1 は 0x00000001、-1 は 0xffffffff なわけだから、飽和加算・減算の命令を使おうとするとその前後でレジスタ拡張と値のシフトをする必要がある。これが結構手間となる。
そもそもで、CPUが32bitでデータが8bitなのだからいっぺんに4データを処理できるんじゃないの?という話がある。それができたら単純に4倍速だ。
でまあ、そういったパッキングビットに対し、論理演算を重ねて飽和加算・減算をするアルゴリズムというのはちゃんと存在している。グーグル先生に「飽和加算」と訪ねると即座に見つかる情報だ。