SISO-LAB不定期TOPIC Oct.2005


2005/10/31

ARUMO-SiR改良…準備中

こんなもの買ってみたりして
やっぱりARUMO-SiRがかわいくてしょうがないので、なんとか満足度アップしたい!というわけで、 「ロボットバトル in 名古屋モーターショー」へ向けて改良します。そして、その先は「ロボファイト2」に「ロボプロ・アスリート」と、 がんがん行こうと思います。というわけで、まずは購入してみた部品がこれ。 これでいいのかな〜と思いつつ、ネットで5個セット、495円というのを見つけたので購入。明日には、待ちに待ったアレが来ます〜。

JST CONNECTOR

mabotanさんのホームページ(10/28)にて、リトルベランカのネットショップで 購入バトルをしていた(さらに、SISOは負けた)事に気づく…在庫が1個しか残ってなくて、再入荷を待っていました…。 明日には届くぞ〜と出遅れ組です。でも4つ買いました。最近、飛ぶ鳥も打ち落とす勢いのmabotanさんと購入パーツがシンクロするのは、ラッキーアイテム???

 

2005/10/30

「ロボットバトル in 名古屋モーターショー」エントリ

ARUMO-SiRで出動予定
ロボットバトル in 名古屋モーターショーにエントリしました。運営、お疲れ様です。 今回は、ARUMO-SiRでいきます。たぶん、現状の強さで行けばG-Tuneという気もするのですが、ARUMO-SiRの方も、現在、改良?中でして、しっかり育てないとです。 たぶん、手間のかからない度合いで行けば、まちがいなくARUMO-SiRの方が手間はかからないと思いますので、これで強くなってくれば、 とても使いやすい機体になると思います。

さてさて、PSoCの方、たまぞうくん、だいたいできました。今、整理中です。いや〜、簡単簡単。ぼちぼちアナログ行こうかな。

 

2005/10/29

PSoC・PWMでサーボパルスを出力

PWMモジュールでサーボ制御
そろそろPSoCも、もうちょっとロボットなコンテンツということで、今日はサーボパルスを出力してみようと思います。 サーボパルスに最適なのは…PastelMagicさん のチュートリアルにもあります、PWMによるLED点滅を応用すればできそうです。

このPWMモジュール、周期とパルス幅を設定することができます。一般的にサーボ制御信号は、20ms周期で、 その中で、ON時間を600〜2400usぐらいにしてやると、それに応じてサーボの動作角度が決定されるようになっています。 で、1500usぐらいにするとニュートラルって感じです。PWMモジュールにはいくつかの種類があるのですが、 その中のPWM16(16ビットのPWM)を使用し、1usのクロックを入力してやれば、20000カウントで20msecになり、 1500カウント分ONしてやればサーボ制御信号のできあがり…となるはずです。それではさっそくいってみようと思います。 今回のプロジェクト名は…「ServoPWM」とでもしておきます。

SCREEN SHOT
クリックで拡大します。
では、さくさくっとプロジェクトを作ります。プロジェクト名は「ServoPWM」とでもしておきます。 今回使用する主役モジュールは、PWM16です。これは「PWMs」の中から選択することができます。 まずはこれをちょいちょいっと選択しまいましょう。そうすると、デフォルトで「PWM16_1」というモジュールが追加されます。 今回は、これしか使いませんから、「Interconnect」画面へ移動しましょう。
SCREEN SHOT
クリックで拡大します。
まずはいつものように「Global Resources」を設定します。 デフォルトがなんで「8_MHz」なのかよくわからない「CPU_Clock」ですが、今回もこのまま行きます。 で、PWM16_1に与えるクロックをここで設定するわけですが、「1us」単位を作ってみます。 1usという単位を作るためには、周波数は1MHzを使えばよいいので、 SysClkである24MHzを24分周してやればいいことになります。VC1とVC2を組み合わせて24分周してもいいのですが、 VC3が256まで分周できますので、VC3で一気に行きます。というわけで、今回のポイントは、 「VC3 Divider」を「24」にセットすることです。それにしても、なんで「VC3」だけ「Divider」なんでしょうね〜 …と疑問に思ったのですが、考えてみると「VC3」だけは、いろいろなクロック源が使えるんです。 それで、「VC1」、「VC2」と同じ表記が使えないからみたいです。
SCREEN SHOT
クリックで拡大します。
次は、今回の主役モジュール、「PWM16_1」の設定に移ります。まずは「Place」します。
SCREEN SHOT
クリックで拡大します。
「Place」したら、今度はモジュールの設定です。今回は、「20msecの全体周期を作っておいて、 1.5msだけオンしておく」というのが目的ですので、以下のようになります。
  • 「Clock」…このために1MHzを設定した「VC3」とします。
  • 「Enable」…きっと「有効にする」という意味だろうということで「High」。
  • 「CompareOut」…「Row_0_Output_0」にします。今回、サーボパルスをPORT0[0]に出そうと思っています(MiniEval1のTP6…LEDのすぐ隣)。 さすがのPSoCも「どれでも設定でOK」と言うわけではありません。そのため、PORT0[0]に接続できる「Row Output」を選択する必要があります。
  • 「TerminalCountOut」…よくわからないけど、使ってない気がするので「None」
  • 「Period」…これで全体の周期を設定します。今回、「1us」が入力ですので、「20000」で「20ms」になります。そんなわけで、「-1」して「19999」をセット。
  • 「PulseWidth」…信号がオンになっている期間です。デフォルトで「1.5ms」を出そうと思いますので、例によって「-1」して「1499」とします。
  • 「CompareType」…例によって「Less Than Or Equal」
  • 「InterruptType」…割り込みは使用しないので、今回は適当。
  • 「ClockSync」…相変わらず、意味はよくわかってませんが、いつもの「Sync to SysClk」
  • 「InvertEnable」…とりあえず「Normal」

 

SCREEN SHOT
クリックで拡大します。
そして、「Row_0_Output_0」を「PORT0[0]」まで接続します。直接接続するのではなく、まず、 「Row_0_Output_0」を「GOE0」(グローバルアウトイーブン0)へ接続します。 そのためには、まずは「Row_0_Output_0」の先っちょについている四角い箱をクリックします。 そうすると、「Digital Interconnect Row_0_Output_0」というダイアログボックスが表示されます。

 

SCREEN SHOT
クリックで拡大します。
この「Digital Interconnect Row_0_Output_0」中の、一番上の三角をクリックして「GlobalOutEven_0」を 選択すると、「GOE0」に接続されます。デバイスエディタのブロック図でも、線が実際に接続されます。

 

SCREEN SHOT
クリックで拡大します。
今度は、「GOE0」を「PORT0[0]」に接続します。まず「GlobalOutEven_0」をクリックします。 そうするとメニューが表示されますので、「Pin」を選択します。

 

SCREEN SHOT
クリックで拡大します。
すると接続先を選択することができますので、「Port_0_0」を選択します。

 

SCREEN SHOT
クリックで拡大します。
はい、こんな風に結線されていることが表示されます。

 

SCREEN SHOT
クリックで拡大します。
また、ポートの設定を見ると、PORT0[0]が"Strong"へ自動的に変更されています。 きっと、このポートをPWM出力に割り当てたので、出力に自動設定されたんでしょうね。 これで「Genrate Application」します。

 

SCREEN SHOT
クリックで拡大します。
次はプログラムの方を書きます。1500usを出力するだけならば、このまま処理開始プログラムだけ書いてビルドすればよさそうですね。 というわけで、オンラインマニュアルを見ながらちょいちょいと書きます。まずは「Application Editor」画面へ移動します。 んで、オンラインマニュアルを開いてコピーしたいところを選択して「右クリックメニューからCopy」を選びます。 これ、ず〜っと疑問だったんです。普通に「Ctrl+C」してもコピーできないもんですから、ずっと、コピーできないと思っていたんですが、実は、メニューからやればできるということを最近知りました。

 

SCREEN SHOT
クリックで拡大します。
というわけで、ちょちょっとmain.cのコードを追加します。
	PWM16_1_Start();	//	Start the PWM16

	while( 1 );
んでは後はビルドして、できあがり…と。例によって警告がでていますが、よくわからないので無視。

 

