posted by
rerofumi
2006/4/13 木曜日 2:34:55
今時のマイコンは数百円から数千円で買えて、単体でもそれなりに動作するくらいの周辺デバイスがくっついている。動作周波数も 20MHz とかで、Z80 全盛期のパソコンに比べて早かったりもする。まあ、マイクロコントローラはアーキテクチャがシンプルなのでパソコンと比べられないけれども。
これをコンピューターとしてなんか遊んでみたくなる。
でも、そういった用途で遊ぼうとすると RAM が少なくて難しいんだよな。
しかしま、ファミリーベーシックは RAM 2KB だったし、シンクレア ZX81 は 1KB だし、MAXマシーンの Level1 BASIC は 512Byte だったから実用性を忘れれば何かができそうな気はする。実用性なんか最初から考えていないけれども。
そいや CASIO 最初のポケコン PB-100 は 544step だったし、SHARP の PC-1210 に至っては 400 step で遊んでいたんだよなあ。
む、ポケコン?そうだポケコンのようなものを自分で作れはしまいか?
どうせ実用性が無いんなら徹底的に無くしてしまえ。言語は、そうだ、Brainfuck なんかが良いのではないだろうか。色々な意味で実にプリミティブなプログラミングができるアイテムになるに違いあるまいて。
てなわけで設計開始。
・使用マイコンは PIC16F877A
RAM が 368Byte しかないのが辛いけど人気マイコンなので入手しやすく安い。(秋月で400円)
・Brainfuck インタプリタ内蔵(w
・プログラムエリアは 512Step
256Byte を 4bit ずつ使用、Brainfuck は 8命令しかないのでこれでも 1bit 余るくらい。
・ワークエリアは 32Byte
Brainfuck のポインタが示す範囲
・ワーク 00h はポート出力で LED 駆動
アドレス 00h を特別 I/O として LED を繋いでおく、通常の Hello,world だと動作しながら LED がちかちかするに違いない。
・ワーク 01h はカウントダウンレジスタ
ワーク 01h はタイマーで値が減っていき 0 で停止する特殊レジスタ。Brainfuck では難しいタイムウェイトを実現するための仕組み。
・16文字×2行の LCD 表示ユニット
こいつのおかげで動作電圧が 5V になってしまうがいたしがたあるまい。
・キーは16個
ロウ 4本、カラム 4本のキーマトリクスでタイムスライス読み取り。
・ストレージとして I2C EEPROM を用意
これは予定事項として、後々実装。
取り敢えずこんなところかな。
こういった用途には H8 あたりを使うのが本筋なんだけれども、あえて PIC でこじんまりと作ってみるのが今回の楽しみということで。
—–
posted by
rerofumi
2006/4/9 日曜日 23:42:40
CPLD/FPGA がうまいこといって上機嫌なのでついでに R8C/Tiny の付録基板も開発できるように持っていこうと書き込み&簡易実験基板をちょちょちょいっと作成。

こんな風に。
ストロベリー・リナックスの USBシリアル変換基板をシリアルポートとして、電源もそこからとろうという作戦。

配線もこんな。割と余裕がある感じに。
んが、上手いことライターが動かなくて苦労する。
んーこうなると何が悪いのか今ひとつわからないなあ。
調べてみるとライターやチップのシリアルコントロール部分が弱そうな噂がある。USBシリアル変換だと上手く動きにくいかもとかいうのはビンゴかも。
それよりも他のシリアルポートを指定しても「ボーレート変更ができません」とか抜かすので、やっぱりライターソフトの方を疑ってしまう次第。
なんか上手くいかないから放り投げる。
ま、そのうちまた気が向いたら調べるということで。
—–
posted by
rerofumi
3:53:59
トラ技 2006/04 の CPLD、DWM 2003/10 の FPGA と付録だけでロジック工作の学習ができる様になっているわけだが。実際にこれらのデバイスを使おうとすると JTAG ダウンロードケーブルが必要となる。幸い両方とも ALTERA なので 1種類のダウンロードケーブルがあれば両方で使えるわけなのだが、でもそれをどうしようかなーと考える。
パラレル接続のダウンロードケーブルは回路が単純な上に回路図が公開されいるので自作も容易である。うーん、どうしたものか。
トラ技 2006/04 の CPLD 付録基板は基板上に ByteBlaster WV 互換回路が載っているので 25Pin コネクタを付けるだけでコンフィギュレーションができるんだけれども、FPGA はどうしようかな。FPGA の方を考えるとダウンロードケーブルが手元にあった方がよいのだよな……。
……ん?互換回路が載っているって?
ということは CPLD 付録基板を ByteBlaster WV 互換ダウンロードケーブルとして使えば良いんじゃないか?
そう考えるとトラ技 2006/04 にはダウンロードケーブルが付いてくるというのと等価ということで、もの凄くお得に見えてくる。

CPLD 付録基板に必要なパーツをくっつけて組み立て。LED がくっついているのはトラ技でのチュートリアルにそった動作確認をするため。
動作確認と Quartus II のさわりを体験。
次は FPGA 付録基板をコンフィギュレーションするために CPLD 付録基板をダウンロードケーブルと見なす。

こんな感じ。
コンフィギュレーション時はデバイスIDを見て行われるので、ALTERA の異なったデバイスがパラでぶら下がっていてもちゃんと指定してコンフィギュレーションできる。
というわけで、事もなく成功。LED を付けるサンプルも動作。
これで FPGA と CPLD 両方が学習できる様になった。めでたしめでたし。
—–
posted by
rerofumi
2006/4/6 木曜日 2:44:20
会社で自分の荷物をほじっていたら “Design Wave Magazine” の 2003/10 号が出てきた。Cyclone FPGA ボードと各種開発ツールが付録として付いてくる号である。
もちろん自費で買った私の所有物。いつかはやりたい、ということで押さえておいた物だと思う。ハードやりたい熱がこのあたりからじわじわ上がってきてたという事か。
これのちょっとまえに CPLD 基板が Design Wave のおまけで付くという大暴挙があり、この FPGA は大体 2回目くらい。以後、トラ技の R8H 等々チップと基板と開発環境がセットになったお勉強特集が頻繁に組まれることとなる。
こないだの ARM マイコンボードは設計ミスがあるらしく揉めていたけれども。

ふと気が付くとそんな付録チップがいくつか手元にあるのだわさ。
左が DW 2003/10 の Cyclone FPGA、右がトラ技 2006/04 の MAXII CPLD、真ん中が「電子工作のためのR8C/Tinyスタートアップ」の R8C/1B。
R8C/Tiny は基板付きなんで手習いがてらに狙って買ったものだけど。
昔は基板が付録に付いてきても、その周辺(電源とか)を用意することができなかったので指をくわえているだけだったが、今は違う。
しかも先人がこれら付録基板を使って楽しそうなことをしている記事が WEB 上にいっぱいである。
これなら PLD にも手が出せそうであることよ。
まあ、細々と追加しないとならないのはあるけれども。ひとまず、ダウンロードケーブルどうしよ。
次は今月下旬に発売される Design Wave Magazine に “SH-2” マイコン基板が付いてくるのですよ。コレも買わなきゃですわ。
[訂正]
SH-2 ボードが付いてくるのは Design Wave でなくて Interface でした。
—–
posted by
rerofumi
2006/4/2 日曜日 21:31:28
ジャイロセンサーが、まあ使えなくもないということで加速度センサーと組み合わせて纏める事にする。
PIC12F683 が丁度 A/D 4ch なので、加速度センサー三軸にジャイロ一軸で収まるのだ。

きちんと仕上げるにはぶっつけではなく、前準備をしっかり押さえるのが重要。ということで規模はともかく回路図を書いておくところから始める。

その甲斐あってかそこそこのまとまり感。

全モジュール結合で測定時の状態はこんな。なんとなく合体ロボットを彷彿とさせる。
pose_sensor.asm
PIC のソースコード。
A/D 読み取りとデータを追加しただけで、基本的に以前の加速度センサーファームの時と同じ。
—–
posted by
rerofumi
0:09:36
久しぶりに超ミニマムな環境でのアセンブラプログラミングを堪能したいという事で始めた PIC マイコン工作。マイコンのプログラミングも楽しんでいるので、ここまでずっとアセンブラで通してきてしまった。
それなりにこなれてきて色々出来るようになったけれども、さらに何かできるかと考えると PIC では限界があるのが見えてくる。例えば、メモリが足りないので外部に SRAM を繋ごうとすると I/O の足りなさが気になってくる。かといって本体だけで済ますとメモリが少なすぎるのでデータを記録するような分野では使いづらい。
当然な事ではあるけれども、その限界の手前が PIC が得意な分野であろうと言うことがわかってきた。
ほんじゃ、PIC の次のステップというか「より楽しそうな事」を行うには何が適しているのかねえということを考えてみる。
メモリ量とI/O量、そしてプロセッサパワーが必要であれば素直に H8/R8 マイコンへシフトしたほうが良さそう。コンパイラに GCC 使えるし。
プロセッサパワーだけなら SH2、PPC、ARM といった一般的な組み込みプロセッサボードかねえ。
スピードといってもロジック側でいったら CPLD が必要になってくるかなあ。カウンタとかタイミングクリティカルな用途はマイコンだけではきつい。具体的には CRTC とか LCD コントロールとか。ビデオ出力なんかは PIC じゃ力不足だし。
CPLD/FPGA も視野にいれてはいきたいものだ。
そんな感じで調べていたら PSoC というマイコンデバイスの存在を知る。
通常 PIC とかはチップ内にデバイスがいくつか入っていて、どのチップに何が入っているかといった性能の違いで PIC デバイスを選んでいく。
だが PSoC は周辺デバイスをプログラマブルかつダイナミックに切り替え選択していくことで割り振る事ができるのだという。
面白そうじゃないか。

てなわけで Mini programing kit を Cypress のサイトから直接購入。$35 なり。(送料その他で合計 $60 だけど)
プラスチックの奴が USBプログラマで PIC と同じように 5本の信号を ISSP でボード上のチップに書き込む。ボードはチップにプログラミングする用でもあるけど、LED×4、スイッチ×1、VR×1、I/O引き出し端子付きのテスト用評価基板となる。PICKIT1 の PCoS 版といったところだね。
おまけで付いてくるデバイスは、CY8C27443 と CY8C29466。取り敢えずこの二本があれば十分遊べそうだ。
PSoC が NANO 以降の iPod (の静電パッドコントロール)に採用されているというのは有名な話だけれども、ゲームボーイアドバンスミクロにも採用されているとは知らなかった。
ああ、そうか、START/SELECT の LED コントロールやボリューム&輝度コントロールのあたりか。へたすりゃ音声アンプとしても使われているかもしれないな。
なるほど、低コストでサービスを提供できるチップかもしれん。
PIC でやりたいことがまだあるのでしばらくはそっちだけれども、PSoC も少しずついじっていきたいと思う次第。
—–
posted by
rerofumi
2006/4/1 土曜日 3:10:37
会社で古いトラ技をぼけーっと眺めていたら、各種センサ取り扱いの記事があった。
その記事によるとジャイロセンサを扱うには、CRのハイパスフィルタとローパスフィルタを接続すると良いとある。ああそうか。
言われてみると至極当たり前のことなんだけれども、アナログ回路が苦手なのでそういった頭がすぽんと抜けていたのである。ノイズや基準値ドリフト(温度等によって静止時の値がずれる事)もソフトウェアでなんとかしようとしてしまっていた。
まあ、ソフトウェアをやっているとハードウェアの不具合をソフトで何とか回避してくれとか良く言われるものだし。実際そうしてきたもんだから、ついつい。
マイコン工作、特に PIC ではソフトウェアでカバーすることで回路構成を劇的にシンプルにさせる事ができるというの特徴なのでなおさら。
しかし、センサーのノイズはアナログフィルタで押さえておく方が正解だよね。
確か記事にあったのは、ハイパスフィルタが 0.3Hz でローパスフィルタが 1kHz ほどだった。ハイパスフィルタは直流成分を切り落とすためで、ローパスフィルタはぶるぶるノイズを削るため。
さらにソフトでも上手いことやるとより精度があがりそうだ。
余談だけれども、勤務先はソフトウェア会社なのだがなぜかトランジスタ技術は購読誌なんだよね。私以外の誰が読んでいるんだろ?
—–
posted by
rerofumi
2006/3/31 金曜日 3:10:52
「まわるメイドインワリオ」一台を三枚に下ろし、ジャイロセンサーの工作に手を出すことに。

真ん中の長方形の部品が載っている小さな別基板がジャイロセンサー。こいつのおかげでカセットがでかくなっているのだ。
よく考えたら振動用のモーターもなんかに使えそうですなん。

ちと今回は明確な元回路図無く行き当たりばったりで作業しているので美しくない。
写真だと隠れちゃって見えないけれども、ジャイロセンサーの裏には 3V のレギュレーターがあってセンサー用に電圧を落としている。
最初はセンサーの出力をオペアンプで増幅して読み取らないとと思っていたけれども、実際にやってみたらセンサーの出力範囲が 0〜2.6V だったので直に繋ぐことにした。PIC側の A/D が 10bit あるから 9bit 精度で読み取れるし、まあ良いか。
カタログの「基準電圧 1.3V」というのが、0〜1.3V 出力じゃなくて、静止時平均が 1.3V でした。
どっちかというと読み取った後のソフトが大変そうだ。
静止時といってもアナログデバイスなので揺らぎノイズがあるのだけれども、これが大体出力的に換算 1度前後の角速度でぶるぶる震えている。落ち着かせる方法がないので、ずりーっとドリフトしていったり。
移動の閾値をつけると、小さな動きに対応できないしで結構悩む。正面から横に向け、また正面に持ってきても閾値と積分ドリフトで元の数値になっていない。
まあ、わかってはいたことだけれどもね。
—–
posted by
rerofumi
2006/3/30 木曜日 5:58:59
その昔、Z80 とかの時代はコンピューターも偉い簡単な回路で組まれていてそれで TV に出力とかしていた。
んじゃあ、今の割と高速な PIC 単体で TV 出力できるんじゃないか、とか思って調べてみたら当然のようにヒット。
ルーツはトランジスタ技術の 1997/5 号に掲載された PIC を使ったワンチップブレイクアウト(ブロック崩し)らしい。えらい古い話だなあ。
その記事自体はPIC工作総集編の本に混ざっているけれども、ソースコードは今でも CQ出版のサイトからダウンロードすることができる。
WEB上でもあちこちで実際に作った体験記や回路図などが残されている。取り敢えずここあたりを参照して、リンクを飛び回るとよろし。
回路もえらい簡素で、ビデオ出力周りは抵抗数個とトランジスタだけで構成されていてびっくり。これなら作れそうだ。
どうせ作るなら(ソフトを自分で書く気) Pong が良いな。最近は Pong が見直されている不思議なご時世だし。
ということで調べてみたら海外の方でいくつか PIC-Pong の作例が見つかった。
そのうちの 1つが凄い。ビデオ出力に抵抗 2本しか使っていないのだ。

回路図で言うとこんな感じ。って書いてみせるのも気抜けするほど。
こちらのサイトにえらい詳しい説明があるのでそちらを参照してもらいたいあたり。
まず前提としてカラーは無理なのでモノクロだけを扱います。NTSC でカラーを扱おうとするとバースト信号の記述とそれとの位相差記録が必要で PIC では到底間に合いません。
で、モノクロをコンポジットで出力するには 0〜1.0V の電流をお約束に従って流し込んでやればよい。通常の信号無し状態が 0.3V で、0V に立ち下げると Sync 信号、0.3〜1.0V が輝度信号として扱われる。
つまり、黒と白だけの画面ならば 0V, 0.3V, 1.0V 三種類の電圧があれば作ることができる。これを PIC の I/O out から抵抗による電圧降下で作り出すってわけ。TV 側のコンポジットが内部抵抗 75Ωなので、それを含めて計算しているところがミソ。
ブレイクアウトも同等の回路で出来るはずだけれども、PIC-Pong は 5V 回路でブレイクアウトは 3V 回路なので注意。そのまま 5V にして TV 出力周りを持ってきても問題ないけど、パドルの値を読み取る CR 回路に影響がありそう。3V で抵抗の値を計算し直した方が早いか。
というわけで抵抗 2本を用意してそれだけで本当に TV 画面になにか画を出すことができるのかを実験。

なんか出た。ふにょふにょに歪んでいるけど出たことは確かだ!
クロック数とタイミングをパズルのように積み重ねていかないとならないのでかなり面倒。簡易ペンオシロがなかったらここまでたどり着けなかったかも。
PIC12F683 を内部クロック 8MHz で動かしているんだけれども、そのクロックの不安定さが画面に出ているんだろうか。
取り敢えず最初の一歩。先は長い。
—–
posted by
rerofumi
2006/3/29 水曜日 22:44:59
三軸加速度センサーで傾きが得られるようになってほくほくなのですが、実はこれだけだと不十分なのです。加速度センサーは傾きを感知することはできるけれども、ヨー方向の回転は知ることができません。
ヨーの回転を得るためには「ジャイロセンサー」が必要なのだけれども、ジャイロセンサーはお高いのですよ……。なので諦めて加速度センサーだけでも、と。
加速度センサー繋がりでゲームボーイカラーの「コロコロカービィー」を入手する。中古で 300円。
おお、こりゃ面白い。ころころころ。
コロコロカービィのカートリッジの中に入っているのは二軸加速度センサーの ADXL202 だそうだ。
今コロコロカービィを買うと安価にて二軸加速度センサーを入手できる手段となりうるか?まあ、秋月で新品買っても 800円くらいですけど。
そのサイトで見つけた別記時で「まわるメイドインワリオ(以下まワリオ)」ではジャイロセンサーが使われているとのこと。
なに?まワリオは加速度センサーじゃなかったのか。てっきりゲーム機を垂直に持って遊ぶゲームだと思っていたのに、どう持っても良かったのか。くそ、だまされた(誰も謀ってません)。
まワリオは面白いゲームなので中古でも 3500円とかなかなか価格が下がっていない状況。でも、箱説明書無しなら 2500円くらいで手に入る。ジャイロセンサーとしては安価じゃないか。

3個入手(w
まあ、ゲームの方も楽しみたいし無理に三軸必要でもないので最初は 1つだけ利用してあとは取っておく方向で。
ちなむと、三軸で 1つのモジュールになっている加速度センサーは売られていないらしい。
このセラミックジャイロセンサーのデータをみると 3V 駆動で出力基準電圧が 1.3V とかある。まあ 3V はツェナーダイオードでないいとかするとして、出力が 1.3V というのが心許ないなあ。
オペアンプで増幅することにしたが、結局アナログ回路が必要な事になってしまう。デジタルだけで済むからと PIC の電子工作を始めたのに、やっぱり色々と必要になるもんだ。
—–