ブログパーツUL5

ジョイスティック用ソフトの検討開始

 PSタイプの学習リモコンにジョイスティックがあるので、その活用方法の検討に入りました。しかし、スペースがあまりないので大したことはできないとは思いますが、勉強も兼ねて調べてみました。PICマイコンの12F675が余っており、このマイコンにはA/Dを搭載していることから、これで組めるかをベースに検討することにしました。まだA/D変換をしたことがないことと、ジョイスティックがどの範囲で変化するのかも調べる必要があります。

 そこで、インターネットで調べてみましたが、ジャストフィットするものがなかなかなく、なんとか目的のことが出来そうなのがair variableのホームページにある「4チャンネル10bitアナログコンバータ"豆AD"」というので良さそうです。ソフトウェアがアセンブラではなく、PICC Pro Lite 9.60対応でした。フリーのPICのCコンパイラはHitechのPICC Liteしかないので、これでコンパイルすることを前提としました。

 『ターミナルソフト用4チャンネルADコンバータ変換ver2.01』をダウンロードしてPICC Liteでコンパイルしてみたところコンパイルエラーが発生しました。内部関数の__delay_usと__delay_msがないというエラーメッセージです。よく調べたら、ソフトウェアが足りません。

【追加するソフト】
delay.c
delay.h

【main.cの追加】
#include "delay.h"
【main.cの修正】
DelayUs(20) ;//20us wait  __delay_us -> DelayUs
DelayMs(100);//0.1秒ウエイ __delay_ms -> DelayMs

serial.cの追加】
#include "delay.h"
【serial.cの修正】
DelayUs( DELAY(TX_OHEAD));  //__delay_us -> DelayUs
DelayUs((DELAY(RX_OHEAD)/3)); //__delay_us -> DelayUs
DelayUs( DELAY(RX_OHEAD));  //__delay_us -> DelayUs

これでコンパイルエラーがなくなったので、これをベースに赤外線のコード出力もできるようにしていきます。ピンの割り当てはぎりぎりですね。 
 5pin、5pin、6pin、7pinをジョイスティックのVRの中点に接続して、AD変換で電圧値を読み込み赤外線コードに変換するようにします。できれば、評価用にRS232Cの出力でVRの中点電位がソフト的に読み取れるにしておきます。また、開発用の評価基板を製作してからリモコン本体に組み込むことにします。