TEST ENV
クリックで拡大します。
さて、テストですが、一応、サーボから変な電気信号が入ってMiniProg1を壊したりしたら嫌なので、 一応、MiniProg1をはずし、MiniEval1に5Vを電源で供給するようにしました。また、サーボのグランドと、 MiniEval1のグランドは必ず接続してください。MiniEval1の大きな穴ですが、 みの虫クリップで挟むのにちょうどいいです。今後の実験用に、ケーブルをいくつか作っておくと便利そうですね。

こうやって見ると、「実験装置」という感じです。でかいアルインコの電源が雰囲気を出してます。でも、S03Tを一個、動かすだけ…。

実行すると、サーボが「ビシ」っとセンター位置で停止します(これをセンター位置と呼ぶかどうかは定かじゃないけど)。 サーボホーンを触って見ると、しっかりとトルク感がありますのでサーボ制御信号もバッチリでているようです。 よしよし、基礎実験成功!

動画を載せようか悩んだんですが、止まっている動画を載せるのもどうかと思い、自主規制…。

 

…と、ここで終わったら、いくらなんでも寂しいですよね〜。だって、何にも動かないもの。というわけで、 スイッチを押すと一時的に「1800us」に切り替わるようにしてみます。 まずは「Device Editor」の「Interconnect」画面に戻って、 スイッチ入力ができるように設定します。「2005/10/07 PSoCのMiniEval1でLED点灯」を参考に設定してみてください。

んでは「Application Editor」でプログラミングします。ループの中に、「スイッチが押されたら、 パルス幅を1800usにする。んで、離されたら1500usに戻す」という処理をいれればよさそうです。 じゃあ、どうやったら「パルス幅」を変更することができるか?がポイントになりますが、これは、 オンラインマニュアルのAPIのところを見ると、それらしいのが載ってまして、 PWM16_WritePulseWidth()を使えばよさそうです。

と、その前に、スイッチから入力できるようにする必要がありますので、以下のようにして、 ポートの設定を変更します。

  1. Device EditorのInterconnect画面に戻る。
  2. PORT1[4]を「Pull Down」にする。
  3. 「Generate Application」する。
で、main.cをちょこちょこっと修正します。「もし、SWが押されていたら、1800us信号に切り替える。 そしてSWが離されるのを待ち、離されたら1500us信号に戻す。」という処理を書けばいいので、 以下のようになります。
  PWM16_1_Start();              // Start the PWM16

  while( 1 ){
    if(( PRT1DR&0x10 ) != 0 ){  // P1[4](SW) ON Check

      PWM16_1_WritePulseWidth( 1799 );// Set 1800us

      while(( PRT1DR&0x10 ) != 0 );   // P1[4](SW) ON Check

      PWM16_1_WritePulseWidth( 1499 );// Set 1500us
    }
  }
動作中の楽しい動画をご覧あれ!

PROCESSING
クリックで再生します。

さて、次は、いよいよ「たまぞうプロジェクト」いきます(TAHMAZOじゃないよ、たまぞうだよ)。

 

2005/10/26

出張多し…

最近、PSoCネタが多い理由…
最近は、なぜか「2日・日本で仕事、3日・海外で仕事、半日・残件整理、1日半・バタンキュー」な生活が続いています。 以前、「旅疲れは移動距離に関係する」という話を聞いたことがありますが、絶対そうだ〜と思います。うぅぅ。 そんなわけで、なかなかマシーンに触れない日々をすごしていますが、そんなときでも、PSoC実験セットは旅のお供に最高! なわけでして、いつも持っていってます。出張の時って、こういうのとかプログラムが進みます。なぜか新幹線だと プログラムがよく進みますが、飛行機だとイマイチ落ち着けないのが不思議。

MiniEval1だけでできるものならば、その場でちょいちょい、他の機材を使う場合は、だいたいデバッグしておいて、 家に戻って動作確認、という感じです。そのうち、RS232C通信もやってみよう。

それにしても、疲れる〜。

 

2005/10/24

PSoC・割り込みでLEDを点滅させてみる。

タイマと割り込みでLEDを点滅
今回は、LEDを割り込みで1秒毎に点灯/消灯させようと思います。やっぱこういうのには「タイマ」という気がするのですが、実は、 「カウンタとタイマ、どっちがいいんだろう?」なんて悩んでます。ドキュメントを見るとすごくよく似ています。 ま、単純なプロジェクトなので、どっちを使ってもよさそうということで、素直にタイマにします。

さて、今回、このタイマ、ちょっと調べて見たら「32kHz」を入力できるようです。また、「32kHz」は内臓しているとのこと。 精度は、内臓24MHzのクロックが±2.5%とのことから、たぶん、これも±2.5%かな。内部低速発振器(ILO)を使っているとのことなので、 きっとそうでしょう。 この32kHzというクロック、時計などではよく使われるクロックで、正確には「32.768kHz」だったと思います。 PSoCの内臓32kHzの場合は、32000、32768、どっちなんだろう?ま、一般的と言う事で、32768ということで進めてみます。 またアプリケーションノートあたりを探してみます。

SCREEN SHOT
クリックで拡大します。
まずはプロジェクトを作ります。今回は、「LedFlicker」としました。
SCREEN SHOT
クリックで拡大します。
それではさっそく「Timer16」を選択します。今回、32768をカウントして1秒を作り出すため、16ビットカウンタを選択します。 8ビットカウンタの場合、「0〜255」までしかカウントできませんが、16ビットカウンタならば「0〜65535」までカウントでき、 ばっちりです。
SCREEN SHOT
クリックで拡大します。
「Device Editor」の「Selection」画面から「Interconnect」画面に切り替えます。そして「Timer16_1」を「Place」します。
SCREEN SHOT
クリックで拡大します。
それでは、「Timer16_1」の設定をします。今回、「Global Resources」の設定は、すべてデフォルトで問題ありません。 まずは「Clock」を「CPU_32_KHz」にします。そして「Caputure」は「Low」(なんか、有効/無効をHigh/Lowで表現しているみたいです)。 「Period」は、タイマの期間ですので「32768」から「-1」した値である「32767」を設定します。 他のサンプルとかみると、こう「-1」して書いて「Compare Type」を「Less than Or Equal」にしていたので、 同じようにしています。

あと大事なのが「ClockSync」です。必ず「Use SysClk Direct」以外を選択してください。これ、厳密にどんな機能か、 まだ理解していないのですが、「Use SysClk Direct」を選択すると、さっきの32kHzの設定が無視されて、 SysClkが使用されるようなことがマニュアルに書いてありました。実は、最初、「なんでLEDが点滅しないんだろ〜!?」と、 はまりました。

というわけで、「Generate Application」しましょう。

 

SCREEN SHOT
クリックで拡大します。
さってと、いよいよ割り込み処理です。まずは「Application Editor」に切り替えます。サンプルを見てみると… モジュール起動や割り込み許可の処理は書いてあっても、なんと、肝心な割り込み処理のサンプルがありません〜。 ひょ〜。というわけで、ごにょごにょと調べると…(って、本に書いてありますね)、自動生成されたソースコード、 「boot.asm」に割り込みベクタテーブルが書いてあり(割り込みが発生した時に参照されて、 必要な処理に移るためのテーブル)、ジャンプ先は、これまた自動生成されたソースコードの「timer16_1int.asm」 の中に定義されていました。「Library Source」の中にあります。 どうやらここに直接コードを書くか、C言語の関数を作っておいて、割り込み関数の宣言をしておけばよさそうです。

 

SCREEN SHOT
クリックで拡大します。
せっかくC言語が使えるし、そんなにスピードも気になりませんから、今回はC言語で割り込みを記述します。

まずは、いつものメイン処理を記述します。これはマニュアルを読むと載っているので、ほとんどそのまま使います。 まずは「Timer16_1」の割り込み用初期化をし、その後、CPU全体の割り込み許可をして、最後にモジュールをスタートかけるようです。 で、プログラムが終わると、そのままPSoCもとまってしまいますので、最後に、永久ループ(って言うのかな?)として、 ぐるぐる回りの一行を入れておきます。

  Timer16_1_EnableInt();
  M8C_EnableGInt;
  Timer16_1_Start();

  while( 1 );
				
本題の割り込み処理ですが、C言語で割り込み処理を記述する場合、あるおまじないをします。 というわけでいきなりでてきたのが「#pragma」。これは…よくわからないので、お作法とて覚えておくことにします。 この行の一番最後は関数名で、次の行(次の行である必要はありませんが)に関数の本体が定義してあります。 こうやって記述すると、割り込み処理として認識してくれるようです。関数名は好きなものをつけて頂けばOKです。 中身は、単にPORT2の[0]〜[3]をひっくり返す、というものです。
#pragma interrupt_handler int_timer16_1
void int_timer16_1()
{
  PRT2DR ^= 0x0F;
}
				

 

