コメを噛め

コメを噛め

rerofumi の電子工作メモ

hatena bookmark

前回、テスト回路とオシロで静電容量の変化を確認することができたので、今度はそれをマイコンで読み取る実験。

PSoC Designer 5.0 のプロジェクト: touch_test2.zip

モジュールは時間計測用の16bit counter のみ。
放電後、カウンタをリセットして充電を開始。監視するピンを立ち上がりの割り込み有効に設定しておいて、電圧が一定上に上がってきたところで割り込みがかかるようにしておく。
ピン割り込みが来たらカウンタを止めて値をよむことで(オーバーヘッドもりもりだけど)充電にかかった時間がそれなりにわかるといった仕組み。もし、カウンタがオーバーしたら回路が接続されていないということでフェイル処理を行う。
後は割り込みの度にピンを変えていくことで時分割に複数の入力を読み取っていくといったコードを書いてみた。

結果、ちょいと失敗。
いや、前回のオシロ計測時の波形で変だなと思ったのをそのままにしないで解決しておくべきだった。何が変かというと、充電完了時の電圧が2.5Vだったことなのだよね。
これってオシロ自体が 1MΩ の負荷として、電荷をGNDに落としていたということだったんだよな。なので、あのようなゆっくりとしたスロープになっていた。実際にテストするカーとソフトを作ってオシロを外してみたら、ものすごい勢いであっという間に充電されてしまって計測が困難な状態にww
結局本当の速度は35us とかで PSoC のM8コアで割り込みだのなんだのじゃ間に合わん速度になってしまった。

まー、でもpull-up抵抗を 2M, 4M と変えたり、オシロがつながっていたときみたいに 1M をピンとGNDの間につないだりとかして電流をコントロールすればテストコードで十分計測できたので今回は良しとしよう。


hatena bookmark

DSC00975
マイコン電子工作でどのような入力スイッチを使うのかといった事は、割と重要でかつ楽しいところではないだろうか。
最近なにかと人気な静電型タッチスイッチをマイコンで作るという実験記事がChaNさんのサイトELMにある。「タッチ・センサの実験」
いつか自分でもやってみたいと虎視眈々と見つめていた次第。

今回は原理の説明と基礎実験までに。
原理については上記のChaNさんの記事で十分詳しく述べられているけれども、ちょいとわかりにくいところもあるので虎の威を借るごとく繰り返す感じで解説。
Read the rest of this entry »


hatena bookmark

DSC00954
More-Catさんが新しいGinger基板を使い切れないくらい作成したとのことでお裾分けしてもらった。
ちょいと検討していることがあったのでPepperでできそうな事について2~3質問していたら、Pepperの基板も送ってくれた。
献品御礼。 (←いっぺん言ってみたかった)

DSC00955
実験を検討していたところだったのでPepperの部品は一通り買いそろえてあった。写真は早速組んでみたところ。
実はなんかポカしたらしくまだ動いていなかったり。追って調査修正予定。
PepperのFuseはよっぽど必要でない限り Reset Disable にしない方が吉。

手が空いたらいじっていこう。


hatena bookmark

DSC00947
先日部屋を掃除していたら、混沌の奥底から探していた本が発掘された。

「HDLによる高性能ディジタル回路設計」 私がHDLを学習する際に大いに参考となった一冊である。
著者は森岡澄夫。いまやSOMESATで有名な「超電磁P」の森岡氏である。
この本が氏の著書だと言うことに気がついたのはうかつにも森岡氏と会ってから大分たってからのことだったのだけれども、書籍のタイトルを見ただけで「あー、あの本かー」と思ったほどに印象深くかつ参考になる一冊だった。
サブタイトルに「ソフトウェア感覚を離れてハードウェアを意識する」とあるように、ハードウェアとソフトウェアの違いや、ハードウェアはこういう風に設計するんだよといった方針をわかりやすく教えてくれる。
他に類のない良著なのだけれども、これ一冊ですべてが完結するわけではなかったりする。あくまでも「どういった方針で作るのか」で終わっているので、実際に FPGA を設計したりするためには VHDL や VerilogHDL の文法解説書が別に必要になるのだよな。

