2003/10/30 |
Windows側のテストプログラムをせこせこと作っていますが…あ〜疲れた。なかなかめんどくさいです。だんだんパワー切れになってきました。そんなときは、気分転換にお遊びに走りましょう。じゃ〜ん。「Splash Window」です。アプリを起動するときに、「ロゴ」が出てから本Windowが開くやつがあるじゃないですか。あれです、あれ。邪魔な時が多いんですが、結構、派手めでいいですよね。これでもいちおう「Biped Robot Entertainer」のハシクレ、機能も大事だが、こういうところも大事(と自己弁護)。 今、VC++を使ってWindows側のソフトを作っています(本当はなんでもよかったんだけど、以前、使ってたことがあったので)。Splash Windowつけるには「SPLASH Windowコントロール」とやらがあって、それを使うのが簡単らしいんですけど、その手のやつってActive Xが多いのでなんとなく気が引けまして、ちょちょっと作ってみました。使うのが難しいという意味ではなく、知らない間に、いろんなモジュール(DLL)が必要になっていると嫌なんで。もし、やり方が間違っていたら、ご指南ください。以下、ダイアログベースのアプリケーションに実装したやり方を紹介します。 まずはビットマップファイルの作成 ビットマップファイルをVC++のプロジェクトに追加 スプラッシュウィンドウをダイアログで作成 プログラムへの実装 HWND hWndSplash = ::CreateDialog( m_pcTerminalApp->m_hInstance, MAKEINTRESOURCE(IDD_SPLASH), m_hWnd, NULL ); if( hWndSplash ){ CWnd cWnd; cWnd.Attach( hWndSplash ); // CWndの便利機能を使いたいため、Splash WindowをAttach cWnd.CenterWindow(); // Splash Windowを画面の中央に移動(便利〜) cWnd.ShowWindow( SW_SHOW ); // やっとこさこれで表示 cWnd.UpdateWindow(); // おまじないおまじない cWnd.Detach(); // もうCWndの機能は使わないので「さよなら〜」する。 ::Sleep( 500 ); // このプログラムの初期化はあまりにも早く終わってしまい、 // せっかくのきれいなSplash Windowがすぐに消えてしまう // ので、ちょっと(500msec)「待ち」する。 // このあたりにいろいろ初期化書いてください。 ::DestroyWindow( hWndSplash ); // Splash Windowの破棄 } はい、これでOKです。起動すると、おぉ、いいじゃない。「あぷりけ〜しょん」って感じです。みなさんが作られているプログラムにもおひとついかがですか?
| |||||||||||||||||||||||||||||||||
2003/10/28 |
どもです。やっぱ「ぷるぷる」が気になる今日この頃ですが、みなさまいかがお過ごしでしょうか? 唐突ですいません。なにが「ぷるぷる」かと言うと、サーボです。前回のTOPICでも書きましたが、いろいろいじってみたものの、タイマVでR/C受信機のパルスカウントをしているとどうしても「ぶるるん」としてしまいます。試しにタイマVを止めると、しゃきっとなります。角度によっては出なかったりもするのですが、単に、タイマVとぶつかっていないだけなんでしょう。ああ、悔しい。そんなわけで、さらなるチャレンジです。 左の写真は、H8/3664とR/C受信機を無理やり載っけられて実験台になっているG-Tuneです。PCの画面の方は、R/C受信機信号テストモニタプログラムの画面です。 R/C受信機信号の取り込みプログラム if( IO.PDRB.BYTE & 0x10 ) abCountWrk[0]++; else{ if( abCountWrk[0] ){ abCountDtc[0] = abCountWrk[0]; abCountWrk[0] = 0; } } これは、ポートBを使用して、R/C受信機からの信号を取り込むようになっており、0.128msecの割り込みによって起動されたこのプログラムが、信号が立っていたらカウントアップし、信号が落ちたらabCountWrk[0]からabCountDtc[0]に移す、というプログラムです。メイン側からabCountDtcをチェックすると、カウント数によってプロポのスティック位置がわかるという仕組みです。だいたい9〜15カウントぐらいで変化します。 これが、結構、時間食うようでして…(あたりまえか)、タイマWで作っているサーボ信号のON/OFFのタイミングを狂わせているようです。 それにしても、制御状態でもシリアル通信できるようなプログラムにしたので、シリアル通信ガンガンやってもサーボ制御信号に影響無し…でも、たかだかプロポの信号のON/OFFの時間カウントするだけでぷるぷる。なんだか理不尽な感じです(笑)。 オトコの浪漫・R/C受信機信号取り込み編 さて、なぜタイマVの割り込みによってサーボ制御信号が乱れるか?それは「タイマVの割り込み処理がサーボ制御信号に影響を与える程、長い」からです。ならば短くすればよいのです。試しにオーバーフローフラグのクリアだけするプログラムを書いてみたら、ほとんど「ぷるぷる」しないことが確認できました。ここでアセンブラとか使えたらかっこいいんですが、残念ながら、まだどうやるのかわかりません。そのうち勉強すると思いますけど、今はまだです。そこで、こんなコードにしてみました。 if( IO.PDRB.BYTE & 0x10 ) abCountWrk[0]++; うーむ。とてもシンプル。これが4つ書いてあるだけです。これだと、気になっていた「ぷるぷる」も、ほとんど気になりません。 よしよし。いい感じです。読み取りとクリアはタイマWを併用することで実装しました。で、冒頭の実験中写真になります。あ〜よかったよかった。これにてステップ2クリア?(いったい、いくつまであるんだろう?次のROBO-ONE間に合うんだろうか?)
| |||||||||||||||||||||||||||||||||
2003/10/26 |
SISOにとっては「進みそうで進まない魔の週末」ですが、いかがお過ごしでしょうか?今週も進んだような進んでないような…。ONOさんの「ONO電脳壁新聞」で、H8/3664のみによるサーボ制御の話を、掲示板にてさせていただいてたんですが、OMNIHEADの前田さんからも情報がありまして、びっくりな週末でした。今日は、そのネタです。 サーボのプルプルとR/C受信機信号の取り込み 現在のプログラムは、タイマWでサーボ信号作って、タイマWのGRA...GRDでクリアするようなプログラムになっています。GRA...GRDのぶつかりによるサーボ信号のブレは、「無視してもいいかなぁ」ぐらいのもんだったんですが、タイマAを使った方のプログラムがデバッグの結果、結構立派(処理が多いということ)になっちゃいまして「あらら〜」なもんです。 そんなわけで、タイマAでやっていた処理をタイマVに処理を移しました。これはこれで不安だったんですが、結果としては割とよくなりましたが、まだ結構ぷるぷるはするので、対策要です。 割り込みの優先度 で、タイマAで行っていた処理を、タイマVに移すことにより、サーボ制御信号を作っているタイマWの動作タイミングに影響を与えない(つまりサーボ制御信号がプルプルしない)ようにしました。そのかわり、タイマVの方の動作タイミングがタイマWの動作に影響を受けることになります。 現在作っているプログラムですと、タイマWの処理は軽めですので、R/C受信機信号読み取り(0.128msecで割り込み)は、誤差の範囲でいけそうです。 動作状態 R/C受信機のパルス周期
ところで、風邪気味です。うぅ、寒い。みなさんも気をつけましょう。
| |||||||||||||||||||||||||||||||||
2003/10/23 |
なんか、仕事が疲れる今日この頃…今日は出張でしたが、だいぶ寒くなりましたね〜。帰りのバス待ちでブルブル震えていました。 最適化オプションをつけてコンパイルしてみたら… 最適化って、具体的にどのようなところまでやっているか?っていうのは、よくわかんないんですが、割り込みとメインプログラムで共有しているようなデータに関しては、いろいろ起きるような気がします。というわけで、いつもの「ぼ〜らてぃるぅ(volatile)」。両側からアクセスする変数はこれで宣言してみました。レベル1ではばっちり動くようになったのですが、レベル2ではよろしくないです。プログラムサイズ的にはあまり変わらないので、当面、レベル1にしておこうと思います。ありがたや〜。 メモリのアライメント でも、今日はなんだか疲れたので、寝ます〜。
| |||||||||||||||||||||||||||||||||
2003/10/21 |
ソフトウェア進捗状況 結果は、「おっけ〜」です。ちゃんとパソコンから指示値を入力したら、そのとおりに動いてくれました。ぐぅれいとぉ。う〜ん、ここまで苦労しました。これで基礎要素部分はOKって感じです。 でも、サーボの停止位置によっては「ぷるぷる」します。なぜでしょう?想像では、サーボ制御に使っているタイマWの割り込みより、プロポ信号取り込みに使っている ま〜、これからがまた大変なんですが、とりあえず第1ステップOKって感じですね。 データ構造見直し開始 struct { _BYTE bTest1; _WORD wTest2; } ST; という構造体を宣言したとき、以下のようにメモリに配置されます。
「???」はなんでしょう?使われない領域です。VC++ですと「構造体メンバのアライメント」ってやつです。VC++ですと「1,2,4,8,16」から選べるんですけど、GDLの方はよくわからないです。でもまあ、CPUが16Bitということで、あまり得意じゃないだろうし、構造体の並べ方を考えれば無駄なく使えるので、データの順番を見直すことでクリアとします。 誘惑に負けて…
| |||||||||||||||||||||||||||||||||
2003/10/20 |
本日、初めてロボコンマガジン購入。というのも、第5回ROBO-ONEでは、踏絵のごとく、このロボコンマガジンをロボットで昇降しなければならないため、チェックのためです。いや、まだロボットはぜんぜんできていないんですが、設計参考用です。まず、売っている店を探しまして、2件目でヒットしました。そして、2冊置いてあったうちの、人が触っていなさそうな方を選んで買ってきました。 買ってきたロボコンマガジンですが、厚みなどに影響がないよう、読みたいのを我慢して丁重に保管してあります。さて、厚さの計測ですが、閉じ側8.5mm、開き側8.6mm…ということで、0.1mmの差があることがわかりました。ああ、読みたい。でも表面が汚れたりとかしてコンディションが変わったら、後でテストするのに影響があるかも…そう思うと開くことすらできません。ああ、でも、今月号はA-DOが表紙だし、OMNIHEADの特集記事もあるようですし。うわぁぁぁ(自己崩壊)。
| |||||||||||||||||||||||||||||||||
2003/10/19 |
今週末は地元がお祭りでして、妻とともにパレードとか見に行ってきました。めったにいかなかったんだけど、大道芸やってたりして結構おもしろかったです。のぞいてみるとおもしろいもんですね〜。 シリアルデータ通信・その後 う、うぅぅ、画面ダサいです。テストプログラムだからよしということで…。まじにWindowsプログラミング、ほとんど忘れているんで、結構、時間かかっています。でも、ここ数日で、だいぶ思い出してきたかな。きっと、これからスピードアップするでしょう(たぶん)。
| |||||||||||||||||||||||||||||||||
2003/10/16 |
SH7047F んで、そういえば…と思って、H8/3664のパフォーマンスチェックをしたときに使ったルーチンをSH7047Fで走らせてみました。SRAM上でプログラムを走らせてますので、CPUそのものの評価にはなりませんが、ボードの評価の足しにはなると思います。プログラムはいつものこれです。GDLでコンパイルしてます。
う〜む。25秒ぐらいした。H8/3664でやったときは32秒ぐらいでしたので、意外に遅いというの正直な感想です。もちろん、この評価はもっとも単純な部分なんで、これだけで評価するのはなんなんですが、やっぱ、SRAMが8ビットバスで接続されているのが原因なんでしょうか?森永さんが「外部RAMは飾りだと思いましょう。」と言われるのがわかります。きっとROMに焼いたら倍速以上なんだろうなぁって思います。でも怖くてやってません(^_^; もしチャンスがあれば、いろいろなCPUボードでやってみたいですが…最近焦り気味です。ソフトはなかなか進んでないですし、メカの方なんてアイデアだけで図面引いてないですし…あせあせあせ。おっと、かくのは冷や汗じゃなくて、プログラムと図面でした。お後がよろしいようで。とほほ。 シリアルデータ通信
| |||||||||||||||||||||||||||||||||
2003/10/14 |
インテルVSモトローラ問題、我が家で復活?
これ、C言語で、符号無し2バイト長変数「usTest」というのを宣言し、「0x1234」(16進数です)を代入しているものです。今回は、とてもC言語な表記ですいません。これを、1バイトずつアクセスすると、どうなるかご存知ですか?こんなソースコードでアクセスできます。
「pbTest」というのが、1バイトづつアクセスするための仕掛けで、「usTest」の「0x12」と「0x34」の部分にアクセスすることができます。さて、このプログラムをVC++等でコンパイルしてWindows上で実行すると、どんな表示が出るでしょう?答えは、「34 12」です。お、ひっくり返ってますね。これをGDLとかでコンパイルしてH8/3664で動作させるとどうなるでしょう?「12 34」です。あらら。どうしてでしょう?ちなみに、モトローラ系のCPUを載せたパソコンで実行させても「12 34」になると思います。 これは、CPUによって、複数バイトにまたがる数値データをどういう順番でメモリに書き込むかが違うためです。インテル系は桁の小さい方から書き込み、モトローラ系は桁の大きい方から書き込みます。Z80系はインテル系です。これをインテル系とかモトローラ系と呼んでいいのかどうかは定かではないんですが、あ〜、懐かしい。できればお会いしたくなかった。というのが本音です(苦笑)。 さて、どうしてこのような問題にぶつかったんでしょう…今回、プログラムの小サイズ化目的で、シリアル通信で流したデータを解析するルーチンも小さくなるように工夫しようと思いまして、メモリアクセスイメージの、ちょっとベタベタなデータの流し方をしてみたんです。そしたら見事、ヒット!すっかりバイトの順番なんで忘れていましたんで、かなりショックです。 今回はシステムにも名前をつけてみよっと
| |||||||||||||||||||||||||||||||||
2003/10/13 |
いや〜3連休 VC++を触っているとよくある話なんですが、デバッグモードで動いていたプログラムが、リリースモードにしたとたんに動かなくなるってやつです。変数初期化の状態が異なっていたり、最適化がかかったりして、動作結果が変わることがあります。そう思い込んで、テスト用のサンプルやらなんやら作ってたんですが…テストサンプルでやると動きます。も、もしや・・・、いやそういえば…あ〜!!! 原因は、ぜ〜んぜん関係なくて、プログラムが読む込む初期化ファイルを、実行ファイルと同じフォルダに作るようにしてたんですが、これが当然、デバッグモードで動作するときとリリースモードで動作するときではフォルダが違いまして、定義ファイルが読めてなくて、しかも読めないときはデフォルトデータを作るようなコードにしていましたんで、何気にそれらしく動いてしまっていまして。あ〜あ。 というわけで、また明日からがんばろうっと。
| |||||||||||||||||||||||||||||||||
2003/10/11 |
Windowsでのソフト開発 うっ、どうやってプログラム作るんだっけ???記憶をたどって…と、とりあえず、プロジェクトを作るんだよな、うんうん。それから、プロジェクトは、「MFC AppWizard」にするとMFCが使えるからこれを選んで…と。あとは、こういうツール物は、なんとなく「ダイアログ」タイプの方が簡単だった気がするから、ダイアログを選んで、よし、ビルド!おお、とりあえず、ダイアログボックスは出てきたぞ。ほんと、ここまでは超簡単です。 シリアル通信
| |||||||||||||||||||||||||||||||||
2003/10/09 |
I2CシリアルEEPROMと割り込みについて というわけで、EEPROMに読み書きするときは、割り込み禁止にして行おうと思います。これ自体のソースコードは簡単です。GDLの場合、最初に割り込み禁止「DI;」(Disable Interruptの略と思います)をつけて、最後に「EI;」(こちらはEnable Interruptの略でしょう)をつければOKです。これにより、この処理の間、割り込みがかからないようになります。NMIだけはかかりますので、使っている方は注意してください。 ほんとは、割り込みルーチンを高速化して、EEPROMの読込ルーチンも要所要所だけをDI/EIで囲うのがベストであると思うんですけど、H8/3664がローパワーというところもあって、その域に入ろうとおもうと、これまた敷居が高そうなので、どうにもこうにも困ったときに考えようと思います。 さて、それでロボット制御ソフトウェアが成り立つのか?という話なんですが…(しばし考え中)…いけそうですね!例えば、サーボの制御信号は、16〜20msecに一度、最大2.5msec程度のパルスを出せればいいことになります。現在、設計中のソフトウェアは、このパルスを2.5msecの間に4ch分出力し、それを4回行います(合計16chまで制御できる仕様で設計しています)。ということは、タイムテーブルは、次のようになります。
次はR/C受信機の信号取り込みですが、これはどうしましょう?1〜2msecのパルス信号が、やはり16〜20msec毎に入ってきます。これの幅をどうカウントするかが難問です。今のところ、「外部回路無し」という条件では効率的な方法が思いつきません。う〜む。困りました。ま、開き直って、EEPROMから読み取りしているときは、R/C受信機の信号取り込みはスパっとやめて、読取に専念することにしましょう。 H8/3664のROMに書き込むサイズって???
| |||||||||||||||||||||||||||||||||
2003/10/08 |
さてさて、パワーには非常に不安のあるH8/3664ですが、タイマ割り込みを入れたらどれくらいパフォーマンスが落ちるかというチェックをしてみました。タイマ割り込みは2種類使用する予定です。1つはR/C受信機のパルス読込です。これはタイマVを使うこととしました。タイマVでφ/16にてカウントアップするようにしておくと、タイマVのカウンタは8ビットなので、オーバーフローによって0.256msec毎に割り込みがかかるようになります。2つめはサーボ制御信号の生成です。これはタイマWで処理しようと思います。理由は、8ビットでは分解度に不安があるので16ビットカウンタであるタイマWの方が安全パイであるというのと、タイマWにはコンペアマッチレジスタが4つついており、多数のサーボ信号を扱う上で便利そうです。 SH7047FのときのR/C受信機パルス読込処理 タイマ割り込みが入っている時のH8/3664負荷測定 まずは全体のパフォーマンスから。測定用のソースコードはいつものこれです。
結果は、約36.5秒でした。割り込み無しで約32秒ですから、割り込み処理によって14%程のパフォーマンス低下が起きています。いいのか悪いのか良くわからないんですが、まあこんなもんでしょう。タイマVの方が結構速い周期?で割り込みを掛けているにしてはいいかな?っていうのが正直な感想で、メインルーチンの方で動作データの生成等の処理をするには問題なさそうです。 プロポからの信号は、SH7047Fで計測したとき、実測値で1.5msecを中心として1〜2msecでした。そのため、タイマVの割り込み周期を、スティックの動きを検知できる最低値の0.256msecにしているのですが、せっかくなのでもう半分の倍速0.128msecとさらに半分の倍々速も試してみることにしました。
う〜ん、今後のソフトウェアの出来具合によりますけど、とりあえずφ/8ぐらいでいってみようかな。R/C受信機の信号取り込みには、なんかもったいない使い方です。なんかいい方法ないか、もう少し考えてみることにします。 タイマ割り込みとI2CシリアルEEPROM ひとつずつつぶしていくと、EEPROMアクセスルーチン中の次のようなソースコードのところで引っかっていることがわかりました。
このwhile文の中の条件がいつまでも満たされている(IIC.ICCR.BIT.IRICが1にならない)ことがわかりました。これは何の信号だろう???さ〜こまった。どうしたもんでしょう?な、なんで1にならないんでしょう?おお〜、やばい、やばいです。いやいや、こんなときでも落ち着いて…マニュアル100回読めばなんとやら〜。むむむ?
| |||||||||||||||||||||||||||||||||
2003/10/07 |
どうしようかな〜と悩んでいた、24LC256にするかAT24C1024にするかの問題ですが、とりあえず結論を出しました。結論としては、H8/3664においては、24LC256の方がよさげである、ということです。 まずH8/3664ってどれくらいの処理ができるのかチェックしてみました。こんなソースです。
「volatile」は、コンパイル時、最適化しない変数という意味です。コンパイラによっては最適化するとき、「むむ、このループ(for文)は意味無いじゃん。」といって、最適化の名のもとにとっぱらってしまうものがありますので、一見、無意味そうな時間待ちループをする場合は、これをつけておくのがよいです。 さて、この単純な10M回のループ、何秒かかると思いますか?(割り込み処理などはありません) I2Cの場合、専用のハードウェアがついていて、そちらの方でバイトデータへ組み立てたり、ビットデータにばらしたりしてくれるので、前回実験のような速度がでるのですが、AT24C1024の場合はプログラムでやることになります。ひょっとしたらH8/3664の「クロック同期式シリアルフォーマット」とやらの機能を使えばできるような気もしますけど、仮にそれができたとしても571kHzが限界(H8/3664 16MHz駆動時に生成できるシリアル用同期信号の仕様)となります。この場合、SCL/SDAの出力電圧が2.5Vであるという問題に引っかかりそうですので、何か対策がいりそうです。 そんなわけで、思いっきり推論込みですが、AT24C1024を載せても、容量アップはするものの、CPUパワーの問題であまりメリットはなさそうです。
| |||||||||||||||||||||||||||||||||
2003/10/06 |
ちょっと、TOPICの日別サブジェクトフォーマットを変えてみました。少しは見やすいかな?10月分だけ直してみました。というわけで相変わらず悩んでいるI2CシリアルEEPROMです。 そういえば、な〜んで悩んでいるかという話を書くのを忘れていました。GDL(GCC Developer Lite)でこのアクセス関数が用意されており、また私のような中身も良く知らずに適当なシリアルEEPROMをつなげているのに、ちゃんと動作してくれているということは、非常にありがたく思っています。データのバックアップなどに使用するのであれば全然問題無い状態ですので、誤解されませんよう、お願いいたします。 自分が狙っている使い方というのが、ロボットの動作データをリアルタイムに読み出すってやつでして、サーボ制御周期である20msecの中で、次の動作データを読み出したいからなんです。20msecの周期の中で複数のサーボ動作データを読み出し、計算して制御パルスを送り込む、これが必要なわけでして。従来どおり、サーボ動作の補間計算とかはする予定ですので、20msec毎にガンガン読み出すのは、もっとも速度が要求されるケースの話ですが、考慮しなければならない問題です。 SCL/SDAのプルアップしている抵抗を2kΩに変更 I2CシリアルEEPROMとはなんぞや? 対してシリアルEEPROMは、RS232C通信のようにタイミングよく、マイコンから「10010...だよ〜ん」と言うとEEPROMから「11001100...だよ〜ん」と返ってきます。H8/3664と24LC256の場合、この「10010...」というデータを順番に読み上げていくタイミングが400kHz、1秒間に40万回。すごく早口です。さすがマイコンです。これと同じような感じで、特に別電源も必要なく書き込みもできてしまうというんだから、すごいですね〜。 I2C通信とは…実はこれがよくわからないんですよね〜。よくわからないんですが、複数のI2Cデバイスを1つの通信線上に接続で接続できますので、まずは誰かがマスタになって、デバイス指定して、その後アクセス云々という感じになっていると思います。アクセスそのものは、先に書いたような「10010...だよ〜ん」と同じなようです。これが、I2Cという規格上で流れているだけだと思います。H8/3664は、この順番に流れてきたビットデータを、バイトデータにくみ上げたり、逆にバイトデータをビットデータに直して送信する機能がついています。GDLには、以下のようなアクセス関数が用意されています。
書き込みの方はこんなもんかなぁって思っていますので、EEPROM_BlockRead()のソースコードを読み直してみました。括弧内は、GDLで用意されているシリアルEEPROMアクセス関数の、実際の関数名です。
24LC256のデータシートを読むと、どのような通信によってデータが読み出されるかが書いてあります。う、うぅ、みなさん、こんな難しいものをよんでらっしゃるんですね…。いやいや、どんな難しい書物だって、百回読めばなんとやら。15回ぐらいでなんとかです。読み合わせてみると、データシートに書いてあるのは上記6の「アドレスを設定してデータ読み取りをする」部分だけのような感じです。そんなわけで、6-xで番号を振って、以下に書き出します。
まあ、よくわかっていないところは置いておくとして(いいのか?)、400kHzで動いているわけだから…8バイト読むのに必要なクロック数は、全部さらっと動いたとして、100クロックで読み出せることになります。ということは、400kHzですから、0.25msec+αで読み出せるような気がします。I2Cには、通信のお作法があるようなので、+αを見ています。しっかし、ここまでデータシートをしっかり読む羽目になるとは…(速度を求める自分が悪いのかもしれませんが)。だったらI2CじゃないシリアルEEPROMを使っても同じでした(笑)。AT24C1024の方は、1MHzまでいけるようなので、速度問題が復活してきたらこちらも試してみることにします。 まずは一発簡単に改造(危険度レベルちょっとアップ?) 結果は…
調子に乗ってさらに改造(危険度レベルぐぐっとアップ?)
う〜ん、でも、AT24C1024の方がいいかなぁ。なんか、24LC256とデータシート見比べていたら、なんとなく使い方わかってきちゃったし。うーん、どうしよう。結論は…気軽に使うなら、24LC256、GDLについているライブラリでばっちり動作。ちょっとプログラムを改造すれば、ぐぐっと10倍速。さあどうする?は、結論持ち越しということで…。ま、ま、充分なところまでは来てますんで、ゆっくり考えようっと。でも、余裕があった方がいいよなぁ。みなさんならどうします?
| |||||||||||||||||||||||||||||||||
2003/10/05 |
今週末は、会社関係の音楽イベントやってましてロボット特に進まずです。昨日は久々に飲みまくってばたんきゅ〜でした。今は今で会社の宿題やってま〜す。まあ、そういう週末もよかろう。うんうん。 最近、よくチェックしているホームページで、「ONOの電脳壁新聞」というホームページがあります。H8/3664関係のページを探していたら見つけたんですが、よくみたら、Fさんのところからもリンクされてたんですね〜。なんかコメントがとっても楽しい!いいですね〜。
| |||||||||||||||||||||||||||||||||
2003/10/03 |
ハードウェアの説明 ソフトウェア 今回のEEPROMは、256kBitでアドレスが0になりますので、TEEPROMの初期化は次のようになります。 実験結果 では、せっかくなので参考程度ですが、速度テストをいってみようと思います。
う、う〜む、書き込みは想像以上に速いような気もするけど(特に64バイト書き込み)、読込が、お、遅い…。こ、こんなもんなんでしょうか?何かやり方がまずいんでしょうか?この時点で、H8/3664計画の先行きに不安が〜!それにしても、8バイトと64バイトアクセスの差を見るとわかるのですが、オーバーヘッドがなんか大きい感じですね〜。64バイト読込と8バイト読込の時間差が約2msecですから、2msecの間に56バイト転送できていることになります。そう考えると、ほぼ4msec近くがオーバヘッドになっていることになります。 読込は書き込みの100倍ぐらい速いのを期待していたんですけど、全然ダメっぽいです。いや、100倍は期待しすぎですね。う〜ん、何か別の原因があるのでしょうか?やっぱ、抵抗は2kΩにしないとダメ? この先どうしましょう?こまりました。まずは指示どおり、SCLとSDAの抵抗を2kΩにしてみようと思います。後はI2CじゃないシリアルEEPROMも試してみるか、アクセスルーチンを見直してみるか…いずれにせよ、最初のようなあま〜い考えではダメなようで…とほほ。 H8/3664
フラッシュROM書き込み回数
| |||||||||||||||||||||||||||||||||
2003/10/02 |
白ABS で、この間のROBO-ONEでFさんに会ったとき、Fantom_aが白ABSを使っているのを見て、後で欲しい欲しいとお願いしたら、Fさんのところで、「白」のABSを取り扱ってくれるようになったので、さっそく購入しました。感想。う〜ん、すばらしい。ABSとは思えません(どうもABSにはカラフルというイメージが無くて・・・)。きれいですね〜。というわけで、次期G-Tuneは、白と黒のツートンで、色でスマートに見せる作戦でいきます。 距離センサ このセンサ、接続ピンピッチが2mmであることは以前から情報入手していたので、コネクタも一緒に購入しました。実は、以前、千石電子のホームページでも探したことがあったのですが、サーチエンジンで半角入力していたようで、ひっかからなかったようです。買ってみて思いましたが、ロボットの顔みたいです。目があって口があって…。 今、はたと思ったのですが、もし、相手もこのセンサをつけていたらどうなるんでしょう???よし、新アイテム、ブレッドボード、早速出動だ!実験したら報告しますね。というわけで、 ホームページ整理 第5回ROBO-ONE競技規定
|
2003 | Jan. | Feb. | Mar. | Apr. | May. | Jun. | Jul. | Aug. | Sep. | Oct. | Nov | Dec. |