SCREEN SHOT
クリックで拡大します。
それでは、Application Editor上から「Library Source」フォルダを開いて、「timer16_1int.asm」の編集をします。 「asm」と拡張子がついているだけあって、アセンブラです。え?アセンブラ、わかりません?大丈夫です。 SISOもわかりません。「boot.asm」の方を見て、ごくごく簡単に書きました。

書いたのは、先ほど作った割り込み処理の「int_timer16_1_TC()」を呼び出す処理です。 「ljmp」っていうのはきっと「ジャンプする命令」だろうと。で、あと、割と定番なんですが、 アセンブラからC言語を呼び出す時には、関数名の頭に「_」(アンダーバー)をつけるようです。 というわけでできたのが、次の一行。

  ljmp  _int_timer16_1
				

 

SCREEN SHOT
クリックで拡大します。
ビルドしてみると…何やら警告がでてきてしまいました。あらら。ま、よくわからないので、とりあえず無視しておきます。 後は「PSoC Programmer」を起動してPSoCに書き込めばおしまいです。「PSoC Programmer」から、MiniProg1の電源をONしてやれば、 見事にチカチカとLEDが4つ同時に点滅すると思います。1秒に一度、点灯と消灯を切り替えていますので、 点滅周期は2秒になります。
PROCESSING
クリックで再生します。
それでは、動作中のPSoCの動画をお楽しみください(動画だけ見ても楽しくないかもしれませんが、 自分でプログラムしたものが、思ったとおりに動作するのは楽しいですよ!)。 う〜ん、心なしか1秒よりちょっと遅い感じ。

ここで疑問なんですが、「割り込み処理の呼び出しは、boot.asmの方に呼び出しを書いたほうが速いんじゃないの?」 って思っちゃいますよね〜。というわけで試してみました。「ljmp _int_timer16_1_ISR」と書いてあるところを、 「_int_timer16_1」としたら、ちゃんと動作しました。ところが、ちょっと困った事が。 「Generate Application」を再度したら、コードが初期化されました。やっぱり、 ちゃんと「ここにコード書いてね〜」とあるところに書かないとダメですね〜。

 

2005/10/23

ロボプロ・アスリートの表彰状と認定賞

表彰状と認定証、頂きました
出張から帰ってきたら届いていたものをもう1つ。ロボプロ・アスリートの表彰状と認定証です。ひょっとして、 走るたびに認定証って頂けるのかな…。こういうのって、結構、うれしいかも。最後には、トロフィーとかあったりして。

AWARD

そういえばROBO-ONE、最近は大きくて軽いトロフィーですが、以前の小さくてきれいな、 ガラスのメダルの方がいいと思います…どうして変わったんだろう???

 

2005/10/22

特ナベ0番小ネジ2x6クロアエン

魅惑のニューラインナップ!
2005/09/29の不定期TOPICにてARUMO-SiRでのサーボ固定方法を紹介した時に、あさいさん のところの「特ナベ0番小ネジ2x5クロアエン」が一番気に入っているので、2x6もあったらいいな〜と書いたのですが、なんと、 ラインナップしてくださいました!現在、小売の在庫のところから選択できるようになっています。あさいさん、ありがとうございます〜。

ネジが2本並んでいますが、左が「特ナベ0番小ネジ2x6クロアエン」、右が普通の「ナベ0番2種小ねじ2×6クロアエン」です。 この写真でもわかりますように、頭のサイズが「特ナベ」の方が少し大きく、4mmになっています。このメリットとしては、 固定される材料との面積が広くなることで力が分散され、ネジ数を減らしても材料の変形を防ぐことができ…そうな気がしています。 実際、樹脂ワッシャなどの変形具合を見ると、「接触面積が広がることによる力の分散」効果はありそうです。

「材料が変形しにくくなる=ネジが緩みにくくなる」とも言えると思います。結果として「壊れにくい安定したロボット」 を作ることができるのではないかと思います。

SCREWS  SCREWS

薄さでいけば、AHNの方がもちろん薄いのですが、それでもこの薄さなので、重宝します。 またこの丸みが、触ったときにとても気持ちがいいんですよ。普通のナベネジ等では味わえない、 温かみのある感触を楽しむことができます。一度、お試しあれ!

 

2005/10/20

PSoC・SAR6に入れるクロック

相変わらずわかりませぬ。
ドキュメントを読むと、クロックは最大333kHzと書いてあるのを見つけました。でも、そのとおりに24MHzを分周すると、 72分周しないといけません。「VC1=SysClk/N」だけでは16までしか分周できませんので、さらにVC1の出力をVC2に入れて分周しないといけなくなります。 VC3を使えば256まで分周できるので一気に分周できますが、今度は、SAR6に入力することができません。う〜ん。

SCREEN SHOT
クリックで拡大します。

ひょっとして結果オーライかな?と思いつつも、あまりにもかけ離れているので、ひょっとしたら、「VC1=SysClk/N」の「SysClk」は、 「CPU_Clock」のことかな〜なんて思い始めました。ほら、「CPU_Clcok」って、「3_MHz(SysClk/8)」(デフォルト)になっているじゃないですか。 これで8分周したら64分周なので結構近い値になります。ということは、「CPU_Clock」を上げたらうまくいかなくなるんじゃないかな〜と、 早速実験してみました。こういうのがさくさくっとできるあたりがPSoCですね!

結果は…変わらず。うまくいっているようです。う〜む、不思議だ。

2005/10/21追記:別のプログラムを組んでいたら、やっぱ、「VC1=SysClk/N」の「SysClk」は、CPU_Clockの意味な気がしてきました (CPU_Clockが24_MHzだとうまくいかないのに、3MHzにしたらうまくいくようになったケース発生!)。

2005/10/21追記:さらに追記ですが…「えいや!」で、PWMによるLED点滅のプログラムを作って「CPU_Clock」を変更しながら様子を見てみました。 う〜ん、「VC1=SysClk/N」の「SysClk」は、やっぱり「SysClk」みたいです。ま、とりあえず、SAR6には333KHzを入れるのが手堅そう。

2005/10/21追記:またまた追記ですが…ドキュメントから、「VC1=SysClk/N」の「SysClk」は「SysClk」であることを確認しました。 ここに切り抜いて載せてもいいのかな…「Architectural Description」のところに、「PSoCクロックソースの概要」を説明する図がありまして、 SysClockが、それぞれ「CPU CLK」(マニュアルどおり記載)、「VC1」、「VC2」、「VC3」に入力されていることが書かれています。

 

2005/10/19

PSoC・A/D変換をしてみる(やや悩み中)

「公開練習会 in ポートメッセなごや」
PSoCをお供に某国へ出張してます(ここは暖かいので、風邪を引いている身としてはちょっとうれしかったりして)。 なんか、出張している時の方が、仕事が早く終われる気がする…。というわけで、やりかけだったA/D変換の続きです。

それはそうと、みんなのやす@大同工業大学さんから、「公開練習会 in ポートメッセなごや」のお知らせ! 今度はスケジュールOK!です。しかもロボファイト2の前の週なので、すごくいいタイミングです。いや〜、気合入ります。 ARUMO-SiR、持っていきます〜。荷物に余裕があったらG-Tuneも持ってきます。

とりあえず作って見る。
PSoCの方、とりあえずA/D変換のプログラムを作ってみました。MiniEval1のボリュームをまわすと、 4つのLEDがレベルメータのように点灯するというものです。SAR6のSample Clockに何を入れていいのかは相変わらずよくわからないので、 適当にやってみます。また、前回の調査で、SAR6をどこに割り当てても、PORT2[0]から信号を直接取り込むのは無理なことがわかりましたので、 PGA(Programmable Gain Amplifier)という、アナログ信号増幅モジュール(オペアンプの増幅回路かな)を倍率1にして組み込み、 その出力をSAR6に入力するようにします。そして、最後にA/D変換結果をプログラムで取り出し、 「PSoCのMiniEval1でLED点灯」で行った方法と同じ方法でLED点灯させるようにします。

それでは、まずProjectを作ります。