FPGAに興味があるという初心者は、まずこの本を最初にざっくりと読んでデジタル回路とはどういうものかをつかんでから入るのがオススメ。
CQPICことPIC16F85コンパチCPUのVHDLソースコードも付いてくるよ。


hatena bookmark

MaxOSX の新バージョンがリリースということで早速我が家の Mac の片方に入れてみた。(両方でないところに慎重さが見られる)
正直、Macとして使う分にはなんも問題は見られない。通常のUX的には本当に変化に乏しい堅実なアップデートだのう。
一部動かないプログラムがあったのだけれども、これはPowerPCバイナリを動かすRosettaが標準ではインストールされないからだった。ディスクからオプションとして追加インストールする。ちょっとびっくりもしたけれども、最近はPowerPCバイナリを所有して使っている人の方が珍しいか。

問題ないのはあくまで「普通のMacとして」使っている人なのだけれども、MacOSX を Mach カーネルなUNIX系OSとして使っている人には結構劇的な変化があるっぽい。
『Snow Leopardにアップデートした後に気をつけること 主にMacPortsとrubygemsについて』という記事が大変参考になりありがたかった。
Portsは使っていないけれどもGemsは使っているからなあ。実際にアップグレードしたらrakeが起動しなかった。入れ直して解決。

他にも SDL-1.2.13 のビルドで失敗するようになった。
SDLはあえて1.2を必要としているのでなんとかしたいねえ。


hatena bookmark

そういえばアナウンスするのを忘れていたけれども、GP2X Wiz のページを作っていた。
PSPやGP2Xでおなじみの TCGS−CAR をイニシャルタイトルとして置いてある。
ひとまず開発環境が整って、無事動かせるようになったという事ですな。
以前言っていたタイマー問題なども調べたので GP2X Wiz の雑多な情報を書いておくことにしよう。

■ タイマー問題
GP2X とか通常のシステムでは 1ms の単位で取れていたタイマーが Wiz では 10ms でしか取れない。何とかならんかと調べていたけれども、どうやら Wiz のカーネルでは clock() 関数が(数字の精度はともかく)10ms単位のカウンタで更新されているということらしい。なのでこれを見ている多くのタイマー系が全部 10ms 単位になってしまうという結果。
何で10ms じゃダメなのかというと、60fps という数字は約 16ms だから。
タイマーを使ってゲームを定速で動かすのはきついのでどうするかというと、ハードウェアレジスタにアクセスして V-Sync を取ることにした。
このへんレジスタへのアクセス方法(/dev/mem を mmap() してアドレスを直接読み書きする)は mame4all あたりのソースコードを参考にするのが良い。
mame4all は SDL とかを使用しておらず、キー入力と画面描画は直接ハードにアクセスして行っているから。(サウンドはカーネルドライバをつかっている)

■ インターレース問題
Wiz をちょいと弄るとわかるのだけれども、ELディスプレイがちょいと変わったインタレースで描かれている。この辺ディスプレイをインタレースにして半分ずつ描くというのは携帯の安いディスプレイでは珍しくはなく、PSPも3000番台になってLCDが綺麗になったら実はインタレースだということが見えるようになってしまいコームノイズがやり玉に挙げられている。
Wiz の EL も 60Hz で半分ずつ描かれているようなのだが、その Even と Odd が対角線で分かれている。つまり、画面を三角形2つに分割してその2つを交互に描いている。
これがどういうことかというと60FPSでゲームを動かすと斜めに絵がずれる。画面半分の三角形は今のフレームだが、もう半分は前のフレームが表示されているのだから。
じゃあ画面上部からの描画ラスタというタイミングはないかというとこれもちゃんとある。
なので画面swapを VBlank で行わないとラスタとインタレースの両方でフレームギャップを生じてしまうというとほほさ。
Wiz の次ロットから LCD になるという噂もあるけれども、それはこの奇妙なインタレースを改善するためなのかもしれない。

■ タッチパネル
GP2X-F200 ではタッチパネルが付いていたものの、デバイスファイルを直接読みとる方式だったと思う。
Wizではカーネルのマウスドライバとして扱われているらしく、SDLのマウスで読めるらしい。