0

    増設EEPROMの認識できる

     増設したEEPROMはやはりハード的に全く問題ありませんでした。予備のマイコンボードMR-C3024でも不具合が再現していたので、おかしいと思って、もう一つ新たに増設EEPROMを作り新しいEEPROMを差してテストしてみても同じで変化がありませんでした。ここまで確認したので、ハードは問題なしと判断しました。

     では何が問題なのかということで、犯人探しではなくて原因探しをしてみました。怪しそうなのが1箇所見つかりました。
     roboBASICのソフトの「設定」のメニュにある「コントロール形式」の選択が「MR-C3024F」になっていました。

    roboBASICのバージョンはV2.7.2です。これはWebのダウンロード版でなく、ROBOZAKのCD-ROM版をインストールしてあります。若干、違うようなのでCD-ROM版を推奨します。


    増設しているEEPROMはAT24C512で、2個は交換可能で、1個は固定です。

     この「コントロール形式」を「MR-C3024」にしたら、見事、増設したEEPROMを認識できました。確認のためにそれぞれのEEPROMに別のプログラムを書き込んでもちゃんと別々に読み出せるか確認してみました。これで以前とかわらずプログラムをスイッチで切り替えられることが出来ます。


    【結論】
     MR-C3024Fを選択するとI2Cのコントロールが出来ない。ISC(SDA,SCLポート)を使う時は、必ず、MR-C3024を選択する。
    0

      ROBOBASICがv2.72で復活

       ROBOZAKの83号では roboBASIC アップデートのCDが提供されているようです。私のPCには、5月にroboBASIC のV2.72(20080509版)にアップデート済みなので、83号は購入する必要がなくパスすることにしました。

       なお、一旦閉鎖されていた ROBOBASIC が復活していました。当然、roboBASIC はV2.72のままで、版数も20080509版のままでした。3ヶ国語の各版とも同じV2.72になっていました。以前は、Japaneseだけだったように思います。

      * Korean Version v2.72
      * Japanese Version v2.72
      * English Version v2.72

      0

        roboBASICv2.7にバージョンアップ

         ROBOBAISIC.COMにおいて、roboBASICがv2.7にバージョンアップされたので、今までv2.5のままにしていましたが、そろそろバージョンアップすることにしました。

        簡単な手順をまとめました。
        (1)まず、「プログラムの追加と削除」からv2.5のroboBASICを削除します。なお、v2.7がうまく動作しない場合、v2.5を再度インストールして元に戻せます。
        (2)ROBOBAISIC.COMからroboBASICのv2.7をダウンロードします。圧縮されているので、解凍ツールで解凍します。
        (3)解凍されたsetup.exeを起動するとインストールが始まります。
        (4)指示に従い、マイコンボードはMR-C3024を選択してエラーなくインストールできたら、「close」でクリックします。
        (5)通信ケ−ブルと電源コードをRZ-1に接続して、電源をONにします。
        (6)roboBASICを起動して、モーションファイルを読込んで、メニュのコンパイルの「作成転送」をクリックします。
         通常よりは転送に時間がかかりますが、最初だけファームウェアv2.7が自動的に転送されます。

         どういうわけか分かりませんが、メニュのヘルプにある「MR-C3000/MR-C3024 Firmware Updata」からはファームウェアのアップデートがうまくできませんでした。



        (7)確認のため、コントローラの「コントローラ情報」をクリックすると、
        ファームウェアのバージョンがv2.7になっていることが確認できます。

         これでバージョンアップは終了ですが、このバージョンアップはメーカーが動作保証していないので、自己責任で行ってください。
        0

          モーション作成ソフト「SimROBO」

           ハイテックマルチプレックスジャパンのホームページに予告がありましたSimROBOT 0 for ROBONOVA-1は、「ROBONOVA-1」のモーション編集を行うロボットモーション作成ツールだそうです。ROBONOVAやRZ-1をお持っている方は、このフリーソフトウエアを4月末にダウンロードして利用できるようになります。一番の特徴は、roboZakのシミュレータと違いは、実際のROBONOVAを画面の動きに同調して動かせるという点です。そのほかにも魅力的な機能が満載のようです。リリースされたら即ダウンロードしましょう。

          【SimROBOT 0 for ROBONOVA-1の主な機能】

          ●360度自在に視点を変えられる3D表示機能
          画面のROBONOVAをマウスで直感的に操作するだけでモーションの作成が楽々行えます。実際のROBONOVAを画面の動きに同調して動かせます。
          ●初心者向けに5段階のチュートリアル機能チュートリアルを音声でナビゲート。初めての方でも戸惑うことなくモーション作成を習得できます。
          ●同時に複数の3D画面を表示できる機能
          3D画面を同時展開できるので、複数の角度から同時にモーションのチェックが可能です。お好みのロボットカラーも選べます。
          ●基本的な動作モーションを40種類以上登録
          それらをつなぎ合わせて簡単にオリジナルのパフォーマンスを作り出すことができます。
          ●モーション編集に便利な機能を数多くサポート
          ロボット部位間の衝突検出や重心位置の確認などモーション編集に便利な機能を備えています。
          0

            大型LCDを設定できるように変更

             Robozakの定期購読を止めてしまったので、別の話題が多くなります。前回製作したことで20文字×4行の少し大型のLCD表示の動作確認が出来ましたので、今後の利便性を考えて汎用的な設定が出来るように一部を変更して作り直しました。
             変更は、転送速度の設定、エコーバックの設定、LFのコマンドの追加などいろいろと行い、写真のように初めて両面基板を採用してテスト用基板よりも小さくまとめることが出来ました。

            ハード面
            ・DIPスイッチで転送速度を2400、4800、9600、19200に設定
            ・ピンジャックで、エコーバックがON/OFF設定
            ソフト面
            ・LCD制御のコマンドを追加

            注意:小形LCDと大型LCDとは、VCCとGNDピンが入れ替わっていました。こういうのは互換性を持たせてほしいものです。
            0

              メンテナンス用に大型LCD表示を製作

               メンテナンス用に見やすくするために、LCDの大型化(20文字×4行)にすることにしました。まず、プログラムの修正箇所を調査してみたら、意外と簡単でLCDのアドレスを追加修正してあれば出来そうなことがわかりました。問題はどのフリーソフトでコンパイルするかですが、やはり、定評のあるMPLAB ICEを利用することにしました。出来上がったバイナリファイル(HEXファイル)を先日製作したRCDライターで書き込みました。

              超ローコストRS232Cモニターを参考に製作しましたが、RS232Cなど余計な回路は省いていますから、部品はPICと半固定抵抗とコネクタだけです。

              書き換えた例 (MPLABにて、main.cを書き換えた)

              //----------- 修正前のLCD表示アドレス(16×2)
              case 13 : //return command
              if (lcd_loccnt <= 0x10) lcd_loccnt = 0x40;
              else if (lcd_loccnt <= 0x50) lcd_loccnt = 0x00;
              break;
              //-----------

              という箇所を次のように修正する。

              //----------- 修正後のLCD表示アドレス(20×4)
              case 13 : //return command
              if (lcd_loccnt <= 0x14) lcd_loccnt = 0x40;
              else if (lcd_loccnt <= 0x54) lcd_loccnt = 0x14;
              else if (lcd_loccnt <= 0x28) lcd_loccnt = 0x54;
              else if (lcd_loccnt <= 0x68) lcd_loccnt = 0x00;
              break;
              //----------

              もう1箇所

              //----------- 修正前のLCD表示アドレス(16×2)
              if (lcd_loccnt == 0x10) lcd_loccnt = 0x40;
              if (lcd_loccnt == 0x50) lcd_loccnt = 0x00;
              //-----------

              という箇所を次のように修正する。

              //----------- 修正後のLCD表示アドレス(20×4)
              if (lcd_loccnt == 0x14) lcd_loccnt = 0x40;
              if (lcd_loccnt == 0x54) lcd_loccnt = 0x14;
              if (lcd_loccnt == 0x28) lcd_loccnt = 0x54;
              if (lcd_loccnt == 0x68) lcd_loccnt = 0x00;
              //-----------

              RCDライタ−は安く出来たが、動作の信頼度はありますね。LCD代とPIC代だけで表示器が出来てしまう時代に改めて驚きですね。

              0

                自作LCD表示に成功

                 キットでLCD表示がすでにうまく表示できるようになっていますが、それがうまく動作していない時に調べていた情報から、PICマイコンにプログラムを書く込む小型ライターの製作から始まり、書き込みプログラムのインストールをしてプログラムの書き込みまでを学習してみました。最初はVppの13Vが出てないので不安でしたが、チャージポンプですからパルスが出力しないとならないのは理解していたので、動作させればRCDによる書き込みは全く問題なくできました。
                サイズはキットの1/3です。

                 ただ、コストを考えれば自作の部品代は2000円弱ですから、2000円ぐらいのキットを購入した方がいいかもしれません。でもカスタマイズできないので自作の方が転送速度の固定や可変など自由に設定できるのがいいですね。液晶はキットのものを流用して動作確認してみました。最初はLCDの調整用VRの位置がよくなくて表示しませんでしたが、なんとか表示しました。

                 これでLCD表示が自由に設定できるようになったのでLCD製作は終りとします。それにしてもRCDというライターは安くて便利ですね。RC232Cのケーブルをもらうことになっているので、今後のPICマイコンの開発が楽になります。
                0

                  メンテナンス用LCDプログラム例

                   メンテナンスで利用することが多いと思うので、LCD表示プログラムを作成していつでもすぐ利用できるようにしました。参考までにご利用ください。但し、LCD制御コードが違う場合には修正が必要です。

                  =========== LCD表示サンプルプログラム ===========
                  DIM A AS BYTE
                  DIM i AS BYTE
                  DIM j AS BYTE
                  ' 通信速度の自動設定
                  FOR i=0 TO 1
                   PRINT " "
                   DELAY 50
                  NEXT i
                  ' roboBAISCのLCD初期化
                  LCDINIT
                  ' メインルーチン
                  MAIN:
                  ' タイトル表示
                  PRINT 12 'CLS
                  PRINT "Welcome RZ-1"
                  PRINT 13 'CR
                  PRINT 10 'LF
                  PRINT "2008/02 Ver.1"
                  DELAY 2000
                  ' リモコンを除くAD値を一括表示
                  PRINT 12 'CLS
                  FOR i=0 TO 6
                   A = AD(i)
                  PRINT FORMAT(A,DEC,3)
                  PRINT " "
                  NEXT i
                  DELAY 2000
                  ' AD値を順番に表示
                  FOR j=0 TO 7
                   PRINT 13 'CR
                   PRINT 10 'LF
                   PRINT "AD("
                   PRINT FORMAT(j,DEC,1)
                   PRINT ")="
                   FOR i=0 TO 8
                    A=AD(j)
                    PRINT FORMAT(A,DEC,3)
                    PRINT " "
                    DELAY 400
                   NEXT i
                  NEXT j
                  GOTO main
                  END
                  ==============================================

                   これで純正品を購入しないで済みました。浮かしたお金(?)で、3000円と秋葉原価格よりも1000円程安い精密圧着ペンチを見つけ購入することにした。 センサーの接続用コネクタを作成するのに半田付けではどうも面倒なので購入することにしました。すでに、センサー用のピンとソケットは購入しているので、少し練習してうまくいくようであればサーボモータのケーブルの整理をそのうちやろうと思います。

                  0

                    シリアル制御LCD表示が動作

                     先日購入したシリアル制御LCD表示がどうも相性があり、正常動作していませんでしたが、やっと正常動作できるようになりました。原因は2つあり、1つは通信速度の自動設定機能がうまく機能しないこと、もう1つはLCDの初期設定のエスケープコードが邪魔していたことでした。購入したLCD表示には、起動時のスペース(" ")のパルス幅で通信速度を検出して自動的に設定できるという優れた機能があります。このことが相性の問題を生じさせていることがわかりました。

                    (写真はリモコン以外のAD値を表示)

                    問題点1
                     ETX端子(プリント基板にはTXと印刷されている)では、9600bps以上では表示していたが、4800bps以下で表示できなかった。
                    問題点2
                     LCD端子では、通信速度の自動設定機能がうまく機能せずLCD端子の通信速度の4800bpsにならない。

                    対策1
                     ETX端子での設定は、タイミングを少し調整したら動作するようになりました。LCD初期設定の時に、下記のような設定をしてあげれば問題なく動作しました。
                    ====================
                    FOR i=0 TO 1
                    A = " "
                    ETX 4800,A
                    DELAY 50 'これでタイミングをとる
                    NEXT i
                    ====================

                    対策2
                     LCD端子での設定は、ちょっと苦戦しましたが、LCDINITコマンドをLCDの通信速度の設定後に行うことで動作するようになりました。
                    ====================
                    DIM A AS BYTE
                    DIM i AS BYTE
                    ' LCD表示の通信速度設定
                    FOR i=0 TO 1
                     PRINT " "
                     DELAY 50
                    NEXT i
                    ' roboBASICのLCD初期設定
                    LCDINIT
                    PRINT 12 'CLS
                    ' アナログポートのAD値を表示
                    FOR i=0 TO 6
                     A = AD(i)
                     PRINT FORMAT(A,DEC,3)
                     PRINT " "
                    NEXT i
                    END
                    =======================

                     このLCD表示は、高い純正品ではないので、LOCATEコマンドなどには対応していません。LCD制御はroboBASICのコマンドでなく、print文でアスキーコードを送るなどの表示方法にはプログラムで工夫する必要があります。それが面倒な場合には、純正品の購入をお勧めします。でも購入したキットは2600円ですから機能的には十分です。なお、秋月でLCD表示のキットの販売が再開されれば、試してみる価値はありそうです。折角、製作したPICライターの使う場面が遠退いたのは、残念ですが別の機会に利用しましょう。
                    0


                      カレンダ

                       123456
                      78910111213
                      14151617181920
                      21222324252627
                      28293031   
                      << May 2017 >>