SCREEN SHOT
クリックで拡大します。
まずはどうするんだっけ?えっと、最初はとにかく「New Project」ですね。Project名は、レベルメータということで、 「LevMeter」にしてみました。
SCREEN SHOT
クリックで拡大します。
例によって「CY8C27443-24PXI」と「C」ファイルの生成を選択して「完了」をします。
SCREEN SHOT
クリックで拡大します。
はい、これで見慣れた「Device Editor」の「Selection」画面になりました。
SCREEN SHOT
クリックで拡大します。
それでは、A/D変換の「SAR6」と、増幅器の「PGA」を選択します(PGAは、増幅器といいながら、減衰もできるようです)。 「SAR6」は「ADCs」の中にあります。また、「PGA」は「Amplifiers」の中にあります。
SCREEN SHOT
クリックで拡大します。
で、「Interconnect」に切り替えて、まずは「Global Resources」の設定をします。 「Interconnect」に切り替えるには、メニューの「Config」−「Interconnect」と操作してください。 MiniEval1のボリュームは、5Vにぶら下がっていますので、0〜5Vの変化をすることになります。 そんなわけで「Ref Mux」を「[Vdd/2]+/-[Vdd/2]」と設定します。 あれこれ調べてみたら、どうもこれは「[Vdd/2]を中心として±」という意味のようです。なんだかわかりにくい表現ですね。 何かもっと深い意味があるんでしょうか…。マニュアルを見ても「Vss to Vdd」という表記があり、 この方がわかりやすいような気がします。
SCREEN SHOT
クリックで拡大します。
さて、ユーザモジュール、「PGA_1」と「SAR6_1」を「Place」します。どこに入るかわからなくても、 Device Editorが、勝手に入るべきところに入れてくれますので、順番に「Place」していけばOKです。
SCREEN SHOT
クリックで拡大します。
まずは「PGA_1」の方から設定します。「Gain」は直訳すると「利得」です。今回は、増幅する必要はありませんので、 「1.000」(1倍だから変化無し)を選択します。「Input」は「AnalogColumn_InputMUX_0」を選択します。 これについては、後で説明します。「Reference」は「VSS」としました。何がいいのか良くわからなかったんですが、 とりあえずボリュームが「VDD(+5V)とVSSに接続されている」ということで、これを選択しました。 で、最後の「AnalogBus」は、今回、出力を「SAR6_1」に接続するだけですので「Disable」(無効)とします。
SCREEN SHOT
クリックで拡大します。
「AnalogColumn_InputMUX0」ですが、これは、アナログ入力切替器と考えればよさそうです。 これを選択する事により、「PGA_1」の「Input」と「AnalogColumn_InputMUX0」が接続されます。 そして、その先にはポートがあります。
SCREEN SHOT
クリックで拡大します。
「AnalogColumn_InputMUX0」の接続先ポート(ピン)を設定します。ボリュームはPORT0[1]に実装されていますので、 「AnalogColumn_InputMUX0」を左クリックして選択メニューを表示し、PORT0[1]を設定します…って、最初からPORT0[1]になってました。 ま、ま、まずは操作手順を覚えるということで、はい。
SCREEN SHOT
クリックで拡大します。
続いて「SAR6_1」の方も設定します。「Selected User Modules」に表示されている「SAR6_1」を選択するとパラメータ設定表示がされます。 で、「SignalSource」(入力元)は「ACB00」にします。「ACB00ってなんぞや?」と思われるかもしれませんが、 先ほど「PGA_1」がPlaceされたブロックの上の部分を良く見ると、「ACB00」って書いてあると思います。 なんの略かは良くわかりませんが、これを指しています。つまり、この設定で「PGA_1の出力をSAR6_1へ入力」できるようになります。
SCREEN SHOT
クリックで拡大します。
というわけで、画面は左のような表示になったと思います。マウスカーソルのところに「1」って簡単に書いてありますが、 これは「VC1」のことです。「VC1」は、CPU_Clockを分周する回路?です。 その先は、3つのアナログブロックに接続されていますので、当然「PGA_1」にも接続されているわけでえすが、 ユーザーモジュールデータシートで確認すると、「PGA」はクロック不要のようですので、特に問題は無さそうです。 また、「SAR6_1」の出力先が無いですが、これは、プログラムの方から関数呼び出しによって取り出します。
SCREEN SHOT
クリックで拡大します。
最後にポートの設定をします。今回、LEDを点灯させますので、PORT2[0]からPORT2[3]までを「Strong」に変更します。 これで、LEDを点灯できるようになります。それでは最後に、「Generate Application」して「Application Editor」に切り替えます。
SCREEN SHOT
クリックで拡大します。
それでは、「main.c」を開いてプログラムを書きます。
SCREEN SHOT
クリックで拡大します。
さて、何を書いたらいいんだろう???というわけで、ドキュメントを見てみます。 ツールバーの「User Module Mini Bar」に「ADCs」と「SAR6」と設定してデータシートを呼び出すと…
SCREEN SHOT
クリックで拡大します。
「User Module Datasheet」が表示されます。で、「Sample」タブをクリックすると、まずはアセンブラのサンプル、 少し下にスクロールすると、Cのサンプルが表示されます。「SAR6_SetPower(3)」して「SAR6_cGetSample()」すればよさそうです。 実際に設定したUser Moduleの名前は「SAR6_1」ですので、プログラムを書くときには「SAR6_1_SetPower(3)」となります。 でも「3」ってなんでしょう…。さらに「API」タブをクリックすると、関数の仕様などがでてきます。 英語なのが難点ですが、どうやら「SAR6_HIGHPOWER」という意味のようです。せっかく定義されているようですので、 実際にコーディングするときは、「SAR6_1_HIGHPOWER」と書くことにします。 よく見ると、「SAR6_Start()」ってのもあるんですが、これはやらなくていいのかな?ま、まずはサンプルどおりにします。

同様にして、「PGA」の方を調べると「PGA_Start()」しておけばいいということがわかります。 こうやって使い方を調べます。

SCREEN SHOT
クリックで拡大します。
「SAR6」は、「-32〜31」で値を返します。これを、4つのLED+全消灯の5つの状態で表すようにプログラムを書いて見ました。 ひたすらSAR6から値を読みまくり、if文で値をチェックしてLEDを点灯/消灯しているだけです。
  CHAR  cData;

  PGA_1_Start(PGA_1_HIGHPOWER);
  SAR6_1_SetPower(SAR6_1_HIGHPOWER);

  while( 1 ){
    cData = SAR6_1_cGetSample();
    if( cData > -20 )  PRT2DR |= 0x01;    //  LED P2[0] ON
      else        PRT2DR &= ~0x01;        //  LED P2[0] OFF
    if( cData > -8 )  PRT2DR |= 0x02;     //  LED P2[1] ON
      else        PRT2DR &= ~0x02;        //  LED P2[1] OFF
    if( cData > 10 )  PRT2DR |= 0x04;     //  LED P2[2] ON
      else        PRT2DR &= ~0x04;        //  LED P2[2] OFF
    if( cData > 22 )  PRT2DR |= 0x08;     //  LED P2[3] ON
      else        PRT2DR &= ~0x08;        //  LED P2[3] OFF
  }
SCREEN SHOT
クリックで拡大します。
そんでは「Bulid」してプログラムも書きこんで、実行まで一気にやってしまいましょ (「2005/10/07 PSoCのMiniEval1でLED点灯」を参考にしてください)。

あれ?なんか変ですね…。ボリュームをぐりぐりすると、確かにLEDはちらちらするのですが、 思ったような動きでは無いです。0.5Vしか電圧が無いのにLEDが3つも点灯しています。ホントは全部消灯するはず。 ひょっとしてボリュームがガリガリしているのかな〜と思って、 試しにテスタをつないで電圧を測ってみましたが、電圧はちゃんと変わっています。

SCREEN SHOT
クリックで拡大します。
というわけで、再びSAR6のユーザーデータシートとにらめっこ…したものの、これだ!という設定は見つけられませんでしたが、 考えてみれば、設定できるのは「Sample Clock」だけです。「VC1」が入力されていますので、「VC1=SysClk/N」を適当にふやしてみると… お、なんかそれっぽくなってきました。

「6」ぐらいで、なんか微妙に点滅してる感じですが、ボリュームの動きにあわせてきれいに変化するようになりました。 どうも、入力している「Sample Clock」が速すぎるようです。そういうわけで、「8」にしたら、ぴたっと動くようになりました。 う〜ん、きっとどこかに書いてある、またはそれがわかるような文章があると思うのですが、どこに書いてあるんだろう?

 