■ ボリューム
相変わらずただのボタンで、音量はアプリが自前で音量をコントロールするソフトウェアボリューム。

■ OpenGL
lib だけ提供されて開発が GL Quake のソースしか手がかりがないという状態が長らく続いていた OpenGL だが、このへんのデベロップリーダーである Pickle 氏による開発パッケージがようやく提供開始となった。
wizGLES, nanoGL というインタフェースでアクセスするのだが、今はSDL1.3 への OpenGLES 組み込み対応が進められている。
しかし、Wiz に入っているSDLは 1.2 なのでそのあたりが将来的に提供されてもライブラリインストールをユーザーに強いることになるかもしれない。

■ カーネルソース問題
ここに来てゆるゆるといろんな開発が立ち上がっているけれども、GPH から提供されているものは何もない。SDK もなければドキュメントもカーネルソースもない。
この辺にコミュニティのいらだちが募ってきておりどうなっとんじゃという声も高くなっている。
そんななかついにカーネルソースがアップされる。おおとうとう、と思ったがどうやらこれは協力デベロッパーがGPHに業を煮やして独断でアップしたものらしい。
そんなこんなで、勝手にやるぜとコミュニティ手動でがんがん進んでいる状況なのだけれども、あまりやりすぎるとファームウェアのライブラリと剥離が進むかもしれない。

■ 良いところ
なんのかんので SDL レベルで開発はできるし、2Dのピクセルフィルレートはかなり早い部類にいるので、320×240 という画面サイズに目をつぶれば 2Dスプライトゲームが作り易いターミナルかもしれない。
フラッシュプレイヤーがあるので、Flashでカジュアルゲームを作ってねというのがGPHの思惑だったっぽいが、皆そのへんに興味はないあたり。


hatena bookmark

前回の記事では、SDLとSDL_image,SDL_mixer をビルドする rake file を作った。
おかげで Cygwin 環境に自前 SDL ライブラリを導入するのが容易になって自分自身で満足していたり。

今度はこれを拡張して、本来の目的である arm-linux-gnu な環境へ対応したクロス開発ライブラリをビルドできるようにした。お目当ては GP2X wiz 用の開発環境構築だけれども、同じ arm-linux-gnu なターゲットである BeagleBoard や OpenPandora でも使う予定。
まあ、このへんをもにもに作成してクロス開発環境構築の経験値を積もうというのが一番の目的だったりするけれども。

てなわけで GP2X wiz の開発ができるところまで確認できたので Ver0.0.2 release
Download: fumi2_sdl_build-0.0.2.tar.gz (7kb, tar+gz)

前回の 0.0.1 では必要な patch や README がアーカイブから抜けていたので、あれ自体は動かしても最後まで動作しなかったかもしれない :-)

こいつでビルドするための toolchain は既に方々から提供されているものを使う。
このへんの gcc+glibc も同じような rakefile で提供してみたいものだが、最近は crosstools-ng を使うのが一般的だし、手応えとしてかなり難しそうだというのがあるので課題として積んでおくことにする。

今回ので GP2X wiz のクロス開発環境が構築できたのだけれども、その対応のために Ver0.0.2 ではいくつか変更を施している。一番大きいのが libjpeg を最新の v7 から v62 にダウングレードしているところ。
libjpeg v7 は 10年近くメンテナンスされていなかった(枯れていてメンテの必要がなかった) v62 の configure 周りを今時に合わせた待望の新版で 27-Jun-2009 にリリースされた。コレを使うと Darwin でも configure 一発だったりして楽ちんなんだけれども、GP2X の中に入っているのが v62 なので共有ライブラリ名に食い違いが発生してしまう。
なのでしぶしぶと v62 にダウングレードしているのだけれども、今 v62 のソースをダウンロードしようとすると地味に難しかったり、ビルドが難しかったり。
v62 の configure の問題は autoconf, automake が古すぎて libtool がちゃんと生成されないあたりにあるのだが、これは一緒にビルドする linpng に依存することにして libpng の configure で生成された libtool をコピーして使う事にした。
そいった面倒な手順を Rakefile に記述してあるよ、ということ。

ビルド手順を日本語でメモするかわりに rubyという言語でメモ。


hatena bookmark