2005/10/18

この充電器、どうかな?

ちょっと気になる…1万円でおつりが来る充放電器
今使っている充電器、スワローチャージャーアドバンスはリトルベランカ で購入したのですが、ふと見ていたら、新しい充電器、 Hyperion EOS 5i 充電器 (Speed SS14N) を発見。9月末ぐらいから取り扱いを開始しているようです。 12V入力なのですが、なんだか安くてよさそう。ROBO-ONEとかやってると、やっぱ充電器、2個欲しい時が多々ありまして、 例えば、前日の夜とか、2時間おきに起きてバッテリー交換しながら充電しているのですが、それはそれで睡眠不足になってしまうと…。 最近は、秋月の放電器も併用して、放電だけでも早く!とかやってます。そろそろリポも検討かな。以前に比べて、だいぶ値段が下がっている気がします。 単4NiMH950mAhで250円ぐらいですから、6セルパックすると1500円。放電能力は多分3C、無理して4か5Cぐらいかなってところ。 もう1000円足せば、7.4V-700mAhあたりの10Cリポ(やや性能低めあたり)ならば買えます。しかも重量は6割程度。う〜む。

この充放電器ですが、調べて見ると、もう少し安く販売しているところとか、上位機種を取り扱っているところもありますね〜。 (とか言いながら、買うとしたら、いつものリトルベランカで買うんだろうけど) マニュアルとかも公開されていて、機能的にはこのサイズの充放電器と同じ感じ。というわけで、「スワローチャージャーアドバンスと比べるとどうですか〜?」 と聞いてみたら、「3.6Vのリチウムイオン充電機能が無いけど、それが不要ならばいいですよ〜」とのことでした。 う〜む、いいですね〜。

あ、ちなみにこの手(12V入力)の充放電器を使う場合、別に電源を用意する必要があります。 うちでは、秋月で購入した60W級スイッチングACアダプタ 12V 5Aを使っています。 10Aぐらいのものがあれば充放電器のフルスペックを出せますが、単4とか単3を6セル充電するだけなら、これでいけてます。 たぶん、もっと出力が小さい電源でもいけるかな〜って思ってますが、こわいので試した事は無いです。

うわさネタ:以前、形のよく似たものは中身は同じ物で、発売時期が新しい方がプログラムが新しくなっている分、 性能がいいという話を聞いた事があります。

ちょっと気になる…1万円でおつりが来る二足歩行ロボット
ロボプロ・アスリートの時に一緒に走った、「ラクティオン」(ロボプロのホームページだとレンタルになっていますが、 たぶん、会場でマイロボットに変えたと思われます。ロボプロさんに確認してもらったほうがいいのかな?それとも、 参加者の方で編集するところだったかな?)ですが、 実はこれ、恐竜型二足歩行ロボット、その名もロボザウルス。会場で見せてもらったのですが、 本当にのっしのっしと首と尻尾を振りながら歩きます。しかも、方向転換も可能。 しっかり脚を上げて(構造的には傾けてというか…)歩くので、パンチカーペットでもガシガシ歩行。 起き上がりはできないそうですが、サイズも大きく、立派なもんです。 調べてみたら、なんと税込み「\9,999」!AI(人工知能)搭載して、各種センサーにより周囲の音や動きなどの状況を把握、 「リモートコントロールモード」「自由歩行モード」「防御モード」を持ち云々。

商品紹介を読むと、バラして調べたくなっちゃうことがたくさん書いてあるんだけど…興味がある方は、トイザらスへごぉ!

というわけで、トイザラスのリンク
商品紹介:http://www.toysrus.co.jp/f/robosaurus/
ニュースリリース:http://www.toysrus.co.jp/truj/press/2005/20050824.html

ARUMO-SiRへの悩み
ARUMO-SiRの今後について悩む…。突貫工事でイージーに作ったとは言え、やはり自分で丹精込めて作っただけあって、かわいいです。 最初、作り始めた時は「とりあえず」的な感じで作ったので、これ以上、改良とかはしないで行こうかな〜と思っていたのですが… 困った、すごくかわいくなってきてしまいました。というわけで、ロボファイト2に向けて改良を開始しようかどうしようか、 すごく悩み中。やりだすと仕事等の予想負荷から、また新型G-Tuneがまた作れない可能性が高くなってくるのですが、う〜ん。 やりたい事はたくさんあっても時間は限られていますから、選択してやるしかないよな〜。悩む、悩みます。 いっそ、今シーズンは新機体開発はやめて、マイナーバージョンアップと要素技術で遊びまくろうかな〜。

 

2005/10/16

ロボプロ・アスリート、行ってきました。

夢の競演
ロボプロ・アスリート、観客のみなさんの応援の中、がんばって歩いてきました。実際にパンチカーペットの上を歩かせてみたら、 新歩行ルーチン、役に立たず!こりゃまずい、ということで、いつもの格闘歩きでやってきました。 いや〜、とりあえず転ばずには走れました。タイムは…全然、覚えていないのですが、5000まで進むことができました。 シンプルファイターは速かったです。それにしても操縦する姿がすごくおもしろかったです。 ああやって操作しているんですね〜、なるほど。

子供がかぶりつきで見てくれているので、ついつい芸をしたくなるのを我慢しながら (^_^) …です。 ははは。近所だったら、ほいほい行って、タイムを狙う回と遊ぶ回とかやりたいぐらいです、はい。

5000は、トラック周回するので、いつものように自分もG-Tuneと同じ向きにしようとしたら、 目の前にViSIONガールの脚が見えたので、思わず自分の姿勢を戻したら操作ミスをしてしまい、 そのまま動揺し続けたことは秘密です。次回チャンスがあったら、オペレーションの位置もよく考えてやることにします… まだまだ心の修行が足りません。

ちょっと携帯のカメラで、画像イマイチですが、夢の競演、撮って来ました。やっぱ、目立ってました。 しかも、ロボプロさん、ちゃんとこの3台を組にして出走させてくださるあたり、うれしいですね〜。 AMATERASさんの「汗拭き」にはやられました。あとリリアの内部構造を一部、見させてもらったのですが… こ、これはやばいです。中村さんに「これ、首もちゃんと付いている(人形の外装が装着されている)んですね、すご〜い」 とか言ったら、「実は首だけじゃなくて…」。ああ、これ以上は書けないです。(*^_^*)

3 GIRLS
3 GIRLS

ASUMARU  SIMPLE FIGHTER

最後のステージでは、オープン参加のみなさんとも戦いました。これまた燃え燃えです。なんか今回は、ファイトでも 子供達の応援がすごくて、うわ〜って感じで。GUARDIAN、十兵衛と戦ったのですが、2回とも負けてしまいました。 う〜ん、みなさん、すごくレベルアップしています。7月の頃とは動きが違います。特にGUARDIAN、 回り込みの動きがすごく良くなっていて、「射程に入れた!」と思って攻撃を出しても、回り込んでよけられちゃうんです。 そろそろG-Tuneの動作パターンや速度も見なおしが必要です。なんか、ロボファイト2は、 G-Tuneを持っていきたくなってしまいましたが…ARUMO-SiRの方も育てないといけないので、ここは我慢我慢。 ARUMO-SiRでは、このあたりがっちり見直して、新しい気持ちでロボファイト2に挑もうと思います。

その後は、みなさんと食事を軽くとってから帰宅したんですが、これまた楽しかったです。 ロボット仲間が集まって、いろいろ話ができるってのも、ほんと楽しいです。

 

2005/10/14

KPIT HEW4+GNUH8 v0503

GNUSHとGNUH8ツールチェーン、v0503がリリース
ちょっと前に届いたKPITからのメールによると、 新しいGNUSHとGNUH8のツールチェーン(要はGCCのコンパイラです)がリリースされたようです。 英語のメールなんですが、添付されているhtmlドキュメントが微妙ながらも日本語というのがありがたいです。 そういえばしばらく前の事ですが、「M16CM32C」というのもリリースされています。今回は、デフォルトプロジェクトが増えているのと、 HEW4.0をサポートするようになったようですね。

というわけで、さっそくインストールしてみました。実は、今まで「GNUH8 v0403」を使っていたのですが (せっかく更新してくれているんだから新しいの使えよ〜と言われそうですが…)、ちょっとお試し、ということで入れ替えてみました。 とりあえず、新規プロジェクトを作るところまでやってみましたが、おお、デフォルトプロジェクトがすごく増えてます。 なんか、なんでもありそうです。もちろん、3694Fだってありますよ。へ〜。

SCREEN SHOT
クリックで拡大します。

早朝特訓は続く…
っていうか、もう週末だよ〜。現在、秒速20cmぐらいです(パンチカーペット上で、どれくらい出るかは不明…)。 スピードはここらであきらめて、方向転換歩行の方にかかろうと思います。絶対に歩いていると曲がりますから。 立ち止まって方向転換では、時間ロスが大きすぎますので、なんとか進みながらさくっと方向転換したいところ。 幸いにして、もともとの横歩きスクリプトは嫌でも曲がりますので、これをそのまま使えば…(^_^;… う、5000の方、左回りだった…(G-Tuneは右に曲がっていく…)。

そうそう、棒使いロボットのVinsentを製作されてるHIDEさんとこと リンクさせていただいたのですが、ぜひ、棒を振り回している動画をアップして欲しいな〜と、こっそり思ってます。

ロボコンマガジン42到着
昨日、書くのを忘れちゃったんですが、発売より一足先にロボコンマガジン42到着。 おお〜、ホントに載ってる〜。やばい、やばいっすよ…いや、別にやばくないですが、ビビってます。 こんなこと、そうそうあるもんでも無いから、後生、大事に取っておこう。

 

2005/10/13

障害物競走?

かけっこ練習中
というわけで、ロボプロ・アスリートのために早朝トレーニング中。 最初、まともに歩く方を調整していたんですが、う〜む、バランスが崩れていくだけで、これ以上、速くならない… MICRO-MGとS03Tをピッチ軸に混在させているせいか、動きがどんどんバラバラになってしまいます。あと、S03Tの初期動作の甘さが、 ロール軸移動の正確性を落としてしまっていて、なんともならない感じです。 というわけでやっぱりカニ歩行(いいのかな???)。現在、チューニング中で、やっと秒速15cmぐらいです。 目標30cm/secには程遠いですが、ぎりぎりまで、壊さない程度にがんばります。 もともと直進しなかったのですが、現在は、50cmぐらいなら直進するようになりました。 ついでなので、「曲がりながら進む」という処理も埋め込み中です。でも、まだ片方しか方向修正ができないので、 課題多し。う〜む。

豊田でおもしろいことやってたんですね〜。
マジンガアの光子力研九所の開発日誌で、 なんだかおもしろそうなイベントとが愛知県・豊田市で行われていた模様。ちょっと激しすぎかな〜と思いつつも、 障害物競走、すごくおもしろそうです。あまり難易度が高いと、やる方も観てる方も大変な気がしますので、 ほどほどにスピーディにこなせそうというところで、

  1. よ〜い、ドン!
  2. まずは軽くかけっこ。
  3. スラローム
  4. くぐり抜け
  5. ボールかき分け
  6. などなど
なんておもしろそうです。実況中継とかもやりやすそうなので、盛り上がるのではないでしょうか。

お、そういえば、ロボファイトの「SPACE BASE」が割と近い感じです。よし、これは参加せねば。 SISOがイメージしているのは、これを倍にしたぐらいのものかな〜。どっかやらないかな〜。

ロボコンマガジンbS2にて
Online ROBOCON Magazineの bS2予告を見られた方はもうご存知かもしれませんが、なんと、G-Tuneの記事が掲載されます。 ああ、ホント、ホントなのね〜。こっそりと執筆していたわけですが、どうも白昼夢みたいな感じがしてまして、 いざ、こうやって掲載されてみると…ビビってます。10冊ぐらい買っておいて、イベントの時に配ろうかな。

「配る」で思い出したんですが、ロボット製作に使えるかな〜と思って買ってみたけど使わなかった部品や、 使ってたけど使わなくなったものとか、ROBO-ONE等のイベントでもらった景品で、使ってないものって… みなさん、ありませんか?うち、高級半田ゴテが3本もあまっているんです。なぜか、セラコート賞、 2回も頂いてまして。この間の「科学と産業の体験フェア・ランブル大会」みたいな大会に行くときは、 賞品寄付ということで持っていこうかな〜。

MonotaRO.com
MonotaRO.comの住商グレンジャーって、「一般消費者様としてご利用頂くことは、 原則お断りしております。」と、まあ個人はダメです、って丁重に断られたりするんですが(無理やり登録できないことは無いですが)、 ふと、個人ユーザー向けMonotaROを発見しました。 って、みなさん、既にご存知でしたか?値段は、本家より、ほんの少し高いかな〜ってのと、品揃えがやや少なめです。 要望を出して行けば、本家並に増えるかな?

そういえば、エーゼットというメーカの水溶性切削油(1L)があるんですが、 これって、樹脂加工するときに使えるかな?試しに買ってみようかな〜。

 

2005/10/12

いざ、ロボプロ・アスリートへ

ロボプロ・アスリート
ロボプロ・アスリート、エントリーしました。 いつの間にやら登録台数が24台。「OmniZero.1」に「たぬたぬG」まで登録されてます。いつ出るのかな〜。SISOは、10月16日に出ます。 一発、「Super Crab Walk」…要はただのカニ歩きなのですが…で記録出してみようと思います。どうせなら、目指せ、MAGIです。ZIPPONさん、 すごいな〜。ARUMO-SiRは、お休みです。 実は、受信機パーツを共用していて、結構、組替えがめんどくさいんですよね〜。そんなわけで、今のところ、片方動かしたら片方お休みです。 そのうち、なんとかしないとです。

そして、アスリートの後は、バトルですよね、バトル。いや、もとい、練習試合です。「バトル」と書くと、どうも気合が入りすぎて…。 いよいよ、シンプルファイター用の技を発動できます。あとは、りりあちゃんとAMATERASさんとの、夢の撮影会!

 

2005/10/11

PSoC・A/D変換をしてみる(下調べ中)

A/D変換 User Module
先週は会社のイベントでどたばた、さらに妻のPCが壊れてしまってキーボード入力が半分ぐらいできなくなってしまってバタバタしてたんですが、 ようやく落ち着いたのでPSoC再開です。

今度は、A/D変換をしてみようと思っているのですが、せっかくなので、サンプルを見ながら自分のやってみたいのを作り始めてみました。 う〜ん、なかなか意味がわからないです。英語のマニュアルはこういう時、つらいです。んで、いくつか気づいた事がありましたので、 メモしておきます。

SAR6
アナログからデジタルに変換するユーザモジュールは何種類かあるのですが、今回は、ぱっと見、シンプルそうなSARを使ってみようと思います。 アプリケーションノート(AN2239)に、A/Dコンバータの特徴が書いてあるのですが、「SAR」は、「Analog Switched Capacitor PSoC Blocks」 のことのようです。「逐次比較レジスタ」…きっと、「逐次変換していくADコンバータ」ということかな。よく読むと、 「このタイプのコンバータは高速であるが、変換から変換完了の要求に対する入力が安定するまで、CPUを100%使用する」と書いてありますので、 きっと、CPUからあれこれしてA/D変換するのでしょう。その分、デジタルブロックなどを使用しません。

んで、MiniEval1には、PORT0[1]にボリュームが実装されているので、これを読み取ってみようと作り始めたのですが、 あら?ダイレクトに選べるポートには制限があるのね…しかも、PORT0[1]は選べないようです。たぶん、増幅器とかを経由したら大丈夫そうなんですが、 直につなげるのは…

SCREEN SHOT まずは、ASC10にPlace(配置)してみました。そうすると…。
SCREEN SHOT 選べるのはこれだけです。ポート直に接続できるのは「PORT2[3]」のみです。
SCREEN SHOT まずは、ASD20にPlace(配置)してみました。そうすると…。
SCREEN SHOT 選べるのはこれだけです。残念ながらPORT直には接続できません。

こんな感じで、順番にPlaceしていってみたら(きっとマニュアルのどこかに書いてあるんでしょうけど、う〜ん、どこかな〜)、 ポート直に接続できるのは、ASC10がPORT2[3]、ASC23がPORT2[0]で、他には接続できないことがわかりました。 使い方から考えたら、直に接続する事はあまり無いと思いますので特に不便では無いんでしょうが、 設計時にはちょっと覚えておいた方がよさそうです。

それにしても、「Sample Clock」って、どれくらいのクロックを入れたらいいんでしょう???

 

2005/10/07

PSoCのMiniEval1でLED点灯

GPIOのお勉強
というわけで、仕事も何気にヘヴィだったりするので、だらだら〜っと休息期間を取っているわけですが、 ぼちぼちっとPSoCを触り始めています。まずは、GPIOを使ってみようと思います。 「GPIOってなんぞや?」なんて思ったんですが、要は「汎用入出力」のことのようです。 MiniEval1には、スイッチとLEDが実装されていますので、「スイッチを押すとLEDが点灯する」という、 単純なプログラムを組んでみようと思います。

PSoCのI/Oポート
I/Oポートには、High Z、High Z Analog、Open Drain High、Open DrainLow、Pull Up、Pull Down、Strong、Strong Slowの 8つのモードがあります。「初めてのPSoC」に解説が書いてありましたが、まだまだ勉強不足。 とりあえずLEDを点灯させるためには「StrongでOK」と理解しました。また、スイッチは、MiniEval1では、VCCにぶら下がっていますので (+5Vにつながっている)、PSoC内で処理をするためには、Pull Downとすればよさそうです。

プロジェクト作って、ごごごっと行ってみよう!
SCREEN SHOT
クリックで拡大します。
というわけで、まずは「PSoC Designer」を起動します。そうすると、「Start」というダイアログが表示されまして、 新プロジェクトを作ったり、今まで作ったプロジェクトを読み込むことができます。ここでは迷わず「Start new project」をクリックします。
SCREEN SHOT
クリックで拡大します。
プロジェクト名は、「LEDSW」としました。「LEDをSWで点灯させるから」です。もっと長い名前でも大丈夫です。
SCREEN SHOT
クリックで拡大します。
今回は、「CY8C27443-24PXI」を使っていますので、以下の画面のように設定します。チップを切り替えるには、 ダイアログ左にある「View Catalog」をクリックして選択メニューを開き、そこから選択します。 また、せっかく「Cコンパイラ」が使えるので、「Generate 'Main' file using:」は、「C」を選択します。 なんで、「CY8C27443-24PXI」を使っているかというと、なんとなく、モジュール規模が少ない方が最初は理解しやすいかな〜と思ったので、 こっちにしました。ちなみに、「CY8C29...」になると、デジタルブロック数やROMが倍だそうです。
SCREEN SHOT
クリックで拡大します。
というわけで、「Device Editor」の「Selection(モジュール選択画面)」が開きました。
SCREEN SHOT
クリックで拡大します。
今回のプログラムでは、モジュールを使わないので、そのままさくさくっと結線作業を行います。 普通は、モジュールを追加しますので、ここで、A/Dコンバータ等を追加して、それから結線作業となるのですが、 今回、I/Oをちょっといじるだけのプログラムですので、モジュールは使いません。 メニューから「Interconnect」を選択する事によって、画面を移動します。

I/Oの設定
SCREEN SHOT
クリックで拡大します。
これが「Interconnect」の画面です。「モジュールが無いのに、結線がいるの?」と思われるのかもしれませんが、実は、 この画面からI/Oの設定をします。
先に説明したとおり、各I/Oポートはモードを持っており、入力/出力を切り替えたり、プルアップ、プルダウンの設定をすることができます。
SCREEN SHOT
クリックで拡大します。
「Interconnect」画面の左下の方にあるのが、I/O設定のための画面です。まずはスイッチの設定から行きます。
スイッチは、P1[4]に接続されていますので、Port_1_4の「Drive」の列をクリックすると、モードを選択できるようになります。 8つのモードが表示されますが、この中から「Pull Down」を選択します。これで、後でコードを生成した時に、 このための初期化コードが生成されます。
SCREEN SHOT
クリックで拡大します。
これでOKです。
SCREEN SHOT
クリックで拡大します。
引き続き、LEDの方も設定します。LEDは、P2[0]〜[3]につながっていますので、どれでもいいんですが、ここでは、 P2[0]を使います。同じように選択し、「Strong」を選択します。これ、要は普通の出力みたいです。
SCREEN SHOT
クリックで拡大します。
さてっと、ソースコードを生成します。ここまで、なんだかリッチな画面でいろいろ編集してきましたが、 実は、これ、自動生成されるソースコードのための設定作業です。例えば、「ポートをプルダウン」という設定をしましたが、 これも「そのための初期化コードを生成」するためのものです。
では、「Generate Application」します。
SCREEN SHOT
クリックで拡大します。
お、なにやら完了した模様。

コーディング
SCREEN SHOT
クリックで拡大します。
ちょこっとですが、コーディングします。先に説明したとおり、初期化コードなどは既に「Generate Application」で生成されていますので、 後は、本体を書くだけです。マイコンプログラミングをやっていると、まず最初に「モジュール初期化のコードをどう書くか?」というところで、 マイコンのハードウェアマニュアルとにらめっこになるのですが、PSoC Designerを使っている場合は、この苦労が少なくてすみそうです。
それでは、「Application Editor」へ行きます。
SCREEN SHOT
クリックで拡大します。
これが「Application Editor」です。よくある統合環境の画面ですね〜。
SCREEN SHOT
クリックで拡大します。
ソースファイルを開きます。開くには、左のツリーから選択します。他にもいろいろソースコードが入っており、 覗いて見るとおもしろいかもしれません。自動生成されたコードも入っています。また、モジュールを追加した場合、 それ関係のソースコードも入ります。
SCREEN SHOT
クリックで拡大します。
それでは、「SWの情報を、LEDへ出力する」というプログラムを書きます。
I/Oポートへアクセスするためには、「PRTxDR」という変数を介してアクセスをします。こうやって使うと、 普通のマイコンと同じ感じです。例えばPORT1ならば「PRT1DR」で、それぞれのビットが、各ピンの状態に対応しています。 今回の場合、P1[4]に接続されているSWの状態を読み取るので、二進数で00010000b、つまり16進数で10hです。 また、LEDは、P2[0]ですので、二進数で00000001b、16進数で01hのデータにて、操作すればOKです。
というわけで、コードはこうなります。
while( 1 ){
  if(( PRT1DR&0x10 ) != 0 ){ // P1[4](SW) Input Check
    PRT2DR |= 0x01;          // P2[0]=H LED ON
  }
  else{
    PRT2DR &= ~0x01;         // P2[0]=L LED OFF
  }
}
エディタ上で日本語を入力すると、文字化けする事に気づいてしまいました…。うちの環境だけかな〜。
SCREEN SHOT
クリックで拡大します。
それではビルドします。
SCREEN SHOT
クリックで拡大します。
無事、ビルド完了したようです。

PSoCへの書き込み
SCREEN SHOT
クリックで拡大します。
というわけで、パソコンにUSBケーブルで、MiniEval1、CY3210-MiniProgを接続します。もちろん、もっと前から接続していても構いません。 そして、「PSoC Designer」の「Program Part」のアイコンをクリックします。実行されるのは「PSoC Programmer」ですので、 Windowsメニューの方から起動しても言いのですが、「PSoC Designer」から起動すると、プロジェクトの情報が引き継がれるので便利です。
SCREEN SHOT
クリックで拡大します。
じゃん、「PSoC Programmer」です。起動すると、いきなりPSoCと接続されます。
SCREEN SHOT
クリックで拡大します。
「Program」ボタンを押すと…。
SCREEN SHOT
クリックで拡大します。
ごごごっとプログラムが転送されます。「成功!」と出てますので、大丈夫です。
なぜか「PSoC Programmer」の動作ログ表示は、新しい方が上です(「PSoC Designer」では、新しい方が下)。

プログラムの実行
SCREEN SHOT
クリックで拡大します。
それでは、動作させてみます。「PSoC Programmer」から電源ON!します。これは便利です。CY3210-MiniProgからMiniEval1に電源が供給され、 そのままプログラムを走らせる事ができます。
注意は、「このチェックボックスの表示にはウソがある」ことです。下の方に表示されているステータスのところを見る方が正しいです。
SCREEN SHOT
クリックで点灯します。
というわけで、「スイッチを押すと、LEDが点灯する」プログラムの完成〜です。

というわけで…
というわけで、ここまで、だだだっと作って見ましたが、これを応用すると、とりあえず「デジタルコンパスの値をLEDで表示」というのは簡単にできそうです。 そのときは、入力ポートは「Pull Down」じゃなくて、別のにする必要があると思いますけど、プログラム自体は、ちょっと直すだけでOKそうです。 しばらくは、この評価ボードだけで遊んでみようと思います(とか言いながら、今、RS232CのI/F作ってたりして…)。

 

2005/10/06

AKC21…確認中

AKC21のTELEC認証状況等について
現在、確認中、調査中および勉強中ですが…電波法的には、ちょっと個人で普通に使おうと思うと難しそうです。う〜む。

追記:現在、もうちょっと調査中ですので、そのうちまとめてアップします。

 

2005/10/05

PSoC/CY3210-MiniProgとソフトのインストール

インストールするもの
久々のPSoCネタです。$10で手に入れた評価キット(CY3210-MiniEval1)ですが、WinXPのパソコンにインストールしたら、 以前インストールした時(Win2K)とちょっと違っていたので、手順をメモっておきます。

INSTALL CD

これが、付属CDを入れた時に表示される画面です。実行するのは、「Install PSoC Designer 4.2」、 「Install Service Pack 2(SP2」、そして「Install PSoC Programmer 1.17」の3つになります。

最初に「あれ〜?」って思ったのが、再起動が無いことです。大丈夫なのかな〜。Win2Kの時は、Designerと Programmerをインストールした後に、再起動確認があったのですが、WinXPでは聞いてこないです(うちのだけか?)。 大丈夫かな〜と思いつつ、適当なプロジェクトを作って実行してみようと思い、USBにMiniProgを挿して見ると…

こういう時に一番見たくない画面が…

USBのドライバが入らない?

HARDWARE WIZARD

そうです。機器が認識されていないという、ユーザに責任があるのか無いのかよくわからない、この画面です。

本来だと(前インストールした記憶だと)、上記手順でインストールすると、一発認識していたと思うんですが、 それが故、何をどうしたらいいのかさっぱりです。 CDの中を探して見たりいろいろしてみたのですが、さっぱり…。と、思ってたら、ふと思いつきました。 「MiniProgって、結局、PSoC Programmerでしか使わないんだよね〜」…ということは、 PSoC Programmerがインストールされているフォルダを探せば何かでてくるのではないかと。で、見つけました。

そのままデフォルトでインストールした場合ですと、「C:\Program Files\Cypress MicroSystems\PSoC Programmer\drivers」 というフォルダにドライバが入っています。「新しいハードウェアの検出ウィザード」が開始したら、Windows Updateには接続せずに、 「一覧または特定の場所からインストールする(詳細)」を選択して、後は、上記のフォルダを指定してやればバッチリです。 インストールが完了すると、MiniProgに通電されるのか、LEDがチカチカ光ります。よし、これでばっちりですね!

デバイスマネージャで、「USB(Universal Serial Bus)コントローラ」のところに、 「USB Mini Programmer」が表示されていればOKです。

DEVICE MANAGER

Cコンパイラのライセンスキー
2005/07/27の不定期TOPICにも書きましたが、Cコンパイラのライセンスキーは、CYPRESSよりメールで頂きました。 最近は、ちゃんとすぐに送られてくるんでしょうか?うちの場合は、日本CYPRESSに「まだライセンス来てませ〜ん」 とメールしたらすぐに来ました。まだ、ライセンスキーが来ていない方は、一度、コンタクトを取られるとよいかと思います。 後は、Pastel MagicさんのTIPSで紹介されている 「コンパイラのライセンスキーが入れられない?」を見ながら入力すればOKです。

三月兎さんからDVD到着〜!
家に帰ってきたら、なんと、第8回 ROBO-ONEのDVDが到着していました。どうもありがとうございます〜。 まずは予選1から、さっそくスタート!…お、いきなりARUMO-SiRだ〜!

ROBO-ONE 8th DVD

おお、こんなマークが…

ROBOT FAN NET LOGO

 

2005/10/04

RB50をばらす

ネジの無いサーボ、RB50をばらして見ました。
以前購入して、ARUMO-SiRの頭に使っているサーボである、「RB50」をばらして見ました。結論から行くと、 全部はめ込みで、特に、サーボホーン側をばらすのが大変でした。それでは、分解ショーの始まり始まり。

まずは、ギア周り分解にチャレンジ。

RB50

よく見ると、くぼみがあるので、きっとここから「パチッ」と外れるに違いないと、細いドライバでこじって、えんやこ〜ら。

RB50 CASE ZOOMUP

お尻側が外れました。あらら。お尻側は、手で力を入れれば簡単に外れます。

RB50 BUTTOM CASE OPEN

まあ、いずれはばらすつもりだったので、よしとして、再び細いドライバでこじること、数分。なかなか外れません。 お、はずれました。う〜、ケースが傷ついた〜。ここをきれいにはずすのは、難易度高いです。

RB50 TOP CASE OPEN

というわけで、ギアのアップと、ギアを並べて見ました。出力軸は、このサイズのサーボにはよくあるパターンで、 ポテンショから軸が出ています。で、ポテンショとそのケースらしきものに出っ張りがついていて、 可動範囲を超えたときのロックになるようになっています。戻そうと思ったら、ギアがよく似ていて、 どっちがどれだかわからなくなってしまいました…よく見たら、厚みが違ったので、 さっき撮った写真を見ながらやれば大丈夫ですした。

RB50 GEAR  RB50 GEAR LIST

おまけでポテンショの裏側アップ。ポテンショは、ケースに接着剤で固定されています。

RB50 POTENTIO BACK

なんでまた、ばらしたかといいますと…これでギアボックス作れないかな〜と思ってまして。そのためには、 メカ的に、ちょっとした改造でくるくる回るものになってくれないと困るので、ギアなどを確認したかった次第です。 軽量サーボの中には、ギアそのものが360度分無いものもあった気がしますので、要注意です。

う〜ん、でもやっぱり、ちゃんとビス止めされているサーボがいいな〜。ここまで小さいと無理かな。

そうそう、しろまさんのところで、 「萌えデジ」の話がありましたが、一年ぐらい前に掲載許可の話がありまして、結局、どれに載ったんだろう? って思ってましたので、所在がわかって良かったです。ありがとうございます。どんな紹介文だったんだろう???

 

2005/10/03

ロボプロ・アスリート

パンチカーペット
ロボプロにて、「ロボプロ・アスリート in エキスポランド」が開催されます。 んで、「パンチカーペットってな〜に?」という疑問が出ると思うので、ここで実際に動かしてみた感想を紹介します。 ZIPPONさんとこの裏 MAGI(2005/10/02)でも紹介されていますが、この「パンチカーペット」とは、 なんとかショーとかで、ブースの下に敷いてある、毛足の短いカーペットと同じものだと思います。 個人的な思い出では、小学生の頃、冷たい体育館の床に直接生徒を座らせるのがかわいそうと思った先生方が、 床に引いてくれた薄いカーペット…すでにうん十年前の記憶なので、ちょっと怪しいですけど。

以前、とあるイベントで、たぶん同条件でG-Tuneでも歩かせて見たのですが、 ちょっと引きずりがあると、ちょっときついですが、すべりはそこそこありますので、引きずり方によっては結構歩けたりします。 そんなわけで、普通より、少し上から脚を降ろすようにしてやれば、わりと歩けると思います (格闘用の横歩きで歩ききったことは秘密)。

とはいっても、いつもと違う条件で歩かせるのは、なかなか難しく、転んだり、変な方向に行ってしまうこともしばしば。 そんなときは、子供達の声援に応えて、一芸…をしている場合じゃなくて、がんばって起きあがればそれはそれで楽しいですよ。 なかなか遠方だと参加しにくいと思いますが、お薦めです。

 

2005/10/01

ロボファイト2エントリ

SRCにエントリ
ロボファイト2へエントリしました。 スタンダードレギュレーションクラスの方です。親睦会は、夜8時ごろまでどっかの駅にたどり着ければ家まで 帰れそうなので、こちらもエントリー!です (^_^)/。なぜか気力、急にアップ。どうもROBO-ONE終わってから、 体調もイマイチ(今日も病院へ…)でして、仕事も忙しいで、なんとな〜く、充電状態でして。ははは。 さて、ARUMO-SiRのメンテをはじめようかな。まずは、ROBO-ONEでやりきれなかったことということで、 移動速度のブラシアップから。

ARUMO-SiR ENTRY

追記…と思って張り切っていたら、病院でもらった薬のせいか、夜中までずっと寝てしまいました。 明日、早起きする事にしよっっと。