Make: Japan Blog で「ICのガワを溶かす方法」という記事を読んでとても心惹かれる。あのパッケージの中に入っているきらきらのシリコンダイを手にして眺める事ができるというのだから。
しかし記事で紹介されている手法は硝酸で溶かす方法でちと準備が容易とは言い難い内容。
その記事の下の方に補足として「ガストーチでパッケージを焼き尽くすとシリコンだけ残るぜ」といった事が書いてあった。それだ。それならできる。
てなわけでやってみた。これはどちらかというと結果よりも過程が画的に面白いものなので動画にしてあげておいた。

dsc00938
シリコンダイを入手してどうするのかというと、透明レジンに封入してデスクトップアクセサリに仕立ててみた。これを光にかざしてきらきらと虹色に輝くパターンを眺めることができるのです。

silicon1silicon2silicon3
silicon4silicon5silicon6
動画内ではちと表示時間が短めだったシリコンダイのスナップショット。ブロマイド?
CPLDはテクニカルノーツに書いてあるブロック図そのまんまがパターンとして見えるのが面白い。Spaltan3E は 90nm プロセスだから細かすぎてあんましパターンが見える形でひかってくれなかったのです。


hatena bookmark

monaka_icon_240
もあさんが「奏」インスパイアなMIDIコントロールターミナルの「もなか」を公開開始したもよう。
同じくもあさんが作成している、GingerのファームをUSB-MIDIに置き換えて奏っぽくした代物。V-USB(旧AVR-USB)というAVRで動くUSBスタックを利用しているので、PCとはUSBで直接つないでつなげるという優れもの。このV-USBはObjective Development社が提供していてフリーで使えるUSBスタックなのだけれども、USBベンダーIDを ObDev 社が提供していて、アマチュアでも容易にベンダーIDとデバイスIDを付けることができるといったあたりがすばらしい。通常USBデバイスを作っても、USB Implementers Forum に数十万のお金を払ってベンダーIDを取得しないとそれを配布することはできない。なのでアマチュアがUSBデバイスを作ることができても、頒布することはまず無理なのだよな。V-USB はそのベンダーID部分を ObDev 社が肩代わりしてくれている。その代わり、5個以上配布するときはデバイスIDをコマーシャルライセンスで購入してね、といったビジネスモデル。

前書きが長くなったけれども、ようするに「もなか」はUSB接続できる「奏」なのですな。便利な。
インスパイア元としては一つ作ってみるしかないだろう。といっても、Gingerは持っていないので、適当に部品を買い集めてGingerクローンを自作することにした。
dsc00917dsc00921
出力のピンソケットはGinger互換ではなく、奏互換で 10ピン×2 としてみたあたり。
単に部品箱に余っていたというのもあるけれども。
dsc00919
裏は相変わらずこきたない。

制作自体はさほど問題はなかったのだけれども、AVR慣れしていないのもあって動くまで4日くらいかかってしまったあたり。
Read the rest of this entry »


hatena bookmark

PSoC3/5 の開発環境は新規に提供される “PSoC Creator” というものになる。PSoC1 の “PSoC Designer” とはまた違った感じの特徴がある代物。

psoccreator_01
PSoC Creater にはARMのGCCが含まれており、PSoC5ではそれを利用することとなる。
PSoC3 の 8051 Cコンパイラは Keil の C51 を利用するが、別ダウンロードでインストールする必要あり。C51 は30日間の free trial なので一応すぐ利用する事が可能。そのあとはライセンスをアクティベートする必要があるのだけれども、ここではとりあえず省略。

CD 内にある PSoC DevelopmentKit つーのはドキュメントやサンプルをインストールしたり Keil C51 をダウンロードしてインストールしたりするお役立ちバッチの模様。

psoccreator_04
PSoC1 の時は PSoC Designer を立ち上げるといきなり内部ブロック配線図が表示されてびっくりしたけれども、PSoC Creator の場合は回路図エディタがでんと表示されてそれなりに度肝を抜かれる。
必要なユーザーモジュールを配置していくところから始まるのは変わらないっぽい。

まずは PSoC の定番、プログラムに依らずにモジュールだけで LED チカチカでもやってみましょか。

Read the rest of this entry »